1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Command & Conquer Generals: Zero Hour chạy trên Apple Silicon Mac, iPhone, iPad mà không cần giả lập, cho phép chơi trực tiếp tựa RTS kinh điển trên các thiết bị Apple hiện đại
  • Điểm cốt lõi là biên dịch ARM64 từ engine thực tế năm 2003; đồ họa được chuyển đổi theo tuyến DirectX 8 → DXVK → Vulkan → MoltenVK → Metal
  • Dựa trên bản phát hành mã nguồn GPL v3 của EA và bản port GeneralsX cho macOS/Linux, fork này bổ sung hỗ trợ iOS/iPadOS và các chỉnh sửa engine
  • Tài nguyên game không được bao gồm, nên người dùng phải tự lấy dữ liệu từ bản sao mình sở hữu, chẳng hạn trên Steam
  • Chơi lâu trên iPad có thể bị thoát do mức bộ nhớ thường trú khoảng từ 3GB trở lên, và vẫn còn khả năng crash khi chuyển sang nền trên iOS, nên cần lưu game thường xuyên

Engine Zero Hour thực sự chạy trên thiết bị Apple

  • Zero Hour chạy native trên Apple Silicon Mac, iPhone, iPad
  • Hỗ trợ các chế độ chiến dịch, skirmish và Generals Challenge
  • Có thao tác cảm ứng cho RTS
    • Chạm để chọn
    • Kéo khung để chọn
    • Nhấn giữ để bỏ chọn
    • Cuộn bằng hai ngón tay
    • Chụm để zoom
  • Cách chạy không phải giả lập, mà là dạng biên dịch engine thực tế năm 2003 sang ARM64
  • Rendering đi theo chuỗi DirectX 8 → DXVK → Vulkan → MoltenVK → Metal

Phạm vi của fork dựa trên GeneralsX

  • Mã engine dựa trên bản phát hành mã nguồn GPL v3 của EA
  • Bản port nền tảng là fbraz3/GeneralsX; phần việc cốt lõi của bản port macOS/Linux được thực hiện trong GeneralsX
  • Fork này bổ sung bản port iOS/iPadOS và các chỉnh sửa engine
  • README gốc của GeneralsX nằm ở nhánh upstream-main

Người dùng phải tự chuẩn bị tài nguyên game

  • Tài nguyên game không được bao gồm hoặc phân phối
  • Người dùng cần có bản sao game của riêng mình
  • Có cung cấp liên kết Steam, kèm ghi chú rằng khi giảm giá giá khoảng 5 USD
  • scripts/get-assets.sh là script lấy dữ liệu game trên Steam mà người dùng sở hữu; app ID đích là 2732960

Luồng build và chạy trên macOS

  • Build trên macOS cần một số bước chuẩn bị chỉ phải làm một lần
    • xcode-select --install
    • brew install cmake ninja meson pkgconf
    • brew install --cask steamcmd
    • Clone đầy đủ vcpkg và thiết lập VCPKG_ROOT
    • Cài LunarG Vulkan SDK và thiết lập VULKAN_SDK
  • vcpkg cần clone đầy đủ vì dùng shallow clone có thể làm hỏng manifest baseline
  • Vulkan SDK phải dùng LunarG Vulkan SDK, không phải Homebrew cask
  • Sau khi clone repository, chạy lần lượt các script sau
    • ./scripts/build/macos/build-macos-zh.sh: kiểm tra phụ thuộc, cấu hình, build
    • ./scripts/build/macos/deploy-macos-zh.sh: tạo ~/GeneralsX/GeneralsZHrun.sh
    • ./scripts/get-assets.sh <your_steam_username>: lấy dữ liệu game mà người dùng sở hữu
    • cd ~/GeneralsX/GeneralsZH && ./run.sh -win: chạy

Điều kiện build cho iPhone·iPad

  • Build iOS/iPadOS cần thêm bản Xcode đầy đủ, đăng nhập Apple ID, xcodegen và Apple Developer team, ngoài các bước chuẩn bị cho macOS
  • Quy trình build gồm các yếu tố sau
    • Khởi tạo submodule references/fbraz3-dxvk
    • DXVK cho iOS được build từ submodule đó và Patches/dxvk-ios.patch
    • Lấy phiên bản cố định của MoltenVK.framework có checksum bằng ./scripts/build/ios/fetch-moltenvk.sh
    • Chuẩn bị Liberation Fonts theo tên mà game kỳ vọng bằng ./scripts/build/ios/stage-fonts.sh
    • Build bằng cmake --preset ios-vulkancmake --build build/ios-vulkan --target z_generals
  • Để đóng gói và cài đặt, thiết lập GX_TEAM_IDGX_BUNDLE_ID rồi chạy ./scripts/build/ios/package-ios-zh.sh --install
  • Team ID được xem trong Xcode → Settings → Accounts
  • Tài nguyên được đưa vào trong app bundle để thành bản cài đặt tự chứa; --dev bỏ qua việc sao chép khoảng 2,7GB nhằm lặp nhanh phần code

