続続続続続続続続 XLATE65
さて、最後の砦となる敵の車と背景の当り判定がないという超致命的な不具合をどうするか・・・・
敵の挙動は
・こちらが押しくら饅頭した時に、壁にぶつかると死亡
・ただし、自分から壁にぶつかってった場合は、ビリヤードの玉のように跳ね返る。
こういうのは、大抵アルゴリズムから追い始めると、いつまでたっても判明しない場合が多いので、経験から、それに付随する画面描画部分や音発生部分に当りを付けて解析するのが良い。今回は「敵が死ぬときの効果音の発生箇所」を切り口に解析することにした。
まず、敵が死亡すると、ある特定の爆発音の識別番号がサウンドCPUにラッチされるので、そこをソートする。該当箇所は1箇所。ビンゴ!そこの箇所をスタックの内容を頼りに、逆へと読み解いていくと、フラグの相互関係がおぼろげながら見えてくる。しかし、それらはあくまで意味不明の数値の入れ替えの連続でしかないので、今の時点では正直ピンとこない。そこで「急がば回れ」で、解析方法の方向転換を考えた。
まず、敵が死亡する条件は、
「弾き返して壁にぶつけた場合」と「ジャンプして踏みつけた場合」
の2つが存在するが、背景との当たり判定とは直接関係のない「ジャンプして踏みつけた場合」を追うことにした。なぜなら、それで「敵管理ワークの生死フラグ」を確定できると思ったから。
結果としてはオーライだった。敵の統合管理ルーチンで、背景が海かどうかを識別して、海の場合は敵車に特別な挙動をさせるルーチンに遭遇。そこを糸口に一機に追い詰める。
やっぱり、単純ミス・・・
キャリーの条件判別に失敗していた・・・
はい!完成!しかも、例のデモ時の挙動がおかしいのも同時に治った!でも、ネームエントリーの時のキートリガーがおかしい・・・
来週はサウンドCPU編です。お楽しみに!(笑)