1 ポイント 投稿者 GN⁺ 4 시간 전 | 1件のコメント | WhatsAppで共有
  • Command & Conquer Generals: Zero Hour が、Apple Silicon Mac、iPhone、iPadでエミュレーションなしに動作し、クラシックRTSを最新のAppleデバイス上で直接プレイできるようになった
  • 中核は 2003年当時の実エンジンをARM64向けにコンパイル した点で、グラフィックスは DirectX 8 → DXVK → Vulkan → MoltenVK → Metal の経路で変換される
  • EAの GPL v3ソース公開 と GeneralsX の macOS/Linux 移植をベースに、このフォークが iOS/iPadOS 対応とエンジン修正を追加している
  • ゲームアセットは含まれていないため、Steam などで 所有しているコピー のデータを自分で取り込む必要がある
  • iPadでの長時間プレイは約 3GB超のメモリ常駐 で終了させられる可能性があり、iOSのバックグラウンド移行時クラッシュの可能性も残っているため、こまめなセーブが必要

Appleデバイスで動く本物のZero Hourエンジン

  • Zero Hour が Apple Silicon Mac、iPhone、iPad でネイティブ動作する
  • キャンペーン、スカーミッシュ、Generals Challenge モードに対応
  • RTS向けのタッチ操作を搭載
    • タップ選択
    • ドラッグ範囲選択
    • 長押しで選択解除
    • 2本指スクロール
    • ピンチズーム
  • 実行方式はエミュレーションではなく、2003年当時の実エンジン を ARM64 向けにコンパイルしたもの
  • レンダリングは DirectX 8 → DXVK → Vulkan → MoltenVK → Metal の順でつながる

GeneralsXベースのフォークの範囲

  • エンジンコードは EA の GPL v3ソース公開 を基にしている
  • ベースとなる移植は fbraz3/GeneralsX で、macOS/Linux 移植の中核作業は GeneralsX で行われている
  • このフォークは iOS/iPadOS 移植 とエンジン修正を追加する
  • 元の GeneralsX README は upstream-main ブランチにある

ゲームアセットはユーザーが自分で用意する必要がある

  • ゲームアセットは同梱も配布もされない
  • ユーザーは自分のゲームコピーを用意する必要がある
  • Steam へのリンクが提供されており、セール時は約 5ドル と案内されている
  • scripts/get-assets.sh は、ユーザーが所有する Steam ゲームデータを取得するスクリプトで、対象アプリ ID は 2732960

macOSビルドと実行の流れ

  • macOS ビルドには一度だけ必要な事前準備がある
    • xcode-select --install
    • brew install cmake ninja meson pkgconf
    • brew install --cask steamcmd
    • vcpkg の完全クローンと VCPKG_ROOT の設定
    • LunarG Vulkan SDK のインストールと VULKAN_SDK の設定
  • vcpkg は浅いクローンだと manifest baseline が壊れる可能性があるため、完全クローン が必要
  • Vulkan SDK は Homebrew cask ではなく、LunarG Vulkan SDK を使う必要がある
  • リポジトリをクローンしたあと、以下のスクリプトを順番に実行する方式
    • ./scripts/build/macos/build-macos-zh.sh: 依存関係の確認、設定、ビルド
    • ./scripts/build/macos/deploy-macos-zh.sh: ~/GeneralsX/GeneralsZHrun.sh を生成
    • ./scripts/get-assets.sh <your_steam_username>: 所有しているゲームデータを取得
    • cd ~/GeneralsX/GeneralsZH && ./run.sh -win: 実行

iPhone・iPadビルドの条件

  • iOS/iPadOS ビルドには、macOS の事前準備に加えて、完全版 Xcode、Apple ID でのログイン、xcodegen、Apple Developer team が必要
  • ビルド工程は以下の要素で構成される
    • references/fbraz3-dxvk サブモジュールの初期化
    • iOS 向け DXVK は、そのサブモジュールと Patches/dxvk-ios.patch からビルドされる
    • ./scripts/build/ios/fetch-moltenvk.sh で、チェックサム付きの固定バージョン MoltenVK.framework を取得
    • ./scripts/build/ios/stage-fonts.sh で、Liberation Fonts をゲームが期待する名前に整える
    • cmake --preset ios-vulkan および cmake --build build/ios-vulkan --target z_generals でビルド
  • パッケージ化とインストールでは GX_TEAM_IDGX_BUNDLE_ID を設定したうえで ./scripts/build/ios/package-ios-zh.sh --install を実行する
  • Team ID は Xcode → Settings → Accounts で確認できる
  • アセットはアプリバンドル内に含まれるため 自己完結型インストール となり、--dev は高速なコード反復のため約 2.7GB のコピーを省略する

