1 ポイント 投稿者 GN⁺ 4 시간 전 | 1件のコメント | WhatsAppで共有
  • 1989年のゲーム F-15 Strike Eagle II の元バイナリをリバースエンジニアリングしてCソースコードを再構築するプロジェクトが、実際のプレイテスト段階に入った
  • egameend を含むすべての実行ファイルのコードとデータをCへ移し、アセンブリ専用コードの大半には Cによる代替実装 が用意された
  • 最新リリース v0.9.1 は、元のゲーム 451.03 バージョンと Desert Storm 拡張パック で元の実行ファイルを置き換えてテストできる
  • 新しい実行ファイルは設定画面を経由せず、MCGA/VGA、無音、ジョイスティックなしの状態を前提とするが、ミッションブリーフィング・飛行・デブリーフィングは動作するはず
  • 目標は元作と同じバグまで保持する bug-for-bug 再構築 であるため、元作にも存在する挙動は現時点ではバグレポートの対象外

C再構築プロジェクトの進捗状況

  • F-15 Strike Eagle II の再構築は、元バイナリをリバースエンジニアリングして1989年のゲームのCソースコードを作り直す趣味プロジェクト
  • 1か月少し前までは、2つ目の実行ファイル egame をCへ移すだけでもさらに数年かかりそうに見え、3つ目の実行ファイル end も残っていた
  • 現在は次の段階まで進んでいる
    • すべての実行ファイルの Cコード再構築 が完了
    • すべてのデータをアセンブリからCへ移行
    • アセンブリ専用コードの大半に、機能的に等価なCによる代替実装を作成
    • 大半のルーチンとデータ構造に意味のある名前を付与
    • 近いうちに移植プロジェクト向けのリポジトリ分岐を検討
  • 再構築した opcode が元作に忠実かどうかはツールで確認しているが、データレイアウト に関するバグまですべてを捕捉できるわけではない
  • いまや opcode 一致の確認を超えて、実際に動作するゲームを維持しなければならないため、外部テストが必要になった

テスト方法と報告してほしい問題

  • テスト対象は最新リリース v0.9.1
  • 元のゲーム 451.03 バージョンと Desert Storm 拡張パックがあるゲームフォルダに新しい実行ファイルを入れ、元の実行ファイルを置き換えればよい
    • 置き換え前に バックアップ が必要
    • 新しい f15.exe の代わりに元の f15.com が実行されないよう、元の f15.com を削除する必要があるかもしれない
  • 新しい実行ファイルは設定画面に入らない
    • MCGA/VGA ディスプレイ を前提とする
    • サウンドなし
    • ジョイスティックなし
  • テスト中に問題があれば GitHub Issues で報告できる
    • クラッシュ
    • グラフィックの乱れ
    • キー入力が効かない
    • 必要なら dosbox で Ctrl+F5 を使って撮ったスクリーンショットを添付
    • 問題が発生する前にどんな操作をしたかを書くと、再現と修正の助けになる
  • このプロジェクトは bug-for-bug 再構築 を目指しているため、元のゲームにもある挙動は維持する必要がある
    • 元作には、3Dオブジェクトが消える問題や、上下逆さまの状態で燃料が切れると飛行機が空のほうへ落ちる問題などがある
    • 報告前に元作でも同じ問題が起きるか確認したほうがよい

