Darkside(リンクエラー修正しました)

2013年11月19日(火) 21:00

移動ベクトル

 スマートボムの座標変化を追うと、爆煙回避時は特殊な移動アルゴリズムを使っているとして、通常の移動に復帰する際には移動ベクトルの再計算を行なっているようだ。となると、正確な未来予測には速度ベクトルの計算方法を解明せねばならない。迎撃ミサイルより遥かにパターンが多いし操作もできないから、実際に撃たせてテーブル化というのは非現実的である。
 移動ベクトルが格納されている領域は早期に見つかったのに、そこをアクセスしているコードがなかなか発見できない。

 発見したコードは、擬似円の描画方法が流用されていた。同一速度で向きが変われば円を描くのだから、考えてみれば当然だ。
 これにより、迎撃ミサイルの速度にバラツキがある謎も判明した。円を8角形で近似するのだから、上下左右と斜め45度が長くなりその中間が短くなる。

 迎撃ミサイルの実射 → 移動ベクトル生値保存 → 所要フレーム数計算

と、わざわざ2段階に分けてフレーム数テーブルを作成したのが役に立つ。実際のMAME動作で取得した移動ベクトルの生値と、逆アセンブルから解明して組み立てた移動ベクトルの計算式。両者が一致するかどうか、全数検査してみる。
 すると、大量の不一致が発覚した。

 例の、対角線領域である。
 実射では画面を対角に横切るように長距離射撃を行なうと、移動ベクトルが異様に大きくなった。ところが、逆アセンブルを元に組み立てた自前の計算だと、移動ベクトルは大きくならない。

 ただ、それ以外は完全一致したので、無視していいだろう。
 まず、迎撃ミサイル実射の時にも書いた通り、この異常値の領域は事実上利用されない。スマートボムがこの領域で計算外の動きをしたとしても、関係ないだろう。万一これで計算がズレるようなら、その時に考えればいい。
 更に、実射時のデータ取得エラーの可能性がある。迎撃ミサイルは一度に8発しか画面に存在できない。そのため、スクリプトで連射しまくるとキャラクターオーバーで発射漏れが発生しかねない。というかいろいろ障害が発生したので、8発発射ごとにステートロードするようにしていたのだ。

 移動ベクトルの採取をするのに、dsync など気にする必要はない。

 その結果として、画面上部には常に敵ミサイルが並んでいる状態。当然ながら誘爆も発生する。そういうのがベクトル採取に影響しているかもしれない。これは実射時から気になっていたが、問題なくデータが取れたので追求しなかった。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4