RPGツクールMZの戦闘の流れについて【記:あおたく】
こんばんは、あおたくです。
引き続きガストロの戦闘を組んでいました。
戦闘システムを組むときに調べたことをまとめたので、今日はその話をします。
RPGツクールMZのシーンシステム
「シーンシステムとは何か」ということは調べてもらうとして、RPGツクールMZでは、 SceneManager
がシーンの管理をしています。XP の RGSS1 の頃からシーン管理はありますが、SceneManager
を使うようになったのはたぶん VXAce からです。
各シーンは Scene_何とか
に記述されます。戦闘シーンだと Scene_Battle
です。Scene_Battle
はメッセージなどのイベントが実行できるので、Scene_Message
から派生しています。
各シーンはウインドウを持ち、ウインドウにフォーカスを当て、ウインドウで実行されたコマンドに応じて処理を行ったりします。
SceneManager と BattleManager
戦闘シーンにおいて、Scene_Battle
がやることは、主にユーザーの入力を待ってウインドウの表示を切り替えることで、戦闘に関する処理については BattleManager
に任せています。
戦闘シーンの処理は戦闘シーンに特有で、SceneManager
共通の処理ではありません。なので、SceneManager
ではなく BattleManager
が担当しています。
SceneManager
が Scene_Battle
を管理し、Scene_Battle
が現在の状態に応じて BattleManager
の処理を呼び出す、という入れ子構造になっています。
戦闘の流れ
- 戦闘シーンの準備
↓ - 各種ウインドウ・UIの準備
↓ - 画像・フォントなどの読込完了待機
↓ - 戦闘データの準備
↓ - 画面のフェードイン完了待機
↓ - パーティコマンド入力
↓ - パーティメンバーコマンド入力
↓- コマンドの種類を入力
↓ - コマンド内にサブコマンドがあればそれぞれについて入力
↓ - コマンドの対象を選択する必要があればそれぞれについて入力
↓ - 全メンバーのコマンド入力が終わるまでパーティコマンド入力に戻って繰り返し
↓
- コマンドの種類を入力
- ターン開始
↓ - ターン終了
↓ - 戦闘が終わるまでパーティコマンド入力に戻って繰り返し
↓ - 戦闘終了
おおざっぱにこういう流れになっています。
細かいところで不意打ちだったり行動可能なパーティメンバーがいなかったりするとコマンド入力をスキップしてターン開始されたりなどはありますが、基本的には上のとおりです。
ガストロでの変更点
ガストロでは以下の点を変更しています。
- コマンドの種類を入力
→ 「攻撃」スキルコマンドが選択された状態で開始し、Q,Eキー(L,Rボタン)でスキルの種類を変更する
キャンセルで前のメンバーのコマンド入力またはパーティコマンド入力に戻る - パーティメンバーのコマンド入力が終わったタイミングで即ターンを開始せず、ターン開始の確認メニューを表示
プレイヤーが「ターン開始」を決定してからターン開始に遷移する
即ターンが開始されると、最後のメンバーが全体を対象とするスキルを誤って選択した場合などにやり直しができないため
内部処理としては AP の消費・追加、スキルごとのクールタイムの設定などがありますが、それ以外の流れは通常の戦闘シーンとほとんど変わりません。なので必要な部分にプラグインでパッチを当てる、という感じです。これくらいの改造からやるとツクールの設計を把握できてよいですね。
特に大きく変更が入って作るのが大変なのはウインドウ周りです。時間がかかる上、ここが出来上がらないと画面を見せられません。
というわけで今回も画面なしで文字のみの更新でした。
ツクールのプラグイン開発は上に書いたように、
- ツクールのコードを読んで、どういう設計になっているか理解する
- 実装したいシステムがツクールのデフォルトとどこがどう変更になるのかをまとめる
- 変更箇所についてプラグインを書く
という流れが基本になります。一行で書くとこれだけですが、一番上が一番たいへん。
最初はツクールのプリセットの各関数に console.log
を埋め込んで、関数の実行順を書き出したりしてみるとよいと思います。
フォロワー以上限定無料
プラグインの開発環境
無料