●戦闘の概要
   追加イベントコマンド

本素材集には、特に多人数対応のSRPG戦闘に対応するためのイベントコマンドが用意されています。
多くは、イベント間の距離といったSRPGに独特のパラメータを取得する場合や
戦闘用のイベントコマンドを使用するために用いられます
(少人数戦闘では、多くの場合、通常通り戦闘用のイベントコマンドを使用できます)。

これらはイベント>スクリプトで記述することで利用可能です。
内容はスイッチ・変数に出力されるため、それをイベント等に使用する事が出来ます。
また、スイッチに出力されるものに関しては、条件分岐>スクリプトでも利用可能です。

これらの機能は、利用しなくてもゲームを製作する事が可能ですが、
利用することでより幅広いシステムを制作する事が出来るようになります。
例)特定のキャラクター同士の距離が 3 以内になるとイベントが発生する など

また、スクリプトを扱える方は独自にスクリプトを記述し、
スイッチ・変数に出力することでイベント等に使用する事が出来るかと思います。


●初心者の方向け スイッチと変数のスクリプトからの操作についての説明

RPGツクールVX Aceには、スイッチ・変数が存在します。
通常、イベントコマンドから操作する事が大半かと思いますが、
これはスクリプトでも同様に操作することが可能です。

・スイッチ
$game_switches[○] = true
$game_switches[○] = false
(○は半角の整数)
とイベント>スクリプトで記述することで操作可能です。
trueがオン、falseがオフに対応します。

例)$game_switches[10] = true # スイッチ10番がオンになります

・変数
$game_variables[○] = X
(○、Xは半角の整数)
とイベント>スクリプトで記述することで操作可能です。

例)$game_variables[10] = 999 # 変数10番に 999 が代入されます。

また、これらは直接文字や数字を代入せず、他の定義の結果を代入する事も可能です。
本スクリプトの追加イベントコマンドでは主にこの方法を使用します。

例1:$game_switches[○] = unit_alive?($game_variables[10])
   変数10番に格納されている数値のイベントIDが存在・生存しているかを、スイッチ○番に代入する。
例2:$game_switches[○] = event_command
   *event_commandは他で定義される定義
   event_commandの計算結果(true か false)がスイッチ○番に代入されます。


●内蔵されている追加イベントコマンド

*○、Xには任意の半角英数字を入れてください。
なお、存在しないイベントやアクターを指定すると、falseもしくは 0 を返します。

戦闘全体で使用するスクリプト
イベントIDを取得する
注意事項(これより下のスクリプトを使用する前にご一読ください)
ユニットの状態を取得・変更する
イベントに対して処理を行う
ユニットの位置を調べる


●戦闘全体で使用するスクリプト
---------------------------------------------------------------------------------
・戦闘のタイトル、勝利条件、敗北条件の記述
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_temp.battle_title = "タイトル"
$game_temp.battle_win_condition = "勝利条件"
$game_temp.battle_lose_condition = "敗北条件"
#〜〜〜〜〜ここまで〜〜〜〜〜

スクリプトの『カスタマイズ・ポイント』で『勝利・敗北条件を表示するか』がtrue(オン)になっている場合、
戦闘開始時にタイトル、勝利条件、敗北条件を表示します。
また、メニュー画面に『勝敗条件』コマンドを追加し、メニューからも参照できるようにします。

全滅以外の勝利・敗北条件があるような戦闘でその条件を表示したい場合や、
ステージクリア型のSRPGの演出として利用できます。

なお、以下のように、複数行にわけて記述することも可能です。
例)
$game_temp.battle_win_condition =
"味方勢力全滅
ハロルド将軍の戦闘不能"

---------------------------------------------------------------------------------
・自動的に戦闘に参加するメンバーの配列を設定する
#〜〜〜〜〜スクリプト〜〜〜〜〜
auto_battle_members_set
#〜〜〜〜〜ここまで〜〜〜〜〜

多人数戦闘において、戦闘に参加するアクターの配列をパーティーメンバーから自動的に作成します。
詳しくは、マニュアルの多人数戦闘『戦闘開始時の設定』を参照してください。
なお、戦闘に参加するアクターの配列が空白の場合、戦闘開始時に自動的にこのコマンドを呼び出します。

---------------------------------------------------------------------------------
・ブリーフィング画面呼び出し
#〜〜〜〜〜スクリプト〜〜〜〜〜
call_briefing
#〜〜〜〜〜ここまで〜〜〜〜〜

ブリーフィング画面を呼び出します。
ブリーフィング画面を呼び出すと、設定されていた戦闘メンバーの配列はリセットされます。

