Minecraft 傳統主機版反編譯專案揭示 4J Studios 的 C++ 重寫歷史

BigGo Editorial Team
Minecraft 傳統主機版反編譯專案揭示 4J Studios 的 C++ 重寫歷史

遊戲社群正在討論一個有趣的專案,該專案旨在反編譯 Minecraft: Nintendo Switch Edition,揭示了 Minecraft 主機版本的技術歷史。該專案特別關注 Nintendo Switch Edition 的 1.0.17 版本,這是由 4J Studios 開發的所謂傳統主機版(Legacy Console Edition,簡稱LCE)的一部分。

Minecraft: Nintendo Switch Edition 反編譯專案的技術細節

  • 目標:Minecraft: Nintendo Switch Edition v1.0.17
  • 參考:Minecraft: Wii U Edition Patch 35 (v560)
  • 編譯器差異
    • Wii U Edition:GHS 編譯器(難以匹配)
    • Switch Edition:Clang 編譯器(使用正確版本更容易匹配)
  • Switch Edition 反編譯的優勢
    • 包含型別資訊(有助於識別虛擬函式表)
    • 可以從 Wii U Edition 移植符號
  • 所需工具
    • Python 3.6+
    • Ninja
    • CMake 3.13+
    • Rust 工具鏈
    • 其他各種依賴項

Minecraft 從 Java 到 C++ 的旅程

社群討論中最引人入勝的發現之一是 Minecraft 如何在不同平臺上演變。雖然許多遊戲玩家知道 Minecraft 最初是一個 Java 應用程式,但較少人瞭解隨後發生的複雜開發歷史。當需要主機版本時,Mojang 聘請了 4J Studios 為 Xbox 360、PS3 和最終的 Nintendo Switch 等平臺建立移植版。

正如一位評論者所解釋的,Java 在遊戲主機上是一個糟糕的組合,所以他們開始使用 C++ 重新編寫移植版,但大量參考了 Java 上游程式碼作為參考點。這解釋了為什麼反編譯專案揭示了帶有類似 Java 標準庫類名(如 BufferedOutputStream)的 C++ 程式碼—— 4J Studios 本質上建立了 Java 元件的 C++ 等效物,以保持類似的功能,同時獲得 C++ 的效能優勢。

Minecraft 的三個分支

反編譯專案突顯了 Minecraft 最終如何分裂為三個不同的程式碼庫:原始的 Java 版、4J Studios 的 C++ 主機版(傳統主機版)以及 Mojang 內部為移動裝置重寫的 C++ 版本(口袋版,後來成為基岩版)。

這種分裂創造了一種有趣的競爭動態。雖然 4J 的主機版專門針對遊戲主機進行了最佳化,但 Mojang 的口袋版逐漸從手機擴充套件到 Windows 10,並最終在水域更新發布前後取代了主機上的 4J 版本。社群對哪種實現提供了更好的主機體驗似乎存在分歧,一些評論者指出,4J 在主機上做得比 Microsoft 的美化版移動遊戲要好。

Minecraft 版本時間線

  • 原始 Java 版本:第一個版本,至今仍在維護
  • 傳統主機版本(4J Studios)
    • 平臺:Xbox 360、PS3、PS Vita、Wii U、Xbox One、PS4、Nintendo Switch
    • 程式語言:C++(具有類似 Java 的結構)
    • Nintendo Switch 版本 v1.0.17 對應於 Wii U 版本補丁 35(v560)
    • 在水域更新後停止更新
  • 口袋版/基岩版(Mojang)
    • 最初作為移動版本推出
    • 擴充套件到 Windows 10
    • 最終在當代主機上取代了傳統主機版本
    • 程式語言:C++

模組社群的懷舊情緒

圍繞這個反編譯專案的討論引發了對 Java 版本強大模組生態系統的相當多的懷舊情緒。許多評論者深情地回憶起技術模組,如 IndustrialCraft 2、ComputerCraft 和 Buildcraft,這些模組添加了可程式設計微控制器、電力和自動化系統等功能。

「我懷念原始 Java 版本的模組——特別是科技包。可以程式設計建立農業機器人的微控制器、電力、電動工具、太陽能、石油,那些才是美好的日子!」

雖然基岩版提供了更出色的效能和 VR 支援等功能,但與 Java 版相比,模組能力仍然更為有限。然而,正如幾位評論者指出的,Java 版及其模組社群如今透過 Fabric 和 Forge 等平臺仍然活躍。

反編譯的技術挑戰

反編譯專案本身面臨著重大的技術障礙。開發者選擇使用 Nintendo Switch Edition 是因為,儘管它缺乏函式符號,但它包含有助於識別虛擬函式表的型別資訊。他們正在使用 Wii U Edition(具有函式符號)作為參考,將符號移植到 Switch 版本。

專案文件揭示了版本之間有趣的編譯器差異—— Wii U Edition 使用了 GHS(Green Hills Software)編譯器,幾乎不可能完全匹配,而 Switch Edition 使用了 Clang,使得在使用正確的編譯器版本時更容易實現 1:1 的彙編匹配。

該專案似乎處於早期階段,一些評論者指出,近幾個月來活動已經放緩。與許多反編譯工作一樣,它提供了關於商業遊戲結構的寶貴見解,同時謹慎地遵守法律界限,要求使用者提供自己的原始遊戲檔案。

對於那些對遊戲開發歷史感興趣的人來說,這個專案提供了一個引人入勝的視角,展示了 Minecraft 如何在各平臺上演變以及塑造其各種版本的技術決策。

參考:Minecraft: LCE Decompilation Project