●多人数戦闘
   戦闘イベント具体例

ここでは、戦闘イベントの具体例を示します。
イベント作成時の参考にしてください。


・条件分岐の「スクリプト」活用法
 イベント>条件分岐>スクリプトでtrue/false(スイッチのオン、オフに対応)で結果を返す
 グローバル変数($で始まる変数)や追加イベントコマンドを記入すると、
 その結果を条件分岐に利用することができます。
 例:$game_temp.in_battle ⇒ 戦闘中かどうかで条件分岐
   unit_dead?(id) ⇒ idのイベントIDのユニットが戦闘不能かどうかで条件分岐

 これらは、イベント>スクリプトで一度スイッチに代入してから使用しても同じものが作れますが、
 この方が簡単に、ツクールデフォルトと同じ感覚で作ることができます。




・ボスを倒すと戦闘に勝利する戦闘
特定の条件を満たした場合に戦闘勝利・敗北スイッチをオンにすることで、様々な戦闘勝利・敗北条件を
作ることができます。
例として、特定のボス敵を倒したときに戦闘勝利となる戦闘を考えてみます。

方法1
 バトルイベントのイベント起動条件を「敵キャラ[1.ボス]のHPが0%以下」に設定し、スパンをバトルにする。
 このバトルイベントで、戦闘勝利スイッチをオンにする。

方法2
 バトルイベントのイベント起動条件を「ターン終了時」に設定し、スパンをターンにする。
 (*このように設定することで、ユニットが行動するたびにバトルイベントが実行される)
 条件分岐で、スクリプト>unit_dead?(id) と記述し、条件を満たした場合に戦闘勝利スイッチをオンにする。
 (*このように設定することで、idに入力したイベントIDのユニットが戦闘不能である場合、条件を満たしたと
  判定される)

なお、戦闘開始時に戦闘勝利条件・敗北条件等を表示したい場合は、スクリプトのカスタマイズで
「戦闘開始時のメッセージ形式」を設定してください。


・リージョンの利用
追加イベントコマンドによって、指定したユニットの存在するリージョンを取得することができます。
*詳しい使い方は、『追加イベントコマンド』の項を参照してください。

 ・指定したリージョンIDにユニットがいるか判定する
  $game_switches[○] = check_region_all(region_id, enemy = false)

 ・指定したイベントIDのいる座標のリージョンIDを取得する
  $game_variables[○] = check_region(X)

 これにより、たとえばあるリージョンにユニットが到達すると会話が起きる、
 ステート異常が生じる、敵の増援が出現する、など様々なイベントを起こすことができます。
 多人数戦闘での使用が多いと思いますが、少人数戦闘でも使用できます。


・ 宝箱イベント(イベントユニット)
 通常の宝箱のイベントと同様です。
 いつも通りに宝箱イベントを作成し、『名前』を <イベント> にするだけで作成できます。

 1.イベント作成し、1ページ目に宝箱のグラフィックと実行時のイベント(演出やアイテムの入手、
   セルフスイッチをオンにする)を作成する。
 2.2ページ目を、条件:セルフスイッチがオンの時に設定し、空の宝箱のグラフィックを設定する。
 *『イベントの簡単作成』から宝箱を作っても大丈夫です。
 3.イベントの名前を『<イベント>』に設定する。

 宝箱に限らず、回復や会話など、基本的にどんなイベントでも作ることが可能です。
 ただし、場所移動など戦闘中に使用できないものは動作しません。


・スイッチを押すと開く扉
 イベントユニットと<通行不可>イベントを利用して、スイッチを押すと開く扉を作れます。
 1.名前に『<通行不可>』とした扉のイベントを作る(これは、敵も味方も通行できません)。
   通行不可イベントの2ページ目は条件:スイッチがオンの時とし、『グラフィックなし』にする。
 2.イベントユニットでスイッチのイベントを作成する。
   起動すると、演出やスイッチのオンを行う。

 <通行可>イベントを利用して、スイッチで出現する橋なども制作可能。
 逆に、スイッチで閉まる扉、消える橋なども作ることが可能だが、扉や橋の上にユニットがいる状態で
 扉が出現したり橋が消えたりすると、そのユニットは動けなくなるので注意が必要。