---------------------------------------------------------------------------------
・ブリーフィング画面での固定メンバーの設定
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_party.fix_members = [X]
#〜〜〜〜〜ここまで〜〜〜〜〜

ブリーフィング画面の呼び出しとセットで利用します。
画面呼び出し前に設定することで、Xに入力したアクターIDのアクターを
固定メンバーとして必ず戦闘に参加させるようにできます。
IDはカンマで区切ることで複数入力することもできます。

例)
$game_party.fix_members = [1, 3, 5]
⇒アクターID 1番、3番、5番のキャラクターが固定メンバーとして戦闘に強制参加します。

一度入力するとずっと有効になりますので、解除するときは
$game_party.fix_members = []
と記入し、配列を空にしてください。

---------------------------------------------------------------------------------
・カーソル(画面)を指定した座標に移動させる
#〜〜〜〜〜スクリプト〜〜〜〜〜
player_walk_to(x, y)
#〜〜〜〜〜ここまで〜〜〜〜〜

x, y に任意の座標を入力すると、その座標に向けてカーソルが移動(画面スクロール)します。
座標はマップ上の座標を直接指定します(変数での代入も可能)。
戦闘範囲外を指定するとエラーを起こすので注意してください。

例:player_walk_to(10, 15)
  と設定すると、マップ上のx座標:10, Y座標:15の位置に向けてカーソルが移動します。


●イベントIDを取得する
---------------------------------------------------------------------------------
・指定位置にいるイベントのIDを取得する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_unit_id(x, y)
#〜〜〜〜〜ここまで〜〜〜〜〜

指定した座標に存在するイベントのイベントIDを取得します。
xとyにそれぞれ値を代入すると、○に指定した変数にイベントIDを取得します。
イベントが存在しない場合、0 になります。

---------------------------------------------------------------------------------
・特定のアクターIDがイベント何番に存在するかを取得する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = get_eventid(X)
#〜〜〜〜〜ここまで〜〜〜〜〜

Xに記入したアクターIDのアクターがイベントID何番なのかを取得し、
○に指定した番号の変数に代入します。


*重要!
これ以下の追加イベントコマンドは全てイベントIDを使用します
そのイベントにアクターIDが指定されている場合(<アクター 1>など)やエネミーは
そのイベントがアクター ID何番なのか(もしくはエネミーID何番なのか)分かるので問題ありませんが、
アクターIDが指定されていない場合(<アクター 0>)、
そのイベントにアクターID何番のアクターが入っているのか分かりません。

そこで、特定のIDのアクターがイベント何番か取得する必要があります。
その時は、すぐ上の『特定のアクターIDがイベント何番に存在するかを取得する』の
スクリプトを利用してください。

また、これは
$game_switches[○] = unit_alive?(get_eventid(X))
のように、他のスクリプトの中に入れる事も出来ます。
(この例の場合、アクターID X番のアクターが生存しているかを○番のスイッチに出力します)


●ユニットの状態を取得・変更する
---------------------------------------------------------------------------------
・生存しているかの認識(アクター、エネミー共通)
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_switches[○] = unit_alive?(X)
#〜〜〜〜〜ここまで〜〜〜〜〜

イベントID X番のユニットが存在する かつ 戦闘不能でない かつ 隠れ状態でない 場合、
○に指定した番号のスイッチに true (オン)を返します。
それ以外の場合、 false (オフ)を返します。

---------------------------------------------------------------------------------
・戦闘不能かの認識(アクター、エネミー共通)
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_switches[○] = unit_dead?(X)
#〜〜〜〜〜ここまで〜〜〜〜〜

イベントID X番のユニットが存在する かつ 戦闘不能 かつ 隠れ状態でない 場合、
○に指定した番号のスイッチに true (オン)を返します。
それ以外の場合、 false (オフ)を返します。

---------------------------------------------------------------------------------
・現在HPの取得(アクター、エネミー共通)
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = unit_get_hp(X)
#〜〜〜〜〜ここまで〜〜〜〜〜

○に指定した変数に、Xに入力したイベントIDのキャラクターの現在HPを取得します。

---------------------------------------------------------------------------------
・キャラクターの出現(アクター、エネミー共通)
#〜〜〜〜〜スクリプト〜〜〜〜〜
unit_appear(○)
#〜〜〜〜〜ここまで〜〜〜〜〜

多人数戦闘で使用可能です。
○に指定したイベントIDのキャラクターを出現させます。アクターとエネミーで共通です。

キャラクターを出現させるには、事前にイベントの名前に
<隠れ>
と記述しておく必要があります(こうすることで、途中から出現するキャラクターになります)。
例)<エネミー 2><隠れ>

