3Dダンジョンロールプレイングゲーム 第46回目です。
さて、今回はマップ移動時発生イベントを組んでいきます。
何それ?と、思われるかもしれませんが、前回組んだイベントの中で、「宝箱」や「ゲート」等に関して「移動後座標って何?」と思われた方もいるのではないでしょうか?
イベント名 | 初期座標 | 移動後座標 | タイプ | |
1 | ゲート | (14,1) | (0,0) | 接触 |
2 | 宝箱 | (0,0) | (1,1) | 接触 |
3 | 宿屋 | (20,16) | 接触 | |
4 | 武器屋 | (20,18) | 接触 | |
5 | 道具屋 | (20,17) | 接触 | |
6 | 武器屋案内 | (19,18) | (0,0) | 設置 |
7 | 道具屋案内 | (19,17) | (0,0) | 設置 |
8 | 宿屋案内 | (19,16) | (0,0) | 設置 |
9 | ボス戦闘 | (19,9) | 接触 |
「宝箱」は初期座標が通路に面していない壁の中(0、0)ですので接触できません。
また、「ゲート」はイベント終了後そこに存在すると先に進めません。
「案内」イベントは、毎回表示すると煩いので初回通過時のみとします。
そこで、フラグ値に応じてイベントを移動させる必要があります。
実際のイベントを使って説明します。
ゲートがあって進めません。
鍵を使ってゲートをあけます。
本来なら、これでゲートは開いているはずので通過できるはずなのですが、現状だとイベントがそのまま残っていますので、進もうとすると…
進めません。
そこで、フラグ値に応じてイベントを消す必要があるのです。
イベントを消すには絶対に触れられない場所(今作だと座標(0,0))に移動させれば良いです。
このルーチンはマップを移動した際(イベント位置が初期座標にある)、そのマップ内のイベントを毎回フラグ値に応じて移動させる(移動後座標に配置換え)必要があるので、マップ移動時発生イベントと私は呼んでいます。
複雑なイベントを組むのなら、これも別ファイルでスクリプト化した方が便利です。
例えば学校探索系のロールプレイングゲームで、教室のドアが複数あるなど。
今作は5つなので、直プログラムします。
これで、敵がいない状態で最後のボス戦まで進むことが出来るようになりました。
次回は、システムメニューを組んでいきます。