遊戲社群正在討論一個有趣的專案,該專案旨在反編譯 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 如何在各平臺上演變以及塑造其各種版本的技術決策。