少人数戦闘で行う場合、アクターは『メンバーの入れ替え』、
エネミーは『敵キャラの出現』(あらかじめ『途中から出現』にしておく)で実行可能です。

---------------------------------------------------------------------------------
・HP増減
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_hp_change(id, change, num, enable_death)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

idで入力したイベントIDのキャラクターのHPを増減します。
changeに 0 を入力するとHPを増やす、1 を入力するとHPを減らす処理になります。
numに増減量を設定します。
enable_deathに true と入れると、戦闘不能を許可します。(何も入力しないとfalseになります)

例)event_hp_change(10, 0, 1000, false)
  イベントID10番のユニットのHPを 1000 増加する。

なお、イベントIDではなく特定のアクターのHPを増減する場合は、
通常通りイベントコマンドのHPの増減を利用してください。

---------------------------------------------------------------------------------
・MP増減
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_mp_change(id, change, num)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

idで入力したイベントIDのキャラクターのMPを増減します。
changeに 0 を入力するとMPを増やす、1 を入力するとHPを減らす処理になります。
numに増減量を設定します。

なお、イベントIDではなく特定のアクターのMPを増減する場合は、
通常通りイベントコマンドのMPの増減を利用してください。

---------------------------------------------------------------------------------
・全回復
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_recover_all(id)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

idで入力したイベントIDのキャラクターを全回復します。

---------------------------------------------------------------------------------
・ステートの付加、解除(アクター、エネミー共通)
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_state(id, change, state_id)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

指定したイベントIDのキャラクターにステートを付加もしくは解除します。
id に半角数字を入れると、そのIDのイベントを対象にします。
change には、半角で 0 か 1 を入れます。0 だと付加、1 だと解除になります。
state_id には、付加または解除するステートのIDを半角数字で入力します。

なお、イベントIDではなく特定のアクターにステートを付加または解除する場合は、
通常通りイベントコマンドのステートの付加を利用してください。

---------------------------------------------------------------------------------
・敵キャラの変身
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_transform(event_id, changed_id)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

event_idで指定したイベントIDの敵キャラクターを、
changed_idで指定したIDのエネミーに変身させます。

---------------------------------------------------------------------------------
・戦闘行動の強制
#〜〜〜〜〜スクリプト〜〜〜〜〜
unit_action_force(id, skill_id, target_index)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

idで指定したイベントIDの敵キャラクターに、skill_idで指定したスキルを使用させます。
イベント>戦闘行動の強制と同様です。
target_indexには狙いたいキャラクターの「イベントID -1」の値を設定します。
-2に設定するとラストターゲット、-1にするとランダムです。

---------------------------------------------------------------------------------
・セルフスイッチを操作する
セルフスイッチをオンにする
#〜〜〜〜〜スクリプト〜〜〜〜〜
on_self_switches(event_id, letter)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

セルフスイッチをオフにする
#〜〜〜〜〜スクリプト〜〜〜〜〜
off_self_switches(event_id, letter)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

現在のマップの、event_idで指定したイベントIDのイベントのセルフスイッチをオン・オフします。
letterに、"A"、"B"、"C", "D"を記入すると、対応するセルフスイッチを操作します。
例:on_self_switches(10, "A")
  イベントID10番のセルフスイッチAをオンにする。


●イベントに対して処理を行う
---------------------------------------------------------------------------------
・アニメーションの表示
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_anime(event_id, anime_id, wait)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

event_idで指定したイベントIDのキャラクターに
anime_idで指定したIDのアニメーションを表示します。
waitに true を記述すると、表示が終わるまでウェイトします。

---------------------------------------------------------------------------------
・フキダシの表示
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_balloon(event_id, balloon_id, wait)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

event_idで指定したイベントIDのキャラクターに
balloon_idで指定したIDのフキダシを表示します。
waitに true を記述すると、表示が終わるまでウェイトします。

なお、balloon_idは「びっくり」が 1 で、
イベント「フキダシアイコンの表示」でリストに並ぶ順になっています。
1:びっくり、2:はてな、3:音符、4:ハート、5:怒り、6:汗、7:くしゃくしゃ、8:沈黙、9:電球、10:Zzz

---------------------------------------------------------------------------------
・イベントの位置の設定
#〜〜〜〜〜スクリプト〜〜〜〜〜
event_pos_set(event_id, x, y, direction)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

event_idで指定したイベントIDのキャラクターを、x, y で指定した座標に移動します。
directionに2, 4, 6, 8を代入すると、対応する方向に向きを変化させます(省略すると、向きはそのまま)。

<隠れ>状態のユニットに対しても有効です。


