メカザウルス判定問題について



目次



概要

 ロックマン6にはメカザウルスというボスがいます。

 このボスは、目の付近に攻撃を当てることでダメージを与えることが出来ます。
 しかし、攻撃を当てたにも関わらず、攻撃が弾かれる音がしてダメージを与えられないことが時々あります。特に、弱点武器であるヤマトスピアが異様に当てづらいという経験をした方は多いと思います。

 本ページでは、この判定問題についての調査結果について記載しています。



発生原因

 結論から書くと、顔と首の判定のうち顔だけに武器が当たると弾かれず、顔と首の両方に同時に当たると弾かれるようです。

 メカザウルスの当たり判定は下図のような構成になっています。
 (判定表示にはぷれさべー氏による「FCロックマン便利Luaスクリプト」を使用しています)

 この内、重要なのは顔面付近です。
 攻撃の当たる目付近の判定と、攻撃を弾く首から頭にかけての判定が交差する形になっています。
 口から鼻先付近にも四角が表示されていますが、これは口のアニメーション表示用のオブジェクトであり、当たり判定を持ちません。

 ここに真左から攻撃することを考えます。
 下図のように武器が顔部分にのみ当たっていると、問題なく攻撃が当たります。
 (図では武器を円形で示していますが、実際の判定は矩形です)

 対して、下図のように首にも当たるような位置に武器が移動してしまうと、弾かれてしまいます。
 なお、通常では弾かれた武器が斜め上に飛んでいきますが、この現象が起きた時の特徴的な挙動として、斜め上には飛ばずにその場で消えます。当たったのに弾かれるという印象は、この挙動によるものでしょう。

 では、このNGケースはどういう場合に起きるかについて解説します。
 顔と首の当たり判定の左端は4ピクセル離れています。4ピクセルしか離れていません。

 この4ピクセルを飛び越える速度の武器ならば、顔を越えて首にも同時に到達する場合があります。つまりX方向速度が4.00より大きい武器です。
 これに該当する武器は2つあり、チャージショット(速度5.00)とヤマトスピア(速度6.00)です。通常ロックバスターや半端チャージは該当しません。
 つまり、このボス戦で使われることが多いであろう武器が弾かれやすいわけです。特にヤマトスピアは弱点なので深刻です。

 ヤマトスピアで検証を行ったところ、X座標が92か93を通る場合に弾かれ、94~97を通る場合は弾かれませんでした。これを1つ前のフレームで考えると、8Cと8Dを通る場合に弾かれ、8E~91を通る場合に弾かれないとなります。同様に計算していけば、弾かれる座標と弾かれない座標で分けることが出来ます。
 つまり、弾かれるかどうかは射出位置に依存することになります。
 上記の通り、ヤマトスピアは6ピクセル中2ピクセルは弾かれることになります。弱点武器を使うとかえって当てづらいという印象に合致します。
 同様に考えると、チャージショットは5ピクセル中1ピクセル弾かれます。割合的にはヤマトスピアよりはマシと言えます。

 さて、ここまでは真左から当てる場合を考えてきましたが、顔と首に同時に当たるという条件を満たす方法は他にもあります。
 下図のように左下から斜めに当てると、X方向速度が4.00以下であっても弾かれてしまう可能性があります。

 ブリザードアタック、ナイトクラッシャー、シルバートマホークでこれが起きることを確認しています。変な縛りプレイでもなければ、使うことはあまりないと考えられるので、問題になることは少ないと思いますが。
 原理的にはウインドストームやフレイムブラストも上から落とせば起こせそうですが、現実的ではないため確認していません。
 余談になりますが、プラントバリアは首に当たっても弾かれないため、そもそもこの現象が発生しません。ケンタウロスフラッシュは衝突判定自体が行われないため、やはりこの現象は発生しません。それ以前に、ケンタウロスフラッシュはメカザウルスに対して無効です。
 なお、問題になりやすいヤマトスピアも残りエネルギーの偶数奇数に応じて上下にも移動するため、斜めに入ったという原因から弾かれてしまう可能性があります。こちらについては検証を行っていません。



