魔石の移動

うすあじ賞の副賞が届いていました。
ワインの広告とかと一緒になっていて気付けなかったら捨てられたところ。危ない危ない。


さて、本題。Temples Trickの魔石移動、移動開始と破壊の制御について。


魔石は障害物に当たるまで同じ方向に動きます。
これは、魔石オブジェクトが持つ移動カウンターが1→0に変化するタイミング(1マス分の移動の終わり)にて自身の移動方向に移動継続できるか判断、移動可能なら次のマスを目的地として再度移動を始めるということで実現しています。
プレイヤーが魔石を押したときに必要な処理にもここをうまく使い、スリム化を行っています。


プレイヤーが魔石を押したときの見た目の動作は、押されたオブジェクトが魔石の場合に、その魔石の向こうのマスが空きであれば魔石が動き出し、押した魔石が赤魔石で移動方向に障害物が接しており赤ポーション残数ありだと、赤ポーションを消費してその魔石を破壊、といった感じです。
このような動作をプログラムする場合、押した方向の隣接マスのオブジェクトを判別して、オブジェクトの向こう側のマスの確認を行い、条件に適した処理(移動・破壊)に振り分ける、のような手法が定番です。


Temples Trickではこの方法はとらず、マップから対象のオブジェクトIDを拾い、該当のオブジェクト管理テーブルに対して、先の移動継続判断に必要な情報だけ代入して、あとは魔石オブジェクトの処理にまかせるということをしています。
具体的には、移動カウンターに1、赤Pフラグに移動要求時の赤ポーション残数、移動量にプレイヤーの向きに相当する1マス分移動量をに与えておしまい。
このとき、マップから拾ったオブジェクトIDが何のオブジェクトの物なのかはチェックせず、壁(ID=128)だろうが、空間(ID=0)だろうが構わず情報を代入していますが、魔石オブジェクトだけが意味を持つ値なので、問題はありません。
あとは魔石オブジェクト側の制御で移動継続の判断が行われますので、移動可能であれば与えられた移動量をもとに勝手に移動開始となります。
移動できない場合には、自身が赤魔石かつ赤Pフラグに値があるなら、赤ポーション残数を減らし、破壊開始させます。
(赤Pフラグは移動・破壊にかかわらずオブジェクトの情報からクリアします)
要求してダメだったらなかったことにする系のサイズ削減手法です。