【ウディタ】戦闘に立ち絵を表示する

レビニアよ。今回の解説は戦闘中の立ち絵表示


コマンド選択中だけ該当キャラの立ち絵が表示される仕組み。まぁ新しめのRPGでは当然のようにあるシステムね。これをウディタの基本システムを改造して実装してみよう、ということよ。


※事前に立ち絵に使う画像ファイルを用意して、Dataフォルダ内のPictureフォルダに格納しておいてね。今回の解説では、以前も使用したウディタ公式wiki画像素材からお借りしたものを使用するわ。

可変DBに立ち絵を登録する項目を追加する


まずはデータベースの改造からよ。可変DB「主人公ステータス」に立ち絵を登録する項目を作成しましょう。0番「主人公ステータス」を選択して「タイプの内容設定」ボタンをクリック。


項目は最後尾に追加するから、まず上部の「ページ4」ボタンをクリックして頂戴。

途中に挿入で項目追加するのは×よ。DB構成を変えちゃうと、項番指定でDB読み込みしているコモンが正常に動作しなくなっちゃうからね。


項目60番に立ち絵画像を設定する項目を追加しましょう。「立ち絵」と名前を付けて種別には「文字列」を選択し、「▼特」ボタンをクリック。


「ファイル読み込み」にチェックして初期フォルダをPictureに設定(立ち絵画像を格納したフォルダよ)して、「OK」ボタンで確定よ。


次は立ち絵の表示位置と拡大率を設定する項目を作成するわ。それぞれに名前を付けて種別には「変数」を選択してね。初期値はお好みでいいわよ。

入力が済んだら「OK」ボタンで確定させてね。

※ちなみに320×240の画面サイズでゲーム作成している場合は、大きめの画像を用意して拡大率50%で表示するのがオススメよ。320×240は2倍に引き延ばして表示される関係上、この方が綺麗に表示されるわ。


このように4ページ目に立ち絵登録用の項目が追加されていればOK。


事前に用意した立ち絵画像を登録してあげれば、データベースの準備は完了。

戦闘画面用の立ち絵表示コモンを作成する

次はコモンの作成と改造だけど、まずは基本システムの戦闘関連コモンについて事前説明。

そもそも戦闘時にコマンド選択を処理しているコモンはどれかというと、


192番「X┃┣◆味方コマンド選択」よ。このコモンが各主人公の持っているコマンドを表示したり実行したりしているの。

ということは、立ち絵の表示や消去をさせたかったらこのコモンを改造(処理自体は別コモンで作成して呼び出す)すればいいわけね。


※ちなみにこのコモンでは、セルフ変数31番にコマンド選択中の主人公IDが格納されているわ。後で必要になるから覚えておいて。


というわけで、立ち絵を表示させる呼び出し用コモンを新規作成しましょう。
→コモン作成:名前「[戦]立ち絵表示」、起動条件「呼び出しのみ」


入力設定の1番には立ち絵の表示/消去を選択する項目を作成するわ。画像のように設定して頂戴。


2番は主人公IDを指定する項目よ。名前をつけて初期値に「1600031」を入力するだけでいいわ。

※「前述した呼び出し元コモンのセルフ変数31番から主人公IDを受け取る」という変数呼出し値ね。

これで入力設定はOK。


次にセルフ変数の設定だけど、画像のとおり名前を付けておいて頂戴。可変DBに追加した立ち絵関連の設定をDB読込するための変数ね。

これでセルフ変数の設定もOK。


それじゃイベントコマンドの記述に入りましょうか。まずは条件分岐。立ち絵の表示/消去を処理分けするための分岐を作成してね。
→■条件分岐(変数): 【1】 CSelf0[表示/消去] が 0 と同じ 【2】 CSelf0[表示/消去] が 1 と同じ
→◇分岐: 【1】 [ CSelf0[表示/消去] が 0 と同じ ]の場合↓
→◇分岐: 【2】 [ CSelf0[表示/消去] が 1 と同じ ]の場合↓
→◇分岐終了◇


分岐1は立ち絵を表示する処理よ。まずは可変DBから立ち絵関連の設定をDB読込するわ。
→■DB読込(可変): CSelf5[立ち絵File] = 可変DB[ 主人公ステータス : CSelf1[主人公ID] : 立ち絵 ] (0 : – : 60)
→■DB読込(可変): CSelf20[立ち絵X座標] = 可変DB[ 主人公ステータス : CSelf1[主人公ID] : 立ち絵座標X ] (0 : – : 61)
→■DB読込(可変): CSelf21[立ち絵Y座標] = 可変DB[ 主人公ステータス : CSelf1[主人公ID] : 立ち絵座標Y ] (0 : – : 62)
→■DB読込(可変): CSelf22[立ち絵拡大率] = 可変DB[ 主人公ステータス : CSelf1[主人公ID] : 立ち絵拡大率 ] (0 : – : 63) 


