志願者完成了《塞爾達傳說:時之笛》的反編譯 C語言代碼可讀

通過將近兩年的努力,一個由志願者組成的團隊,終於完成了對《塞爾達傳說:時之笛》的反編譯任務。更確切地說,他們將可執行 ROM 文件轉換成了人類可讀(且可編輯)的 C 語言代碼,為後續的 PC 移植和各種 MOD 奠定了基礎。

1.png

上周日,ZRET 逆向工程團隊成員 Kenix 在該項目的 Discord 服務器上宣布:

在數十人的幫助下,我們最終完成了這個項目,並取得了驚人的成就。我們一度認為可能永遠無法完整每項功能匹配,因而這項激動人心的壯舉還是相當讓人難以置信的。

在 100% 完成開源任務之前,最終的反編譯功能仍需與 ZRET 的 GitHub 存儲庫合併。

直到提交並審核通過,團隊才得以通過編譯器來運行數萬行 C 代碼(以及來自合法卡帶的圖形和聲音資源),並最終生成 1:1 的原版《時之笛》ROM 副本。

完整的反編譯過程,持續了至少 21 個月。雖然自動化軟件工具有一定用處,但想要將代碼反編譯成人類可讀的 C 語言,還是需要人工解析 15000 多個函數中的每一個。

在弄清楚每個部分的用意的同時,ZRET 團隊還需要清理代碼,以消除任何混淆、或邏輯過程中引入的 bug 。

2.jpeg

回顧 2019 年完成的類似項目,最終讓廣大玩家體驗到了多個高分辨率的 PC 移植體驗。然而 ZRET 團隊成員 Rozlette 在去年接受 ARSTechnica 採訪時透露:

從 C 代碼到 Windows PC 移植的構建過程,並沒有想象中那麼容易。畢竟項目中有許多代碼和 N64 硬件的使用有關,比如 N64 的渲染管道,就與現代 PC 平台上的 OpenGL 大不相同。

在 ZRET 項目的推進過程中,Kenix 表示相關移植工作超出了最初預想的範圍。即便如此,團隊還是頗有興趣地研究了相關代碼,以深入了解有關遊戲內部運作和創作的細節。

此外反編譯代碼能夠更加輕鬆地創建新的遊戲模式 / 隨機方案,從而進一步拓展遊戲的可玩性與觀賞性。

3.jpg

對於為何要投身於這個項目,Rozlette 曾於去年坦言,這一切都是出於對兒時遊戲的熱愛。

這對我來說就像一個大謎題,且其中每個函數都是一個片段。當我處理一個未知的代碼函數,然後意識到它在遊戲中的作用時,就會讓自己感受到相當大的鼓勵。

Kenix 在 Discord 上指出:雖然反編譯工作可能已經達到了 100%,但團隊後續仍有許多工作要做。

我們一直致力於反編譯遊戲的《Master Quest Debug》版本,然而《時之笛》其實還有十多個其它版本,我們也計劃為它們提供反編譯和相關支持。

此外反編譯代碼需要額外的文檔,重組、並對變量重新命名,以使他人更易使用底層代碼。

最後,由 ZRET 公開的追蹤器頁面可知,Majora’s Mask 和 Minish Cap 的相關反編譯項目也仍在推進過程中(大約分別完成了 24% / 48%)。

(0)
上一篇 2021-11-30 18:39
下一篇 2021-11-30 18:40

相关推荐