F-15 Strike Eagle II 反向工程專案達到 v0.9.1 版本

F-15 Strike Eagle II 達到重大重建里程碑

1989 年 DOS 遊戲 F-15 Strike Eagle II 的反向工程專案已成功重建了所有遊戲執行檔(包括 egameend)的所有 C 原始碼。這一里程碑標誌著從指令碼(opcodes)的靜態分析轉向主動的執行時測試,為未來移植到 Linux 和 Windows 鋪平了道路。

目前狀態與技術進展

該專案已超越了將組合語言轉換為 C 語言的初始階段。目前的重建狀態包括:

  • 全源碼重建:已重建所有執行檔的所有 C 程式碼。
  • 數據遷移:所有遊戲數據已從組合語言遷移到 C 語言。
  • 功能性替換:大多數僅限於組合語言的程式碼現在已有用 C 語言編寫的功能性替換方案。
  • 語義標籤化:大多數常式(routines)和數據結構已分配了具備意義的名稱,以提高可維護性。

為了確保準確性,該專案使用工具來驗證重建的指令碼是否與原始二進位檔保持一致。然而,由於這些工具無法檢測數據佈局錯誤(data layout bugs),專案已進入手動測試階段。

測試版本 v0.9.1

v0.9.1 版本現在已開放社群測試。此版本旨在與原始遊戲的 451.03 版本以及 Desert Storm 擴展包配合使用。

安裝與需求

要進行重建版本的測試,使用者必須:

  1. 擁有原始遊戲檔案(版本 451.03)。
  2. 將遊戲資料夾中的原始執行檔替換為來自 f15_se2-*.zip 發佈版的全新執行檔。
  3. 在替換之前備份原始檔案。
  4. 移除原始的 f15.com 以確保啟動新的 f15.exe

已知限制與測試範圍

測試者應注意,目前的版本會跳過設定畫面,並預設使用 MCGA/VGA 顯示,且沒有聲音與搖桿支援。儘管有這些限制,任務簡報、飛行與任務後簡報部分仍可完全正常運作。

開發者正在尋求以下方面的報告:

  • 系統崩潰
  • 圖形錯誤
  • 輸入/按鍵失效

「缺陷對缺陷」哲學

本專案是一個「缺陷對缺陷」(bug-for-bug)的重建專案。這意味著原始 1989 年遊戲中存在的行為必須在重建版本中予以保留。不應將以下原始錯誤視為新問題進行回報的範例包括:

  • 3D 物件消失
  • 飛機在翻轉且燃油耗盡時向天空墜落

專案路線圖

開發流程遵循嚴格的多步驟流水線,以確保穩定性與忠實度:

  1. 完全反向工程至組合語言:理解二進位檔的初始階段。
  2. 二進位等效編譯 C 語言:將組合語言轉換為能編譯出完全相同二進位檔的 C 程式碼。
  3. DOS 驗證:確保遊戲在 DOS(或 DOSBox)上完全正常運作,且不再保留任何組合語言程式碼。
  4. 現代移植:一旦 DOS 版本獲得驗證,專案將分叉(fork)儲存庫以開始將遊戲移植到 Linux 和 Windows。

社群觀點

雖然有些使用者質疑在已有 DOSBox 模擬的狀況下進行反向工程(decompilation)的必要性,但其他人則強調了為心愛的遊戲作品確保「四種自由」的重要性。該專案也引起了前玩家的懷舊感,他們回憶起遊戲陡峭的學習曲線,以及飛行操作時對原始手冊的依賴性。

Sources