1 ポイント 投稿者 GN⁺ 2025-12-16 | 1件のコメント | WhatsAppで共有
  • NES版 Top Gun の空母着艦システムをリバースエンジニアリングで解析し、正確な着艦判定条件を公開
  • 着艦成功には 高度 100〜299速度 238〜337空母正面への照準 が必要
  • ゲーム内 MFD の「Alt. 200 / Speed 288」表示は、実際には 許容範囲の中央値 を示している
  • 速度と高度は BCD(2進化10進数) 形式でメモリに保存され、特定アドレスで判定関数が実行される
  • 古いゲームの 精密な内部ロジックを解読した事例 として、レトロゲーム分析やデバッグ学習に有用

着艦判定の基本条件

  • 着艦成功には 高度 100〜299速度 238〜337、そして 空母へ向いた正確な方位 が必要
    • これら3つの条件はすべて着艦シーケンス終了時点で検査される
  • ゲーム画面の「Alt. 200 / Speed 288」表示は、実際の許容範囲の中央値であり、プレイヤーが目標にするのに適した数値
  • 高度と速度は スロットル入力とピッチ角 で調整され、方位は別個の表示がなく、「Right! Right!」警告によってのみフィードバックされる

メモリ構造と内部変数

  • 主なメモリアドレスと保存内容
    • $40–$41: 速度(BSD形式)、許容範囲 238–337
    • $3D–$3E: 高度(BSD形式)、許容範囲 100–299
    • $FD: 方位(Heading)、-32 〜 +32 の範囲中 0–7 で着艦可能
    • $9E: 着艦判定結果を保存、値が 0 なら成功
  • 速度と高度は BCD(Binary Coded Decimal) で保存され、画面表示が単純化されている
    • 例: 1234 は 0x1234(10進数 4660) の形で保存される

着艦判定ルーチン

  • $B6EA アドレスの関数が着艦状態を検査し、その結果を $9E に記録する
  • ルーチンは高度・速度・方位を順番に比較し、条件を外れるとそれぞれ異なるコード値を返す
    • 例: 高すぎる、または速すぎる場合はコード 8、低すぎる、または遅すぎる場合はコード 4
  • すべての条件を満たすと LDX #00 に設定され、成功として処理される

デバッグとチートコード

  • Game Genie コード AEPETA を使うと、常に着艦成功と判定される
  • このコードは実際の判定ルーチンを迂回し、結果を強制的に成功状態として記録する

結論

  • NES版 Top Gun の着艦システムは、単純な操作ではなく 正確な数値ベースの判定ロジック で構成されている
  • リバースエンジニアリングによって レトロゲームの内部メモリ構造と条件分岐の仕組み を明確に確認できる
  • 古典的ゲームの設計精度を示す事例として、ゲームロジック分析と復元研究 において高い参考価値がある