・アクターやエネミーの出現
 少人数戦闘
 少人数戦闘では、バトルイベントによってデフォルトと同様に作成することが可能です。
 すなわち、アクターは『メンバーの入れ替え』、エネミーは『敵キャラの出現』(あらかじめ
 『途中から出現』にチェックを入れておく)で可能です。

 多人数戦闘
 多人数戦闘では、アクターとエネミーの出現方法は共通です。
 名前に『<隠れ>』と設定しておくことで、途中から出現するユニットにすることが可能です。
 その後、イベントのスクリプトで
 unit_appear(X)
 Xは出現させたいユニットのイベントID
 と記述することで、そのユニットを出現させることが可能です。

 また、拠点など決まった場所から出現させたい、という場合、
 event_pos_set(event_id, x, y, direction)(イベントの位置設定)を利用し、
 イベントの位置を移動させた上で出現させることで実現可能です。


・ワープポイント
 イベントユニットを利用してワープポイントを作成できます。

 1.イベントの『スクリプト』で
   $game_variables[○] = check_unit_id(x, y)
   を実行する(詳しくは、『追加イベントコマンド』を参照してください)。
   ○に変数の番号、x, yに移動先のX座標、Y座標を記入する。
   この時、x, yにいるイベントのIDが取得される。イベントがいない場合、 0 を取得する。
 2.イベントIDを取得した変数が 0 かどうかを条件分岐で判断する
   (0 であれば、そこにイベントがいないと判断できる)。
 3.変数が 0 (移動先にイベントがいない)の場合、演出やイベントの位置を設定を行う。
   例:イベント>スクリプトで、追加イベントコマンドを利用して行う
     (ワープポイントに乗ったキャラクターのイベントIDを取得して行う必要があるため)。
     *前作と異なり、「このイベント」ではイベントを起動したアクターを指定できないので注意。
     $game_variables[△] = check_unit_id(x2, y2) # x2, y2 には、ワープポイントのXY座標を入れる。
     event_balloon($game_variables[△], 1)
     event_anime($game_variables[△], 107, true)
     event_pos_set($game_variables[△], x, y)
     このようにすると、△番の変数のIDのイベントに対し、吹き出し、アニメ、位置の設定の処理を行う。
 4.変数が 0 でない(移動先に何かイベントがいる)の場合、「移動できない」などメッセージを表示する。
 *これらの追加スクリプトは戦闘中にのみ機能するので、必要なら戦闘以外では動作しないよう、
  イベント>条件分岐>スクリプトで$game_temp.in_battleと記述し、戦闘中以外は実行しないようにする。


・リージョンを利用して、ある一定の範囲にアクターがいると起動するイベント
 特定のリージョンにアクターがいるかを調べることで、イベントの実行を制御できます。

 1.マップのリージョンの設定で、イベントを起こしたい範囲にリージョンを設定する(リージョンIDは自由)。
 2.バトルイベントを作成する(起動条件は自由だが、「ターン終了時」「スパン:ターン」が望ましい)。
 3.イベント>スクリプトで
   $game_switches[○] = check_region_all(id) # ○にスイッチの番号、id に1.で設定したリージョンID
   を実行すると、idのリージョンIDの範囲にアクターがいるとスイッチがオンになる。
 4.条件分岐で、スイッチがオンの場合にイベントの内容を実行する。
   実行後は「イベント実行済み」などのスイッチを使って、イベントが再度動作しないようにする。

 例:ある場所までたどり着くと戦闘勝利になる
   あるリージョンにアクターがいる場合、戦闘勝利スイッチをオンにする。
   この際、スクリプト>『カスタマイズ・ポイント』で『エネミーがいない場合も戦闘継続するか』を
   trueまたはオンにしていると、敵を全滅させても戦闘終了にならなくなる。


・あるユニットに一定距離以上アクターが近づくと起動するイベント
 特定のユニット間の距離を調べることで、イベントの実行を制御できます。
 ここでは例として、特定のエネミーにアクターが近づくとイベントが起きる場合を考えます。

 1.バトルイベントを作成する(起動条件は自由だが、「ターン終了時」「スパン:ターン」が望ましい)。
 2.イベント>スクリプトで
   $game_variables[○] = check_unit_dis_event(id, 0)# ○に変数の番号、id にエネミーのイベントID
   を実行すると、idのイベントIDのエネミーと全アクターとの距離の中で最小の値を
   変数○番に代入することができる(エネミーと一番近くにいるアクターの距離を取得する)。
 3.条件分岐で、距離が一定の値より小さい場合にイベントの内容を実行する。
   実行後は「イベント実行済み」などのスイッチを使って、イベントが再度動作しないようにする。
 * 0 に別のID(1以上)を入力すると、特定の2ユニット間の距離を取得することも可能。

 例:ある距離まで近づくと、会話の後戦闘になるエネミー
   距離を取得し、ある値以下の場合に会話イベントを行う。
   この際、エネミーに強制待機の設定を行っておき、会話後に強制待機を解除すると
   待ち構えているボスなどを演出できる。