リポジトリ内で注目すべきファイルと文書

  • docs/port/PORTING_PLAYBOOK.md: 移植全体のエンジニアリングログで、失敗モード・根本原因・修正内容を記録
    • §8 bug archaeology では、黒いミニマップ、無音の EVA 音声、chirp 問題を扱っている
  • docs/port/PORTING_PATTERNS.md: クラシックな Windows ゲームを Apple プラットフォームへ移植するための一般化された方法論
  • docs/port/RELEASE_CHECKLIST.md: 公開リリースのゲート
  • scripts/get-assets.sh: 所有している Steam アセットを取得するスクリプト
  • scripts/build/macos/, scripts/build/ios/: ビルド、デプロイ、パッケージングのパイプライン
  • ios/: XcodeGen の署名スタブプロジェクトと、ios/config/ 内の用意済み Options.inidxvk.conf
  • Patches/dxvk-ios.patch: iOS 向け d3d8/d3d9 dylib ビルドで使われる DXVK 変更点

まだ残っている制約

  • iPad での長時間セッションは、約 3GB超のメモリ常駐 状態で iOS によって終了させられる可能性がある
    • この場合、アプリはダイアログなしでホーム画面へ戻る
    • 現在および前回セッションのログは Files アプリ内のゲームフォルダにある
    • この問題は調査中
  • iOS でゲーム中にバックグラウンドへ移行すると、まれにクラッシュすることがある
    • ライフサイクルの一時停止は通常の経路を処理している
    • まれな race condition が残っているため、こまめにセーブする必要がある

ライセンスと制作方式

  • エンジンコードは GPL v3 で、流れは EA のソース公開 → GeneralsX → このフォーク
  • ゲームアセットは含まれず、ここではライセンス提供もされない
  • クレジットには Westwood/EA Pacific、EA、fbraz3/GeneralsX、TheSuperHackers/GeneralsGameCode、DXVK、MoltenVK、SDL、OpenAL Soft、FFmpeg、Liberation Fonts が含まれる
  • この移植は人間+AIの協業で作られている
    • エンジニアリングは Claude Code、つまり Anthropic の Claude Fableモデル が担った
    • Ammaar Reshi が実機での方向付けとプレイテストを担当した
    • docs/port/ のエンジニアリングログは、その作業方式を編集せず記録したもの

