DOSゲーム『F-15 Strike Eagle II』リバースプロジェクト、DOSテストパイロットを募集
(neuviemeporte.github.io)- 1989年のゲーム F-15 Strike Eagle II の元バイナリをリバースエンジニアリングしてCソースコードを再構築するプロジェクトが、実際のプレイテスト段階に入った
egame、endを含むすべての実行ファイルのコードとデータを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件のコメント
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!
ただ、ほかの軍種が自分の椅子愛を持ち出してからかうことになりそうな、とても小さくて個人的なツッコミが1つある
Air Force は2語だ
Linux移植 にそこまでプレッシャーを感じる必要はないと思う。エミュレータの対応が非常に良く広く使われているので、そこで動くなら十分成功と言える
自分は使いやすいので Lutris(https://lutris.net/) を使っている
ただ、低レベルなものが好きな人に見えるので、すごいレトロゲームを遊ぶこと以上に、これ自体が1つのクエストなのかもしれない
ただ、これが全体として法的に大丈夫なのかは気になっている。これについてどう考えているのか聞きたい
初歩的な質問。否定的に聞こえないといいのだけれど
古いゲームを動くようにするために時間をかけるのは本当にすばらしいが、DOSboxのようなものでエミュレーションできるゲームをなぜ 逆コンパイル するのか気になる。これほど古いゲームなら、かなり低スペックなハードウェアでも十分うまく動くのでは?
ソースコードがあれば機能を丸ごと追加したり、Windows 10へ移植したり、4K HDR、テクスチャ、新モデル、新ミッションまで実装できる。限界が事実上なくなる
また、ハードコードされたデータオフセットを含むアセンブリ命令だけを見てゲームを解析するのは本当に難しい。Cコードなら挙動を直接読んだり、計測・デバッグコードを入れて把握できる
ファイル形式を文書化し、データを掘って未使用メディアを見つけ、深刻なバグを特定して修正し、MODツールを作り、子どものころ記憶に残ったものがどんな技法で作られていたのか理解したかった
現代のシステムで動かす際の摩擦を減らし、より高解像度やテクスチャ差し替えのような任意の改善も可能にしたかった
結局、やり切るだけの忍耐はなかったが、今ならできるかもしれないという気がする
また、こうしたゲームはさまざまなグラフィック・サウンドハードウェアで動くように作られていることが多く、実質的にドライバがゲーム内にコンパイルされている
[0] https://github.com/keirf/greaseweazle
子どものころ本当によく遊んだゲーム。F-19 Stealth Fighter、F-117A Nighthawk Stealth Fighterも一緒に遊んでいて、この2本がこのゲームの前後に出た作品だったと今日初めて知った。F-14 Tomcatも少し遊んだ
正しく読んでいるなら、これを動かすには 元のゲームファイル が必要なようだ。なので、またこの機体を飛ばすというより、開発日誌を読むことになりそうだ
1980年代後半にElectronics Boutiqueで買って、家のPackard Bell 286で遊んだ記憶がある。コピー防止はマニュアルから航空機を探して識別する方式で、その結果ゲームに出てくる航空機を全部覚えてしまった
ゲームを遊ぶためにGravis Analogジョイスティックも買ったし、キーボードオーバーレイもまだ持っている
このゲームの現代的なリブートを本当に見てみたい
友人に固定電話で長々と電話してモデム設定を合わせ、もう一度かけ直してからゲームを始め、また切れて、今度は何が起きたのか確認するためにまた電話して、を繰り返していた
ついに動いたときはあまりに延々と遊び続けたので、友人の母親が何時間も唯一の電話回線を占有するとしてモデムプレイを禁止した
ほかのフライトシムや宇宙シムでも似たようなマルチプレイを探したいし、このゲームももう一度動かして友人を懐かしさで釣ってみたい
最近のゲーム移植は信じられないほど簡単になった
https://robin.tooclever.org は API時間 ベースで1日もかからなかった
シンボル名がない状態で逆コンパイルされたプロジェクトの構造を推測するのに AI が向いているのか気になる
自分の分野ではないが、ソースマップのないJavaScript構造の意図をAIがかなりうまく把握するのを見て驚いた
場合によってはツールなしでもひどく難読化された 制御フロー を直接理解できる
この話はもうYouTubeに上がっている: https://youtu.be/aIPKkOpIiF8
F15に乗っていた友人がいるので、これを送っておいた
こうした古いゲームのコミュニティは、お気に入りのタイトルに 4つの自由 を確保するために驚くべきことを成し遂げていて、本当に刺激を受ける
これはやったことがないが、Jane's F/A-18は遊んだことがあって、すばらしいゲームだった
飛行中に ドップラーマップ を積み上げてSLAM発射に使うのに多くの時間を費やした
Digital IntegrationsのTornadoと並んで優れたシミュレータで、Tornadoは本当にリブートが必要だ