【ウディタ】ゲームオーバーイベントの作成(所持金半分&最終セーブ位置へ戻る)

レビニアなのよ。今回の解説はゲームオーバーイベントの作成よ。


サンプルゲームではゲームオーバーになってもメッセージが流れて続行できるけど、これをちゃんとしたゲームオーバーイベントにしようというわけ。

ちなみに作成するゲームオーバーの内容はこんな感じにするわ↓。一言でいえばドラクエ方式ね。

  • 画面暗転
  • ゲームオーバーのメッセージ表示
  • 現在の所持金は半分没収
  • 最後にセーブした場所へ戻る

ゲームオーバー用マップを作成する


まずはゲームオーバーイベント用のマップを作成するわ。全滅時にここへ飛ばすの。


暗転中に移動するだけのマップだから、名前以外の設定はしなくて大丈夫よ。

わざわざゲームオーバーイベント用のマップを作るのは、その方が何かと便利だからよ。何もない専用マップに飛ばしてしまった方が、BGMの切り替えや画面エフェクトなんかを調整するのが楽なの。

最終セーブ位置記録用の通常(予備)変数を作る


次はシステムDBの通常(予備)変数に、最後にセーブした位置を記憶するための変数を作成するわ。今回は予備変数の空き(V1-4~6)に作成するわね
→予備変数4:最終セーブMAPID
→予備変数5:最終セーブ座標X
→予備変数6:最終セーブ座標Y

ちなみに通常(予備)変数を使うのが好みでなければ可変DBでもOKよ。「パーティー情報」の空きデータIDに作成するといいわ。

コモン改造:セーブ時にマップIDと座標を記憶する

次は作成した予備変数へセーブ時に位置情報を記憶するよう、基本システムのコモンを改造するわ。


改造するコモンは「131:X┣[移]セーブ欄実行」よ。空きIDにコピペして改造しましょうね。


改造するのはここ。66行目あたりにセーブデータを書込んでいる部分があるから、ここに変数操作+で位置情報を取得するコマンドを追加するのよ。
→■変数操作+: V1-4[最終セーブMAPID] = 現在のマップID
→■変数操作+: V1-5[最終セーブ座標X] = 主人公 の X座標(標準)
→■変数操作+: V1-6[最終セーブ座標Y] = 主人公 の Y座標(標準)

ゲームオーバーイベント用のコモンを作成する


次はゲームオーバー時に呼び出すコモンを作成するわ。今回は元からあるサンプルゲーム用のゲームオーバーイベントを直接修正するけど、新規に作成してもいいわよ。
→「213:ゲームオーバーイベント」のイベントコマンドを全て削除


セルフ変数を1つだけ使うわ。所持金を半分にするときの計算用よ。


まずは画面演出から。BGMを止めたり画面を暗くしたりパーティ画像を消したりするわ。
→■サウンド:BGM 停止 / 処理時間:0フレーム
→■色調変更: R0 G0 B0 / 60フレーム
→■ウェイト:60 フレーム
→■パーティ画像:パーティ全員を透明にする


作成してあるゲームオーバー用のマップへ場所移動
→■場所移動:主人公 ▲マップID6[ゲームオーバーマップ] X:0 Y:0 [トランジションなし]


所持金を半分没収! 可変DB「パーティー情報」に格納されている所持金をセルフ変数に代入して、それを半分にして戻してやるのよ。
→■DB読込(可変): CSelf10[所持金] = 可変DB[ パーティー情報 : メイン設定 : 所持金 ] (6 : 0 : 0)
→■変数操作: CSelf10[所持金] /= 2 + 0
→■可変DB書込:DB[ パーティー情報 : メイン設定 : 所持金 ] (6 : 0 : 0) = CSelf10[所持金]


※追記:よく考えてみたら、別にセルフ変数を使わなくても可変DBの値を直接2で割ればいい話よね……。ごめんなさいこのように入力して頂戴。
→■可変DB書込:DB[ パーティー情報 : メイン設定 : 所持金 ] (6 : 0 : 0) /= 2


