スターソルジャー (FC) 解析資料

Published on: 2021-06-11
Updated on: 2021-06-16

方向計算

敵および敵弾の移動方向は、向き 16 通り、スピード 4 通りの計 64 通り。
方向は 6bit 値で表され、下位 4bit が向き、上位 2bit がスピードとなる。

敵と敵弾では各方向に対応する変位が異なる。敵は左下図のように粗い動きに、敵弾は右下図のように細かい動きになっている:
(敵弾の方は一部重複がある(0x210x31 など))

object-direction bullet-direction

敵弾に関しては、通常のプレイではスピード 0 しか目にすることはない。弾高速化フラグを持つ敵はテュラのみだが、テュラは普通にプレイするとかなり早めに出現し、ランク上昇条件を満たさないため。
敵弾スピードの理論上の最大値は 2 と思われる。ルイドを利用して遅回しを行い、最初のテュラx2を9面以降で出現させてからわざと死んでテーブルを戻すことでこれを実現できる(movie)。

2点間の向きの計算

自機狙い弾などは2点間の向きを近似計算することで実現されている。
この近似計算は以下の不等式を利用している:

グラフにすると左下図のようになり、画面が 16 個の領域に分割されていることがわかる。
ゲーム上では 8bit 演算のみで処理するために値を丸めているので、右下図のようになる。

aim-graph aim

自機に近づく方向転換

ある方向(ここでは mod 16 で考える。以下同様)に移動しているオブジェクトがあるとする。
このオブジェクトが自機に近づくように移動方向を +1 または -1 することを考える。

これは、((移動方向)-(自機への方向)) mod 16 が 8 より大きければ +1, 8 より小さければ -1 とすればよい(ちょうど 8 の場合は適当に決める)。

ルイドの移動はこのようなコードで実装されている。