さらにユーザビリティを上げるため、マップにいるユニットたちにHPバー(ゲージ)を表示するようにしてみます。
また、そこまでやるならば「ユニット」の画像そのものも、マップイベントではなくピクチャで表示するように切り替えてしまいましょう。
扱うピクチャが増えてきますので、管理の利便化が必要です。以前の記事でちょっと触れていた下記の規則にのっとってやっていきましょう。
ユニット画像と紐づけしてあると扱いやすいのですが、1ユニットあたり結構な枚数のピクチャを使う可能性があります。HPバーを重ねたり、リーダーキャラならそのマークを足したりですね。
「ユニット番号×10」を基本のピクチャ番号にすると便利かもしれません。
ユニット番号103なら、ユニット(キャラ)そのものの画像が1030番。1031~1039番の範囲をHPバーなどに使っていけますね。
ユニットにHPバーを表示する
処理の流れ
- おなじみになってきた「生存者カウントの要領」で指定の勢力の生存ユニットを検索
- 見つけたユニット番号を「指定ユニット単体のHPバー表示/消去」コモンへ送る
- ステージ開始時に上の1~2を、3回(全勢力ぶん)実行
- プレイ中に移動や行動をしたユニットがあれば、適宜3を実行
おおまかにはコレだけです。
HPバーはコンフィグでオフにできることが多いですから、1~2のコモンでは入力値で「表示モード」と「消去モード」を切り替えられるようにするとよいでしょう。
また、HPバーはバーの長さで「そのユニットの残りのHPの%」を表現します。
なので、MHP(最大HP)とHP(現在の残HP)のふたつも確実にユニットデータのCDB登録をしておきましょう。HPはかならずMHP以下になることにも留意してください。
実際の処理
HPバーのサイズは画面やタイルのサイズに合わせて調整しましょう。バーの下地は専用の画像を用意したほうが視認性があがるかもしれません。
「┗HP%を取得」コモンはたったの4行です。
■イベントの挿入[名]: CSelf10[MHP] = [“■ユニットデータ読込”] <コモンEv 36> / CSelf0[ユニット番号] / 24:MHP
■イベントの挿入[名]: CSelf11[HP] = [“■ユニットデータ読込”] <コモンEv 36> / CSelf0[ユニット番号] / 25:HP
■変数操作: CSelf4[結果] = CSelf11[HP] * 100
■変数操作: CSelf4[結果] /= CSelf10[MHP] + 0
別コモンで対象ユニットのMHPとHPを取得して、(HP×100)÷MHP です。もう少し精度の高い割合計算のコモンを専用に用意するのもよいでしょう。
あとは、ユニット登録時にMHPとHPをいろいろに変えてみて、上記のコモンを勢力別に3回呼び出します。
タイルサイズ16ではちょっとみづらいですね。実際にはタイルサイズを32とか40にしたほうが、マスの選択なども含めてやりやすいゲームになりそうです。
また、バー本体の元サイズと横拡大率があまりに小さい場合、HPがちょっと残っているのに見かけ上はHP0(バーが見えない)というケースが起こりえます。そういうときは、たとえば「HPが1以上あって、横拡大率が4%以下なら、最低でも5%として表示する」といったセーフティが必要かもしれません。
- ユニットの移動時にも、ユニット画像と同期してHPバーが動くように
- 戦闘時に実際のHP変動に合わせてバーが伸縮するように
ユニットをイベントではなくピクチャで表現する
イベントでユニットを表現することのネック
これも過去記事でちらっと触れていましたね。再掲しましょう。
仮に主人公やマップイベントをそのままユニットの画像として使ってきました。
が、SRPGは敵味方あわせて1マップに30以上のユニットが出るようなジャンルです。すべてのマップに30以上のマップイベントをぽちぽち置いていくのは重労働。
マップイベントの個数=登場可能ユニットの上限にもなりますから、増援や召喚のシステムにも制限がついてしまいます。
HPバーまで実装すると、ユニットの移動や消滅にHPバーのピクチャも同期させなくてはならないため、「イベントへの移動・消去命令」と「ピクチャへの移動・消去命令」など、なにをするにも二度手間です。
しかし、ユニット画像そのものもピクチャで管理し、HPバーと連続する番号を使った場合は、ピクチャ操作の範囲指定で、コマンド1行でユニットとHPバーの同期が済んでしまうのです(1030~1039範囲の移動命令ひとつで、103番のユニットの画像とHPバーが同期して動く)。
要するに、なにかと便利なのでイベントよりもピクチャでユニットを表現することをオススメします。
ユニット画像の指定はUDBの「クラス」で行う
こんな感じに。
ユニットのCDBからクラスがわかれば、そのUDBをたどって対応画像が取得できますね。
もっと簡単に、勢力に合わせておなじキャラ画像のRGB値をいじってもよいのですが、青い肌の人間が誕生してしまいます。多少手間でもカラーバリエーションは個別のファイルを用意したほうがよいでしょう。
なおこれは汎用ユニットの表示に特化した形式です。
主人公なんかはどうするの? と思われるかもしれませんが、主人公やボスなど、特殊な設定・容姿を持つキャラはたいてい専用クラスを持っていることと思います。
そうでなくとも、「同名クラスだけど異なるIDのクラスを別に作る」といった方法で対処していけるはず。
- TOライクならば「種族」のデータに紐づけ
- スパロボライクならば「キャラID」のデータに紐づけ
あとはHPバーの表示と同じ要領
「生存ユニットを検索」→「CDBからクラスを読み取り、クラスのUDBから対応画像を取得して表示」ですね。
「┗指定ユニットをピクチャ表示」コモン
上のコモンを呼び出している「■ユニットの表示」コモンは、「■HPバーの表示」コモンとほぼ同じです。その中で呼び出すコモンがHPバー表示か、ユニット表示かの違いだけ。
注意が必要なのは、「キャラチップを参照する場合は分割数とパターン番号の設定画必要」ということです。ウディタのデフォ素材のキャラチップなら、8方向3コマアニメなので、下向きの通常状態部分だけを表示するには「横分割6、縦分割4、パターン番号2」となります。
これでできました。
結果がわかりやすいように、描画位置をやや右下にして、元のイベント表示のユニットと二重に表示しています。
適切な位置に描画位置を修正しつつ、元のイベントを消すなりすれば晴れてユニットのピクチャ化が完成です。
既存コモンへの細かい調整
こまごま詳述はしませんが、「ユニット操作時の選択肢表示」や「ユニットの移動演出」などでイベント方式に合わせていた記述をピクチャへの命令に書き換えていきましょう。
ユニット番号さえわかっていればその10倍が対応するピクチャ番号ですから、面倒も少ないはず。
足踏みや方向転換が「パターン番号の切り替え」となることにご注意ください。
参考 イベントコマンド 【ピクチャ】【WOLF RPGエディター 説明書】一斉消去に備えた調整
ステージクリアやシナリオパートでの演出などで、ユニットやHPバーのピクチャを一括で消去したいこともあるでしょう。
消す場合は、生存者カウントの条件に合うかの判定を飛ばしたほうが良いので、上掲のコモンをこんなふうに書き換えたほうが取り回しやすいかもしれません。
続く「ステージ設定」処理にもかかわるものです。