Command & Conquer Generals, Fable के साथ macOS·iPhone·iPad पर native पोर्ट
(github.com/ammaarreshi)- Command & Conquer Generals: Zero Hour अब Apple Silicon Mac, iPhone और iPad पर emulation के बिना चलता है, जिससे इस क्लासिक RTS को आधुनिक Apple डिवाइसों पर सीधे खेला जा सकता है
- इसकी मुख्य बात है 2003 के वास्तविक engine का ARM64 compile, और graphics को DirectX 8 → DXVK → Vulkan → MoltenVK → Metal पथ से रूपांतरित किया जाता है
- EA की GPL v3 source release और GeneralsX macOS/Linux पोर्ट के आधार पर, यह fork iOS/iPadOS support और engine modifications जोड़ता है
- गेम assets शामिल नहीं हैं, इसलिए Steam आदि पर मौजूद आपकी खरीदी हुई copy से डेटा खुद लाना होगा
- iPad पर लंबे समय तक खेलने के दौरान लगभग 3GB+ memory resident होने पर ऐप बंद हो सकती है, और iOS background switching crash की संभावना भी बनी हुई है, इसलिए बार-बार save करना चाहिए
Apple डिवाइसों पर चलने वाला असली Zero Hour engine
- Zero Hour Apple Silicon Mac, iPhone और iPad पर native रूप से चलता है
- यह campaign, skirmish और Generals Challenge mode को support करता है
- RTS के लिए touch controls शामिल हैं
- tap select
- drag box select
- देर तक दबाकर selection हटाना
- two-finger scroll
- pinch zoom
- यह emulation नहीं है, बल्कि 2003 के वास्तविक engine को ARM64 के लिए compile किया गया है
- rendering DirectX 8 → DXVK → Vulkan → MoltenVK → Metal क्रम से होती है
GeneralsX-आधारित fork का दायरा
- engine code, EA की GPL v3 source release पर आधारित है
- आधार पोर्ट fbraz3/GeneralsX है, और macOS/Linux पोर्ट का मुख्य काम GeneralsX में किया गया है
- यह fork iOS/iPadOS पोर्ट और engine modifications जोड़ता है
- मूल GeneralsX README
upstream-mainbranch में है
गेम assets उपयोगकर्ता को खुद तैयार करने होंगे
- गेम assets न तो शामिल हैं और न ही वितरित किए जाते हैं
- उपयोगकर्ता के पास अपनी गेम copy होनी चाहिए
- Steam लिंक दिया गया है, और sale के दौरान इसकी कीमत लगभग 5 डॉलर बताई गई है
scripts/get-assets.shएक script है जो उपयोगकर्ता की खरीदी हुई Steam गेम data लाती है, और target app ID 2732960 है
macOS build और run flow
- macOS build के लिए कुछ one-time prerequisites हैं
xcode-select --installbrew install cmake ninja meson pkgconfbrew install --cask steamcmdvcpkgका full clone औरVCPKG_ROOTसेट करना- LunarG Vulkan SDK install करना और
VULKAN_SDKसेट करना
vcpkgके लिए full clone जरूरी है, क्योंकि shallow clone इस्तेमाल करने पर manifest baseline टूट सकती है- Vulkan SDK के लिए Homebrew cask नहीं, बल्कि LunarG Vulkan SDK इस्तेमाल करना होगा
- repository clone करने के बाद निम्न scripts को क्रम से चलाया जाता है
./scripts/build/macos/build-macos-zh.sh: dependencies check, config, build./scripts/build/macos/deploy-macos-zh.sh:~/GeneralsX/GeneralsZHऔरrun.shबनाना./scripts/get-assets.sh <your_steam_username>: उपयोगकर्ता की खरीदी हुई गेम data लानाcd ~/GeneralsX/GeneralsZH && ./run.sh -win: चलाना
iPhone·iPad build की शर्तें
- iOS/iPadOS build के लिए macOS prerequisites के अलावा full Xcode, Apple ID sign-in,
xcodegen, और Apple Developer team की जरूरत होती है - build process में ये हिस्से शामिल हैं
references/fbraz3-dxvksubmodule initialize करना- iOS के लिए DXVK उसी submodule और
Patches/dxvk-ios.patchसे build होता है ./scripts/build/ios/fetch-moltenvk.shसे checksum वाली fixed version MoltenVK.framework लाना./scripts/build/ios/stage-fonts.shसे Liberation Fonts को उन नामों में तैयार करना जिनकी गेम को अपेक्षा हैcmake --preset ios-vulkanऔरcmake --build build/ios-vulkan --target z_generalsसे build करना
- packaging और install के लिए
GX_TEAM_IDऔरGX_BUNDLE_IDसेट करने के बाद./scripts/build/ios/package-ios-zh.sh --installचलाना होता है - Team ID को Xcode → Settings → Accounts में देखा जा सकता है
- assets app bundle के अंदर शामिल किए जाते हैं, जिससे self-contained install बनता है, और
--devतेज code iteration के लिए लगभग 2.7GB copy को skip करता है
repository में देखने लायक files और documents
docs/port/PORTING_PLAYBOOK.md: पोर्ट का पूरा engineering log, जिसमें failure modes, root causes और fixes दर्ज हैं- §8 bug archaeology में black minimap, silent EVA lines और chirp issues शामिल हैं
docs/port/PORTING_PATTERNS.md: क्लासिक Windows games को Apple platforms पर पोर्ट करने की सामान्य methodologydocs/port/RELEASE_CHECKLIST.md: public release gatesscripts/get-assets.sh: खरीदे हुए Steam assets लाने वाली scriptscripts/build/macos/,scripts/build/ios/: build, deploy, packaging pipelineios/: XcodeGen signing stub project औरios/config/में तैयारOptions.ini,dxvk.confPatches/dxvk-ios.patch: iOS d3d8/d3d9 dylib build के लिए इस्तेमाल होने वाले DXVK changes
अभी बाकी सीमाएँ
- iPad पर लंबे session के दौरान लगभग 3GB+ memory resident पर iOS ऐप को बंद कर सकता है
- ऐसे में ऐप बिना किसी dialog के home screen पर लौट जाती है
- मौजूदा और पिछले session logs, Files app के गेम folder में मिलते हैं
- इस समस्या की जांच जारी है
- iOS पर गेम खेलते समय background में जाने पर कभी-कभी crash हो सकता है
- lifecycle pause सामान्य paths को handle करता है
- एक दुर्लभ race condition अब भी बाकी है, इसलिए बार-बार save करना चाहिए
लाइसेंस और बनाने का तरीका
- engine code GPL v3 के तहत है, और flow है EA source release → GeneralsX → यह fork
- गेम assets शामिल नहीं हैं, और यहाँ license नहीं किए गए हैं
- credits में Westwood/EA Pacific, EA, fbraz3/GeneralsX, TheSuperHackers/GeneralsGameCode, DXVK, MoltenVK, SDL, OpenAL Soft, FFmpeg, Liberation Fonts शामिल हैं
- यह पोर्ट मानव+AI सहयोग से बनाया गया है
- engineering का काम Claude Code, यानी Anthropic के Claude Fable model ने किया
- Ammaar Reshi ने वास्तविक डिवाइसों पर direction setting और playtesting की
docs/port/के engineering logs उस कार्यप्रणाली का बिना संपादन किया गया रिकॉर्ड हैं
1 टिप्पणियां
Hacker News की राय
यह इंसान द्वारा मॉडल को गाइड करके बड़े पैमाने पर रूपांतरण करवाने के एक काफ़ी अच्छे उपयोग-केस जैसा लगता है
लेकिन पोर्टिंग डॉक्युमेंट्स को इंसान थोड़ा और सँवार देता तो अच्छा होता। AI-जनरेटेड लिखने का अंदाज़ खटकता है
दायरा कम है, ज़्यादातर मज़े के लिए किया गया काम है, और बार-बार सुधार भी संभव है। यह उस स्थिति से अलग है जहाँ Bun ने कहा था, “हमने सब कुछ Zig से Rust में बदल दिया, यह स्वाभाविक रूप से अच्छी तरह चलता है, जल्द ही प्रोडक्शन में डाल सकते हैं, और हमने क्या किया उस पर एक ब्लॉग पोस्ट भी लिखेंगे,” लेकिन वह पोस्ट अब तक नहीं आई
इसे LLM के खराब इस्तेमाल का उदाहरण कहा जाता है, लेकिन यह पहले से काफ़ी समय से प्रोडक्शन में इस्तेमाल हो रहा है, और Claude Code की वजह से bugs या segmentation faults जैसी चीज़ें पहले से अर्थपूर्ण रूप से बढ़ी हों, ऐसा कोई सबूत मैंने नहीं सुना
“काफ़ी ठीक, बुरा नहीं, अच्छा उपयोग-केस।” आख़िर Fable ने किया क्या है
(tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom)जैसी चीज़ें coding agents में अक्सर दिखने वाली एक और AI-जैसी अभिव्यक्ति हैंलगता है इन्हें अपेक्षाकृत जटिल और ठोस अवधारणाओं को नए compound nouns या कभी-कभी verbs बनाकर एक-शब्दीय phrase की तरह समेटना पसंद है। यह tokens बचाने के लिए है या बाद में फिर से संदर्भित करने लायक संक्षिप्त identifier बनाने के लिए, पता नहीं, लेकिन काफ़ी नज़र आता है
नतीजे में वाक्य पढ़ने में मुश्किल होते हैं, लेकिन अगर इस प्रवृत्ति का पता हो और जानबूझकर noun phrases को parse किया जाए, तो थोड़ा आसान हो जाता है। फिर भी, यह coding agent का intermediate output है, कोई essay या blog post नहीं, इसलिए मुझे ठीक लगता है
कुछ Germanic languages में यह स्वाभाविक है। सहज रूप से nouns को जोड़कर
lawnchairजैसा बनाना चाहता हूँ, लेकिन spelling underline आ जाती है, औरlawn chairभी अजीब लगता है, तोlawn-chairबीच का रास्ता बन जाता है## आसान शब्द, jargon नहींमैंने लिखा है कि संक्षिप्त jargon मत लिखो, बल्कि जो कहना चाहते हो उसे सीधे कहो
जैसे “load-bearing assumptions” की जगह “वह assumptions जिन पर xyz निर्भर करता है” लिखो, और “cross-service” कहने के बजाय X service और Y service का नाम सीधे लिखो
“Cross-RCA double-counting is unfounded” जैसे अमूर्त noun phrases भी मना हैं, और उसकी जगह “हमने जाँचा कि RCA runs के बीच वही root cause दो बार तो नहीं गिना जा रहा, और ऐसा नहीं था” जैसा लिखने को कहा है
## दुनिया हिला देने वाली घोषणाएँ नहीं“महत्वपूर्ण खोज सब कुछ बदल देती है”, “अब हमें पूरी तस्वीर समझ आ गई”, “यह game changer है” जैसी अतिशयोक्ति हटाकर, जो मिला है उसे सादगी से लिखने को कहा है
## yes को रिफ्लेक्स की तरह धुँधला मत करोअगर जवाब yes है तो yes कहो। हर positive जवाब के साथ caveat जोड़ने से भरोसा कमज़ोर पड़ता है, इसलिए caveat तभी जोड़ो जब सचमुच कोई ठोस uncertainty हो
यह 2–4 advanced concepts को एक-दो शब्दों में पिरो देता है, इसलिए हर बार कहना पड़ता है, “इसे खोलकर समझाओ।” native speakers के लिए भी यह आसान नहीं होगा, लेकिन non-native लोगों के लिए और कठिन है
असली बात यह है कि यह EA के GPL v3 source release पर आधारित fbraz3/GeneralsX के ऊपर बनाया गया है। macOS/Linux पोर्टिंग का बड़ा काम GeneralsX ने किया था, और यह fork सिर्फ iOS/iPadOS पोर्टिंग और engine में कुछ अतिरिक्त बदलाव जोड़ता है
यह ऐसा नहीं लगता कि इसमें असाधारण मेहनत लगी हो, और Opus 4.6 भी शायद इसके लिए काफ़ी था
सोच रहा हूँ कि क्या यह तकनीक Emperor: Battle for Dune (2001) के लिए भी उपयोगी होगी
यह Westwood Studios का पहला 3D real-time strategy गेम था और C&C Generals से कुछ साल पहले आया था। intellectual property विवादों और मूल सेटिंग से हटकर नए factions जोड़ने की वजह से इसकी लोकप्रियता सीमित रही, लेकिन gameplay, soundtrack, और campaign missions शानदार थे
बचपन में मैंने इस गेम पर अनगिनत घंटे लगाए थे, और उम्र बढ़ने के साथ, जैसे-जैसे तकनीक अपने मूल प्लेटफ़ॉर्म से आगे निकल गई, इसे फिर से खेलना लगातार मुश्किल होता गया
समर्पित फैंस के हाथों में यह AI की मदद का एक अच्छा इस्तेमाल है। समय मिला तो मैं user-made maps और units के साथ भी प्रयोग करना चाहूँगा। C&C Generals की modding community हमेशा काफ़ी सक्रिय रही है
पीछे आने वाले दूसरे मूर्खों के लिए बता दूँ, नीचे दी गई गलती का मतलब है कि आपने Steam पर गेम नहीं खरीदा है
"ERROR! Failed to install app '2732960' (No subscription)"बेशक, यह README में पहले से लिखा है
Fable ने यह किया होगा, ऐसा नहीं लगता। “command and conquer” शब्द पर ही रुककर इसे Opus पर downgrade कर दिया होगा, और साथ ही शायद NSA watchlist में भी डाल दिया होगा
“Fable इस्तेमाल किया” कहना अजीब है, क्योंकि पहला commit तो पिछले साल फ़रवरी का है, तो मामला क्या है?
इसी तरह AI का इस्तेमाल करके उसी engine के Battle for Middle Earth को “open source” बनाने पर काम हो रहा है: https://github.com/dginovker/BFME-Source-Code
binary से source code को सिर्फ decompile करके सार्वजनिक करना क्या समस्या नहीं है?
यह clean room approach नहीं है, और कंपनियाँ अब भी इसे copyright infringement कहकर हटवा सकती हैं
शीर्षक भ्रामक है
यह काम फ़रवरी में शुरू हुआ था, और commits देखने पर Fable का योगदान हाल के commits के छोटे से हिस्से तक ही सीमित दिखता है। 2000 में से 19 commits: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
ऊपर से यह Fable भी न हो सकता है। संभव है कि इसे Opus पर downgrade किया गया हो
ऐसी बार-बार की ग़लत जानकारी की वजह से Anthropic के LLM दावों पर संदेह होता है। web development workflow में GPT 5.5 के मुकाबले ये लोग कभी आगे, कभी पीछे दिखते हैं, और दोबारा चालू होने के बाद जिस Fable को मैंने टेस्ट करना शुरू किया, उसमें भी यही लगा
अगर कोई LLM ठीक-ठाक है, तो वह ऐसा पोर्ट कर सकता था। GLM 5.2 जैसा मॉडल भी शायद कर लेता, और शायद वह इसलिए बेहतर रहता क्योंकि वह बार-बार यह अंदाज़ा नहीं लगाता कि क्या मैं सरकार को hack करने वाला terrorist हूँ या biological weapon बनाने वाला हूँ
लोगों के पास LLMs की तुलना करने के लिए संसाधन कम हैं, इसलिए वे आसानी से इशारा कर देते हैं कि जो मॉडल उन्होंने इस्तेमाल किया वही अब तक का सबसे बेहतरीन है और उसने नया workflow खोल दिया। Opus 4.6 के बाद से मैंने बहुत कम सुधार देखा है
repository fork owner के commits 19 घंटे पहले से शुरू होते हैं, इसलिए यह कहना काफ़ी संभव है कि वह हिस्सा Fable से किया गया। लेकिन iOS support जोड़ना ऐसा काम था जिसे पुराने models नहीं कर सकते थे और सिर्फ Fable ही कर सकता था, यह बात मुझे भी बिल्कुल स्पष्ट नहीं है