ウディタで感情・状態アイコンを表示するコモンイベントを作成してみた

おすすめのゲーム素材

フリーのゲーム製作ソフト『WOLF RPGエディター』の初心者向けコモンイベント講座です。コモンイベントのコードをひとつひとつ解説していきます。

ぴぽや様で配布されている「感情・状態アイコン」をキャラの頭上に表示するコモンイベントを作成しました。ぴぽや様でもすでに配布されていますが、そちらを見ずに作成したバージョンとなります。

  • DBを使わない
  • 動きに追従する機能がない
  • プルダウンメニューからアイコンを選べる

という違いがあります。作り方・入力したコマンドについて、1から説明していきます。アイコンだけではなく、いろいろなものをキャラの周りに表示するときに使えます。参考にしていただければ幸いです。

感情・状態アイコン 表示コモンの作り方

空白のコモンイベントにタイトルを入力します。そしてコマンドを打ち込んでいきます。「何の関数だっけ?」とならないよう、コモンセルフには、逐一名前をつけていきましょう。

入力する関数の設定

コモンイベントを呼び出すとき、セルフ0~セルフ3を設定することができます。ここでは、こんな感じで設定していくことにします。

セルフ0:誰に

誰の頭上にアイコンを表示するかを選びます。‐3なら、全員(全消去)。‐2なら、呼び出し元のマップイベント。-1なら主人公。0以上なら、キャラクタピクチャorマップイベント。という風に割り振りました。

セルフ1:モード

表示、単体、消去の3つを設定しました。表示にした場合、消去するまで消えません。表示と消去はセットで使います。単体の場合、セルフ3で設定したウェイト分の時間が経ったら、自動的に消えます。

セルフ2:どれ?

表示するアイコンの種類です。コマンドリストから選べるようにしました。

セルフ3:ウェイト

表示する時間です。

▼0 初期設定

最初に、必要になりそうな数字を入れていきましょう。

■DB読込(ユーザ): CSelf11[開始ピクチャ番号] = ユーザDB[ピクチャ管理:感情・状態アイコン:開始ピクチャ番号]

開始ピクチャ番号に、他とかぶらない数字を代入します。私はユーザーデータベースで開始ピクチャ番号がかぶらないように管理しているため、このような形になっています。そうでなければ、「開始ピクチャ番号=2000」のように、数字をそのまま入れちゃって大丈夫です。

■文字列操作:CSelf9[画像パス] = "Picture/感情・状態アイコン.png"

ダウンロードした画像を「Data」のフォルダに入れて、そのアドレスを入力します。上の例だと、「Data」フォルダの中の「Picture」フォルダの中にある「感情・状態アイコン.png」という名前の画像を指定しています。

画像のアドレスをコモンイベントへ入れておくと、画像を使うときにいちいち指定しなくてもよくなり、便利です。

■変数操作: CSelf20[縦分割数] = 9 + 9
 ■変数操作: CSelf21[横分割数] = 30 + 0

画像の分割数を入れておきます。画像にアイコンが何個並んでいるか、を数えます。横に30個、縦に9個でしたので、この設定にします。

■変数操作: CSelf50[始パターン] = CSelf2[どれ] * 3
 ■変数操作: CSelf50[始パターン] += 1 + 0
 ■変数操作: CSelf51[終パターン] = CSelf50[始パターン] + 2

選んだアイコンをコモンセルフ2へ入れるように設定しておきましょう。

その上で、アイコンの「パターン」を取得します。

画像の一番左上にあるアイコンが「パターン1」、その右隣が「パターン2」……という数え方をします。一番上の段が終わったら、次の段へ、という数え方です。アイコンは同じものが3つ並んでいます。その1つ目のパターンと、3つ目のパターンを取得します。1つ目を「始パターン」、3つ目を「終パターン」と呼ぶことにします。

▼ -1 消去モード

■■条件分岐(変数): 【1】CSelf1[モード] が -1と同じ
-◇分岐: 【1】 [ CSelf1[モード] が -1と同じ ]の場合↓
|■条件分岐(変数): 【1】CSelf0[誰に] が -3と同じ
|-◇分岐: 【1】 [ CSelf0[誰に] が -3と同じ ]の場合↓
| |▼ -2.全員消去
| |■変数操作: CSelf10[現在ピクチャ番号] = CSelf11[開始ピクチャ番号] + 0
| |■変数操作: CSelf12[終了ピクチャ番号] = CSelf11[開始ピクチャ番号] + CSelf30[キャラ総数]
| |■
|-◇上記以外
| |▼ -1.指定キャラ消去
| |■変数操作: CSelf10[現在ピクチャ番号] = CSelf11[開始ピクチャ番号] + CSelf0[誰に]
| |■変数操作: CSelf12[終了ピクチャ番号] = CSelf11[開始ピクチャ番号] + CSelf0[誰に]
| |■
|◇分岐終了◇
|■イベントの挿入[名]: CSelf70[ウェイト] = ["ウェイト"] <コモンEv 14>  / CSelf3[フレーム数] / 1:取得
|■ピクチャ消去:CSelf10[現在ピクチャ番号] ~ CSelf12[終了ピクチャ番号]  / CSelf70[ウェイト](0)フレーム
|●ラベル「終わる」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
|■
◇分岐終了◇