●ユニットの位置を調べる
---------------------------------------------------------------------------------
・キャラクターの位置の取得
X座標を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_unit_pos_x(X)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

Y座標を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_unit_pos_y(X)
#〜〜〜〜〜ここまで〜〜〜〜〜〜

○に指定した変数に、Xに入力したイベントIDのキャラクターのX座標・Y座標を出力します。

たとえば、
$game_variables[10] = check_unit_pos_x(1)
と記述すると、イベントID 1番のX座標を変数 10番に代入します。

イベント>変数の操作>キャラクターのXY座標の代入は機能しませんので注意してください。

---------------------------------------------------------------------------------
・アクター、エネミー全体の位置の取得
特定のアクター、エネミーではなく、
アクター、エネミー全体でXY座標の最大値・最小値を出力します。

アクターのX座標の最小値(最も画面左側にいるアクターのX座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_actor_mini_x
#〜〜〜〜〜ここまで〜〜〜〜〜

アクターのX座標の最大値(最も画面右側にいるアクターのX座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_actor_max_x
#〜〜〜〜〜ここまで〜〜〜〜〜

アクターのY座標の最小値(最も画面上側にいるアクターのY座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_actor_mini_y
#〜〜〜〜〜ここまで〜〜〜〜〜

アクターのY座標の最大値(最も画面下側にいるアクターのY座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_actor_max_y
#〜〜〜〜〜ここまで〜〜〜〜〜


エネミーのX座標の最小値(最も画面左側にいるエネミーのX座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_enemy_mini_x
#〜〜〜〜〜ここまで〜〜〜〜〜

エネミーのX座標の最大値(最も画面右側にいるエネミーのX座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_enemy_max_x
#〜〜〜〜〜ここまで〜〜〜〜〜

エネミーのY座標の最小値(最も画面上側にいるエネミーのY座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_enemy_mini_y
#〜〜〜〜〜ここまで〜〜〜〜〜

エネミーのY座標の最大値(最も画面下側にいるエネミーのY座標)を出力する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_enemy_max_y
#〜〜〜〜〜ここまで〜〜〜〜〜

○に指定した変数に、それぞれX座標もしくはY座標を代入します。

---------------------------------------------------------------------------------
・イベント間の距離の取得
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_unit_dis_event(X1, X2)
#〜〜〜〜〜ここまで〜〜〜〜〜

X1、X2のイベントIDのイベントの間の距離を認識します。
X2に 0 を代入すると、X1とそれ以外のキャラクターの距離の中で最小の値を出力します。
この時、X1がアクターならエネミー、エネミーならアクターとの距離になります。

例)
$game_variables[10] = check_unit_dis_event(1, 5)
イベントID 1番と 5番の間の距離を、変数 10番に代入します。

$game_variables[10] = check_unit_dis_event(1, 0)
イベントID 1番がアクターの場合、イベントID 1番のキャラクターとエネミー全てとの距離の中で、
最も小さい値を変数 10番に代入します。
イベントID 1番がエネミーの場合、イベントID 1番のキャラクターとアクター全てとの距離の中で、
最も小さい値を変数 10番に代入します。

・指定したイベントと全てのイベント間の最小距離の取得
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_all_unit_dis(X1)
#〜〜〜〜〜ここまで〜〜〜〜〜

アクター、エネミーの区別なく、X1のイベントIDのイベントと全てのイベント間の距離を計算し、
最小の値を○で指定した変数に出力します。

---------------------------------------------------------------------------------
・指定したリージョンIDにユニットがいるか判定する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_switches[○] = check_region_all(region_id, enemy = false)
#〜〜〜〜〜ここまで〜〜〜〜〜

指定したリージョンに味方ユニットがいるかどうか調べます。
引数2に true を代入すると、エネミーも含めた全ユニットを対象にします。
指定IDのリージョンにユニットが一人でもいる場合、○に指定したスイッチにオンを代入します。

例)$game_switches[○] = check_region_all(10)
リージョン番号10に味方ユニットが存在する場合、スイッチ○番をオンにする(存在しないとオフにする)。

---------------------------------------------------------------------------------
・指定したイベントIDのいる座標のリージョンIDを取得する
#〜〜〜〜〜スクリプト〜〜〜〜〜
$game_variables[○] = check_region(X)
#〜〜〜〜〜ここまで〜〜〜〜〜

○に指定した変数に、Xに入力したイベントIDのキャラクターがいる場所のリージョンIDを出力します。

例)$game_variables[○] = check_region(10)
イベントID10番のユニットがいる場所のリージョンIDを変数○番に代入する。

---------------------------------------------------------------------------------