原理

 ここからは更に突っ込んだ内容となります。
 さて、では何故顔と首に同時に当たると弾かれてしまうのでしょうか?
 それは衝突判定の処理順が影響しています。

 武器が他のオブジェクトと衝突したかどうかの判定処理は、毎フレーム実行されます。この処理は、オブジェクトスロット番号の降順に行われます。衝突したと判定されると、衝突したオブジェクトの属性に応じた処理が行われ、これが終わると次のスロット番号との衝突判定が行われます。
 メカザウルスの顔部分はスロット番号08、首はスロット番号0Aであり、顔よりも先に首の衝突判定が行われるわけです。

 OKケースでは、衝突しているオブジェクトが顔だけです。顔との衝突判定が行われると、顔はダメージを与えられる属性なので、顔に対して武器が持つ属性に応じてダメージを与えます。
 ここでいう武器が持つ属性というのは、どの武器であるかという識別番号とオブジェクトに与えるダメージ量を表したものです。例えばヤマトスピアの場合、識別番号が5で与えるダメージが2のため、この2つを併せて52という攻撃属性を持っています。

 NGケースではスロット番号が後ろである首との衝突判定が先に行われます。首は武器を弾く属性であり、武器は弾かれたという扱いになり、武器の属性がリセットされます。具体的には、属性が00に設定され、識別番号もダメージ量も持たない状態になります。
 こうして武器の属性がリセットされてしまった状態で、顔との衝突判定が行われます。既に武器の属性が00になっている、自分のことを武器だと思いこんでいるハリボテです。当然ながら、ダメージは与えられません。これにより、当たったのに弾かれているという現象が発生することになります。
 また、ロックマン6では、「衝突したオブジェクトの残りライフ<武器が与えるダメージ」となる場合、衝突したオブジェクトを貫通するという扱いになります。逆に「残りライフ≧武器が与えるダメージ」となる場合は、武器はその場で消えます。武器が与えるダメージは既に0になっているため、貫通せずその場で消えることになります。これにより、弾かれているのに斜めに飛んでいかないという挙動となります。
 なお、武器の属性が00になっている場合、通常は衝突判定自体が行われなくなります。しかし、衝突判定が行われ始めると、途中で属性が00になってもそのフレームでは最後まで判定が行われることになります。自分のことを武器だと思いこんでいる状態は、属性が00になったそのフレーム限定です。



解決法

 ここは一応改造関連のWebサイトですので、改造における解決法についても書いていこうと思います。
 判定の調整、衝突判定周りの修正という2つのアプローチを考えます。

判定の調整

 問題が発生する主に原因は顔と首の判定の近さですので、この判定幅に余裕を持たせます。Shadow Game(Ver.1.10)及びWonder Lawでは、この方法を用いています。
 上記改造作品で実際に調整した判定が以下のようなものになります。

 ご覧の通り、首の判定を右に寄せています。具体的には本来の位置から8ピクセル離れています。元々の判定幅が4ピクセルですので、合計12ピクセルの余裕があります。X方向速度が12.00を超えるものは無いため、真横からの攻撃では発生し得ない状態になります。
 斜めからの攻撃では依然として発生する可能性が残りますが、ストレスに感じるようなケースはかなり減るのではないかと思います。

 修正方法は首のX座標設定を変更するだけです。
 大型ボスは複数のオブジェクトをまとめて生成するためのデータセットがあり、その中の首のデータはバンク$39の$9403~$9408で、その中の$9404がX座標です。
 詳細は以下の表を参照してください。ROM上のアドレスはヘッダ込みです。

バンクアドレスROM上の
アドレス
設定値意味
$39$9403$73413E1生成するオブジェクトのID
$9404$73414A0X座標(low)
$9405$734159FY座標(low)
$9406$734164D当たり判定番号
$9407$7341786属性
$9408$7341850アニメーション設定番号

 要は同時に当たりづらくなればいいので、代わりにY座標を変更するというような方法も考えられると思います。

 根本的な対処法ではありませんが、他への影響の無いリスクの少ない修正方法の割に、得られる効果は大きいと思います。特にこだわりがないなら、この対処方法で問題ないと考えます。

衝突判定周りの修正

 根本的な処理の修正です。
 実際に修正を行った試作パッチを用意していますので、置いておきます
 一通りプレイして問題が修正されていること、それ以外のところに別の問題が発生していないことは確認していますが、見つからなかっただけの可能性はあります。

 以下に修正方針について記しますが、具体的な修正方法については同梱テキストを参照してください。
 問題の原因は、顔の処理が実行される前に属性が00にリセットされてしまうことです。そこで、弾かれる際には「弾かれたというフラグ」だけを立てておき、実際に属性を00にするのは、衝突判定が一通り終わった後に変更します。
 弾かれたというフラグはHPを管理するメモリ領域を使用しています。武器ではこの領域は使用されていないことを前提としていますので、改造作品でここを使用する場合は、プログラムをそれに合わせて変更する必要があります。

 この方法は根本的な原因修正であるため、斜めからについても対応できること、他でも同様の問題が発生してしまう可能性を潰せるという利点があります。しかし、影響範囲も大きく、別の問題が発生する可能性もあるため、リスクは大きいと言えます。


 ここでは2つのアプローチから問題解決を試み、それぞれに効果があることを確認しました。改造作品の方針によって、対応方法を検討するのが良いかと思います。



まとめ

 これいる?
 本家ロックマン6をプレイする際には、チャージショットやヤマトスピアを射出する位置に気をつけましょう。
 改造ロックマンの作者の方は、発生しづらくなるような調整を検討しましょう。




戻る