人生

やっていきましょう

526日目

ワールドマップ(外部マップ)において判定が1マスしかない街に主人公が入る際、その侵入方向によって内部マップの出現場所を変更する、ということが今までできなかった。

例えば次のようなマップがあるとして、□が移動可能なマス、■が移動不可能なマス、◇が街のマスである場合、1段目の側から◇に向けて入るのと、3段目の側から◇に向けて入るのとでは結果を差別化することができなかった。

□ □ □ □ □

■ ■ ◇ ■ ■

□ □ □ □ □ 

もし◇が2マスであれば、左側のマスに入れば内部マップの左側、右側のマスなら右側というようなことができ、4マスなら上下にそれが可能になるが、1マスの場合はどの方向から入っても結局は同じマスを踏むことになるので、踏んだ瞬間の当たり判定でイベントが発生する仕様ではどうしても差別化することができなかった。

しかし今日その解決策を偶然見出した。これまで外部マップのイベントにのみ頼ってきたが、内部マップにおいて出口のイベントを実行する際、場所移動と同時に変数の操作を行えばいいというだけのことだった。

例えば内部マップにおいて、主人公は◇を経由して、一段目から三段目の方向に向かうとする。主人公が◇に触れた際、主人公が内部マップに移動するコマンドが発動する。内部マップには上方向の出口と下方向の出口があり、上方向の出口に触れた際には外部マップの一段目、下方向の出口に触れた際は三段目に場所移動するイベントが発生する。

経過としては、外部マップの一段目→内部マップの上方向の出口→内部マップ→内部マップの下方向の出口→外部マップの三段目というようなルートを辿る。

このとき、主人公が外部マップの◇に触れた瞬間、予め用意しておいた専用の変数について条件づけを行い、もし変数が0の場合は、内部マップの上方向の出口に移動し、変数が1の場合は内部マップの下方向の出口に移動する、というイベントを設定する。

更に内部マップの上方向の出口に、場所移動のイベントに加えて専用の変数に0を代入、下方向の出口に変数1を代入するというコマンドを付け加える。

そうすることで、三段目に出た際には変数が1代入された状態なので、三段目から◇に入った場合は下方向の出口に飛び、一段目に出た際には変数は元の0となるので、出た後に再び一段目から入っても上方向の出口に飛ぶことになる。

今回は通行不可能なマスを入れて上下にのみ対応したが、このやり方を応用すれば1マスの◇に対して上下左右の対応が可能になるかもしれない。だが今回は、初めに入る入り口が固定されていたからうまく成功したといえる。そうでない場合は条件づけが更に複雑になり、おそらく自分の実力では設定が不可能であるように思う。

しかし入口を固定すれば解決できる、ということが分かったのはかなりの進歩だといえる。このやり方を生かして様々な問題を解決できたらと思う。

(ごく僅かに既視感がある。もしかすると自分は以前同じ問題を取り組み、それを解決したのかもしれない。過去の記憶がはっきりしないのは恐ろしい。自分ら既視感と記憶の区別がついていないのだ)