1件のコメント

 
GN⁺ 2025-12-16
Hacker Newsのコメント
  • 飛行機を正しく着艦させるための情報はすべてマニュアルに載っていた
    必要な速度と高度は秘密でも何でもなかったが、たいていの子どもはマニュアルを読んでいなかった
    このゲームが本当に難しかったのは、半分リアルな物理エンジンのせいだった。飛行学校に通っていた兄が簡単に着艦して、そのやり方を自分にも教えてくれた
    速度と高度はスロットルとピッチ角で調整しなければならず、単にエンジンやエアブレーキのボタンを押すだけではだめだった
    兄が教えてくれたコツは、急降下中は速度が落ちないので、機首を少し上げてエアブレーキを開き、速度を落としてから水平を合わせることだった。ゲームはこれをかなり正確にモデル化していた

    • たいていの子どもがマニュアルを読んでいなかったって? 自分は新しいゲームを買うと、車で家に帰る間にマニュアルを何度も読んでいた。Toys“R”Usで買ったゲームなら、家に着くまでに12回は読んでいたかもしれない
    • 着艦時の格言は「スロットルで高度を、ピッチで速度を制御せよ」だ。たいていの人は逆をやる
    • 自分もマニュアルは持っていたし、子どもの頃はマニュアルを読むのが本当に好きだった。でも空母への着艦は人生で最も難しいゲーム体験の一つだった。成功率は1%くらいで、成功と失敗の違いがまるで分からなかった
    • 情報はマニュアルだけでなく画面にも表示されていた。ただし許容範囲が抜けていた。高度±100、速度±50くらいの余裕があると分かっていれば、ずっと助けになったはずだ
    • 友人から借りたりレンタルした場合はマニュアルがなかった。結局どうやって着艦方法を見つけたのかは覚えていないが、着艦の指示がむしろ紛らわしかったのは確かだ
  • このブログはアーカイブをたどりにくい作りになっている
    他の記事へのリンクがなく、この投稿以外にはアクセス手段がない
    blag/postsblagは403エラーで、ルートページには山の写真が1枚あるだけだ
    RSSフィードもない。不満というわけではなく、意図したデザインなら尊重する

    • Google検索結果によると、索引されているのはこの記事と山の写真のページの2つだけだ。おそらくサイト最初の投稿なのだろう
    • 会社のネットワーク(ZScaler)ではこのサイトが武器/爆弾カテゴリに分類されてブロックされている。そのリンクは開けなかった
  • 空母への着艦は難しくなかったが、空中給油は本当にきつかった。成功したのは数回だけだった
    ゲーム映像

    • 給油シーンのBGMが最高だったのに、リンク先の動画には入っていないな。別バージョンなんだろうか? このバージョンにはある
    • リンクをクリックした瞬間に思い出が押し寄せてきて、タブを閉じた。空母への着艦も腹立たしかったが、給油は別次元だった。友だちの家で一晩中NESを遊びながらピザを食べていた頃を思い出した
    • 給油するとミサイルまで補充されるのが実に便利なシステムだった
    • しかし給油機の速度が時速1,400マイルとは、ほとんどマッハ2だ!
    • 自分もそうだった :) でもこういう挑戦を何度も繰り返すのが楽しかった
  • 「This business will get out of control…」という名台詞を思い出す

    • この12年間、その台詞を数え切れないほど使ってきた。YouTubeクリップ
  • このゲームはAngry Video Game Nerdの動画でも取り上げられていた
    関連動画

    • 続編ではAVGNが着艦を試みる場面が出てくる。ほとんど解体レベルのテクニックだ
      YouTubeリンク
  • 自分はTop Gunはやっていなかったが、SNESのTurn and Burn: No Fly Zoneはよく遊んでいた
    世代が変わるたびにグラフィックがどれほど進化したか、今見ても驚かされる

    • 世代間のグラフィック差では、Super Mario 64(N64)Resident Evil 4(GameCube) の違いが最大だと思う
      NES→SNESの移行も同じくらいだった。PS1→PS2→PS3と進むにつれて3D時代が定着し、変化はだんだん漸進的になっていった
  • Top Gunの着艦が難しいと言われるが、Captain Skyhawkの衛星ドッキングのほうがはるかに難しい
    RAREのデモシーン風エフェクトが炸裂する中でドッキングしなければならない

    • 秘訣は一つだけ、ドッキングのときは上下移動しかしないことだ
  • 比較用に、Pythonで書いた着艦判定コードの例を共有する
    高度、速度、方位に応じて TOO_SLOW_OR_TOO_LOW、TOO_FAST_OR_TOO_HIGH などを返す

    • 本当にこんな感じだったのかもしれないな。どのLLMで生成したコードなのか気になる
    • ただし、そのコードだと右に寄りすぎた場合でも TOO_SLOW_OR_TOO_LOW を返してしまう。元の逆アセンブルではtoo_far_rightにジャンプしている
  • こういうシミュレーター遊びが大好きだ
    X‑Planeでは737を空母に着艦させることすらできる。燃料を30分分だけ積み、フラップを最大まで下ろし、着艦直前に駐車ブレーキをかければいい

    • 実際に可能かもしれない。米海軍はC‑130をUSS Forrestalに着艦させたことがある
      もちろん737は公式の数値ではもっと長い滑走路が必要だが、空母が風に向かって航行すれば40ノット以上の向かい風を得られる
  • 子どもの頃にこのゲームを遊んだが、空母に着艦できたことは一度もなかった。それは兄たちの役目だった

    • 自分も同じだった。ゲームは本当に好きだったが、着艦ではいつも墜落していた
      ある日、放課後の学童で友だちがこのゲームの着艦がうまいと聞いて、共同作戦を立てた
      自分が戦闘を担当し、彼が着艦を担当して、一緒にTop GunとThe Second Missionを数時間でクリアした
      チートもGame Genieも使わず、友だちと一緒にクリアした数少ないNESゲームの一つとして、今でも良い思い出として残っている