危険範囲表示機能を追加

危険範囲表示機能を追加しました。マップ上でLボタンを押すと敵の全射程を表示します。

当該機能は Lil’Manster から GlobalRangeDisplay.asm を移植したものです。移植に際し、以下の変更を入れています。

  • 64tass 向けのソースコードを Asar 用に書き直しました。
  • 射程の解釈の処理については、fe5_range.asm の処理を流用して再構築しました。(元の処理では、射程1と3のみといった隙間のある射程範囲を正しく処理できなかったため)
  • 危険範囲表示を終了する際に、危険範囲を表示する前に出ていた地形ウィンドウが一瞬だけ見えていたのを修正しました。
  • 他の敵ユニットがいるマスからの射程範囲の計算も行うように変更しました。
  • Lを押したときに敵がいなかった場合はNG音を鳴らすように変更しました。
  • 敵全員が武器を持っていないなど、表示すべき内容がないときも、敵がいない場合と同様に何もしないように変更しました。
  • A、X、R、スタート、セレクトのいずれかのボタンを押したときも、危険範囲表示を終了するように変更しました。
  • 進撃準備画面のマップ上でLボタンを押したときも危険範囲を表示するようにしました。
  • その他、不要な処理を削減したり、処理順を変更するなどして使用するマシンサイクルを減らしました。

できる限り処理速度を向上させるように処理を削りましたが、19章のようにマップが大きかったり、21章や24章のように敵が多くて射程も長いときはやはり処理に時間が掛かります。原作でもマージナイトがサンダストームを持っていると移動範囲を見るのに時間が掛かると思いますが、それを敵全員に対して行っているに等しいので、ある程度は仕方ないところです。

とはいえ、最長でも2~3秒程度で出力できるので、利便性を考えれば我慢できないことはない範囲に収まっているのではないかと思います。

描画処理に時間がかかる場合、画面全体の更新が停止するためフリーズしたかのように見えるのが不穏ですが、これは単に時間がかかっているだけであり、処理が重いという理由でフリーズすることはありません。

もし処理をさらに高速化できる方がいればご教示ください。

注意事項

FE5のユニットの移動範囲表示では、他のユニットがいるマスは移動不可の扱いで射程が描画されるため、敵フェイズで他の敵が動いたあとにそのマスへ移動してくることによって射程が伸びたように見えることがありました。

この危険範囲表示では、他の敵ユニットがいるマスからの射程範囲の計算も行うようにしました。これは「危険範囲表示を信用してユニットを配置したら攻撃が飛んできて死んだ」といった事故を防ぐための措置です。

また、ついでなので通常の移動範囲表示も敵とNPCは他のユニットがいるマスからの範囲を出すように変更しました。味方は従来通り、他のユニットがいるマスからの範囲は出しません。

再行動や踊り子によって表示範囲外から攻撃される可能性はまだ残っていますが、それはどうしようもないので諦めてください。

謝辞

前述の通り、当該機能は基礎部分を海外翻訳パッチ Lil’Manster より移植し、射程の解釈の処理を fe5_patch の fe5_range.asm から流用させていただきました。ありがとうございます。