F-15 Strike Eagle II 反向工程專案達到 v0.9.1 版本
F-15 Strike Eagle II 達到重大重建里程碑
1989 年 DOS 遊戲 F-15 Strike Eagle II 的反向工程專案已成功重建了所有遊戲執行檔(包括 egame 和 end)的所有 C 原始碼。這一里程碑標誌著從指令碼(opcodes)的靜態分析轉向主動的執行時測試,為未來移植到 Linux 和 Windows 鋪平了道路。
目前狀態與技術進展
該專案已超越了將組合語言轉換為 C 語言的初始階段。目前的重建狀態包括:
- 全源碼重建:已重建所有執行檔的所有 C 程式碼。
- 數據遷移:所有遊戲數據已從組合語言遷移到 C 語言。
- 功能性替換:大多數僅限於組合語言的程式碼現在已有用 C 語言編寫的功能性替換方案。
- 語義標籤化:大多數常式(routines)和數據結構已分配了具備意義的名稱,以提高可維護性。
為了確保準確性,該專案使用工具來驗證重建的指令碼是否與原始二進位檔保持一致。然而,由於這些工具無法檢測數據佈局錯誤(data layout bugs),專案已進入手動測試階段。
測試版本 v0.9.1
v0.9.1 版本現在已開放社群測試。此版本旨在與原始遊戲的 451.03 版本以及 Desert Storm 擴展包配合使用。
安裝與需求
要進行重建版本的測試,使用者必須:
- 擁有原始遊戲檔案(版本
451.03)。 - 將遊戲資料夾中的原始執行檔替換為來自
f15_se2-*.zip發佈版的全新執行檔。 - 在替換之前備份原始檔案。
- 移除原始的
f15.com以確保啟動新的f15.exe。
已知限制與測試範圍
測試者應注意,目前的版本會跳過設定畫面,並預設使用 MCGA/VGA 顯示,且沒有聲音與搖桿支援。儘管有這些限制,任務簡報、飛行與任務後簡報部分仍可完全正常運作。
開發者正在尋求以下方面的報告:
- 系統崩潰
- 圖形錯誤
- 輸入/按鍵失效
「缺陷對缺陷」哲學
本專案是一個「缺陷對缺陷」(bug-for-bug)的重建專案。這意味著原始 1989 年遊戲中存在的行為必須在重建版本中予以保留。不應將以下原始錯誤視為新問題進行回報的範例包括:
- 3D 物件消失
- 飛機在翻轉且燃油耗盡時向天空墜落
專案路線圖
開發流程遵循嚴格的多步驟流水線,以確保穩定性與忠實度:
- 完全反向工程至組合語言:理解二進位檔的初始階段。
- 二進位等效編譯 C 語言:將組合語言轉換為能編譯出完全相同二進位檔的 C 程式碼。
- DOS 驗證:確保遊戲在 DOS(或 DOSBox)上完全正常運作,且不再保留任何組合語言程式碼。
- 現代移植:一旦 DOS 版本獲得驗證,專案將分叉(fork)儲存庫以開始將遊戲移植到 Linux 和 Windows。
社群觀點
雖然有些使用者質疑在已有 DOSBox 模擬的狀況下進行反向工程(decompilation)的必要性,但其他人則強調了為心愛的遊戲作品確保「四種自由」的重要性。該專案也引起了前玩家的懷舊感,他們回憶起遊戲陡峭的學習曲線,以及飛行操作時對原始手冊的依賴性。