このゲームは内部にフレームカウンタを持っており、メインループ内の処理は奇 数フレームと偶数フレームで異なる。毎フレーム処理される要素は:
奇数フレームのみで処理される要素は:
偶数フレームのみで処理される要素は:
フレームカウンタをスキップさせる方法はおそらく存在しない(これができれば縁 石で減速しないようにするなどのことが可能そうなのだが)。
$2E, $30 の2つの乱数(ともに16bitで、生成アルゴリズムは同じ)が使われる。乱 数生成器はシフトレジスタの一種で、周期は65534。値 0x5555, 0xAAAA は出現しな い。なお、ポーズ中は乱数が変化しなくなるので、乱数シーケンスをスキップするこ とはできないと思われる。
コースクリア時も乱数はリセットされない。
乱数シミュレータを作成した(いくつかの乱数依存の値 も出力する)。
416km/h を超えるとターボ発動。
200km/h以上の場合、横移動すると速度が0.250km/h減少する。
基本的に速度が増すにつれて加速が悪くなるので、横移動が必要な場合は早めに 行った方が最終的な速度は上。ただし一時的に走行距離で不利になるので、どちらを 選ぶかはケースバイケース。
コーナーで上限速度を超えている場合、イン/アウトどちらにも曲がれない。上限 速度はカーブ値によって3段階あり、ゲームレベルにも依存する。
コーナー手前でイン側の縁石に大きくはみ出すのは基本的に損(ただし、これによ り減速なしでコーナーを抜けられるならば別。また、敵車の関係でやむをえない場合 もある)。
実際のレースと異なり、コーナーのイン/アウトどちらを走っても所要時間は同じ (速度その他の条件が同じならば)。
クラッシュ中や時間が切れた後でもゴールできる。
上下同時押しでギアをローにしつつ左へハンドルを切る。上左同時押しでギアを ローにしつつ右へハンドルを切る。
走行距離8ごとにコース区間が更新される。また、1周し終えた時点で走行距離は 一旦0にリセットされる。よって、周回を終える際は多少走行距離に差があっても帳 消しになってしまうことがある。また、走行距離を調整することでコーナー内にいる 時間を少し短くしたりすることもできる。
ゴールした瞬間に敵車が画面内に残っていると、敵車が消えるまで画面が切り替 わらないため、実時間ではロスになることがある。
ギアLOWの状態でクラッシュするとほぼ瞬時に速度が0になる。
スタートシグナルが表示される前の灰色画面で1Fだけ入力を受け付けるフレーム がある(「フライングフレーム」と呼称する)。ここでアクセルを押して速度を 2km/h にした上で、RPMを最大(120)にしてスタートするのが最速。なお、キュルキュル言っ ている間はアクセルを押しても押さなくても同じ。また、200km/h未満ならば横移動 しても速度が落ちないので、x座標調整はなるべくスタート直後に済ませるのが望ま しい。
走行距離は偶数フレームにおける速度から計算されるので、コーナリング時など はなるべく偶数フレームで速度が大きくなるようにすると速い。また、偶数フレーム では縁石判定が行われないので、コーナーの入口で一瞬だけインの縁石側にはみ出す こともできる。
奇数フレームにおける速度は走行距離には関係しないが、x座標や敵車のz座標に は影響する。
コーナーを抜ける際は減速が必要になるが、基本的になるべく一気に減速する方 が速い。ブレーキだけでなく、ギア操作やスリップも活用するとかなりの急減速が可 能。また、アウト側いっぱいに膨らんでから戻す場合、縁石も減速に使えることがあ る。
速度288km/h以上304km/h未満の区間は妙に加速が良い(これはバグのような気もす る)ため、加速中に304km/hを少し超えるような場合はわざと304km/h手前まで減速し てやると結果的に速くなることがある。
敵車は乱数1($30)が特定の値になったときに出現する。乱数をスキップさせる方 法は存在しないようなので、敵車を出さないということはできない。なお、z座標が 0x3000未満の敵車が存在する間は乱数1は変化せず、新たな敵車は生成されない。z座 標が0x3000未満の敵車が存在しない場合、敵車の空きスロットの数だけ乱数1が回る。
敵車の車線変更は $98-$9A に依存する。LV3の場合、これらの値のbit6が立って いると左へ、さもなくば右へ移動する。この値は対応する敵車のz座標が0x8000未満 である間インクリメントされ続ける。
なるべく邪魔にならないように敵車の車線を調整する必要がある。速度調整によっ てある程度は $98-$9A を直接制御できるが、これだけではうまくいかないことが多 い。しかし、乱数1の変化量を調整する(敵車のz座標が0x3000以上になるフレーム、 または敵車が画面外に出るフレームをずらす)ことで、間接的に $98-$9A を制御でき る(乱数1の変化量が変わると次に出てくる敵車の番号が変化するため)。
起動後5F目にスタートを押すとタイトル画面を飛ばしてレベル1が開始する。また、 起動後4F目にスタートを押すとポーズがかかり、10F目前後で解除するとタイトル画 面がバグる。
md6502オプションファイル、およびソースコー ドにコメントを付けるdiff差分を作成した。使用法 は以下の通り(md6502-mod およびUnix 的環境が必要):
# 事前にPRG-ROMを切り出しておくこと $ md6502-mod F1Race-PRG.bin F1Race.asm @F1Race.conf $ patch F1Race.asm < F1Race.diff
なお、オプションファイルはFCEUXで採取した CDLログを元に作成した。
F1Race-info.lua で画面上に各種情報を表示:
F1Race-log.lua でムービーから一連の内部データ(速度、走行距離など)をファイ ルに書き出す。以前のムービーとの厳密な比較を行いたい場合などに。