1件のコメント

 
GN⁺ 4 시간 전
Hacker Newsのコメント
  • プレイ可能な DOS版 がある
    第1段階は全体をアセンブリとしてリバースエンジニアリングすることで、第2段階はアセンブリをコンパイル済みCコードとバイナリ一致する形に置き換えることだった。この作業はアセンブリコードが残らなくなるまでDOS上で続け、その後にLinuxとWindowsへの移植を始める予定
    リバースエンジニアリングは新たなバグを呼び込みやすく、このような古いリバースエンジニアリングコードのバグをすべて見つけるのは簡単ではないが、今のところは全部動いているようだ
    F-15 451.03版があり、Dosboxまたは実機DOSを持っているなら、未解決のバグを探してみてほしい
    最新のDOSリリースはここから入手できる: https://github.com/neuviemeporte/f15se2-re/releases
    f15_se2-*.zip ファイルにはDOSゲーム用の差し替え実行ファイルが入っている
    Air Force needs YOU!

    • 自分はUSAFの従軍経験者だ。F-15 Strike Eagle IIを遊んで育ったが、残念ながら自分のコピーはずいぶん前に壊れてしまった。このプロジェクトを見て本当にうれしい
      ただ、ほかの軍種が自分の椅子愛を持ち出してからかうことになりそうな、とても小さくて個人的なツッコミが1つある
      Air Force は2語だ
    • よくできている
      Linux移植 にそこまでプレッシャーを感じる必要はないと思う。エミュレータの対応が非常に良く広く使われているので、そこで動くなら十分成功と言える
      自分は使いやすいので Lutris(https://lutris.net/) を使っている
      ただ、低レベルなものが好きな人に見えるので、すごいレトロゲームを遊ぶこと以上に、これ自体が1つのクエストなのかもしれない
    • 自分もいまいくつかゲームを リバースエンジニアリング している。最近はAIのおかげでかなり簡単になった
      ただ、これが全体として法的に大丈夫なのかは気になっている。これについてどう考えているのか聞きたい
  • 初歩的な質問。否定的に聞こえないといいのだけれど
    古いゲームを動くようにするために時間をかけるのは本当にすばらしいが、DOSboxのようなものでエミュレーションできるゲームをなぜ 逆コンパイル するのか気になる。これほど古いゲームなら、かなり低スペックなハードウェアでも十分うまく動くのでは?

    • 要点はゲームを動かすことではなく、改変可能な状態で開くこと だ。バイナリ形式のゲームにパッチを当てるのは途方もなく難しく、単純なバグ修正以上の作業はほとんど不可能に近い
      ソースコードがあれば機能を丸ごと追加したり、Windows 10へ移植したり、4K HDR、テクスチャ、新モデル、新ミッションまで実装できる。限界が事実上なくなる
      また、ハードコードされたデータオフセットを含むアセンブリ命令だけを見てゲームを解析するのは本当に難しい。Cコードなら挙動を直接読んだり、計測・デバッグコードを入れて把握できる
    • 数年前にDOS時代のゲームのリバースエンジニアリングを試みたときは、理由がいくつもあった
      ファイル形式を文書化し、データを掘って未使用メディアを見つけ、深刻なバグを特定して修正し、MODツールを作り、子どものころ記憶に残ったものがどんな技法で作られていたのか理解したかった
      現代のシステムで動かす際の摩擦を減らし、より高解像度やテクスチャ差し替えのような任意の改善も可能にしたかった
      結局、やり切るだけの忍耐はなかったが、今ならできるかもしれないという気がする
    • フロッピーベースのゲームの多くは、当時のディスクドライブの文書化されていない挙動を利用した ディスクコピー防止パターン を持っている。そのため、Greaseweazleのようなツールが、アーカイブされたフロッピーの完全な磁気フラックスマップを構成するのに必要になるほどだ
      また、こうしたゲームはさまざまなグラフィック・サウンドハードウェアで動くように作られていることが多く、実質的にドライバがゲーム内にコンパイルされている
      [0] https://github.com/keirf/greaseweazle
  • 子どものころ本当によく遊んだゲーム。F-19 Stealth Fighter、F-117A Nighthawk Stealth Fighterも一緒に遊んでいて、この2本がこのゲームの前後に出た作品だったと今日初めて知った。F-14 Tomcatも少し遊んだ
    正しく読んでいるなら、これを動かすには 元のゲームファイル が必要なようだ。なので、またこの機体を飛ばすというより、開発日誌を読むことになりそうだ

    • F-19 はすばらしいゲームで、自分がいちばん好きなSid Meier作品の1つだ
      1980年代後半にElectronics Boutiqueで買って、家のPackard Bell 286で遊んだ記憶がある。コピー防止はマニュアルから航空機を探して識別する方式で、その結果ゲームに出てくる航空機を全部覚えてしまった
      ゲームを遊ぶためにGravis Analogジョイスティックも買ったし、キーボードオーバーレイもまだ持っている
      このゲームの現代的なリブートを本当に見てみたい
    • これは友人と前席/後席役で 協力プレイ できたゲームだったっけ、それともIIIのほうだったっけ?
      友人に固定電話で長々と電話してモデム設定を合わせ、もう一度かけ直してからゲームを始め、また切れて、今度は何が起きたのか確認するためにまた電話して、を繰り返していた
      ついに動いたときはあまりに延々と遊び続けたので、友人の母親が何時間も唯一の電話回線を占有するとしてモデムプレイを禁止した
      ほかのフライトシムや宇宙シムでも似たようなマルチプレイを探したいし、このゲームももう一度動かして友人を懐かしさで釣ってみたい
    • 開発ブログ はレトロなリバースエンジニアリング日誌の中でも屈指の出来だ。楽しく読めるはず
    • こういう名前って商標登録されていないのかな? Lockheedが副収入として権利を売れる気もする
  • 最近のゲーム移植は信じられないほど簡単になった
    https://robin.tooclever.orgAPI時間 ベースで1日もかからなかった

    • すごい。こうして移植されたゲームやオープンソース移植の索引ってどこかにある?
  • シンボル名がない状態で逆コンパイルされたプロジェクトの構造を推測するのに AI が向いているのか気になる
    自分の分野ではないが、ソースマップのないJavaScript構造の意図をAIがかなりうまく把握するのを見て驚いた

    • AIはアセンブリを読んで理解するのが超人的に得意だ。逆コンパイル済みかどうか、シンボルがあるかどうかはあまり気にせず、ないと少し遅くなるだけだ
      場合によってはツールなしでもひどく難読化された 制御フロー を直接理解できる
    • その通り、とても役に立つ
  • この話はもうYouTubeに上がっている: https://youtu.be/aIPKkOpIiF8

    • 動画はすごいが、AIナレーション が気になる
  • F15に乗っていた友人がいるので、これを送っておいた

  • こうした古いゲームのコミュニティは、お気に入りのタイトルに 4つの自由 を確保するために驚くべきことを成し遂げていて、本当に刺激を受ける

  • これはやったことがないが、Jane's F/A-18は遊んだことがあって、すばらしいゲームだった

    • そしてJane's USAFもあった!
  • 飛行中に ドップラーマップ を積み上げてSLAM発射に使うのに多くの時間を費やした
    Digital IntegrationsのTornadoと並んで優れたシミュレータで、Tornadoは本当にリブートが必要だ