【ウディタ講座】SRPGをつくろう! ユニット操作の大枠を作る

これまでの記事で移動処理の基本を作ってきました。

この記事からは新章突入。

ユニット操作時の各種コマンド、とくに攻撃に関するパートを作っていきましょう。

ユニット操作時コマンドの選択肢をつくる

操作可能なユニットをクリックしたら「攻撃/移動/待機」みたいなコマンド名がシャッと出てきて、好きな行動を選んでいくアレです。

処理の流れのイメージ

まずは「┣■ユニット操作」コモンをこんなふうに書き換えます(これもデバッグ用の中間形態)。

▼ 移動範囲パネルとポインターを消去
■イベントの挿入[名]: [“┣指定座標にパネル表示”] <コモンEv 4> / -1 / -1 / 0:ポインター
■イベントの挿入[名]: [“┣パネルをすべて削除”] <コモンEv 9>
■チェックポイント■■■■■■■■■■■■■■■■■■■■■■■■

■イベントの挿入[名]: CSelf9[汎用] = [“┃┣表示コマンドリスト取得”] <コモンEv 19>
■イベントの挿入[名]: CSelf9[汎用] = [“┃┣コマンドリストの描画と操作受付”] <コモンEv 20> / CSelf9[汎用] ■条件分岐(文字): 【1】 CSelf9[汎用]が “” と同じ
-◇分岐: 【1】 [ CSelf9[汎用] “” と同じ ]の場合↓
|▼ カラ文はキャンセル
|■イベント処理中断
|■
-◇上記以外
|■条件分岐(文字): 【1】 CSelf9[汎用]が “攻撃” を含む 【2】 CSelf9[汎用]が “移動” を含む 【3】 CSelf9[汎用]が “待機” を含む
|-◇分岐: 【1】 [ CSelf9[汎用] “攻撃” を含む ]の場合↓
| |■文章:\E「攻撃」を選んだ
| |■
|-◇分岐: 【2】 [ CSelf9[汎用] “移動” を含む ]の場合↓
| |■文章:\E「移動」を選んだ
| |■イベントの挿入[名]: [“┃┣移動先選択”] <コモンEv 18> / CSelf1[座標X] / CSelf2[座標Y] / CSelf0[対象ユニット] | |■
|-◇分岐: 【3】 [ CSelf9[汎用] “待機” を含む ]の場合↓
| |■文章:\E「待機」を選んだ
| |■
|◇分岐終了◇
|■
◇分岐終了◇

親切に作るなら、攻撃できない状態ならそもそも「攻撃コマンド」が出ないなど、選択肢じたいも柔軟に動く必要があります(すでに攻撃を実行済の場合など)。

  1. 今表示できるコマンドのリスト(選択肢の内容)の取得
  2. リストに応じた選択肢を表示&入力待ち

このように処理は別々のコモンにしておくとよいかと思います。

1.の中身はまだ実際に作れる段階ではないので、今は必ず「攻撃/移動/待機」の3コマンドの文字列を返すようにしておきます。

「┃┣表示コマンドリスト取得」

■文字列操作:CSelf9[コマンドリスト] = “移動\n攻撃\n待機”

 

2.に対応するコモンでは、リストに従って選択肢を表示し、選択されたコマンド内容を返します。

「移動」コマンドを選んだら返り値も「移動」と来るので、もとの「┣■ユニット操作」に戻って移動用のコモンを呼んであげるわけですね。

というわけで、今必要なのは選択肢の描画/操作受付の処理ですね。

過去記事でざっくり説明していたことのおさらいになります。

【ウディタ講座】自作システム:自作ウィンドウでの入力受付~マウス&キーボード両対応~

選択肢の描画/操作受付の処理

「描画」と「操作受付」を別々にしておく方がよいのですが、SRPGをまっとうに作るならこのさき似たような単純な選択肢のバリエーションを山ほど作ることになります。

上記の過去記事ではかなり細かく作っていますが、今回は最低限の処理だけを1コモンにまとめてみましょう(前半と後半で画像が別かれています)。

「文字列変数の行数をかぞえるコモン」で、選択肢数をみています。そちらの中身はこんな感じ。

■変数操作: CSelf4[結果] = 0 + 0
■ループ開始
|■条件分岐(文字): 【1】 CSelf5[対象]が “” と同じ 【2】 CSelf5[対象]が ” \n” と同じ
|-◇分岐: 【1】 [ CSelf5[対象] “” と同じ ]の場合↓
| |■イベント処理中断
| |■
|-◇分岐: 【2】 [ CSelf5[対象] ” \n” と同じ ]の場合↓
| |■イベント処理中断
| |■
|◇分岐終了◇
|■文字列操作:CSelf6[切り出し受け] =<上1行切出> CSelf5[対象] |■変数操作: CSelf4[結果] += 1 + 0
|■
◇ループここまで◇◇

 

これで骨子は完成です。

あとは大本の「┣■ユニット操作」コモンのなかで、選択肢に対応した処理をあれこれ呼び出していきます。

各種コマンドに対応する実際の処理

移動コマンド

移動処理そのものはすでに以前の記事で作ってあります。

が、ユニットの操作コマンドを呼び出す際に移動可能な範囲の表示パネルをすべて消してしまいました。再表示をかけてあげましょう。

パネルは消しても計算結果のCDBは触っていませんから、「┃┗移動可範囲にパネル」を呼び出すだけで復帰はバッチリです。

待機コマンド

ユニットのデータ管理(ステータスやHP,LVなど)がまだなので、実はまだ作りようがありません。

仮置きとしては「 | |■キャラエフェクト:主人公[点滅B(自動フラッシュ)] R-50/G-50/B-50 (1)フレーム」なんてコマンドをかけておくとよいかと思います。

点滅のコマンドですが、間隔が狭いのでずっと暗化したように見えます。

待機したユニット=そのターン中はもう操作できないユニットですので、一目でそれとわかると親切ですね。

 

攻撃コマンド

主人公の攻撃(装備)が剣で射程1だったとしましょう。

イメージとしては、こんなふうに周囲4マス(主人公の位置から1マス距離の場所)にパネルが出て、クリックしたパネルが攻撃の対象になる……という流れ。

必要な処理はこんな感じになるでしょう。

  1. 射程の範囲にパネルを出す
  2. 射程範囲パネルのある場所のクリック待ちをする

 

1.は単純に、「指定の座標から指定の距離nだけ離れているマスにパネルを置く」処理と考えます。操作ユニットの射程を取得して、距離nとしてこのコモンに送ります。

たとえば、座標(1,1)から2マス離れているマスすべてにパネルを置く……という感じ。

おおよその範囲があらかじめわかっているので、いちいちマップの全範囲をチェックしないで済むようにしています。

そうそう、「┣指定座標にパネル表示」のコモンも、「攻撃用」として対応のパネル種も増やしてあります。

 

2.のパネルのクリック待ちについては、やはりユニットのデータ管理が絡んできます。次回以降の記事で扱うことにしましょう。

 

その他のコマンド

SRPGというとFEやスパロボです。

となると「踊る」「道具」「交換」「担ぐ」「変身」「合体」など、まだまだ付け足したいことが出てくるかと思います。求めるSRPG像によって大きく変わってくる部分でしょう。

 

【ウディタ講座】SRPGをつくろう! まとめ