CDBでユニットの各種データが管理できるようになりました。
このCDB操作方法の確認ついでに、ユニットを操作して待機を行うまでの流れ(行動フラグのCDB操作)を作ってみます。
CDBの読み取り方
CDBのユニットのデータを読み書きする際は、「DB操作」でこんなふうに指定していきます。
緑の線の部分が、ユニット番号から所属ナンバーを抜いた下2ケタの番号です(101なら1、314なら14)。
赤の線の部分は見ての通り「所属」ナンバーに対応します。ユニット番号から計算する所属ナンバーは自軍1、敵軍2、友軍3。CDBの並びは、前回記事では自軍2、敵軍3、友軍4となっていました。
なので、対象ユニットの所属がわからない場合は、「所属ナンバー+1」の値を使って変数指定することができます。
しかし、赤線部分を変数指定すると、いちばん右の項目の名前呼び出しのリストが呼び出せなくなります。赤線部分をいちど「自軍指定」に手打ちして、項目で読み込みたい数値を名前指定してから、赤線部分を変数指定に書き換える……といった工夫が必要です。
入力値で「ユニット番号」と「読み書き対象の項目名」を指定したらOKな専用コモンを作るのもいいですね。
入力値で指定する項目は赤の矢印のように変数指定を行います。この番号は、黄色の線が示すようにCDBの同名項目と対応。
ユニット操作のコマンドで「行動フラグ」を参照する
ユニットが移動&攻撃をして待機するまでのフローを固めていきましょう。
この行動フローも作品ごとにけっこう差があります。
FE(ファイアーエムブレム)方式では、攻撃や道具の操作を実行したらもうその場所からは移動できなくなります。TO(タクティクス)方式では移動も攻撃も好きな順番でいちどずつ行えますね。
ここではFE方式でやっていきます。
選択可能なコマンドリストの生成
ユニットごとのCDBに「行動フラグ」という項目を立てていました。
柔軟に操作可能なTO方式ならかなり複雑にこのフラグを書き換えていくことになりますが、FE方式ではCDBの行動フラグは「行動可=0、待機済=1」ぐらいで済むのではないでしょうか。
攻撃や移動を終えたかどうかは、ユニット操作のコモンのなかだけのフラグでまかなっていきます。
「┣■ユニット操作」コモンをこんな感じに改修していきましょう。
- コモンの頭で、対象ユニットの行動フラグをチェック
- 行動フラグ1(待機状態)ならイベント中断
- 空きの文字列変数を「済コマンドログ」とし、処理開始時に内容リセット(カラ文化)
- 「┃┣表示コマンドリスト取得」コモンに済コマンドログを入力
- 済コマンドログの状況を踏まえて、「┃┣表示コマンドリスト取得」がコマンドリストを生成
- 「┣■ユニット操作」の《コマンド取得~コマンド選択肢決定》のくだりをループのなかに設置
- 待機コマンドを決定したときのみ、上のループを抜けるように。
「┃┣表示コマンドリスト取得」コモンはこんな感じになります。一例ですが。
各種キャンセルのフラグを設定
上記ループのなかで決定したコマンドを「済コマンドログ」に追加していけば、「┃┣表示コマンドリスト取得」コモンがいい感じに動いて「攻撃や移動は1ターンの行動で1回だけ」となっていきます。
過去に作った「┃┣移動先選択」や「┃┗攻撃先決定待ち」の返り値を整備して、その操作が決定されたのかキャンセルされたのかがわかるようにしておきましょう。これがコマンド単位のキャンセル確認ですね。
キャンセルといえば、おおもとのユニット操作でもキャンセルがありえます。
「移動を試してみて、やっぱりやめて、他のユニットをさきに動かすことにした」ようなケースですね。しかし、攻撃などを実行済の場合は、ユニット操作のキャンセルは禁止され、待機を選ぶまではコマンド選択肢が表示され続けます。
ユニット操作キャンセル可否のフラグも用意しておいて、コマンド決定時に適宜操作していきましょう。
待機時の暗化ついでに、ユニット画像(主人公)を下向きする命令を足すと、よりそれらしいかもしれません。
まだちょっと未完成
上のコモンで、コマンド選択肢の増減はそれらしくなりました。
が、「移動」→「攻撃」とすすめてみるとおかしなことになってきます。移動前の位置を基準にして射程の赤パネルが出てしまいました。
また、移動後にユニット操作そのものをキャンセルすると、操作開始前の位置に戻って欲しいのですが、それもありません。
移動前と移動後の座標を両方保持しておかないと、このあたりはうまく処理することができないのです。
コマンド操作を「移動前」と「移動後」それぞれの座標に対応させる
ユニット操作およびAI用のメモCDBを作る
メモ用なので、あまり整然としている必要もありません。複数の座標(変数)を扱うので、通常変数をあれこれ立てるよりはラクかな、ぐらいのものです。
あとは呼び出し値をおさえておくと便利ですね。
1100000000 (11AABBBBCC)
→ 可変データベース タイプA/データB/項目C
なので、たとえば「多目的メモ」の「ユニット操作」の「移動前座標Y」は「1105000001」で直接指定できます。つまり、いちいちCSelfに受けなくても、呼び出しコモンの入力値でCDBを指定できるわけです。
ユニット操作をメモCDBに対応させていく
次のコマンドをあちこちに書き足していきましょう。
- 「┣■ユニット操作」コモン開始時に、メモCDBの移動前と移動後両方に操作ユニットの初期位置を代入
- 「┃┣指定位置からnマス距離にパネル」コモンに入力していた起点の座標を、メモCDB移動後座標X,Yへ変更
- 「┃┣移動先選択」コモンで移動先を決定したら、その値をメモCDB移動後座標へ代入
- 「┣■ユニット操作」をキャンセル終了した場合、移動前座標にユニット画像やマスCDBの登録情報を戻す
「┣■ユニット操作」コモンの変更部分はこんな感じです。
これで一通りできあがりです。