Command & Conquer Generals dipindahkan secara native ke macOS, iPhone, dan iPad dengan Fable
(github.com/ammaarreshi)- Command & Conquer Generals: Zero Hour kini dapat berjalan di Apple Silicon Mac, iPhone, dan iPad tanpa emulasi, sehingga RTS klasik ini bisa dimainkan langsung di perangkat Apple modern
- Kuncinya adalah kompilasi ARM64 dari engine asli tahun 2003, dengan grafis dikonversi melalui jalur DirectX 8 → DXVK → Vulkan → MoltenVK → Metal
- Berdasarkan rilis source GPL v3 dari EA dan port macOS/Linux GeneralsX, fork ini menambahkan dukungan iOS/iPadOS serta perubahan pada engine
- Karena aset game tidak disertakan, pengguna harus mengimpor sendiri data dari salinan yang mereka miliki melalui Steam atau sumber lain
- Sesi bermain panjang di iPad bisa dihentikan karena penggunaan memori menetap sekitar 3GB atau lebih, dan potensi crash saat aplikasi iOS berpindah ke background juga masih ada, jadi sebaiknya sering menyimpan progres
Engine Zero Hour asli yang berjalan di perangkat Apple
- Zero Hour berjalan secara native di Apple Silicon Mac, iPhone, dan iPad
- Mendukung mode campaign, skirmish, dan Generals Challenge
- Termasuk kontrol sentuh untuk RTS
- ketuk untuk memilih
- seret untuk seleksi kotak
- tekan lama untuk membatalkan pilihan
- scroll dengan dua jari
- pinch untuk zoom
- Cara kerjanya bukan emulasi, melainkan engine asli tahun 2003 yang dikompilasi ke ARM64
- Rendering melewati urutan DirectX 8 → DXVK → Vulkan → MoltenVK → Metal
Cakupan fork berbasis GeneralsX
- Kode engine didasarkan pada rilis source GPL v3 dari EA
- Port dasarnya adalah fbraz3/GeneralsX, dan pekerjaan inti port macOS/Linux dilakukan di GeneralsX
- Fork ini menambahkan port iOS/iPadOS dan perubahan pada engine
- README asli GeneralsX ada di branch
upstream-main
Aset game harus disiapkan sendiri oleh pengguna
- Aset game tidak disertakan maupun didistribusikan
- Pengguna memerlukan salinan game milik mereka sendiri
- Tautan Steam disediakan, dan disebutkan harganya sekitar US$5 saat diskon
scripts/get-assets.shadalah skrip untuk mengambil data game Steam yang dimiliki pengguna, dengan app ID target 2732960
Alur build dan menjalankan di macOS
- Build macOS memiliki persiapan awal yang hanya perlu dilakukan sekali
xcode-select --installbrew install cmake ninja meson pkgconfbrew install --cask steamcmd- clone penuh
vcpkgdan setelVCPKG_ROOT - instal LunarG Vulkan SDK dan setel
VULKAN_SDK
vcpkgmemerlukan clone penuh karena clone dangkal bisa merusak manifest baseline- Untuk Vulkan SDK, harus menggunakan LunarG Vulkan SDK, bukan cask Homebrew
- Setelah me-clone repositori, jalankan skrip berikut secara berurutan
./scripts/build/macos/build-macos-zh.sh: memeriksa dependensi, konfigurasi, dan build./scripts/build/macos/deploy-macos-zh.sh: membuat~/GeneralsX/GeneralsZHdanrun.sh./scripts/get-assets.sh <your_steam_username>: mengambil data game yang dimiliki penggunacd ~/GeneralsX/GeneralsZH && ./run.sh -win: menjalankan game
Syarat build untuk iPhone dan iPad
- Build iOS/iPadOS memerlukan tambahan di atas persiapan macOS: Xcode penuh, login Apple ID,
xcodegen, dan Apple Developer team - Proses build terdiri dari elemen berikut
- inisialisasi submodule
references/fbraz3-dxvk - DXVK untuk iOS dibangun dari submodule tersebut dan
Patches/dxvk-ios.patch - mengambil versi tetap MoltenVK.framework dengan checksum lewat
./scripts/build/ios/fetch-moltenvk.sh - menyiapkan Liberation Fonts dengan nama yang diharapkan game lewat
./scripts/build/ios/stage-fonts.sh - build dengan
cmake --preset ios-vulkandancmake --build build/ios-vulkan --target z_generals
- inisialisasi submodule
- Untuk packaging dan instalasi, setel
GX_TEAM_IDdanGX_BUNDLE_ID, lalu jalankan./scripts/build/ios/package-ios-zh.sh --install - Team ID dapat dicek di Xcode → Settings → Accounts
- Aset dimasukkan ke dalam app bundle sehingga instalasinya mandiri, dan
--devmelewati penyalinan sekitar 2.7GB untuk iterasi kode yang lebih cepat
File dan dokumen menarik di repositori
docs/port/PORTING_PLAYBOOK.md: log rekayasa lengkap port ini, mencatat mode kegagalan, akar masalah, dan perbaikannya- §8 bug archaeology membahas minimap hitam, dialog EVA tanpa suara, dan masalah chirp
docs/port/PORTING_PATTERNS.md: metodologi umum untuk mem-port game Windows klasik ke platform Appledocs/port/RELEASE_CHECKLIST.md: gerbang rilis publikscripts/get-assets.sh: skrip untuk mengambil aset Steam milik penggunascripts/build/macos/,scripts/build/ios/: pipeline build, deploy, dan packagingios/: proyek stub penandatanganan XcodeGen sertaOptions.inidandxvk.confyang sudah disiapkan diios/config/Patches/dxvk-ios.patch: perubahan DXVK yang digunakan untuk build dylib d3d8/d3d9 di iOS
Batasan yang masih ada
- Sesi panjang di iPad bisa dihentikan oleh iOS saat penggunaan memori menetap sekitar 3GB atau lebih
- Dalam kasus ini, aplikasi keluar ke layar utama tanpa dialog
- Log sesi saat ini dan sebelumnya ada di folder game dalam aplikasi Files
- Masalah ini masih diselidiki
- Di iOS, berpindah ke background saat bermain kadang bisa menyebabkan crash
- Jeda siklus hidup menangani jalur umum
- Masih ada race condition langka, jadi sebaiknya sering menyimpan progres
Lisensi dan cara pembuatannya
- Kode engine menggunakan GPL v3, dengan alur EA source release → GeneralsX → fork ini
- Aset game tidak disertakan dan tidak dilisensikan di sini
- Kredit mencakup Westwood/EA Pacific, EA, fbraz3/GeneralsX, TheSuperHackers/GeneralsGameCode, DXVK, MoltenVK, SDL, OpenAL Soft, FFmpeg, Liberation Fonts
- Port ini dibuat lewat kolaborasi manusia+AI
- Rekayasa dikerjakan oleh Claude Code, yaitu model Fable dari Claude milik Anthropic
- Ammaar Reshi menangani pengarahan dan playtest di perangkat nyata
- Log rekayasa di
docs/port/adalah catatan tanpa edit dari cara kerja tersebut
1 komentar
Komentar Hacker News
Ini tampak seperti contoh penggunaan yang cukup bagus: manusia mengarahkan model untuk melakukan transformasi massal
Meski begitu, saya berharap dokumen porting-nya sedikit dirapikan oleh manusia. Gaya tulisan yang dihasilkan AI terasa mengganggu
Bebannya rendah, sebagian besar dikerjakan untuk bersenang-senang, dan bisa ditingkatkan secara berulang. Ini berbeda dengan situasi Bun yang mengatakan “kami sudah mengganti semuanya dari Zig ke Rust, tentu berjalan baik, sebentar lagi bisa dipakai di produksi, dan kami akan menulis posting blog tentang apa yang kami lakukan”, tetapi tulisan itu sampai sekarang belum ada
Orang bilang itu contoh pemakaian LLM yang buruk, tetapi nyatanya sudah dipakai di produksi cukup lama, dan saya belum pernah mendengar bukti bahwa karena Claude Code jumlah bug atau segmentation fault meningkat secara berarti dibanding sebelumnya
“Lumayan bagus, tidak buruk, contoh penggunaan yang baik.” Sebenarnya Fable berhasil melakukan apa sih
Hal seperti
(tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom)adalah contoh lain dari ungkapan khas AI yang sering terlihat pada coding agentModel tampaknya suka mengambil konsep yang relatif rumit dan spesifik lalu meringkasnya menjadi frasa satu kata dengan membuat nomina majemuk baru, atau kadang kata kerja baru. Saya tidak tahu apakah ini untuk menghemat token atau untuk membuat pengenal ringkas yang bisa dirujuk lagi nanti, tetapi cukup mencolok
Kalimat hasilnya memang susah dibaca, tetapi kalau kita sadar akan kecenderungan itu dan sengaja mem-parsing frasa bendanya, jadinya sedikit lebih mudah. Tetap saja, ini kan keluaran antara dari coding agent, bukan esai atau posting blog, jadi saya rasa masih wajar
Di beberapa bahasa rumpun Jermanik memang seperti itu. Secara naluriah saya ingin menggabungkan nomina menjadi sesuatu seperti
lawnchair, tetapi pengecekan ejaan menandainya, lalulawn chairjuga terlihat aneh, jadilawn-chairjadi jalan tengah## Gunakan kata-kata sederhana, bukan jargonSaya tulis agar jangan memakai jargon singkat, tetapi benar-benar mengatakan maksudnya
Misalnya, daripada “load-bearing assumptions”, tulis “asumsi yang menjadi sandaran xyz”; dan jangan bilang “cross-service”, sebut langsung layanan X dan layanan Y
Saya juga melarang penilaian dengan frasa nomina abstrak seperti “Cross-RCA double-counting is unfounded”, dan meminta agar ditulis seperti “kami memeriksa apakah akar penyebab yang sama dihitung dua kali di antara eksekusi RCA, dan ternyata tidak”
## Jangan membuat pernyataan yang mengguncang duniaSaya minta agar hiperbola seperti “penemuan penting ini mengubah segalanya”, “sekarang kami sudah memahami gambaran besarnya”, atau “ini game changer” dihilangkan, dan cukup menjelaskan apa yang ditemukan dengan datar
## Jangan mengaburkan yes secara refleksKalau jawabannya yes, bilang yes. Jika setiap jawaban positif selalu diberi syarat, keyakinannya jadi melemah, jadi saya minta syarat hanya ditambahkan bila memang ada ketidakpastian yang spesifik
Ia sering menjahit 2 sampai 4 konsep tingkat lanjut menjadi satu atau dua kata, jadi saya harus terus meminta “tolong jelaskan secara lebih rinci”. Mungkin ini juga tidak mudah bagi penutur asli, tetapi bagi non-native speaker jelas lebih sulit
Intinya adalah proyek ini dibangun di atas fbraz3/GeneralsX yang berbasis rilis source code GPL v3 dari EA. Pekerjaan besar untuk porting macOS/Linux dilakukan oleh GeneralsX, dan fork ini menambahkan porting iOS/iPadOS beserta beberapa modifikasi mesin
Kelihatannya bukan pekerjaan yang luar biasa berat, dan mungkin Opus 4.6 pun sudah cukup
Saya penasaran apakah teknik seperti ini akan berguna juga untuk Emperor: Battle for Dune (2001)
Itu adalah game strategi real-time 3D pertama dari Westwood Studios dan beberapa tahun lebih awal daripada C&C Generals. Popularitasnya terbatas karena sengketa hak kekayaan intelektual dan masuknya faksi baru yang menyimpang dari latar asli, tetapi gameplay, soundtrack, dan misi kampanyenya sangat bagus
Waktu kecil saya menghabiskan waktu yang tak terhitung banyaknya untuk game ini, dan makin bertambah usia, makin sulit memainkannya lagi karena teknologi melampaui platform yang tadinya memang dituju
Kalau ada di tangan para penggemar yang berdedikasi, ini adalah contoh penggunaan yang baik untuk bantuan AI. Kalau sempat, saya juga ingin bereksperimen dengan peta atau unit buatan pengguna. Komunitas modding C&C Generals memang selalu cukup aktif
Untuk para bodoh lain yang datang belakangan, error di bawah ini berarti kalian tidak membeli game tersebut di Steam
"ERROR! Failed to install app '2732960' (No subscription)"Tentu saja ini sudah tertulis di README
Rasanya tidak mungkin Fable yang melakukan ini. Ia mungkin berhenti di kata “command and conquer”, menurunkannya ke Opus, dan sekaligus memasukkan saya ke daftar pengawasan NSA
Kalau dibilang “menggunakan Fable”, bagaimana mungkin commit pertama sudah ada sejak Februari tahun lalu?
Dengan cara serupa, ada juga pekerjaan “meng-open-source-kan” Battle for Middle Earth dengan AI pada mesin yang sama: https://github.com/dginovker/BFME-Source-Code
Apakah tidak bermasalah jika source code hanya didekompilasi dari biner lalu dirilis ke publik?
Ini bukan metode clean room, dan perusahaan masih bisa mengeklaimnya sebagai pelanggaran hak cipta lalu memaksanya diturunkan
Judulnya clickbait
Pekerjaan ini dimulai pada Februari, dan kalau melihat commit, bagian yang dikerjakan Fable hanya sebagian kecil dari commit terbaru. Dari 2000 commit, hanya 19: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
Bahkan mungkin bukan Fable. Bisa saja diturunkan ke Opus
Karena klaim keliru yang terus berulang seperti ini, saya jadi skeptis terhadap klaim LLM dari Anthropic. Dalam alur kerja pengembangan web, kalau dibandingkan dengan GPT 5.5 hasilnya saling kejar-mengejar, dan Fable yang mulai saya uji lagi setelah diaktifkan ulang juga sama saja
Kalau LLM-nya lumayan bagus, mestinya porting seperti ini bisa dilakukan. Mungkin GLM 5.2 juga bisa, dan malah bisa lebih baik karena ia tidak terus menebak apakah saya teroris yang mau meretas pemerintah atau membuat senjata biologis
Orang-orang kekurangan sumber daya untuk membandingkan LLM, jadi mudah sekali tersirat bahwa model yang mereka pakai adalah yang terbaik sepanjang masa dan membuka alur kerja baru. Sejak Opus 4.6 saya hampir tidak melihat peningkatan berarti
Commit dari pemilik fork repositori dimulai 19 jam lalu, jadi bagian itu cukup masuk akal jika memang dikerjakan dengan Fable. Hanya saja, apakah penambahan dukungan iOS itu sesuatu yang tidak bisa dilakukan model sebelumnya dan hanya bisa dilakukan Fable, itu juga sama sekali tidak jelas bagi saya