メッセージを表示してゲームオーバーという現実を突きつける言葉を表示するわ。演出はお好みで変更・追加してね(ゲームオーバー用の画像を用意してピクチャ表示したりとか)
→■文章:ゲームオーバー! 所持金を半分にして\n最後にセーブした場所へもどります。


あとは最終セーブ位置へ移動させればいいわね。まずは暗転とパーティ透明化を解除するわ。あとついでにパーティを全回復させておきましょう。
→■イベントの挿入[名]: [“○回復・ダメージ処理”] <コモンEv 4> / 7:完全回復 / -1:パーティ全員 / 30
→■色調変更: R100 G100 B100 / 60フレーム
→■パーティ画像:パーティ全員の透明を解除する


※回復させておかないと、ユーザーDBで戦闘不能の扱いを「[0]戦闘不能のまま」にしている場合に、HP0のゾンビ状態になってしまうわ。


ついでにパーティ画像を正面向きにしておきましょう。細かいことだけどまぁ一応ね。
→■動作指定:主人公 / 下向


ちなみにパーティ画像の向きを変えるコマンドは「イベント制御」の中ある「■キャラ動作指定」よ。


対象を「主人公」にして、中央の方向転換コマンドを入力すればいいわ。


最後に場所移動コマンドを入力。暗転解除が終わるまでは動けないようにウェイトも入れているわ。
→■場所移動:主人公 ▲マップIDXX<V1-4[最終セーブMAPID]> X:V1-5[最終セーブ座標X] Y:V1-6[最終セーブ座標Y] [トランジションなし]
■ウェイト:60 フレーム


場所移動コマンドに変数呼び出し値を指定すれば、予備変数の値を直接指定することができるのよ。

※もし可変DBを使っているなら、変数呼び出し値は11AABBBBCC( 可変DB タイプA/データB/項目C)になるわ。詳細はウディタのヘルプメニューを見てね。


あとはゲームオーバー時に実行されるコモンイベントをユーザーDBから指定してやればOKよ。今回は元々使われていたコモンを修正したからそのままだけど、新規に作成したならそちらに指定し直しておいて頂戴。
→ユーザーDB17:システム設定の「[戦闘]ゲームオーバー時のEv」に、作成したゲームオーバー用コモンイベントを指定する。

ゲーム開始時の位置情報を記憶する

これで準備は完了! といいたいところだけどこのままじゃ×よ。

なぜならゲーム開始して一度もセーブしなかった場合の対処がされていないわ。セーブ時に位置を記録するということは、セーブをまったくしなければ記録されないということだからね。

※ちなみに最終セーブ位置を可変DBに格納する場合なら、初期値でゲーム開始時の位置を指定してやることも可能よ。

どうすればいいかというと、ゲーム開始時に実行されるタイトルマップのイベントを修正すればいいわ。


スタートして最初のマップへ場所移動した直後に、位置情報を記憶するコマンドを入力しておいてね。

ゲームオーバーイベントを試してみる

それじゃ試してみましょう。戦闘で全滅してゲームオーバーイベントを呼び出してみるわね。


まずは適当な場所でセーブするわ。


セーブを実行。お金は100000ゴールド所持しているわ。


そしたらゴブリン達と戦って全滅するわ。


画面暗転してメッセージ表示。ゲームオーバーイベントが実行されたわね。


最後にセーブした場所へ移動


仕上げにお金が半分没収されていれば成功。うまくいっているようね。


ゲーム開始時からまったくセーブしていない状態での全滅も試してみるわね。ゲーム開始位置はここ↑よ。


再度ゴブリンさん達に虐めていただいて全滅。すると、


ゲームオーバーイベント後、ゲーム開始位置に移動したわ。


お金も半分になっているわ。一度もセーブしていない場合の対処も大丈夫ね。

ゲームオーバーイベントの作成解説はこれで以上よ。お疲れさまでした。

ちなみに全滅してもその場で再戦させるような作り方もあるけど、それだとイベント戦闘やボス戦での対処が面倒になるから、慣れるまでは止めた方がいいと思うわ。