自機狙い弾の秘密

Boreasでの敵弾の種類には、単発の自機狙い弾、乱れ弾幕、回転弾幕、自機狙い弾の塊
があります。
さて、敵キャラの弾は、ボスや砲撃艦の弾幕を除いて、基本的に自機を狙ってきます。
自機狙いというと、射出方向を決めなくてはなりません。
普通ならAtan系の計算をして角度を求めたり、X,Yの差分を距離(平方根計算が必要)で
割って移動量とするなどですが、Boreasは2.61ショートなのでそこまでできません。
実は、Boreasの通常の自機狙い弾は次のような方法で生成しています。
1、敵キャラの移動処理で、128以上の適度に大きい範囲から乱数値を得る
2、128未満なら、敵キャラ寿命を加算して撃つ方向とし、敵弾(寿命511フレ)を新規登録。
3、敵弾移動処理で寿命を1減じ、510なら、自機を向いていなければ強制消滅。
先に撃つ方向を決めて生成してから「条件に合わなければ無かったことにする」という、
姑息な方法を使っています。
なお、キャラクターの移動方向は、敵弾も含めて角度情報で扱っています。
そのため、一周128分割のSin,Cosテーブルを自前の再帰展開で準備しています。
X,Yの移動量の基礎となる値は、Sin,Cosテーブルから角度をもとにして求めます。
自機を向いているかは簡易的なベクトル計算で判別可能なため、パフォーマンス面も安心。
(ここで使用している判別式の特性上、自機から遠くで撃つほど正確な狙いの敵弾になりますが
生き残る率は小さくなり、逆に自機に近いと狙いの甘い敵弾も多く生き残ります。)
そして、敵弾寿命を510以下から始めれば自機を狙っていなくても敵弾は消えません。
そうすると乱れ弾幕になります。
射出方向は先にも書いたように、乱数+敵キャラ寿命で方向を決めてます。
乱れ弾幕では、加算した敵キャラ寿命の影響は、乱数によって見えなくなります。
回転弾幕は、乱数の幅1(常に0が返る)でやるので、寿命の値だけで方向が決まります。
ロジックを共有してバイト数節約です。
ボスは登場と退場で上下にしか移動しませんが、内部的な向きは自機を追尾しています。
これを利用して、ボスの寿命カウントをある値で割った余りが一定値以下ならボス自身の
方向値と小幅な乱数を使って弾を生成するようにして「自機狙い弾の塊」を実現しています。
実は、V2.25への改修中にホーミング弾も実装したのですが、やたら高難易度なので取止め。
しかし、ロジック自体は誘導機雷などでも折込済みで、使わないのはもったいないので
いろいろ吟味した結果 X-エレメント(小)として残すことになりました。