サブルーチンHITCHKには実はバグが存在していました。
それはすべてのタスクに対して当たり判定をしていたからです。
今回はたまたま他のタスクが使われていなかったので誤動作は生じていません。
そこで安全なサブルーチンに修正します。
まず、ここで使用しているタスクについて記述しておくと
タスクは全部で20個あります。
先頭は0番で最後が19番です。
0番は現在未使用ですが、本来はゲームタスクが使います。
このサンプル2では使用しません。
1番はプレイヤタスクが使います。
2番から8番まではエネミタスクが使用します。
9番から11番まではターゲットタスクが使用します。
残りの12番から19番までは現在使用していませんが今後使用します。
当たり判定をしたいタスクにだけ当たり判定する最も簡単な方法は
フラグを応用する事です。
というより、そのためにフラグ修理について説明していたわけですから
当然の事ですよね。
ここでフラグについての仕様は下記の通りです。
SF(TN)のフラグn番 → フラグ名
0 → プレイヤ識別
1 → エネミ識別
2 → ターゲット識別
7 → 当たり判定フラグ
それでは修正コードです。
実際にあたり判定をしているサブルーチンHITCHKでフラグ7番の当たり判定フラグを確認します。
当たり判定の必要が無ければ判定せずに次のタスクへ進みます。
次のIF文で当たり判定する相手かどうかを判断します。
変数FLAGに当たりを行いたい相手の識別ビッチを1にしたものを入れてHITCHKを読みだします。
これはフラグ処理におけるフラグ判定です。
今までのHITCHKは全てに当たり判定していましたが
当たり判定フラグが1であり、識別ビットが1のタスクに当たり判定します。
サブルーチンSETOBJでは新たに当たり判定フラグを1にし
そして自分が何者なのかを識別するビットの設定が必要になります。
SETOBJを呼ぶ前に変数FLAGに識別ビットを設定します。
識別ビットが0の時は当たり判定する必要がないことを意味します。
プレイヤタスクでは当たり判定のフラグをセットし
またプレイヤ識別のビットもセットする必要があります。
初期化のところで変数FLAGに自分に識別のために&B001を代入しています。
要するにフラグ変数SFの0ビット目のフラグが1の時プレイヤであるという事です。
そして判定を行っている部分でも変数FLAGに当たり判定の識別ビットを代入します。
&B001はプレイヤでした。
プレイヤがプレイヤに当たり判定をする必要はありませんね。
&B010はエネミタスクです。
当然当たり判定が必要です。
&B100はタ0ゲットタスクです。
これも当たり判定が必要です。
&B010 ←エネミ識別
&B100 ←ターゲット識別
OR ←両方ともにだからORですね。
&B110 ←その結果これがエネミとターゲット両方に当たりを行うための判定ビットになります。
最後のIF文は以前の修正で記載していなかったものなので
ついでに変更しておいてください。
エネミタスクも識別フラグを設定します。
ターゲットタスクも識別フラグを設定します。