セルフ1のモードで、「消去」を選んだ時の処理を入れておきます。

セルフ0の「誰に」が「全員」か「それ以外」で場合分け。「現在のピクチャ番号」と「終了ピクチャ番号」を割り出します。「現在ピクチャ番号」から「終了ピクチャ番号」までを、ウェイトをかけて消します。

『「ウェイト」コモン』のところは、ウェイトを計算しています。(高速表示モードのときはウェイトを0にするなどの処理を入れているため)。同様の処理のコモンを入れるか、もしくは消しておいてください。

ピクチャを消去したら、「終わる」ラベルで最後に飛んで終わります。「イベント処理を中断」でも一緒です。

▼ 1.表示の用意

■変数操作: CSelf10[現在ピクチャ番号] = CSelf11[開始ピクチャ番号] + CSelf0[誰に]

画像を表示する「現在ピクチャ番号」を設定します。ここでは、最初に設定した「開始ピクチャ番号」に、「誰に」の数字を足しています。

■条件分岐(変数): 【1】CSelf0[誰に] が -1と同じ
-◇分岐: 【1】 [ CSelf0[誰に] が -1と同じ ]の場合↓
|▼ ・表示XY座標を取得。
|■変数操作+: CSelf28[X座標] = 主人公 の 画面X座標
|■変数操作+: CSelf29[Y座標] = 主人公 の 画面Y座標
|▼ ・キャラからずらします
|■変数操作: CSelf28[X座標] += 0 + 0
|■変数操作: CSelf29[Y座標] -= 68 + 0
|●ラベル「設定完了」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
|■
◇分岐終了◇

セルフ0が‐1の場合は、主人公の頭上にアイコンを表示するモード。主人公のX座標とY座標を取得します。しかし、この座標に表示すると、主人公と重なってしまいます。そのため、足し算もしくは引き算をして、頭上へとずらしています。ここは調整してみてください。

ちなみに、「Y座標を-68」としていますが、画面サイズ800×600の場合です。640×480の場合は、もうちょっと小さい数値になるはずです。

▼ そのキャラが表示されているかどうかチェックします
■変数操作: CSelf40[キャラピク表示中?] = 0 + 0
■DB読込(ユーザ): CSelf41[ピクチャ番号一時取得] = ユーザDB[ピクチャ管理:キャラ表示操作 通常:開始ピクチャ番号]
■変数操作: CSelf13[キャラピク番号] = CSelf41[ピクチャ番号一時取得] + CSelf0[誰に]
■変数操作+: CSelf40[キャラピク表示中?] += ピクチャ:CSelf13[キャラピク番号] の ピクチャが使用中?(1=YES)
■DB読込(ユーザ): CSelf41[ピクチャ番号一時取得] = ユーザDB[ピクチャ管理:キャラ表示操作 特殊:開始ピクチャ番号]
■変数操作: CSelf13[キャラピク番号] = CSelf41[ピクチャ番号一時取得] + CSelf0[誰に]
■変数操作+: CSelf40[キャラピク表示中?] += ピクチャ:CSelf13[キャラピク番号] の ピクチャが使用中?(1=YES)

ここについては、ちょっと説明が必要かと思います。

私の場合、ピクチャでキャラクタを表示している場合があります。そのため、そのキャラを表示しているかどうか? を取得しています。

例えば……「コモンセルフ2:誰が?」で「3」を指定した場合。

  • ID3番のキャラクタをピクチャ表示していたら、そのピクチャの頭上にアイコンを表示
  • 表示していなかったら、ID3番のマップイベントの頭上にアイコンを表示

という風に表示しています。「コモンセルフ40:キャラピク表示中?」に1が入っているか0が入っているかによって条件分岐させています。

■条件分岐(変数): 【1】CSelf40[キャラピク表示中?] が 0と同じ
-◇分岐: 【1】 [ CSelf40[キャラピク表示中?] が 0と同じ ]の場合↓
|▼ X座標を取得します
|■変数操作: CSelf22[一時変数] = 9100000 + 0
|■変数操作: CSelf22[一時変数] += CSelf0[誰に] * 10
|■変数操作: CSelf28[X座標] = V[CSelf22[一時変数]] + 0
|▼ Y座標を取得します
|■変数操作: CSelf22[一時変数] = 9100000 + 1
|■変数操作: CSelf22[一時変数] += CSelf0[誰に] * 10
|■変数操作: CSelf29[Y座標] = V[CSelf22[一時変数]] + 0
|▼ ・マス目の分、ピクセルをかけます
|■変数操作: CSelf28[X座標] *= 40 + 0
|■変数操作: CSelf29[Y座標] *= 40 + 0
|▼ 画面スクロール量を取得します
|■変数操作: CSelf26[画面スクロール量X] = Sys104:Xスクロール値 + 0
|■変数操作: CSelf27[画面スクロール量Y] = Sys105:Yスクロール値 + 0
|▼ \cself[26]:\cself[27]
|▼ ・スクロール量を考慮します
|■変数操作: CSelf28[X座標] -= CSelf26[画面スクロール量X] + 0
|■変数操作: CSelf29[Y座標] -= CSelf27[画面スクロール量Y] + 0
|▼ ・キャラからずらします
|■変数操作: CSelf28[X座標] += 20 + 0
|■変数操作: CSelf29[Y座標] -= 28 + 0
|▼ \cself[28]:\cself[29]
|●ラベル「設定完了」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
|■
◇分岐終了◇

