1 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 --install
    • brew install cmake ninja meson pkgconf
    • brew 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
  • สำหรับ 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 คลาสสิกมายังแพลตฟอร์ม Apple
  • docs/port/RELEASE_CHECKLIST.md: gate สำหรับ public release
  • scripts/get-assets.sh: สคริปต์สำหรับนำ Steam assets ที่ผู้ใช้เป็นเจ้าของมาใช้
  • scripts/build/macos/, scripts/build/ios/: pipeline สำหรับ build, deploy และ packaging
  • ios/: โปรเจกต์ 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 ความคิดเห็น

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Hacker News
  • นี่ดูเหมือนเป็นกรณีใช้งานที่ค่อนข้างดีของการให้คนคอยนำโมเดลเพื่อทำ การแปลงครั้งใหญ่
    แต่เอกสารพอร์ตน่าจะให้คนเกลานิดหน่อยก็คงดี สำนวนแบบที่ AI สร้างมายังขัดหูขัดตาอยู่
    ภาระต่ำ ส่วนใหญ่ก็ทำกันเพราะสนุก และยังปรับปรุงซ้ำได้อีก ต่างจากกรณีที่ Bun บอกว่า “เราเปลี่ยนทั้งหมดจาก Zig เป็น Rust แล้ว แน่นอนว่ารันได้ดี ใส่โปรดักชันได้เร็ว ๆ นี้ และจะเขียนบล็อกอธิบายว่าเราทำอะไรไปบ้าง” แต่จนถึงตอนนี้ก็ยังไม่มีโพสต์นั้น

    • ฉันไม่ค่อยเข้าใจประเด็น Bun เท่าไร Bun รัน Claude Code ซึ่งน่าจะเป็นหนึ่งในแอปสำหรับนักพัฒนาที่มีการใช้งานมากที่สุดในตอนนี้
      อาจจะบอกว่าเป็นตัวอย่างของการใช้ LLM ไม่ดี แต่ก็ถูกใช้ในโปรดักชันมาพักใหญ่แล้ว และฉันก็ยังไม่เคยได้ยินหลักฐานว่าเพราะ Claude Code แล้วข้อผิดพลาดหรือเซกเมนเทชันฟอลต์เพิ่มขึ้นอย่างมีนัยสำคัญจากเดิม
    • โมเดลเป็นคนทำงาน และน่าจะมีทั้งโปรเจกต์อยู่ใน หน้าต่างบริบท ดังนั้นในกรณีนี้มันอาจจะเหมาะกับการเขียนเอกสารมากกว่าด้วยซ้ำ
    • คำว่า “กรณีใช้งานที่ดีของการให้คนคอยนำโมเดลเพื่อทำการแปลงครั้งใหญ่” ยังเบาไปด้วยซ้ำ อาจเป็นการประเมินต่ำเกินไปแห่งปีก็ได้
      “ค่อนข้างโอเค ไม่แย่ เป็นกรณีใช้งานที่ดี” นี่ Fable ทำอะไรสำเร็จกันแน่
  • พวก (tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom) เป็นอีกหนึ่ง สำนวนแบบ AI ที่เห็นบ่อยในโค้ดดิ้งเอเจนต์
    ดูเหมือนมันชอบเอาแนวคิดที่ค่อนข้างซับซ้อนและเฉพาะเจาะจงมาสรุปเป็นวลีคำเดียวด้วย คำนามประสม ใหม่ ๆ หรือบางทีก็เป็นคำกริยา ไม่แน่ใจว่าเพราะพยายามประหยัดโทเคน หรืออยากสร้างตัวระบุสั้น ๆ ไว้อ้างอิงทีหลัง แต่มันสังเกตได้ชัดมาก
    ประโยคที่ออกมาเลยอ่านยาก แต่ถ้ารู้แนวโน้มนี้และตั้งใจแยกวิเคราะห์วลีคำนามก็จะช่วยได้บ้าง ถึงอย่างนั้นก็มองว่าโอเค เพราะนี่เป็นผลลัพธ์ระหว่างทางของโค้ดดิ้งเอเจนต์ ไม่ใช่เรียงความหรือโพสต์บล็อก

    • ฉันก็ทำแบบนั้นบ้างเหมือนกัน
      ในบาง ภาษากลุ่มเจอร์แมนิก มันก็เป็นแบบนั้นตามธรรมชาติ ฉันมักอยากรวมคำนามตามสัญชาตญาณให้เป็นแบบ lawnchair แต่ตัวตรวจสะกดก็ขีดเส้นใต้ แล้ว lawn chair ก็ดูแปลก เลยกลายเป็น lawn-chair ซึ่งเป็นทางสายกลาง
    • น่าหงุดหงิดจริง ๆ ฉันลองห้ามไว้ใน AGENTS.md แล้ว แต่ก็ไม่ได้ผล 100%
      ## ใช้คำง่าย ๆ ไม่ใช่ศัพท์วิชาชีพ
      ฉันกำชับว่าอย่าใช้ศัพท์เฉพาะแบบย่อ ๆ แต่ให้พูดสิ่งที่หมายถึงจริง ๆ
      เช่น แทนที่จะเขียน “load-bearing assumptions” ก็ให้เขียนว่า “สมมติฐานที่ xyz พึ่งพา” และแทนที่จะพูดว่า “cross-service” ก็ให้ระบุชื่อบริการ X กับบริการ Y ไปเลย
      ฉันยังห้ามประโยคตัดสินแบบวลีคำนามนามธรรมอย่าง “Cross-RCA double-counting is unfounded” และให้เขียนว่า “เราได้ตรวจสอบแล้วว่ามีการนับสาเหตุรากซ้ำกันระหว่างการรัน RCA หรือไม่ และผลคือไม่มี”
      ## ห้ามประกาศสั่นสะเทือนโลก
      ฉันให้ตัดคำพูดเกินจริงอย่าง “การค้นพบสำคัญที่เปลี่ยนทุกอย่าง”, “ตอนนี้เราเห็นภาพรวมทั้งหมดแล้ว”, “นี่คือ game changer” ออกไป แล้วให้เขียนสิ่งที่ค้นพบอย่างเรียบ ๆ
      ## อย่าทำให้ yes ดูคลุมเครือโดยอัตโนมัติ
      ถ้าคำตอบคือ yes ก็ให้ตอบว่า yes ไปเลย ถ้าใส่เงื่อนไขกำกับทุกคำตอบเชิงบวกมันจะทำให้ความมั่นใจดูอ่อนลง ดังนั้นให้ใส่ข้อแม้เฉพาะเมื่อมีความไม่แน่นอนที่เป็นรูปธรรมจริง ๆ เท่านั้น
    • หรือจริง ๆ แล้ว LLM อาจจะเป็นคนเยอรมันก็ได้
    • ฉันพูดและเขียนภาษาอังกฤษได้ค่อนข้างคล่องสำหรับคนที่ไม่ใช่เจ้าของภาษา แต่ปัญหาใหญ่สุดของ Claude สำหรับฉันก็คือเรื่องนี้นี่แหละ
      มันชอบเอาแนวคิดระดับสูง 2-4 อย่างมาเย็บติดกันเป็นคำหนึ่งหรือสองคำ จนฉันต้องขอให้ “อธิบายแบบคลี่ออก” ทุกครั้ง สำหรับเจ้าของภาษาก็คงไม่ง่าย แต่สำหรับคนที่ไม่ใช่เจ้าของภาษายิ่งยากกว่า
    • การ-ใส่-ขีด-มาก-เกิน-ไป คืออาการหมกมุ่น-AI
  • ประเด็นสำคัญคือมันสร้างบน fbraz3/GeneralsX ซึ่งอิงจากเวอร์ชันที่ EA เปิดซอร์สภายใต้ GPL v3 งานใหญ่ของการพอร์ต macOS/Linux นั้น GeneralsX เป็นคนทำ และฟอร์กนี้เพียงเพิ่ม การพอร์ต iOS/iPadOS กับการแก้เอนจินเพิ่มอีกเล็กน้อย

    • ฝั่ง Renegade ก็มีงานคล้ายกันกำลังทำอยู่ และทั้งหมดนี้กำลังทำบนอีกเอนจินหนึ่งตั้งแต่ต้น ดังนั้นก็ดูเป็นไปได้มาก
    • เกมนี้รันบน Windows รุ่นใหม่ได้แย่มากจนต้องการ การย้อนพอร์ตไป Winx64
    • ใช่แล้ว สิ่งที่ Fable ทำก็แค่พอร์ตโปรเจกต์ที่เดิมก็เป็นข้ามแพลตฟอร์มอยู่แล้วไปลง iOS
      ไม่ได้ดูเหมือนงานทรหดมหาศาลอะไร และน่าจะใช้ Opus 4.6 ก็พอแล้ว
  • สงสัยว่าเทคนิคแบบนี้จะเป็นประโยชน์กับ Emperor: Battle for Dune (2001) ด้วยไหม
    มันเป็นเกมวางแผนเรียลไทม์ 3D เกมแรกของ Westwood Studios และออกมาก่อน C&C Generals หลายปี ความนิยมอาจจำกัดเพราะข้อพิพาทเรื่องทรัพย์สินทางปัญญาและการเพิ่มฝ่ายใหม่ที่หลุดจากฉากหลังต้นฉบับ แต่เกมเพลย์ ซาวด์แทร็ก และภารกิจแคมเปญนั้นยอดเยี่ยมมาก

    • Fable น่าจะลองทำก่อนวันที่ 7 กรกฎาคม ตอนที่มันจะหายไปจากราคาเหมาจ่ายของ Claude Code
    • มันเป็นหนึ่งในเกมวางแผนเรียลไทม์ที่ดีที่สุดของยุคนั้น และทุกวันนี้ก็ยังเล่นได้ดี เพลงก็ยอดเยี่ยมมาก
    • ฉันจะลองดูสักครั้ง
    • นี่ไม่ใช่ 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” แล้วคอมมิตแรกเป็นตั้งแต่กุมภาพันธ์ปีที่แล้ว มันเกิดอะไรขึ้นกันแน่?

    • แค่ฟอร์ก GeneralsX แล้วเพิ่มเพียงไม่กี่คอมมิตสุดท้ายเข้าไป
    • คงไม่ได้ทำด้วย Fable อย่างเดียว
    • ไม่ได้เป็นแบบนั้นหรอก มันก็แค่โพสต์การตลาดฟรีให้อีกชิ้นหนึ่งสำหรับ Anthropic
  • ในทำนองเดียวกัน มีงานใช้ 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 เลย

    • โปรเจกต์นี้เป็นฟอร์ก และสิ่งที่ทำจริง ๆ คือ เพิ่มการรองรับ iOS
      คอมมิตของเจ้าของฟอร์กเริ่มเมื่อ 19 ชั่วโมงก่อน ดังนั้นส่วนนั้นถูกทำด้วย Fable ก็ถือว่าฟังขึ้นอยู่ เพียงแต่การเพิ่มรองรับ iOS เป็นงานที่โมเดลก่อนหน้านี้ทำไม่ได้แต่ Fable ทำได้หรือไม่นั้น สำหรับฉันก็ยังไม่ชัดเจนเลย