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

2012年7月22日(日) 22:28

座標差オーバーフロー

 音速突破は誰にでも出来る。
 2000キロ以上出すのは、それほど難しくない。
 だが、3000キロ以上はどうしても出ない。かなり確率は低いと思われる。

 人力記録を破るには、生半可な試行錯誤では無理。どうしてもluaスクリプトの助けを借りる必要がある。ところが、luaにより入力できるキー操作は、デジタルだけなのだ。アナログハンドルを入力できない。
 レースゲームをデジタルハンドル操作するのは論外であり、手動によるアシストはやってられない。やるなら、lua任せになる。
 確かにlua任せにしてしまえば、正確さは申し分ない。壁走りも、非常に安定して行なえる。だが、成功し過ぎるが故の問題点が発覚。

 ウィリーしなくても壁加速の横走りだけで、演算オーバーフローしてしまうのだ。

 クルマの座標は符号付き4バイトで管理されている。表示が切り替わると、この座標も更新される。更新量が32767を超えると、オーバーフローして「差がマイナス」になってしまう。突然クルマが逆方向に移動するのだ。

 オーバーフローは時速600キロ以上にならないと発生しない。しかし、超加速中はスピード表示がアテにならず、遙かに低い指示数でも実際の移動速度は速い。
 直線部分の壁加速中に逆走しても、すぐ芝生の摩擦で減速して順方向に復活できる。だが、曲線部で逆走すると、一気にコースアウトしてしまう。

 姿勢が崩れて超加速状態ではなくなると、スピードメーターにも真の速度が表示されるようになる。だが、芝生に突っ込んだのではプレイはこれまでだ。

 最高速チャレンジの場合、直線部で逆走しても実害はない。しかし、曲線部での逆走は防止せねばならない。適切なフレーム数だけアクセルを抜いて、移動量がオーバーフローしないよう調整する。
 これが、タイムアタックになると遙かに厄介である。逆走すればゴールインが遅くなるため、いかなる場合もオーバーフローしないよう調整せねばならない。オーバーフローしそうになったら、しないギリギリまで速度を落とさねばならない。
 ひたすら壁加速をキープすれば良いって単純なTAS製作ではなくなってしまう。遙かに面倒臭い。

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