Command & Conquer Generals, Fable ile macOS, iPhone ve iPad’e yerel olarak port edildi
(github.com/ammaarreshi)- Command & Conquer Generals: Zero Hour, Apple Silicon Mac, iPhone ve iPad’de emülasyon olmadan çalışıyor; böylece klasik RTS, modern Apple cihazlarında doğrudan oynanabiliyor
- İşin özü, 2003’teki gerçek motorun ARM64 için derlenmesi; grafikler DirectX 8 → DXVK → Vulkan → MoltenVK → Metal hattından dönüştürülüyor
- EA’in GPL v3 kaynak kod yayını ve GeneralsX macOS/Linux portu temel alınırken, bu fork iOS/iPadOS desteği ve motor düzeltmeleri ekliyor
- Oyun varlıkları pakete dahil edilmediğinden, Steam gibi platformlardan sahip olduğunuz kopyanın verilerini kendiniz getirmeniz gerekiyor
- iPad’de uzun süreli oyun oturumları, yaklaşık 3 GB+ bellek kullanımında sonlanabiliyor; ayrıca iOS’ta arka plana geçiş sırasında çökme ihtimali de sürdüğü için sık kayıt yapmak gerekiyor
Apple cihazlarda çalışan gerçek Zero Hour motoru
- Zero Hour, Apple Silicon Mac, iPhone ve iPad’de yerel olarak çalışıyor
- Campaign, skirmish ve Generals Challenge modlarını destekliyor
- RTS için dokunmatik kontroller içeriyor
- dokunarak seçme
- sürükleyerek kutu seçimi
- uzun basarak seçimi kaldırma
- iki parmakla kaydırma
- pinch zoom
- Çalışma şekli emülasyon değil, 2003’teki gerçek motorun ARM64 için derlenmiş hali
- Render hattı DirectX 8 → DXVK → Vulkan → MoltenVK → Metal şeklinde ilerliyor
GeneralsX tabanlı fork’un kapsamı
- Motor kodu, EA’in GPL v3 kaynak kod yayınına dayanıyor
- Temel port fbraz3/GeneralsX; macOS/Linux portunun ana çalışması GeneralsX içinde yapıldı
- Bu fork, iOS/iPadOS portunu ve motordaki düzenlemeleri ekliyor
- Orijinal GeneralsX README dosyası
upstream-mainbranch’inde bulunuyor
Oyun varlıklarını kullanıcı kendisi hazırlamalı
- Oyun varlıkları dahil edilmiyor veya dağıtılmıyor
- Kullanıcının oyunun kendi kopyasına sahip olması gerekiyor
- Bir Steam bağlantısı veriliyor ve indirim dönemlerinde yaklaşık 5 dolar olduğu belirtiliyor
scripts/get-assets.sh, kullanıcının sahip olduğu Steam oyun verilerini getiren betik; hedef uygulama ID’si 2732960
macOS derleme ve çalıştırma akışı
- macOS derlemesi için bir kereye mahsus bazı ön hazırlıklar gerekiyor
xcode-select --installbrew install cmake ninja meson pkgconfbrew install --cask steamcmdvcpkgiçin tam clone veVCPKG_ROOTayarı- LunarG Vulkan SDK kurulumu ve
VULKAN_SDKayarı
vcpkg, shallow clone kullanılırsa manifest baseline bozulabildiği için tam clone gerektiriyor- Vulkan SDK için Homebrew cask değil, LunarG Vulkan SDK kullanılmalı
- Depo clone edildikten sonra şu betikler sırayla çalıştırılıyor
./scripts/build/macos/build-macos-zh.sh: bağımlılık kontrolü, yapılandırma, derleme./scripts/build/macos/deploy-macos-zh.sh:~/GeneralsX/GeneralsZHverun.sholuşturma./scripts/get-assets.sh <your_steam_username>: kullanıcının sahip olduğu oyun verilerini getirmecd ~/GeneralsX/GeneralsZH && ./run.sh -win: çalıştırma
iPhone ve iPad derleme koşulları
- iOS/iPadOS derlemesi için macOS ön hazırlıklarına ek olarak tam Xcode, Apple ID ile giriş,
xcodegenve bir Apple Developer team gerekiyor - Derleme süreci şu bileşenlerden oluşuyor
references/fbraz3-dxvksubmodule’ünü başlatma- iOS için DXVK, ilgili submodule ve
Patches/dxvk-ios.patchüzerinden derleniyor ./scripts/build/ios/fetch-moltenvk.shile checksum’ı doğrulanmış sabit sürüm MoltenVK.framework alınıyor./scripts/build/ios/stage-fonts.shile Liberation Fonts, oyunun beklediği adlarla hazırlanıyorcmake --preset ios-vulkanvecmake --build build/ios-vulkan --target z_generalsile derleme yapılıyor
- Paketleme ve kurulum için
GX_TEAM_IDveGX_BUNDLE_IDayarlandıktan sonra./scripts/build/ios/package-ios-zh.sh --installçalıştırılıyor - Team ID, Xcode → Settings → Accounts altında görülebiliyor
- Varlıklar uygulama bundle’ının içine dahil edilerek kendi kendine yeterli bir kurulum sağlanıyor;
--dev, hızlı kod iterasyonu için yaklaşık 2.7 GB’lık kopyalama adımını atlıyor
Depoda bakmaya değer dosyalar ve belgeler
docs/port/PORTING_PLAYBOOK.md: portun tam mühendislik günlüğü; başarısızlık modları, kök nedenler ve düzeltmeleri kaydediyor- §8 bug archaeology, siyah minimap, sessiz EVA replikleri ve chirp sorunlarını ele alıyor
docs/port/PORTING_PATTERNS.md: klasik Windows oyunlarını Apple platformlarına port etmenin genelleştirilmiş metodolojisidocs/port/RELEASE_CHECKLIST.md: genel kullanıma açık sürüm için kontrol kapılarıscripts/get-assets.sh: kullanıcının sahip olduğu Steam varlıklarını getiren betikscripts/build/macos/,scripts/build/ios/: derleme, dağıtım ve paketleme pipeline’larıios/: XcodeGen imzalama stub projesi veios/config/içindeki hazırOptions.ini,dxvk.confPatches/dxvk-ios.patch: iOS d3d8/d3d9 dylib derlemelerinde kullanılan DXVK değişiklikleri
Hâlâ kalan kısıtlar
- iPad’de uzun oturumlar, yaklaşık 3 GB+ bellek kullanımında iOS tarafından sonlandırılabiliyor
- Bu durumda uygulama herhangi bir iletişim kutusu göstermeden ana ekrana dönüyor
- Geçerli ve önceki oturum günlükleri, Files uygulamasındaki oyun klasöründe bulunuyor
- Sorun şu anda araştırılıyor
- iOS’ta oyun sırasında arka plana geçildiğinde bazen çökme yaşanabiliyor
- Yaşam döngüsü duraklatması normal akışı ele alıyor
- Nadir bir race condition kaldığı için sık kayıt yapmak gerekiyor
Lisans ve üretim biçimi
- Motor kodu GPL v3 lisanslı; akış EA kaynak kod yayını → GeneralsX → bu fork şeklinde
- Oyun varlıkları dahil edilmiyor ve burada lisanslanmıyor
- Katkı listesinde Westwood/EA Pacific, EA, fbraz3/GeneralsX, TheSuperHackers/GeneralsGameCode, DXVK, MoltenVK, SDL, OpenAL Soft, FFmpeg ve Liberation Fonts yer alıyor
- Port, insan + yapay zeka iş birliğiyle geliştirildi
- Mühendislik tarafını Claude Code, yani Anthropic’in Claude Fable modeli üstleniyor
- Ammaar Reshi, gerçek cihazlarda yönlendirme ve playtest çalışmalarını yürütüyor
docs/port/içindeki mühendislik günlükleri, bu çalışma biçiminin düzenlenmemiş kaydı niteliğinde
1 yorum
Hacker News görüşleri
Bu, bir insanın modeli yönlendirip kitlesel dönüşüm yaptırdığı oldukça iyi bir kullanım örneği gibi görünüyor
Yine de portlama belgelerini bir insanın biraz elden geçirmesi iyi olurmuş. Yapay zeka üretimi üslup rahatsız ediyor
Eşik düşük, yapılan iş çoğunlukla eğlence amaçlı ve tekrar tekrar iyileştirme de mümkün. Bu, Bun’ın “her şeyi Zig’den Rust’a geçirdik, tabii ki iyi çalışıyor, yakında prodüksiyona da alabiliriz ve ne yaptığımızı anlatan bir blog yazısı da yazacağız” deyip o yazının hâlâ ortada olmamasından farklı
LLM’lerin kötü kullanımı örneği deniyor ama zaten bir süredir prodüksiyonda kullanılıyor ve Claude Code yüzünden hataların ya da segmentation fault gibi sorunların öncekine göre anlamlı biçimde arttığına dair bir şey duymadım
“Oldukça iyi, fena değil, iyi bir kullanım örneği” falan. Fable tam olarak ne başardı ki
(tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom)gibi şeyler, kodlama ajanlarında sık görülen başka bir AIvari ifade biçimiGörece karmaşık ve spesifik kavramları yeni bileşik isimler ya da bazen fiiller üreterek tek kelimelik kalıplar gibi özetlemeyi seviyor gibiler. Bunun token tasarrufu için mi yoksa sonra yeniden başvurulabilecek kısa bir tanımlayıcı üretmek için mi olduğunu bilmiyorum ama oldukça göze batıyor
Ortaya çıkan cümleler okunması zor oluyor ama bu eğilimi bilip isim öbeklerini bilinçli biçimde ayrıştırınca biraz daha anlaşılır hale geliyor. Yine de bunlar kodlama ajanının ara çıktıları, bir deneme yazısı ya da blog yazısı değil; o yüzden sorun etmiyorum
Bazı Cermen dilleri zaten böyle. İçgüdüsel olarak isimleri birleştirip
lawnchairgibi yazmak istiyorum ama imla denetimi altını çiziyor,lawn chairda garip görünüyor, o yüzdenlawn-chairbir ara bölge oluyor## Basit konuş, jargon değilKısaltılmış uzman dili kullanma, gerçekten ne demek istiyorsan onu söyle diye yazdım
Mesela “load-bearing assumptions” yerine “xyz’nin dayandığı varsayımlar” yazsın, “cross-service” demesin de doğrudan X servisi ve Y servisini adlandırsın
“Cross-RCA double-counting is unfounded” gibi soyut isim öbekleriyle hüküm vermeyi de yasakladım; bunun yerine “RCA çalışmaları arasında aynı kök nedenin iki kez sayılıp sayılmadığını kontrol ettik ve sayılmadığını gördük” gibi yazsın
## Dünyayı sarsan ilanlar yok“Önemli keşif her şeyi değiştiriyor”, “artık büyük resmi gördük”, “oyun değiştirici” gibi abartıları çıkarsın, yalnızca bulunan şeyi sade biçimde anlatsın
## yes cevabını refleks olarak bulandırmaCevap yes ise yes desin. Her olumlu cevaba bir koşul eklemek kesinliği zayıflatıyor; o yüzden yalnızca gerçekten belirli bir belirsizlik varsa koşul eklesin
İki ila dört ileri kavramı bir ya da iki kelimeye sıkıştırıp yapıştırıyor; ben de her seferinde “bunu açıp açıklar mısın” demek zorunda kalıyorum. Anadili İngilizce olanlar için de kolay değildir ama olmayanlar için daha da zor
Buradaki asıl nokta, bunun EA’nın GPL v3 olarak açtığı kaynak kod sürümünü temel alan fbraz3/GeneralsX üstüne inşa edilmiş olması. macOS/Linux portunun büyük kısmını GeneralsX yapmış; bu fork ise buna iOS/iPadOS portunu ve birkaç motor değişikliğini ekliyor
İnanılmaz zahmetli bir iş gibi görünmüyor; Opus 4.6 ile de gayet yapılabilirmiş gibi
Bu tekniğin Emperor: Battle for Dune (2001) için de işe yarayıp yaramayacağını merak ediyorum
Westwood Studios’un ilk 3D gerçek zamanlı strateji oyunuydu ve C&C Generals’tan birkaç yıl daha eskiydi. Fikri mülkiyet anlaşmazlıkları ve orijinal evrenden sapıp yeni fraksiyonlar eklemesi yüzünden popülerliği sınırlı kaldı ama oynanışı, müzikleri ve görev tasarımları harikaydı
Küçükken bu oyuna sayısız saat harcadım ve yaş ilerledikçe teknoloji oyunun tasarlandığı platformu aştığı için yeniden oynamak giderek zorlaştı
Sadık hayranların elinde bu, yapay zekanın yardımcı olabileceği iyi bir alan. Zaman bulursam kullanıcı yapımı haritalar ve birimleri de denemek isterim. C&C Generals mod topluluğu her zaman oldukça hareketliydi
Arkadan gelecek diğer ahmaklar için söyleyeyim, aşağıdaki hata oyunu Steam’den satın almadığınız anlamına geliyor
"ERROR! Failed to install app '2732960' (No subscription)"Tabii README’de zaten yazıyor
Fable bunu yapmış olamaz. “command and conquer” ifadesini görünce durup Opus’a düşürmüştür; aynı anda da muhtemelen NSA izleme listesine eklemiştir
“Fable kullanıldı” demek için ilk commit’in geçen yılın şubatına ait olması nasıl açıklanıyor?
Benzer şekilde aynı motorun Battle for Middle Earth sürümünü yapay zeka kullanarak “açık kaynaklaştırmaya” çalışıyorlar: https://github.com/dginovker/BFME-Source-Code
İkili dosyadan kaynak kodu sadece decompile edip yayımlamak sorun olmaz mı?
Bu clean-room yöntemi değil ve şirketler hâlâ telif hakkı ihlali diyerek bunu kaldırtabilir
Başlık clickbait
Bu çalışma şubatta başladı ve commit’lere bakınca Fable’ın yaptığı şeyin yalnızca en yeni commit’lerin küçük bir kısmı olduğu görülüyor. 2000 commit’in 19’u: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
Üstelik Fable da olmayabilir. Opus’a düşürülmüş olması da mümkün
Bu kadar sık yanlış bilgilendirme olması, Anthropic’in LLM iddialarına karşı beni daha şüpheci yapıyor. Web geliştirme iş akışlarında GPT 5.5 ile karşılaştırınca durum karşılıklı olarak bir o öne geçip bir bu öne geçiyor; yeniden etkinleştirildikten sonra test etmeye başladığım Fable için de aynı şey geçerliydi
Düzgün herhangi bir LLM bu tür bir portu yapabilirmiş gibi geliyor. GLM 5.2 bile yapabilirdi; en azından benim devleti hacklemeye çalışan bir terörist mi yoksa biyolojik silah üretmeye çalışan biri mi olduğumu durmadan tahmin etmiyor, bu yüzden belki daha bile iyi olurdu
İnsanların LLM’leri kıyaslayacak yeterli kaynağı yok, bu yüzden kullandıkları modelin tarihteki en iyisi olduğunu ve yepyeni iş akışları açtığını kolayca ima ediyorlar. Opus 4.6’dan beri neredeyse hiç ilerleme görmedim
Depo sahibinin fork üzerindeki commit’leri 19 saat önce başlıyor; dolayısıyla o kısmın Fable ile yapılmış olması gayet makul. Ama iOS desteği eklemenin önceki modellerin yapamayacağı, yalnızca Fable’ın yapabileceği bir iş olup olmadığı bana da hiç net değil