一般には待ち行列とかキューとか言われる構造を使うと思う。
1. 主人公とすべての敵のインスタンスIDをキューに入れる
2. キューからインスタンスを一つ取り出し、そのインスタンスに行動させる
3. 行動が終わったら2に戻る。キューが空になっていたら1に戻って最初から

具体的にどう実装するかだけど、まずコントローラオブジェクトを一つ用意して
次のように処理させる。
(ds_queue使ってもいいけど、レジストしてないかもしれないので配列で実装してみた)
・Createイベントで以下の変数を用意
global.current_id = noone; // 現在行動しているインスタンスのID(nooneなら誰もいない)
queue_size = 0; // キューの中身の要素数
queue_pos = 0; // キューの何番目まで処理したか
・Stepイベントで次のように処理
if (!instance_exists(global.current_id)) { // 行動しているインスタンスがいない場合
 if (queue_pos >= queue_size) { // キューが空だったら……
  queue[0] = obj_player.id; // 先頭に主人公のIDを入れ……
  queue_size = 1;
  with (obj_enemy) { // 他のすべての敵もキューに入れる
   other.queue[other.queue_size] = id;
   other.queue_size += 1;
  }
  queue_pos = 0;
 }
 // キューから一つ取り出して行動を開始させる
 global.current_id = queue[queue_pos];
 queue_pos += 1;
}

主人公と敵のインスタンスは
・global.current_id == id だったら自分が行動する
・行動が終わったらglobal.current_idをnooneに戻す
とすればいい。