各DB読込の中身はこんな感じ。データ番号には主人公IDが格納されているセルフ変数1番を指定するのよ。


次にもう1つ条件分岐を作成。「DBに立ち絵画像が登録されて場合だけ表示」するための分岐よ
→■条件分岐(文字): 【1】 CSelf5[立ち絵File]が “” 以外
→-◇分岐: 【1】 [ CSelf5[立ち絵File] “” 以外 ]の場合↓
→ |■
→◇分岐終了◇


そしたら、分岐内に立ち絵を表示するピクチャ表示を入力
→■ピクチャ表示:10900 [中心]ファイル(CSelf5[立ち絵File]) X:CSelf20[立ち絵X座標] Y:CSelf21[立ち絵Y座標] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 CSelf22[立ち絵拡大率]% / カラー R[100] G[100] B[100]


ピクチャ表示の中身はこちら。セルフ変数とセルフ文字列にDB読み込みしたものを、変数呼び出し値を使って各項目に設定するのよ。ただしピクチャ番号は「10900」にして頂戴。

なぜ10900なのかというと、基本システムで使われているピクチャ番号との兼ね合いよ。


基本システムでは、戦闘画面の敵キャラはピクチャ番号10700~10800番台が使用されているの。

立ち絵が敵キャラで隠れちゃったらダメよね? ピクチャは番号が大きいものほど手前に表示されるから、敵キャラより大きい10900を指定したわけ。


話を戻して、最後に分岐2へ立ち絵を消去するピクチャ消去を作成
→■ピクチャ消去:10900 / 0(0)フレーム

これで戦闘画面用立ち絵コモンの作成は終了よ。後は前述したとおりこれを基本システムのコモン「X┃┣◆味方コマンド選択」から呼び出し実行すればいいわ。

基本システムのコモンから戦闘画面立ち絵コモンを呼び出す


まずは立ち絵を表示する処理だけど、呼び出す場所は128行目辺り。戦闘コマンドを万能ウィンドウで表示している処理があるから、その下にコモン呼び出しを追加してね。
→■イベントの挿入[名]: [“[戦]立ち絵表示”] <コモンEv 228> / 0:表示 / CSelf31[主人公ID]


処理内容には「表示」を選択主人公IDには初期値で設定されている1600031(主人公IDが格納されているセルフ変数31番)を指定してね。

次に立ち絵の消去だけど、これは2か所で呼び出す必要があるわ。立ち絵は「コマンド選択した場合」だけじゃなく「コマンド選択せずキャンセルした場合」の2タイミングで消去する必要があるからね。


まずはコマンドをキャンセルした場合だけど、173行目辺りにあるラベル地点「キャンセル」の直後で呼び出しするのよ。
→■イベントの挿入[名]: [“[戦]立ち絵表示”] <コモンEv 228> / 1:消去 / CSelf31[主人公ID]


そしてコマンド選択した場合はここ、231行目辺りのラベル地点「コマンド選択」の直後に記述してね。
→■イベントの挿入[名]: [“[戦]立ち絵表示”] <コモンEv 228> / 1:消去 / CSelf31[主人公ID]


立ち絵消去時のコモン呼び出しはこちら。どちらも処理内容に「消去」を選択して呼び出せばいいわ。

これで基本システムコモンの改造もOK! お疲れさまでした。

実は基本システムの使用ピクチャ番号も修正が必要

これで戦闘画面に立ち絵を表示させる改造は完了! と言いたいところだけど実はまだよ。理由はテストプレイで試してみたら分かるわ。


ノー! ステータス欄がウルファールさんに隠れて見えないわ! もちろんこれじゃダメね。

こうなっちゃった理由は、ステータス欄に使われているピクチャ番号が立ち絵より小さいからよ。


戦闘画面でステータス欄を表示しているコモンはこちら、178番「X[戦]味方欄_単体描画」よ。ピクチャ番号は10100~が使われているわね。

実はステータス欄に使われているピクチャ番号は10100~10200番台で、敵キャラの10700~10800番台よりも小さいのよ。

立ち絵は敵キャラに隠れないように10900番を使ったわよね? だからステータス欄隠れちゃったわけ。さてどうするか。


仕方ないので、ステータス欄用のピクチャ番号を変えてしまいましょう。ステータス欄に指定されているピクチャ番号を10100から11000に修正して頂戴。
→■変数操作: CSelf20[基本ピクチャ番号] = 11000 + 0


こちらがピクチャ番号修正後。立ち絵が敵キャラより前でステータス欄より後ろに表示されているわね。

※弊害としてステータス欄が敵キャラに被る可能性もあるけど、まぁよっぽど大きな敵画像を使わなければ大丈夫でしょう。

ということで戦闘画面での立ち絵表示はようやく完了よ。お疲れさまでした。

ちなみに、これを応用すれば「ピンチや状態異常時は別の立ち絵を表示する」みたいなこともできるわね。機会があればそういうのも解説しようかしら。