พอร์ตเนทีฟ Command & Conquer Generals สู่ macOS·iPhone·iPad ด้วย Fable
(github.com/ammaarreshi)- Command & Conquer Generals: Zero Hour รันบน Apple Silicon Mac, iPhone และ iPad ได้โดยไม่ต้องใช้ emulation ทำให้สามารถเล่น RTS คลาสสิกนี้บนอุปกรณ์ Apple รุ่นใหม่ได้โดยตรง
- แกนหลักคือการ คอมไพล์เอนจินจริงจากปี 2003 เป็น ARM64 ส่วนกราฟิกถูกแปลงตามเส้นทาง DirectX 8 → DXVK → Vulkan → MoltenVK → Metal
- อิงจาก ซอร์สที่ EA ปล่อยภายใต้ GPL v3 และพอร์ต GeneralsX สำหรับ macOS/Linux โดย fork นี้เพิ่มการรองรับ iOS/iPadOS และการแก้ไขเอนจิน
- ไม่มีการรวม game assets มาให้ ดังนั้นต้องนำข้อมูลจาก สำเนาที่คุณเป็นเจ้าของ เช่นจาก Steam มาเอง
- การเล่นบน iPad เป็นเวลานานอาจถูกปิดเมื่อมี หน่วยความจำ resident ประมาณ 3GB ขึ้นไป และยังมีโอกาส crash เมื่อสลับแอปไป background บน iOS จึงควรบันทึกเกมบ่อย ๆ
เอนจิน Zero Hour จริงที่รันบนอุปกรณ์ Apple
- Zero Hour รันแบบเนทีฟบน Apple Silicon Mac, iPhone และ iPad
- รองรับโหมด campaign, skirmish และ Generals Challenge
- มีการควบคุมแบบสัมผัสสำหรับ RTS
- แตะเพื่อเลือก
- ลากกล่องเพื่อเลือก
- กดค้างเพื่อยกเลิกการเลือก
- เลื่อนด้วยสองนิ้ว
- pinch zoom
- วิธีรันไม่ใช่ emulation แต่เป็นการคอมไพล์ เอนจินจริงจากปี 2003 เป็น ARM64
- การเรนเดอร์ไล่ตามลำดับ DirectX 8 → DXVK → Vulkan → MoltenVK → Metal
ขอบเขตของ fork ที่อิงจาก GeneralsX
- โค้ดเอนจินอิงจาก ซอร์สที่ EA ปล่อยภายใต้ GPL v3
- พอร์ตพื้นฐานคือ fbraz3/GeneralsX โดยงานหลักของพอร์ต macOS/Linux ทำอยู่ใน GeneralsX
- fork นี้เพิ่ม พอร์ต iOS/iPadOS และการแก้ไขเอนจิน
- README เดิมของ GeneralsX อยู่ใน branch
upstream-main
ผู้ใช้ต้องเตรียม game assets เอง
- ไม่มีการรวม หรือแจกจ่าย game assets
- ผู้ใช้ต้องมีสำเนาเกมของตนเอง
- มีลิงก์ Steam ให้ และระบุว่าเมื่อมีส่วนลดจะอยู่ที่ประมาณ 5 ดอลลาร์
scripts/get-assets.shเป็นสคริปต์สำหรับนำข้อมูลเกม Steam ที่ผู้ใช้เป็นเจ้าของมาใช้ โดย app ID เป้าหมายคือ 2732960
ขั้นตอน build และรันบน macOS
- การ build บน macOS มีการเตรียมล่วงหน้าที่ต้องทำเพียงครั้งเดียว
xcode-select --installbrew install cmake ninja meson pkgconfbrew install --cask steamcmd- clone
vcpkgแบบเต็มและตั้งค่าVCPKG_ROOT - ติดตั้ง LunarG Vulkan SDK และตั้งค่า
VULKAN_SDK
vcpkgต้องใช้ การ clone แบบเต็ม เพราะหากใช้ shallow clone อาจทำให้ manifest baseline เสียได้- Vulkan SDK ต้องใช้ LunarG Vulkan SDK ไม่ใช่ Homebrew cask
- หลังจาก clone repository แล้ว ให้รันสคริปต์ต่อไปนี้ตามลำดับ
./scripts/build/macos/build-macos-zh.sh: ตรวจสอบ dependency, ตั้งค่า, build./scripts/build/macos/deploy-macos-zh.sh: สร้าง~/GeneralsX/GeneralsZHและrun.sh./scripts/get-assets.sh <your_steam_username>: นำข้อมูลเกมที่ผู้ใช้เป็นเจ้าของมาใช้cd ~/GeneralsX/GeneralsZH && ./run.sh -win: รันเกม
เงื่อนไขการ build สำหรับ iPhone·iPad
- การ build สำหรับ iOS/iPadOS ต้องมี full Xcode, การล็อกอิน Apple ID,
xcodegenและ Apple Developer team เพิ่มจากการเตรียม macOS - กระบวนการ build ประกอบด้วยองค์ประกอบต่อไปนี้
- initialize submodule
references/fbraz3-dxvk - DXVK สำหรับ iOS build จาก submodule ดังกล่าวและ
Patches/dxvk-ios.patch - ดึง MoltenVK.framework เวอร์ชันที่ fixed พร้อม checksum ด้วย
./scripts/build/ios/fetch-moltenvk.sh - เตรียม Liberation Fonts ให้เป็นชื่อที่เกมคาดหวังด้วย
./scripts/build/ios/stage-fonts.sh - build ด้วย
cmake --preset ios-vulkanและcmake --build build/ios-vulkan --target z_generals
- initialize submodule
- สำหรับ packaging และติดตั้ง ให้ตั้งค่า
GX_TEAM_IDและGX_BUNDLE_IDแล้วรัน./scripts/build/ios/package-ios-zh.sh --install - ตรวจสอบ Team ID ได้ที่ Xcode → Settings → Accounts
- assets จะถูกรวมไว้ใน app bundle ทำให้เป็น การติดตั้งแบบ self-contained ส่วน
--devจะข้ามการคัดลอกประมาณ 2.7GB เพื่อให้ iterate โค้ดได้เร็วขึ้น
ไฟล์และเอกสารที่น่าสนใจใน repository
docs/port/PORTING_PLAYBOOK.md: log วิศวกรรมทั้งหมดของพอร์ตนี้ บันทึก failure mode, root cause และการแก้ไข- §8 bug archaeology ครอบคลุมปัญหา minimap สีดำ, บทพูด EVA ไม่มีเสียง และปัญหา chirp
docs/port/PORTING_PATTERNS.md: methodology ทั่วไปสำหรับพอร์ตเกม Windows คลาสสิกมายังแพลตฟอร์ม Appledocs/port/RELEASE_CHECKLIST.md: gate สำหรับ public releasescripts/get-assets.sh: สคริปต์สำหรับนำ Steam assets ที่ผู้ใช้เป็นเจ้าของมาใช้scripts/build/macos/,scripts/build/ios/: pipeline สำหรับ build, deploy และ packagingios/: โปรเจกต์ stub สำหรับ signing ด้วย XcodeGen และOptions.ini,dxvk.confที่เตรียมไว้ในios/config/Patches/dxvk-ios.patch: การเปลี่ยนแปลง DXVK ที่ใช้ build dylib d3d8/d3d9 บน iOS
ข้อจำกัดที่ยังเหลืออยู่
- session ยาวบน iPad อาจถูก iOS ปิดเมื่ออยู่ในสถานะ หน่วยความจำ resident ประมาณ 3GB ขึ้นไป
- ในกรณีนี้ แอปจะออกไปที่ Home screen โดยไม่มี dialog
- log ของ session ปัจจุบันและก่อนหน้าอยู่ในโฟลเดอร์เกมในแอป Files
- ปัญหานี้กำลังอยู่ระหว่างการตรวจสอบ
- บน iOS หากสลับไป background ระหว่างเล่นเกม อาจ crash เป็นครั้งคราว
- lifecycle pause จัดการเส้นทางทั่วไปแล้ว
- ยังมี race condition ที่พบได้น้อยเหลืออยู่ จึงควรบันทึกเกมบ่อย ๆ
ไลเซนส์และวิธีการสร้าง
- โค้ดเอนจินเป็น GPL v3 และลำดับคือซอร์สที่ EA ปล่อย → GeneralsX → fork นี้
- ไม่มีการรวม game assets และไม่ได้ license assets เหล่านั้นที่นี่
- credits รวมถึง Westwood/EA Pacific, EA, fbraz3/GeneralsX, TheSuperHackers/GeneralsGameCode, DXVK, MoltenVK, SDL, OpenAL Soft, FFmpeg, Liberation Fonts
- พอร์ตนี้สร้างขึ้นด้วยความร่วมมือระหว่างมนุษย์+AI
- งานวิศวกรรมทำโดย Claude Code ซึ่งคือโมเดล Claude Fable ของ Anthropic
- Ammaar Reshi เป็นผู้กำหนดทิศทางและ playtest บนอุปกรณ์จริง
- log วิศวกรรมใน
docs/port/เป็นบันทึกที่ไม่ได้แก้ไขของวิธีการทำงานนั้น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นี่ดูเหมือนเป็นกรณีใช้งานที่ค่อนข้างดีของการให้คนคอยนำโมเดลเพื่อทำ การแปลงครั้งใหญ่
แต่เอกสารพอร์ตน่าจะให้คนเกลานิดหน่อยก็คงดี สำนวนแบบที่ AI สร้างมายังขัดหูขัดตาอยู่
ภาระต่ำ ส่วนใหญ่ก็ทำกันเพราะสนุก และยังปรับปรุงซ้ำได้อีก ต่างจากกรณีที่ Bun บอกว่า “เราเปลี่ยนทั้งหมดจาก Zig เป็น Rust แล้ว แน่นอนว่ารันได้ดี ใส่โปรดักชันได้เร็ว ๆ นี้ และจะเขียนบล็อกอธิบายว่าเราทำอะไรไปบ้าง” แต่จนถึงตอนนี้ก็ยังไม่มีโพสต์นั้น
อาจจะบอกว่าเป็นตัวอย่างของการใช้ LLM ไม่ดี แต่ก็ถูกใช้ในโปรดักชันมาพักใหญ่แล้ว และฉันก็ยังไม่เคยได้ยินหลักฐานว่าเพราะ Claude Code แล้วข้อผิดพลาดหรือเซกเมนเทชันฟอลต์เพิ่มขึ้นอย่างมีนัยสำคัญจากเดิม
“ค่อนข้างโอเค ไม่แย่ เป็นกรณีใช้งานที่ดี” นี่ Fable ทำอะไรสำเร็จกันแน่
พวก
(tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom)เป็นอีกหนึ่ง สำนวนแบบ AI ที่เห็นบ่อยในโค้ดดิ้งเอเจนต์ดูเหมือนมันชอบเอาแนวคิดที่ค่อนข้างซับซ้อนและเฉพาะเจาะจงมาสรุปเป็นวลีคำเดียวด้วย คำนามประสม ใหม่ ๆ หรือบางทีก็เป็นคำกริยา ไม่แน่ใจว่าเพราะพยายามประหยัดโทเคน หรืออยากสร้างตัวระบุสั้น ๆ ไว้อ้างอิงทีหลัง แต่มันสังเกตได้ชัดมาก
ประโยคที่ออกมาเลยอ่านยาก แต่ถ้ารู้แนวโน้มนี้และตั้งใจแยกวิเคราะห์วลีคำนามก็จะช่วยได้บ้าง ถึงอย่างนั้นก็มองว่าโอเค เพราะนี่เป็นผลลัพธ์ระหว่างทางของโค้ดดิ้งเอเจนต์ ไม่ใช่เรียงความหรือโพสต์บล็อก
ในบาง ภาษากลุ่มเจอร์แมนิก มันก็เป็นแบบนั้นตามธรรมชาติ ฉันมักอยากรวมคำนามตามสัญชาตญาณให้เป็นแบบ
lawnchairแต่ตัวตรวจสะกดก็ขีดเส้นใต้ แล้วlawn chairก็ดูแปลก เลยกลายเป็นlawn-chairซึ่งเป็นทางสายกลาง## ใช้คำง่าย ๆ ไม่ใช่ศัพท์วิชาชีพฉันกำชับว่าอย่าใช้ศัพท์เฉพาะแบบย่อ ๆ แต่ให้พูดสิ่งที่หมายถึงจริง ๆ
เช่น แทนที่จะเขียน “load-bearing assumptions” ก็ให้เขียนว่า “สมมติฐานที่ xyz พึ่งพา” และแทนที่จะพูดว่า “cross-service” ก็ให้ระบุชื่อบริการ X กับบริการ Y ไปเลย
ฉันยังห้ามประโยคตัดสินแบบวลีคำนามนามธรรมอย่าง “Cross-RCA double-counting is unfounded” และให้เขียนว่า “เราได้ตรวจสอบแล้วว่ามีการนับสาเหตุรากซ้ำกันระหว่างการรัน RCA หรือไม่ และผลคือไม่มี”
## ห้ามประกาศสั่นสะเทือนโลกฉันให้ตัดคำพูดเกินจริงอย่าง “การค้นพบสำคัญที่เปลี่ยนทุกอย่าง”, “ตอนนี้เราเห็นภาพรวมทั้งหมดแล้ว”, “นี่คือ game changer” ออกไป แล้วให้เขียนสิ่งที่ค้นพบอย่างเรียบ ๆ
## อย่าทำให้ yes ดูคลุมเครือโดยอัตโนมัติถ้าคำตอบคือ yes ก็ให้ตอบว่า yes ไปเลย ถ้าใส่เงื่อนไขกำกับทุกคำตอบเชิงบวกมันจะทำให้ความมั่นใจดูอ่อนลง ดังนั้นให้ใส่ข้อแม้เฉพาะเมื่อมีความไม่แน่นอนที่เป็นรูปธรรมจริง ๆ เท่านั้น
มันชอบเอาแนวคิดระดับสูง 2-4 อย่างมาเย็บติดกันเป็นคำหนึ่งหรือสองคำ จนฉันต้องขอให้ “อธิบายแบบคลี่ออก” ทุกครั้ง สำหรับเจ้าของภาษาก็คงไม่ง่าย แต่สำหรับคนที่ไม่ใช่เจ้าของภาษายิ่งยากกว่า
ประเด็นสำคัญคือมันสร้างบน fbraz3/GeneralsX ซึ่งอิงจากเวอร์ชันที่ EA เปิดซอร์สภายใต้ GPL v3 งานใหญ่ของการพอร์ต macOS/Linux นั้น GeneralsX เป็นคนทำ และฟอร์กนี้เพียงเพิ่ม การพอร์ต iOS/iPadOS กับการแก้เอนจินเพิ่มอีกเล็กน้อย
ไม่ได้ดูเหมือนงานทรหดมหาศาลอะไร และน่าจะใช้ Opus 4.6 ก็พอแล้ว
สงสัยว่าเทคนิคแบบนี้จะเป็นประโยชน์กับ Emperor: Battle for Dune (2001) ด้วยไหม
มันเป็นเกมวางแผนเรียลไทม์ 3D เกมแรกของ Westwood Studios และออกมาก่อน C&C Generals หลายปี ความนิยมอาจจำกัดเพราะข้อพิพาทเรื่องทรัพย์สินทางปัญญาและการเพิ่มฝ่ายใหม่ที่หลุดจากฉากหลังต้นฉบับ แต่เกมเพลย์ ซาวด์แทร็ก และภารกิจแคมเปญนั้นยอดเยี่ยมมาก
ตอนเด็กฉันใช้เวลาไปกับเกมนี้นับไม่ถ้วน และยิ่งอายุมากขึ้นก็ยิ่งกลับไปเล่นยาก เพราะเทคโนโลยีก้าวเลยแพลตฟอร์มที่มันตั้งใจทำมาสำหรับเดิม
ถ้าอยู่ในมือแฟน ๆ ที่ทุ่มเท นี่คือ กรณีใช้งานที่ดีที่ AI สามารถช่วยได้ ถ้ามีเวลา ฉันก็อยากลองกับแผนที่หรือยูนิตที่ผู้ใช้สร้างเองด้วย ชุมชนม็อดของ C&C Generals คึกคักมาโดยตลอด
บอกไว้เผื่อคนซื่อคนอื่นที่ตามมาทีหลัง ข้อผิดพลาดด้านล่างหมายความว่าคุณไม่ได้ซื้อเกมบน Steam
"ERROR! Failed to install app '2732960' (No subscription)"แน่นอนว่าใน README ก็เขียนไว้แล้ว
Fable ไม่น่าจะทำสิ่งนี้ได้หรอก มันคงหยุดที่คำว่า “command and conquer” แล้วลดระดับไปใช้ Opus พร้อมกับส่งชื่อขึ้นบัญชีเฝ้าระวังของ NSA ไปด้วย
ถ้าจะบอกว่า “ใช้ Fable” แล้วคอมมิตแรกเป็นตั้งแต่กุมภาพันธ์ปีที่แล้ว มันเกิดอะไรขึ้นกันแน่?
ในทำนองเดียวกัน มีงานใช้ AI เพื่อ “โอเพนซอร์ส” Battle for Middle Earth บนเอนจินเดียวกันอยู่ด้วย: https://github.com/dginovker/BFME-Source-Code
การแค่ดีคอมไพล์ซอร์สโค้ดจากไบนารีแล้วเผยแพร่ออกมาตรง ๆ มันไม่เป็นปัญหาหรือ?
นี่ไม่ใช่ แนวทางคลีนรูม และบริษัทต่าง ๆ ก็ยังอาจอ้างว่าเป็นการละเมิดลิขสิทธิ์แล้วสั่งให้ลบลงได้
ชื่อเรื่องมันล่อคลิก
งานนี้เริ่มตั้งแต่เดือนกุมภาพันธ์ และถ้าดูคอมมิต Fable ทำแค่ส่วนเล็ก ๆ ของคอมมิตล่าสุดเท่านั้น จาก 2000 คอมมิตมี 19 คอมมิต: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
แถมอาจไม่ใช่ Fable ด้วย อาจถูกลดระดับไปใช้ Opus ก็ได้
ข้อมูลผิด ๆ แบบนี้ที่เกิดขึ้นบ่อยทำให้ฉันยิ่งสงสัยคำกล่าวอ้างเรื่อง LLM ของ Anthropic ในเวิร์กโฟลว์พัฒนาเว็บ พอมันเทียบกับ GPT 5.5 ก็สูสีกันไปมา และ Fable ที่ฉันเพิ่งกลับมาเปิดใช้อีกครั้งเพื่อเริ่มทดสอบก็เหมือนกัน
ถ้าเป็น LLM ที่ใช้ได้ดี การพอร์ตแบบนี้ก็น่าจะทำได้อยู่แล้ว แม้แต่ GLM 5.2 ก็น่าจะทำได้ แถมอาจจะดีกว่าด้วยเพราะมันไม่คอยเดาว่าฉันเป็นผู้ก่อการร้ายที่พยายามแฮ็กรัฐบาลหรือกำลังจะสร้างอาวุธชีวภาพตลอดเวลา
คนส่วนใหญ่ไม่มีทรัพยากรพอจะเปรียบเทียบ LLM หลายตัว เลยชอบสื่อเป็นนัยว่าโมเดลที่ตัวเองใช้คือสุดยอดตลอดกาลและเปิดเวิร์กโฟลว์ใหม่ ๆ ได้ ฉันแทบไม่เห็นการพัฒนาที่ชัดเจนนับจาก Opus 4.6 เลย
คอมมิตของเจ้าของฟอร์กเริ่มเมื่อ 19 ชั่วโมงก่อน ดังนั้นส่วนนั้นถูกทำด้วย Fable ก็ถือว่าฟังขึ้นอยู่ เพียงแต่การเพิ่มรองรับ iOS เป็นงานที่โมเดลก่อนหน้านี้ทำไม่ได้แต่ Fable ทำได้หรือไม่นั้น สำหรับฉันก็ยังไม่ชัดเจนเลย