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

2013年11月18日(月) 21:21

ATARI判定

 dsync しない通常のTAS製作であれば、毎回展開が同一なのでその展開でのみ破綻しないパターンでプレイを行なえば良い。しかし完全自動プレイでは、どんな展開にも対応できねばならない。スマートボムが爆発に近接して軌道を変えるような状況を絶対に作らないアルゴリズムを考えるのは無理があり過ぎる。それに、軌道を急変させたスマートボムを迎撃してこそTAS動画として映えるってものだ。
 そのためには、ミサイルの動きを正確にシミュレートして未来弾道を予知せねばならない。

 普通のTASでは実際のゲーム画面を進行させて確認し、駄目だったらステートロードし直して、やり直している。
 実際のゲーム画面の代わりに、lua でエミュレートしたゲームを進行させる訳だ。まるでミサイルコマンドを
lua で完全移植するかのような行為だが、全部をエニュレートする必要はない。
 とはいえ、迎撃ミサイル飛行中に別のミサイルが誘爆し、その爆煙でスマートボムが軌道を変えるというケースも多発するだろう。よって、全ミサイルの当たり判定を行なわねばならない。

 さて実際のところ、当たり判定は正確なところどうなっているのだろうか?

 調べて行くと、面白いことが判明した。

 これはゲームオーバーの画面だが、爆発が広がって行く。それが円形ではなく、明らかに8角形である。実は通常の爆発煙も、8角形をしている。8ビットの足し算と引き算しか出来ないCPUで、円を描画するというのは大変な重労働である。そこで、工夫して擬似的に円を描いている。
 現在ならGPUに下請けさせるだけだから、30年前は異世界過ぎる。

 半径10ドット程度の小さな円であれば、角の取れた8角形は充分普通に円に見える。

 まず中心座標との距離を、X座標Y座標それぞれにおいて算出する。
 座標差のうち小さい方を8分の3倍し、大きい方と足し合わせる。それを、中心座標との距離とみなす。実際にはもちろん、座標差をそれぞれ2乗して加算し、平方根を取る。だが、当時のCPUでは掛け算や平方根は、足し算や引き算に比べて100倍ぐらいの実行時間を要するのだ。

 割り算でも2進数だから、2で割ったり4で割ったりするのは速い。
 2で割って元の数と加算すると、1.5倍になる。それを4で割れば8分の3だ。途中で剰余は切り捨てられるから、現代のスクリプトで実数演算すると結果がズレる。地道に8ビット整数演算をなぞらねばならない。
 この擬似的な中心座標との距離が、爆煙半径以下であれば、命中としている。ただし、スマートボムでは距離が+2でも命中。爆撃機では、距離が+5でも命中。今風の言い方をすれば、通常ミサイルの当たり判定は1ドットで、スマートボムの当たり判定は5ドットで、爆撃機の当たり判定は11ドットということだ。

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