人生

やっていきましょう

ゲームのアイデアを思いついた。檻の中から鳥を上手く操って、監獄から脱出するというイベントだ。鳥と主人公は好きなタイミングで視点を交換することができ、キーを押せば再び同じ場所から探索できる。

初めは作る知能と技術が足りないから無理だと諦めていたが、調べていくうちに意外と実現は簡単だということに気がついた。

簡単に言えば、①キーによって視点移動が発動する仕組みを作る、②視点移動後、現在の視点でない方(主人公視点なら鳥、鳥視点なら主人公)のグラフィックを生成する、③主人公と鳥の位置情報を管理する変数を用意することで可能になる。

理屈はこうだ。キーを押すことで主人公の現在地情報を取得し、予め入力しておいた鳥の位置に主人公を瞬間移動させ主人公のグラフィックを鳥に変更。同時に、所定のイベントを主人公のグラフィックに変更し、取得した主人公の位置情報に基づき配置する。これで現在は鳥視点。主人公の位置には主人公の姿をしたイベントが配置される。

ここで再びキーを押すと、鳥の現在地情報を取得し、先ほど取得した主人公の位置に主人公が飛ぶ。主人公の姿は主人公に戻る。主人公の位置にいたイベントは鳥の現在地情報に基づき場所を移動、グラフィックを元の鳥に戻す。これで鳥と主人公が、あたかも入れ替わったように見せることができる。

理屈は分かったが、具体的にはどうするべきか。①についてはキーを入力した際に変数の代入を行う。変数=1が主人公視点、変数=2が鳥視点とする。イベント処理の最後には変更後の視点の変数を代入する(1ならば2、2ならば1)。

②は先程の変数を参考にして、変数が1の時には変わり身を鳥のグラフィック、変数が2の時には変わり身を主人公のグラフィックにする。

③については少々厄介だが、要は主人公と鳥の位置を管理する【マップID】【X座標,Y座標】が分かれば良かった。鳥のマップID、x,y座標の数値をイベント呼び出し値で求めて主人公を場所移動させれば、どこでも鳥がいる位置に飛ぶことができる。逆の場合も同様だ。

これらを作ってテストしたところ、問題なく機能した。しかしこの処理にはひとつだけ致命的な欠陥があった。それはこの処理が同一マップ上でしか機能しないということだ。

ウディタの仕様上、特定のマップイベントはマップを超えて配置することができない。主人公は鳥のいる場所ならマップを超えて自由に飛び回れるが、鳥の方は主人公とは異なるマップの所定の位置に留まり続けるということができない(おそらく、ウディタは主人公が存在するマップだけが存在し、マップ移動の度に情報を読み込んでいるのだろう)。

この問題については明日考える。課題は残ったが、今日はアイデアの原型が問題なく機能することが分かったので概ね満足している。