Các tệp và tài liệu đáng xem trong repository

  • docs/port/PORTING_PLAYBOOK.md: nhật ký kỹ thuật đầy đủ của bản port, ghi lại các chế độ lỗi, nguyên nhân gốc và cách sửa
    • §8 bug archaeology xử lý các vấn đề như minimap đen, thoại EVA bị mất tiếng và lỗi chirp
  • docs/port/PORTING_PATTERNS.md: phương pháp luận tổng quát để port game Windows cổ điển sang nền tảng Apple
  • docs/port/RELEASE_CHECKLIST.md: các cổng kiểm tra cho bản phát hành công khai
  • scripts/get-assets.sh: script lấy tài nguyên Steam mà người dùng sở hữu
  • scripts/build/macos/, scripts/build/ios/: pipeline build, triển khai và đóng gói
  • ios/: dự án stub ký bằng XcodeGen và các tệp Options.ini, dxvk.conf đã chuẩn bị trong ios/config/
  • Patches/dxvk-ios.patch: các thay đổi DXVK dùng để build dylib d3d8/d3d9 cho iOS

Những hạn chế còn tồn tại

  • Các phiên chơi dài trên iPad có thể bị iOS chấm dứt khi mức bộ nhớ thường trú khoảng từ 3GB trở lên
    • Khi đó, app thoát ra màn hình chính mà không có hộp thoại
    • Log của phiên hiện tại và phiên trước nằm trong thư mục game của ứng dụng Files
    • Vấn đề này đang được điều tra
  • Trên iOS, thỉnh thoảng có thể crash nếu chuyển game sang nền trong lúc đang chơi
    • Cơ chế tạm dừng vòng đời xử lý các đường đi thông thường
    • Vẫn còn một race condition hiếm gặp, nên cần lưu game thường xuyên

Giấy phép và cách thực hiện

  • Mã engine là GPL v3, với luồng là bản phát hành mã nguồn của EA → GeneralsX → fork này
  • Tài nguyên game không được bao gồm và không được cấp phép tại đây
  • Phần ghi công bao gồm Westwood/EA Pacific, EA, fbraz3/GeneralsX, TheSuperHackers/GeneralsGameCode, DXVK, MoltenVK, SDL, OpenAL Soft, FFmpeg, Liberation Fonts
  • Bản port được tạo ra bằng hợp tác giữa con người và AI
    • Phần kỹ thuật do Claude Code, tức mô hình Claude Fable của Anthropic, đảm nhiệm
    • Ammaar Reshi định hướng và playtest trên thiết bị thực
    • Nhật ký kỹ thuật trong docs/port/ là bản ghi chưa biên tập về cách làm việc đó

