【ウディタ】NPCのマップ配置

マップEvのグラフィック変更機能について調べている時に、おもしろいものを発見しました。

  カフェテリアシステム
主人公がそのマップに移動する度に、マップ内に存在するキャラがランダムに変わるというもの


これを応用して、ゲームに登場するキャラクター達の居場所を、ある程度ランダム性を持たせて設定・管理できるのではないか?


エヴァ2とかエヴァ序みたいに、プレイヤーは目的のキャラクターがどこにいるのかを探す必要性が出てくるのでおもしろいかも。

基本的な仕組み

マップ内にキャラクター(マップEv)を用意

まず普通にキャラクターとしてマップEvを配置。

各マップに存在するキャラクターを管理


ここの項目をフラグとして、「0」なら存在しない、「1」なら存在するとします。

キャラクターとマップEvの紐づけを登録


ここでは可変DBを使用してますが、これはユーザーDBで良かったかな

キャラクター存在情報を元に存在しないマップEvは消去

マップに移動した時に、キャラ存在管理DBを元に存在しないキャラクター(マップEv)は一時消去

このため、キャラグラはもちろん接触範囲、移動可不可など、マップEvごとの設定は予め設定の必要あり。

場所移動+コモン

ただし、マップ移動直後にこの方法でマップEvの一時消去を実行すると、本来そのマップにいないはずのキャラが一瞬画面に映ってしまうんです。
(画面が明るくなってから一時消去が実行されるため)

なので、

[画面を暗くする]

[場所移動]

[NPC配置処理]

[画面を明るくする]

という処理の流れにする必要があります。


とはいえ移動する度に毎回この処理を書くのは面倒なので、場所移動機能を拡張したようなコモンEv[場所移動+]を作成して、マップ移動前と移動後にやってほしい処理をここに集約しました。


マップ移動前にやってほしい機能としては、マップEvのセルフ変数を初期化表示中のフキダシを消去など。

ついでにマップ移動後の明転有り無し主人公向き指定などをモード選択式で実行できるようにしておきました。

指定キャラのランダム配置


敵AI行動パターンの応用で、各キャラクターがランダム/条件付きで各マップに配置、キャラ存在管理DBに記録されるようにしました。

キャラ配置指定

一方で、使徒襲来時などの特殊状況下では、確率によらず事前に登録された配置が呼ばれるようにしたい。

という事でキャラ配置の指定もできるようになってます。

キャラ存在確認


NPCの個室など、一部の部屋は主人公が勝手に入ってはいけない気がするので、こんな機能も作ってみたり。


移動先に誰もいない場合


移動先に誰かいる場合


キャラ配置場所探索

特定のアイテムを持っていれば、NPCがどのマップにいるのか探せる、なんてのもおもしろそう。


その他の機能、派生

特定のマップEvからキャラクターを特定したり、指定キャラ/指定マップ以外を再配置など。
模擬戦をやったら受付のマヤ以外のキャラは再配置、とかも良さそう。