>>310
>>304の、16進2桁で、ワープ+8方向から来た場合を
9つ並べる表記なら可能。その例なら、

上/下から来た場合:左&右(40+04=44)に移動可能
左/右から来た場合:上&下(01+10=11)に移動可能
ワープしてきた場合:上下左右(01+10+40+04=55)に移動可能

と表現できる。「来た方向」をテンキー表記で並べれば

01_02_03_04_05_06_07_08_09(テンキーの方向)
00_44_00_11_55_11_00_44_00(用意するデータ)

になる。ビット表記なら時計回りにデータが並ぶ。
アンダーバーは区切りにしただけで、実際は
18文字の16進数がマスの移動データになる。ここ
から2文字ずつ抜いていくことで移動方向を決める
ことができ、「二次元+8方向&ワープ」で
マップが表現されている限り、この表記で対応
できるはず。

上下左右:55だけを設定しておき、移動制限用の
関数でつぶす(=来た方向+進行方向のビットを
消す)方法もある。データが短くて済むが、関数を
個別に設定するのが面倒だし、マップデータから
方向を抜いてくる方が処理しやすかったりする。