1件のコメント

 
GN⁺ 4 시간 전
Hacker Newsの反応
  • これは、人間がモデルを誘導して大量変換をさせる、かなり良い活用例に見える
    ただ、移植ドキュメントは人間が少し手を入れてほしかった。AI生成っぽい文体が鼻につく
    負担は低く、ほとんどは趣味でやることだし、反復的な改善も可能だ。Bunが「ZigからRustへ全部書き換えたし、当然うまく動くし、すぐ本番投入できるし、何をやったかブログ記事も書く」と言っていたのに、その記事がいまだに出ていない状況とは違う

    • Bunの話はよくわからない。Bunはおそらく今もっとも広く使われている開発アプリの1つ、Claude Codeを動かしている
      LLMの悪い使い方の例だと言われるけれど、すでにしばらく本番で使われていて、Claude Codeのせいでバグやセグメンテーション違反のような問題が以前より有意に増えたという証拠は聞いたことがない
    • モデルが作業をしていて、おそらく全体をコンテキストウィンドウ内に持っているのだから、この場合はむしろ文書作成のほうが向いているのかもしれない
    • 「人間がモデルを誘導して大量変換をさせる良い活用」という表現では弱すぎる。今年最大の過小評価かもしれない
      「かなり良い、悪くない、良い活用例」って、Fableはいったい何を成し遂げたんだ
  • (tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom) みたいなものは、コーディングエージェントでよく見かける別のAIっぽい表現
    比較的複雑で具体的な概念を、新しい複合名詞や、時には動詞にして、1語のフレーズのように要約するのが好きらしい。トークンを節約したいのか、後で再参照できる簡潔な識別子を作りたいのかはわからないが、かなり目立つ
    できあがった文章は読みにくいが、そういう傾向を知って意識的に名詞句を解析すれば多少はマシになる。それでもコーディングエージェントの中間生成物であって、エッセイやブログ記事ではないのだから問題ないと思う

    • 自分もたまにそうする
      一部のゲルマン語派の言語ではそういう感じだ。本能的に名詞をくっつけてlawnchairのようにしたくなるが、スペルチェックの下線が出るし、lawn chairも変に見えるので、lawn-chairが中間地帯になる
    • 本当にイライラする。AGENTS.mdで禁止してみたが、100%効くわけではない
      ## わかりやすい言葉を、専門用語ではなく
      省略のための専門用語は使わず、本当に意味していることを書けとしている
      たとえば「load-bearing assumptions」ではなく「xyzが依存している前提」と書き、「cross-service」とは言わずXサービスとYサービスを直接名指しさせる
      「Cross-RCA double-counting is unfounded」のような抽象名詞句の判定も禁止して、「RCAの実行間で同じ根本原因が二重に数えられていないか確認し、そうではなかった」のように書かせる
      ## 世界を揺るがす宣言を禁止
      「重要な発見がすべてを変える」「これで全体像がつかめた」「ゲームチェンジャーだ」といった大げさな表現を外し、見つかった内容を淡々と書かせる
      ## yesを反射的にぼかさないこと
      答えがyesならyesと言わせる。肯定の答えすべてに条件を付けると確信が弱く見えるので、本当に具体的な不確実性があるときだけ条件を付けるようにさせる
    • もしかするとLLMは単なるドイツ人なのかもしれない
    • 自分は非ネイティブにしては英語の読み書きはかなり流暢なほうだが、Claudeで一番の障害がまさにこれだ
      高度な概念を2〜4個、1語か2語に縫い合わせるので、毎回「ほどいて説明してくれ」と言わないといけない。ネイティブにも簡単ではないだろうが、非ネイティブにはなおさら難しい
    • 過剰な-ハイフン化はAI-かぶれだ
  • EAのGPL v3ソース公開版をベースに、fbraz3/GeneralsXの上に作られているという点が重要だ。macOS/Linux移植の大仕事はGeneralsXがやっていて、このフォークはiOS/iPadOS移植とエンジンのいくつかの修正を加えたものだ

    • Renegadeのほうでも似たようなことを進めているが、こちらは最初から別エンジンでやっているので十分可能に見える
    • このゲームは最新のWindowsではひどい動きしかしないので、Winx64への逆移植が必要だ
    • その通り。Fableがやったのは、すでにクロスプラットフォームだったプロジェクトをiOSへ移植した程度だ
      そこまで大変な苦労が入ったようには見えず、Opus 4.6でも十分だっただろう
  • この手法がEmperor: Battle for Dune(2001)にも有効なのか気になる
    Westwood Studios初の3Dリアルタイムストラテジーで、C&C Generalsより数年早かった。知的財産権の争いと、原作設定から外れた新勢力の導入のため人気は限定的だったが、ゲームプレイ、サウンドトラック、キャンペーン任務は素晴らしかった

    • FableがClaude Codeのサブスク料金から消える7月7日より前に試してみるといい
    • あの時代で最高クラスのリアルタイムストラテジーの1つで、今遊んでも十分いける。音楽もとても良かった
    • 一度試してみる
    • それってDune 2000ではないのか? https://www.openra.net/download/#linux
    • このゲームが本当に好きだった。初めて遊んだリアルタイムストラテジーだった
  • 子どものころこのゲームに数え切れないほど時間を使ったし、年を取るにつれて、本来の想定プラットフォームを技術が追い越してしまい、再び遊ぶのがどんどん難しくなっている
    熱心なファンの手にあるなら、AIが役立てる良い用途だ。時間があればユーザー製マップやユニットも試してみたい。C&C Generalsのモッディングコミュニティはずっとかなり活発だった

  • あとから来る他の間抜けのために言っておくと、下のエラーはSteamでゲームを購入していないことを意味する
    "ERROR! Failed to install app '2732960' (No subscription)"
    もちろんREADMEにはすでに書いてある

  • Fableがこれをやったはずがない。「command and conquer」という語で止まり、Opusに格下げしたうえで、同時にNSAの監視リストにも載せただろう

    • 中国陣営とテロリスト陣営を扱うコード部分を読み始めたら、本当にそうなりそうだ
  • 「Fableを使った」と言うには、最初のコミットが去年2月なのはどういうことなんだ?

    • GeneralsXをフォークして、最後の数コミットだけ追加したということだ
    • おそらくFableだけでやったわけではない
    • そういうことではなく、Anthropic向けのまた1つの無料マーケティング記事にすぎない
  • 同様にAIを使って、同じエンジンのBattle for Middle Earthを「オープンソース化」する作業も進めている: https://github.com/dginovker/BFME-Source-Code

    • 好きな古いゲームいくつかで似た作業をしてきたが、「バイト単位で同一」という主張は気になる
      バイナリからソースコードを単純にデコンパイルして公開するのは問題にならないのか?
      これはクリーンルーム方式ではないし、企業が依然として著作権侵害だと主張して差し止めることはできそうだ
  • タイトルは釣りだ
    この作業は2月に始まっていて、コミットを見ればFableがやったのは最新コミットのうちごく一部にすぎない。2000件中19件だ: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
    しかもFableですらないかもしれない。Opusに格下げされていた可能性もある
    こういう誤情報が頻繁にあるせいで、AnthropicのLLMに関する主張には懐疑的になる。Web開発のワークフローではGPT 5.5と比べて一進一退で、再び有効化されてからテストし始めたFableも同じだった
    まともなLLMならこうした移植はできただろう。GLM 5.2のようなものでも可能だったはずで、自分が政府をハッキングしようとするテロリストなのか生物兵器を作ろうとしているのかを延々と推測してこないぶん、むしろそちらのほうが良かったかもしれない
    人々にはLLMを比較するためのリソースが足りないので、自分が使ったモデルが史上最高で新しいワークフローを開いたと簡単にほのめかしてしまう。Opus 4.6以降はほとんど改善を見ていない

    • このプロジェクトはフォークで、実際にやっていることはiOS対応の追加
      リポジトリのフォーク所有者のコミットは19時間前から始まっているので、その部分がFableで行われたというのは十分あり得る。ただし、iOS対応の追加が以前のモデルではできずFableでしかできなかった作業なのかは、自分にもまったく不明だ