Minecraft レガシーコンソールエディションの逆コンパイルプロジェクトが 4J Studios の C++ 書き換え履歴を明らかに

BigGo Editorial Team
Minecraft レガシーコンソールエディションの逆コンパイルプロジェクトが 4J Studios の C++ 書き換え履歴を明らかに

ゲームコミュニティでは、 Minecraft: Nintendo Switch Edition を逆コンパイルすることを目的とした興味深いプロジェクトについて議論されており、 Minecraft のコンソール版の技術的歴史に光を当てています。このプロジェクトは特に、 4J Studios によって開発された Legacy Console Edition(LCE)として知られる Nintendo Switch Edition のバージョン1.0.17に焦点を当てています。

Decompilationプロジェクトの技術的詳細

  • ターゲット: Minecraft: Nintendo Switch Edition v1.0.17
  • リファレンス: Minecraft: Wii U Edition Patch 35 (v560)
  • コンパイラの違い:
    • Wii U Edition: GHSコンパイラ(マッチングが困難)
    • Switch Edition: Clangコンパイラ(正しいバージョンでマッチングが容易)
  • デコンパイルにおける Switch Edition の利点:
    • typeinfo を含む(vtablesの識別に役立つ)
    • 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 の上流から大きく派生していました。これが、逆コンパイルプロジェクトが BufferedOutputStream のような Java 標準ライブラリに似たクラス名を持つ C++ コードを明らかにした理由です - 4J Studios は本質的に、同様の機能を維持しながら C++ のパフォーマンス上の利点を得るために、 Java コンポーネントの C++ 相当物を作成しました。

Minecraft の3つの分岐

逆コンパイルプロジェクトは、 Minecraft が最終的に3つの異なるコードベースに分かれたことを強調しています:元の Java Edition、4J Studios の C++ コンソール版(Legacy Console Edition)、そして Mojang の社内 C++ 書き換えによるモバイルデバイス向け(Pocket Edition、後に Bedrock となった)です。

この断片化は興味深い競争力学を生み出しました。4J のコンソール版はゲームコンソール向けに特別に最適化されていましたが、 Mojang の Pocket Edition は徐々に携帯電話から Windows 10 へと拡大し、最終的に Update Aquatic リリース頃に 4J 版をコンソールで置き換えました。コミュニティはどちらの実装がより良いコンソール体験を提供したかについて意見が分かれているようで、一部のコメンターは 4J が Microsoft の「美化されたモバイルゲーム」よりもコンソールでより良い仕事をしたと指摘しています。

Minecraft バージョンの変遷

  • オリジナル Java Edition: 最初のバージョンで、現在も更新が続いている
  • Legacy Console Edition (4J Studios):
    • プラットフォーム: Xbox 360, PS3, PS Vita, Wii U, Xbox One, PS4, Nintendo Switch
    • 使用言語: C++ (Java に影響を受けた構造)
    • Nintendo Switch Edition v1.0.17 は Wii U Edition Patch 35 (v560) に相当
    • Update Aquatic 以降は開発終了
  • Pocket Edition/Bedrock (Mojang):
    • モバイル版として開始
    • Windows 10 にも拡張
    • 最終的に現行世代コンソールの Legacy Console Edition に取って代わる
    • 使用言語: C++

モディングコミュニティのノスタルジア

この逆コンパイルプロジェクトをめぐる議論は、 Java 版の堅牢なモディングエコシステムに対するかなりのノスタルジアを呼び起こしました。多くのコメンターが、プログラム可能なマイクロコントローラー、電気、自動化システムなどの機能を追加した IndustrialCraft 2、ComputerCraft、Buildcraft などの技術的なModを懐かしく思い出しています。

「元の Java 版のモディングが恋しい - 特にテクノロジーパックが。農業ロボット、電気、電動工具、太陽光発電、石油を作るためにプログラムできるマイクロコントローラー、あれらは良き時代だった!」

Bedrock Edition はパフォーマンスが優れており、 VR サポートなどの機能がありますが、モディング機能は Java Edition と比較すると依然として限られています。しかし、いくつかのコメンターが指摘したように、 Java Edition とそのモディングコミュニティは現在も Fabric や Forge などのプラットフォームを通じて活発に活動しています。

逆コンパイルの技術的課題

逆コンパイルプロジェクト自体は重要な技術的障壁に直面しています。開発者たちは、関数シンボルはないものの vtable を識別するのに役立つ typeinfo が含まれているため、 Nintendo Switch Edition での作業を選びました。彼らは Wii U Edition(関数シンボルがある)をリファレンスとして使用し、シンボルを Switch 版に移植しています。

プロジェクトのドキュメントは、バージョン間の興味深いコンパイラの違いを明らかにしています - Wii U Edition は GHS(Green Hills Software)コンパイラを使用しており、これは正確に一致させることがほぼ不可能ですが、 Switch Edition は Clang を使用しており、適切なコンパイラバージョンで1:1のアセンブリマッチングを達成しやすくなっています。

プロジェクトはまだ初期段階にあるようで、一部のコメンターは最近数ヶ月で活動が鈍化していることを指摘しています。多くの逆コンパイルの取り組みと同様に、このプロジェクトは商業ゲームがどのように構成されているかについての貴重な洞察を提供すると同時に、ユーザーに独自のオリジナルゲームファイルを提供することを要求することで、慎重な法的境界線を歩んでいます。

ゲーム開発の歴史に興味がある人にとって、このプロジェクトは Minecraft がプラットフォーム間でどのように進化し、さまざまな化身を形作った技術的決定についての興味深い一瞥を提供しています。

参考: Minecraft: LCE Decompilation Project