ピクチャを表示していない場合、指定したマップイベントの頭上にアイコンを表示します。

X、Y座標をそれぞれ取得。(3,4)という風なマス目で取得されますので、それに1マスのピクセル数を掛け算して、ピクセルに直しています。800×600ですので40をかけていますが、640×480の場合は、32を掛け算することになります。

9100000については、ウディタの「ヘルプ」→「変数呼び出し値一覧」を参照してみてください。マップイベントのX座標やY座標を呼び出す魔法の数字です。

また、画面にスクロールをかけている場合は、その分も計算に加える必要があるようです。ここはテストプレイをしていて判明しました。

必要な数値を入れられたら、「設定完了」のラベルへと飛びます。

▼ ・キャラの座標を取得しておきます
■イベントの挿入[名]: ["キャラ表示操作"] <コモンEv 141>  / CSelf0[誰に] / -2:座標取得 / 0 / 0 /  /  /  /
▼ ・表示XY座標を取得。
■DB読込(可変): CSelf28[X座標] = 可変DB[キャラ ステータス:CSelf0[誰に]:現在のX座標]
■DB読込(可変): CSelf29[Y座標] = 可変DB[キャラ ステータス:CSelf0[誰に]:現在のY座標]
▼ ・キャラからずらします
■変数操作: CSelf28[X座標] += 0 + 0
■変数操作: CSelf29[Y座標] -= 38 + 0

こちらは、ピクチャでキャラを表示している場合の設定です。X座標とY座標を取得した上で、ちょっぴりずらしています。

・ラベル地点「設定完了」 <<<<<<<<<<<<<<<<<<<<<<<<★

「設定完了」のラベルを設置します。

▼ 1.表示

 ▼ 表示します


■ピクチャ表示:CSelf10[現在ピクチャ番号] [中心]ファイル(CSelf9[画像パス]) X:CSelf28[X座標] Y:CSelf29[Y座標] / 0(0)フレーム  / パターン CSelf50[始パターン] / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]

ここまで設定してきた「ピクチャ番号」「画像パス」「X、Y座標」「パターン」などを元に、ピクチャを表示します。

▼ アニメーションさせます

■ピクチャエフェクト:CSelf10[現在ピクチャ番号] [自動パターン切替(往復)] 開始パターン[CSelf50[始パターン]] ←→ 終了パターン[CSelf51[終パターン]]  間隔(40)フレーム

表示したピクチャにエフェクトをかけます。間隔のところのフレーム数を変えると、パターン切り替わりの速さが変わります。パッパッと変えたいなら20~30。ゆっくりなら60くらいでしょうか。調整してみてください。

■条件分岐(変数): 【1】CSelf1[モード] が 0と同じ
-◇分岐: 【1】 [ CSelf1[モード] が 0と同じ ]の場合↓
|■ピクチャ消去:CSelf10[現在ピクチャ番号]  / 10(CSelf3[フレーム数])フレーム
|■
◇分岐終了◇

「コモンセルフ1:モード」が「0:単体」の場合は、「コモンセルフ3:ウェイト」で設定したフレーム数をかけて、アイコンを消します。

●ラベル地点「終わる」 <<<<<<<<<<<<<<<<<<<<<<<<★

「終わる」ラベルを設置しておきます。これで完成です!

まとめ

感情・状態アイコンを頭上に表示するコモンイベントをご紹介しました。

いかがでしたでしょうか? このアイコンを使うことで、誰が話しているかわかりやすくなります。感情移入もしやすくなります。手軽にできていい感じの演出ができます。

感情・状態アイコン表示コモン(Spread Root)

↑ここで作ったコモンイベントはこちらにあります。ZIPファイルになっています。もしよろしければご参考にどうぞ。なお、編集せずそのまま使えるようにはなっていませんので、改造してみてください。

感情・状態アイコン 追加セット(ぴぽや様)

↑使わせていただいたアイコン画像の素材はこちらです。アイコンの他にもクオリティが高い素材を無料で配布しておられます。

↑ぴぽや様のアイコン素材集。格安でハイクオリティです。

それでは、よいウディタライフを!

コメント