1 bình luận

 
Ý kiến trên Hacker News
  • Đây có vẻ là một trường hợp sử dụng khá hay, trong đó con người dẫn dắt mô hình để thực hiện chuyển đổi quy mô lớn
    Tuy vậy, tài liệu port nên được con người chỉnh lại một chút. Văn phong do AI tạo ra khá khó chịu
    Rủi ro thấp, phần lớn làm cho vui và có thể cải tiến lặp lại. Nó khác với chuyện Bun nói rằng “đã đổi hết từ Zig sang Rust, tất nhiên chạy tốt, sắp đưa vào production được, và chúng tôi cũng sẽ viết blog về những gì đã làm”, nhưng đến giờ vẫn chưa có bài đó

    • Tôi không hiểu lắm chuyện Bun. Bun có lẽ đang chạy Claude Code, một trong những ứng dụng dành cho nhà phát triển được dùng nhiều nhất hiện nay
      Dù bị xem là ví dụ dùng LLM tệ, nó đã được dùng trong production một thời gian rồi, và tôi chưa nghe bằng chứng nào cho thấy vì Claude Code mà lỗi hay lỗi segmentation tăng đáng kể so với trước
    • Mô hình đã làm công việc này và có lẽ nắm toàn bộ trong cửa sổ ngữ cảnh, nên ở đây nó thậm chí có thể phù hợp hơn cho việc viết tài liệu
    • Cách nói “một cách dùng hay khi con người dẫn dắt mô hình để chuyển đổi quy mô lớn” là quá nhẹ. Có khi là câu nói đánh giá thấp nhất năm
      “Khá ổn, không tệ, một trường hợp sử dụng tốt” cơ đấy. Fable rốt cuộc đã làm được chuyện gì vậy
  • Những thứ như (tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom) là một kiểu diễn đạt rất AI khác thường thấy ở các coding agent
    Có vẻ chúng thích tóm tắt các khái niệm tương đối phức tạp và cụ thể thành danh từ ghép mới, hoặc đôi khi là động từ, như thể đó là một cụm một từ. Không rõ là để tiết kiệm token hay để tạo một định danh ngắn gọn có thể tham chiếu lại sau này, nhưng khá dễ nhận ra
    Câu kết quả khó đọc, nhưng nếu biết khuynh hướng đó và chủ động phân tích cụm danh từ thì sẽ đỡ hơn. Dù sao tôi nghĩ cũng ổn, vì đó là sản phẩm trung gian của coding agent chứ không phải bài luận hay bài blog

    • Thỉnh thoảng tôi cũng làm vậy
      Một số ngôn ngữ Germanic vận hành kiểu đó. Theo bản năng muốn ghép danh từ lại thành kiểu lawnchair, rồi bị gạch chân chính tả; lawn chair cũng trông lạ, nên lawn-chair trở thành vùng trung gian
    • Thật sự khó chịu. Tôi đã thử cấm trong AGENTS.md nhưng không hiệu quả 100%
      ## Dùng lời dễ hiểu, không dùng thuật ngữ chuyên môn
      Tôi dặn không dùng thuật ngữ rút gọn, mà hãy nói đúng điều thực sự muốn nói
      Ví dụ, thay vì “load-bearing assumptions” thì viết “các giả định mà xyz phụ thuộc vào”, và đừng nói “cross-service” mà hãy nêu trực tiếp tên dịch vụ X và dịch vụ Y
      Cũng cấm các phán định bằng cụm danh từ trừu tượng như “Cross-RCA double-counting is unfounded”, và bắt viết kiểu “đã kiểm tra xem cùng một nguyên nhân gốc có bị tính hai lần giữa các lần chạy RCA hay không, và kết quả là không”
      ## Không tuyên bố làm rung chuyển thế giới
      Bỏ những phóng đại như “phát hiện quan trọng làm thay đổi mọi thứ”, “giờ đã nắm được toàn cảnh”, “đây là game changer”, và viết thẳng thắn nội dung đã phát hiện
      ## Đừng phản xạ làm mờ câu trả lời yes
      Nếu câu trả lời là yes thì hãy nói yes. Nếu mọi câu trả lời khẳng định đều kèm điều kiện thì mức độ chắc chắn bị yếu đi, nên chỉ thêm điều kiện khi thật sự có bất định cụ thể
    • Biết đâu LLM chỉ là người Đức
    • Với một người không phải bản ngữ, khả năng nói và viết tiếng Anh của tôi khá trôi chảy, nhưng đây chính là trở ngại lớn nhất với Claude
      Nó khâu 2–4 khái niệm cao cấp lại thành một hoặc hai từ, khiến lần nào tôi cũng phải yêu cầu “giải thích đầy đủ”. Với người bản ngữ chắc cũng không dễ, nhưng với người không bản ngữ thì còn khó hơn
    • Lạm-dụng-gạch-nối là quá-ám-ảnh-AI
  • Điểm mấu chốt là nó được xây trên fbraz3/GeneralsX, dựa trên bản phát hành mã nguồn GPL v3 của EA. Phần lớn công việc port sang macOS/Linux do GeneralsX làm, còn fork này bổ sung port sang iOS/iPadOS và một vài chỉnh sửa engine

    • Phía Renegade cũng đang có việc tương tự, và vì tất cả đều đang được làm từ đầu trên một engine khác nên trông hoàn toàn khả thi
    • Trò này chạy quá tệ trên Windows hiện đại, nên cần port ngược về Winx64
    • Đúng vậy. Việc Fable làm chỉ là port một dự án vốn đã đa nền tảng sang iOS
      Không có vẻ là phải cực kỳ vất vả, và Opus 4.6 chắc cũng đủ làm
  • Tôi tự hỏi kỹ thuật này có hữu ích với Emperor: Battle for Dune (2001) không
    Đây là game chiến thuật thời gian thực 3D đầu tiên của Westwood Studios và ra trước C&C Generals vài năm. Độ phổ biến bị hạn chế vì tranh chấp quyền sở hữu trí tuệ và việc đưa vào các phe mới lệch khỏi bối cảnh gốc, nhưng gameplay, nhạc nền và các nhiệm vụ chiến dịch đều xuất sắc

    • Nên thử trước ngày 7/7, khi Fable biến mất khỏi giá gói Claude Code
    • Đây là một trong những game chiến thuật thời gian thực hay nhất thời đó và giờ chơi vẫn ổn. Nhạc cũng rất hay
    • Tôi sẽ thử xem
    • Đây không phải Dune 2000 à? https://www.openra.net/download/#linux
    • Tôi cực thích game này. Đây là game chiến thuật thời gian thực đầu tiên tôi từng chơi
  • Hồi nhỏ tôi đã dành vô số giờ cho trò này, và càng lớn lên, khi công nghệ vượt qua nền tảng vốn được nhắm tới ban đầu, việc chơi lại càng ngày càng khó
    Nếu nằm trong tay những fan tận tâm, đây là một chỗ rất hợp để AI hỗ trợ. Khi có thời gian, tôi cũng muốn thử nghiệm bản đồ hoặc đơn vị do người dùng tạo. Cộng đồng modding của C&C Generals luôn khá sôi nổi

  • Nói cho những người ngốc đến sau khác biết: lỗi dưới đây có nghĩa là bạn chưa mua game trên Steam
    "ERROR! Failed to install app '2732960' (No subscription)"
    Dĩ nhiên README đã ghi sẵn rồi

  • Không đời nào Fable làm việc này. Nó hẳn đã dừng lại ở cụm “command and conquer”, hạ cấp xuống Opus, đồng thời đưa vào danh sách theo dõi của NSA luôn

    • Nếu nó bắt đầu đọc các đoạn mã liên quan đến phe Trung Quốc và phe khủng bố thì đúng là có vẻ sẽ như vậy
  • Nói “đã dùng Fable” là sao, khi commit đầu tiên từ tháng 2 năm ngoái?

    • Chỉ là fork GeneralsX rồi thêm vài commit cuối cùng thôi
    • Có lẽ không phải chỉ dùng Fable
    • Không phải vậy, chỉ là thêm một bài marketing miễn phí nữa cho Anthropic thôi
  • Tương tự, tôi đang dùng AI để “mã nguồn mở hóa” Battle for Middle Earth trên cùng engine: https://github.com/dginovker/BFME-Source-Code

    • Tôi đã làm những việc tương tự với vài game cũ yêu thích, nhưng tuyên bố “giống hệt từng byte” khiến tôi lo
      Chẳng phải việc đơn giản decompile mã nguồn từ binary rồi công khai là có vấn đề sao?
      Đây không phải phương pháp clean-room, và các công ty vẫn có thể cho rằng đó là vi phạm bản quyền rồi khiến dự án bị gỡ xuống
  • Tiêu đề là câu view
    Công việc này bắt đầu từ tháng 2, và nhìn commit thì phần Fable làm chỉ là một phần nhỏ trong các commit mới nhất. 19 commit trong tổng số 2000: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
    Hơn nữa có thể còn không phải Fable. Có khả năng đã bị hạ xuống Opus
    Vì những thông tin sai lệch thường xuyên như thế này, tôi trở nên hoài nghi với các tuyên bố về LLM của Anthropic. Trong workflow phát triển web, khi so với GPT 5.5 thì hai bên lúc hơn lúc kém, và Fable sau khi được bật lại để tôi bắt đầu thử cũng vậy
    Tôi nghĩ một LLM tử tế nào đó cũng sẽ làm được việc port này. Những thứ như GLM 5.2 có lẽ cũng làm được, và có khi còn tốt hơn vì nó không liên tục đoán xem tôi có phải khủng bố đang định hack chính phủ hay chế tạo vũ khí sinh học không
    Mọi người thiếu tài nguyên để so sánh LLM, nên dễ ám chỉ rằng mô hình mình dùng là tốt nhất từ trước đến nay và đã mở ra workflow mới. Sau Opus 4.6, tôi hầu như không thấy cải thiện nào

    • Dự án này là một fork và việc thực sự đang làm là thêm hỗ trợ iOS
      Các commit của chủ sở hữu fork bắt đầu từ 19 giờ trước, nên chuyện phần đó được làm bằng Fable là hoàn toàn hợp lý. Tuy nhiên, tôi cũng hoàn toàn không rõ việc thêm hỗ trợ iOS có phải là việc các mô hình trước không làm được và chỉ Fable mới làm được hay không