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

2016年9月27日(火) 21:29

直進するだけの簡単な仕事

 ダッシュプレートに乗ってしまえば、後はホームストレートを突っ走るだけ。走行ラインが少々異なっても、1周目23秒79は確定だ。マスタークラスならソニックスタートが速くなるから、これより短縮される。

 純粋に理屈で考えれば、ダッシュプレートに乗った位置からホームストレート終端の右端へと、ゆっくり斜め走行するのが最短である。しかし、F-ZERO
は非力な16ビット機で動作しており、走行角度の分解能が低い。微妙な走行角度の差が表現できない。
 だから人力では、ダッシュプレートとホームストレート終端の右端を直線で結んだ走行を行うのは無理だ。

 TASならば、自動運転スクリプトを使用して直線に近い走行が可能。
 現実には、そうやって直進しても、折れ線走行しても、タイムに有意差が出ない可能性が高い。しかし、動画を見る側からすると違う。人力では非現実的な頻繁なハンドル操作により小さな角度の斜め走行を行うというのは、人外を感じさせる効果がある。

 だが実際にスクリプトを動かすと、直線上を走ってくれない。角度が小さ過ぎて、ハンドル操作を変えても計算結果が同一になり、期待した判定結果にならないようだ。
 試走フレーム数を増やしたりあれこれ試すが駄目で、結局は目標座標を逃げ水にして解決。試走終了位置より少しだけ先の位置に目標座標を定め、走るたびに目標座標を少しずつ先に進める。目標座標は、ダッシュプレートとホームストレート終端の右端を結ぶ直線上のみに設定する。

 試走終了位置と目標座標が接近していれば、ハンドル操作による微小な位置の差が判定結果に現れ易くなる。こうして期待通りに、左右の小刻みなハンドル操作で小さな角度で直進する走行が実現。

 S-JET 噴射は、ダートの直前で行う。
 S-JET は極めて複雑であり、当然に別スクリプトで処理する。そこで、ダート直前でスクリプトを打ち切る。だが、どうやっても右ガードビームに突っ込むことになってしまう。
 調べると、試走時に S-JET を噴射させるタイミングが1フレーム早い。これを正確にダート直前まで待たねば、次のスクリプトが機能しない。

 ダートに突入したという判定は、減速の発生により可能である。しかし、ガードビームに突っ込んだ場合にも、減速が発生する。両者を区別するのが意外に厄介で、S-JET 噴射を手抜きして座標判定にしていたのだ。
 頑張って本来の判定で機能するようにスクリプトを修正する。面倒くさい。こういう細部がどれだけ面倒くさいかは、やってみなければ分からない。
 2点間を直進するだけの簡単な仕事に見えた今回のスクリプトは、大作業だった。

 ちなみになぜ S-JET 噴射が1フレーム違うだけで破滅するかと言えば、S-JET 噴射中は横風に流されないからである。実際には絶対に右ガードビームに突っ込むしかない初期状態なのに、S-JET を現実より1フレーム早く噴射してしまうと、1フレーム手前から横風が効かなくなって右ガードビームに突っ込まずに済む。
 それで大丈夫だと判定され、使い物にならない解が出て来る。

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