Command & Conquer Generals: Zero Hour macOS, iOS, および iPadOS へのネイティブ移植

Command & Conquer Generals: Zero Hour macOS, iOS, および iPadOS へのネイティブ移植

Command & Conquer Generals: Zero Hour が Apple Silicon 上でネイティブ動作するようになりました

Command & Conquer Generals: Zero Hour は、macOS、iPhone、および iPad でネイティブにプレイ可能になりました。これはエミュレーション層ではなく、2003年のオリジナルゲームエンジンの ARM64 ネイティブコンパイルであり、キャンペーン、スキーム、および Generals Challenge モードを最新の Apple ハードウェア上で実行することを可能にします。

技術アーキテクチャとレンダリングパイプライン

この移植版は、レガシーな DirectX 8 コールを多層的なレンダリングスタックを介して Apple の Metal API に変換することで互換性を実現しています。パイプラインは次のように動作します:

DirectX 8 $\rightarrow$ DXVK $\rightarrow$ Vulkan $\rightarrow$ MoltenVK $\rightarrow$ Metal

このアーキテクチャにより、ゲームのレンダリングロジックを完全に書き換えることなく、元のエンジンが最新の GPU ドライバーと通信できるようになります。このプロジェクトは、EA の GPL v3 ソースリリースに基づき、macOS と Linux のサポートの基礎を提供した GeneralsX プロジェクトを介して構築されています。この特定のフォークは、iOS/iPadOS 移植とさまざまなエンジン修正を追加しています。

モバイルデバイスへの実装

リアルタイムストラテジー (RTS) ゲームをタッチスクリーンで実行可能にするため、この移植版はカスタムのタッチコントロールセットを実装しています:

  • 選択: タップして選択、およびドラッグボックス選択。
  • 管理: 長押ししてユニットを解除選択。
  • ナビゲーション: 2本指スクロール、およびピンチ・トゥ・ズーム。

iOS/iPadOS における既知の安定性に関する問題

  • メモリ管理: iPad での長時間セッションは、高いメモリ使用量(常駐メモリ 3 GB 超過)により iOS によって終了させられる可能性があり、ホーム画面へのクラッシュが発生します。
  • ライフサイクル管理: ゲーム中にアプリをバックグラウンドに送ると、ライフサイクルの一時停止ロジックに残るレースコンディションにより、時折クラッシュが発生することがあります。

AI 支援型エンジニアリング・ワークフロー

このプロジェクトは、人間のディレクションと AI のコラボレーションとして開発されました。Ammaar Reshi が移植のディレクションとプレイテストを行い、エンジニアリングは Claude Code (Anthropic の Fable モデルを使用) によって行われました。

開発プロセスはリポジトリ内の「Porting Playbook」に記録されており、これは、無音の EVA ラインや黒いミニマップといった特定のバグの失敗モード、根本原因、および修正方法を詳細に記したエンジニアリングログとして機能しています。

セットアップと要件

プロジェクトはゲームデータを配布していないため、ユーザーは(Steam 経由で入手可能な)自身の合法的なゲームアセットを提供する必要があります。

macOS の要件

  • ツールチェーン: Xcode command line tools, CMake, Ninja, Meson, および pkgconf。
  • 依存関係: vcpkg (フルクローン) および LunarG Vulkan SDK。
  • アセットの取得: ユーザーの Steam アカウントからアセットを取得するためのスクリプトが提供されています。

iOS/iPadOS の要件

  • ツールチェーン: 完全な Xcode インストール、および xcodegen
  • 開発者アカウント: アプリの署名とインストールには、無料または有料の Apple Developer チーム ID が必要です。

コミュニティの視点

このプロジェクトは、クラシックゲームの保存における有用性で称賛されていますが、一部のコミュニティメンバーは、プロジェクトのタイムラインにおける AI の役割や、レンダリングスタックの性質について疑問を投げかけています。

"Am I reading that right? It makes API calls that goes through 5 different layers before actually getting rendered? That's kind of crazy."

他のユーザーは、AI 支援による移植はファンにとって強力なツールである一方、生成されたドキュメントが時として「AI-isms」(LLM が複雑な概念を要約するために複合名詞を作成する傾向)を示すことがあると指摘しています。

"I wish the porting docs were a little wordsmithed by a human, the AI generated text style is grating."

Sources