1 pontos por GN⁺ 4 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Command & Conquer Generals: Zero Hour roda em Macs com Apple Silicon, iPhone e iPad sem emulação, permitindo jogar o RTS clássico diretamente em dispositivos Apple modernos
  • O ponto central é a compilação ARM64 do motor real de 2003, com os gráficos convertidos pelo caminho DirectX 8 → DXVK → Vulkan → MoltenVK → Metal
  • Com base no lançamento do código-fonte GPL v3 da EA e no port GeneralsX para macOS/Linux, este fork adiciona suporte a iOS/iPadOS e correções no motor
  • Os assets do jogo não estão incluídos, portanto é preciso trazer os dados de uma cópia própria obtida no Steam ou em outra loja
  • Sessões longas no iPad podem ser encerradas devido a cerca de 3 GB ou mais de memória residente, e ainda há possibilidade de falhas ao alternar para segundo plano no iOS, então é preciso salvar com frequência

O motor real de Zero Hour rodando em dispositivos Apple

  • Zero Hour roda nativamente em Macs com Apple Silicon, iPhone e iPad
  • Dá suporte aos modos campanha, skirmish e Generals Challenge
  • Inclui controles por toque para RTS
    • tocar para selecionar
    • arrastar para seleção em caixa
    • pressionar e segurar para desfazer seleção
    • rolagem com dois dedos
    • zoom por pinça
  • O modo de execução não é emulação, mas sim o motor real de 2003 compilado para ARM64
  • A renderização segue a sequência DirectX 8 → DXVK → Vulkan → MoltenVK → Metal

Escopo do fork baseado no GeneralsX

  • O código do motor é baseado no lançamento do código-fonte GPL v3 da EA
  • O port de base é fbraz3/GeneralsX, e o trabalho central do port para macOS/Linux foi feito no GeneralsX
  • Este fork adiciona o port para iOS/iPadOS e correções no motor
  • O README original do GeneralsX está no branch upstream-main

Os assets do jogo devem ser preparados pelo próprio usuário

  • Os assets do jogo não estão incluídos nem são distribuídos
  • O usuário precisa ter sua própria cópia do jogo
  • Um link do Steam é fornecido, com a observação de que, em promoção, custa cerca de US$ 5
  • scripts/get-assets.sh é um script que traz os dados do jogo no Steam pertencentes ao usuário, e o ID do app de destino é 2732960

Fluxo de build e execução no macOS

  • O build para macOS exige uma preparação prévia necessária apenas uma vez
    • xcode-select --install
    • brew install cmake ninja meson pkgconf
    • brew install --cask steamcmd
    • clone completo do vcpkg e configuração de VCPKG_ROOT
    • instalação do LunarG Vulkan SDK e configuração de VULKAN_SDK
  • O vcpkg precisa de um clone completo, pois um clone superficial pode quebrar o manifest baseline
  • O Vulkan SDK deve ser o LunarG Vulkan SDK, não o cask do Homebrew
  • Depois de clonar o repositório, os scripts devem ser executados na ordem abaixo
    • ./scripts/build/macos/build-macos-zh.sh: verifica dependências, configura e faz o build
    • ./scripts/build/macos/deploy-macos-zh.sh: cria ~/GeneralsX/GeneralsZH e run.sh
    • ./scripts/get-assets.sh <your_steam_username>: traz os dados do jogo pertencentes ao usuário
    • cd ~/GeneralsX/GeneralsZH && ./run.sh -win: executa

Condições para build no iPhone e iPad

  • O build para iOS/iPadOS exige, além da preparação do macOS, o Xcode completo, login com Apple ID, xcodegen e um Apple Developer team
  • O processo de build é composto pelos seguintes elementos
    • inicialização do submódulo references/fbraz3-dxvk
    • o DXVK para iOS é compilado a partir desse submódulo e de Patches/dxvk-ios.patch
    • ./scripts/build/ios/fetch-moltenvk.sh obtém uma versão fixa do MoltenVK.framework com checksum
    • ./scripts/build/ios/stage-fonts.sh prepara as Liberation Fonts com os nomes esperados pelo jogo
    • build com cmake --preset ios-vulkan e cmake --build build/ios-vulkan --target z_generals
  • Para empacotar e instalar, configure GX_TEAM_ID e GX_BUNDLE_ID e execute ./scripts/build/ios/package-ios-zh.sh --install
  • O Team ID pode ser verificado em Xcode → Settings → Accounts
  • Os assets são incluídos dentro do pacote do app, resultando em uma instalação autocontida, e --dev pula a cópia de cerca de 2,7 GB para acelerar iterações de código

Arquivos e documentos interessantes no repositório

  • docs/port/PORTING_PLAYBOOK.md: log completo de engenharia do port, registrando modos de falha, causas raiz e correções
  • docs/port/PORTING_PATTERNS.md: metodologia generalizada para portar jogos clássicos de Windows para plataformas Apple
  • docs/port/RELEASE_CHECKLIST.md: gates de lançamento público
  • scripts/get-assets.sh: script para trazer assets do Steam pertencentes ao usuário
  • scripts/build/macos/, scripts/build/ios/: pipelines de build, deploy e empacotamento
  • ios/: projeto stub de assinatura do XcodeGen e Options.ini, dxvk.conf preparados em ios/config/
  • Patches/dxvk-ios.patch: alterações no DXVK usadas no build das dylibs d3d8/d3d9 para iOS

Restrições que ainda permanecem

  • Sessões longas no iPad podem ser encerradas pelo iOS quando o app fica com cerca de 3 GB ou mais de memória residente
    • Nesse caso, o app volta para a tela inicial sem caixa de diálogo
    • Os logs da sessão atual e da anterior ficam na pasta do jogo no app Files
    • O problema está sendo investigado
  • No iOS, alternar para segundo plano durante o jogo pode causar falhas ocasionalmente
    • A pausa do ciclo de vida trata os caminhos comuns
    • Uma rara condição de corrida ainda permanece, então é preciso salvar com frequência

Licença e modo de criação

  • O código do motor está sob GPL v3, e o fluxo é lançamento do código-fonte da EA → GeneralsX → este fork
  • Os assets do jogo não estão incluídos e não são licenciados aqui
  • Os créditos incluem Westwood/EA Pacific, EA, fbraz3/GeneralsX, TheSuperHackers/GeneralsGameCode, DXVK, MoltenVK, SDL, OpenAL Soft, FFmpeg e Liberation Fonts
  • O port foi criado por uma colaboração entre humanos e IA
    • A engenharia ficou a cargo do Claude Code, ou seja, o modelo Fable do Claude, da Anthropic
    • Ammaar Reshi definiu a direção e fez playtests em dispositivos reais
    • Os logs de engenharia em docs/port/ são um registro não editado desse modo de trabalho

1 comentários

 
GN⁺ 4 시간 전
Comentários do Hacker News
  • Isso parece um caso de uso bem bom de uma pessoa conduzindo o modelo para fazer uma transformação em massa
    Dito isso, seria bom se uma pessoa desse uma polida na documentação do porte. O estilo de texto gerado por IA incomoda
    O custo é baixo, na maior parte é feito por diversão, e dá para ir melhorando de forma iterativa. É diferente da situação em que o Bun disse “recrevemos tudo de Zig para Rust, obviamente roda bem, logo pode ir para produção, e vamos escrever um post no blog explicando o que fizemos”, mas esse post até hoje não apareceu

    • Não entendo muito bem a comparação com o Bun. O Bun provavelmente roda o Claude Code, um dos apps de desenvolvimento mais usados no momento
      Dizem que é um caso de mau uso de LLM, mas ele já é usado em produção faz um bom tempo, e não ouvi nenhuma evidência de que erros ou falhas de segmentação por causa do Claude Code tenham aumentado de forma significativa em relação a antes
    • O modelo fez o trabalho e provavelmente tinha tudo dentro da janela de contexto, então talvez aqui ele seja até mais adequado para escrever a documentação
    • Chamar isso de “bom caso de uso de uma pessoa conduzindo o modelo para fazer transformação em massa” é até fraco demais. Talvez seja o eufemismo do ano
      “Bem razoável, nada mal, um bom caso de uso”. Afinal, o que exatamente o Fable conseguiu fazer
  • Coisas como (tap-select, drag-box, long-press deselect, two-finger scroll, pinch zoom) são outro jeito de escrever com cara de IA que aparece muito em agentes de código
    Parece que eles gostam de pegar conceitos relativamente complexos e específicos e resumir como se fossem frases de uma palavra só, criando novos substantivos compostos ou às vezes até verbos. Não sei se é para economizar tokens ou para criar um identificador conciso que possa ser referenciado depois, mas chama bastante atenção
    O texto resultante fica difícil de ler, mas ajuda um pouco se você conhece essa tendência e conscientemente tenta interpretar os grupos nominais. Ainda assim, isso é mais um artefato intermediário de agente de código do que um ensaio ou post de blog, então acho aceitável

    • Eu também faço isso às vezes
      Em algumas línguas germânicas é assim mesmo. Tenho o impulso de juntar substantivos e criar algo como lawnchair, mas aí aparece o sublinhado do corretor, e lawn chair também parece estranho, então lawn-chair vira um meio-termo
    • Isso me irrita demais. Tentei proibir no AGENTS.md, mas não resolve 100%
      ## Fale simples, sem jargão
      Eu coloco para não usar jargão abreviado e dizer de fato o que quer dizer
      Por exemplo, em vez de “load-bearing assumptions”, escrever “as suposições das quais xyz depende”, e em vez de “cross-service”, citar explicitamente o serviço X e o serviço Y
      Também proíbo julgamentos em forma de grupos nominais abstratos como “Cross-RCA double-counting is unfounded”, e peço para escrever algo como “verificamos se a mesma causa raiz estava sendo contada duas vezes entre execuções de RCA, e não estava”
      ## Proibidas declarações que abalam o mundo
      Tiro exageros como “uma descoberta importante muda tudo”, “agora entendemos o quadro completo” ou “isso é um divisor de águas”, e peço para escrever de forma direta o que foi encontrado
      ## não obscureça um yes por reflexo
      Se a resposta é yes, diga yes. Se toda resposta positiva vier com ressalva, a sensação de certeza enfraquece, então peço ressalvas só quando houver uma incerteza específica de fato
    • Talvez o LLM seja só alemão mesmo
    • Para quem não é nativo, eu até falo e escrevo inglês com bastante fluência, mas esse é justamente o maior obstáculo no Claude
      Ele junta de 2 a 4 conceitos avançados em uma ou duas palavras, então eu preciso pedir toda hora para “explicar por extenso”. Isso já não deve ser fácil nem para nativos, mas para quem não é, é ainda pior
    • Hifenização-em-excesso é empolgação-com-IA
  • O ponto principal é que isso foi feito em cima do fbraz3/GeneralsX, que por sua vez é baseado na versão de código-fonte lançada pela EA sob GPL v3. O grosso do trabalho de portar para macOS/Linux foi feito pelo GeneralsX, e este fork só acrescenta o porte para iOS/iPadOS e algumas modificações no motor

    • Estão fazendo algo parecido também com Renegade, e como tudo isso está sendo feito do zero em outro motor, parece totalmente viável
    • Esse jogo roda tão mal nas versões modernas do Windows que precisa de um retroporte para Winx64
    • Sim. O que o Fable fez foi basicamente portar para iOS um projeto que já era multiplataforma
      Não parece ter exigido um esforço monumental, e talvez até o Opus 4.6 já desse conta
  • Fico curioso se essa técnica seria útil também para Emperor: Battle for Dune (2001)
    Foi o primeiro jogo de estratégia em tempo real 3D da Westwood Studios e saiu alguns anos antes de C&C Generals. Teve popularidade limitada por causa de disputas de propriedade intelectual e da introdução de novas facções fora da ambientação original, mas a jogabilidade, a trilha sonora e as missões de campanha eram excelentes

    • Seria bom o Fable tentar isso antes de sumir do preço da assinatura do Claude Code em 7 de julho
    • Foi um dos melhores jogos de estratégia em tempo real daquela época e ainda é bom hoje. A música também era ótima
    • Vou tentar
    • Isso não é Dune 2000? https://www.openra.net/download/#linux
    • Eu adorava esse jogo. Foi o primeiro jogo de estratégia em tempo real que joguei
  • Quando eu era criança, gastei incontáveis horas nesse jogo, e conforme fui envelhecendo ficou cada vez mais difícil jogá-lo de novo porque a tecnologia foi ultrapassando a plataforma para a qual ele foi originalmente feito
    Nas mãos de fãs dedicados, isso é um bom uso para a IA ajudar. Se eu tiver tempo, queria até experimentar mapas e unidades feitos por usuários. A comunidade de mods de C&C Generals sempre foi bem ativa

  • Para os outros bobos que vierem depois: o erro abaixo significa que você não comprou o jogo na Steam
    "ERROR! Failed to install app '2732960' (No subscription)"
    Claro, isso já está escrito no README

  • Não tem como o Fable ter feito isso. Ele teria travado na expressão “command and conquer”, rebaixado tudo para Opus e ainda colocado você numa lista de vigilância da NSA ao mesmo tempo

    • Quando ele começar a ler as partes do código sobre a facção chinesa e a facção terrorista, aí sim parece bem plausível
  • Como assim “foi usado o Fable” se o primeiro commit é de fevereiro do ano passado?

    • Só fizeram um fork do GeneralsX e adicionaram os últimos commits por cima
    • Provavelmente não foi feito só com Fable
    • Não foi isso; é só mais um post de marketing grátis para a Anthropic
  • De forma parecida, estão usando IA para “abrir o código” de Battle for Middle Earth no mesmo motor: https://github.com/dginovker/BFME-Source-Code

    • Eu já fiz trabalhos parecidos com alguns jogos antigos de que gosto, mas a alegação de ser “idêntico byte por byte” me preocupa
      Simplesmente descompilar o binário e publicar o código-fonte não seria problemático?
      Isso não é um processo de sala limpa, e as empresas ainda poderiam alegar violação de direitos autorais e mandar remover
  • O título é caça-clique
    Esse trabalho começou em fevereiro, e pelos commits dá para ver que o Fable só fez uma pequena parte dos commits mais recentes. São 19 commits em 2000: https://github.com/ammaarreshi/Generals-Mac-iOS-iPad/commits...
    Além disso, pode nem ter sido o Fable. Pode ter sido rebaixado para Opus
    Por causa desse tipo de desinformação frequente, fico cético com as alegações da Anthropic sobre seus LLMs. Em fluxo de trabalho de desenvolvimento web, comparado com o GPT 5.5, eles ficam se alternando, e foi o mesmo com o Fable quando comecei a testá-lo de novo depois de ter sido reativado
    Com um LLM decente, esse tipo de porte provavelmente sairia. Talvez até algo como GLM 5.2 conseguisse, e ainda poderia ser melhor por não ficar tentando adivinhar o tempo todo se eu sou um terrorista querendo hackear o governo ou fabricar armas biológicas
    As pessoas não têm recursos para comparar LLMs de forma adequada, então sugerem com facilidade que o modelo que usaram é o melhor de todos os tempos e desbloqueou um novo fluxo de trabalho. Desde o Opus 4.6, quase não vi melhorias

    • Este projeto é um fork e o trabalho real é adicionar suporte a iOS
      Os commits do dono do fork começam há 19 horas, então é bem plausível que essa parte tenha sido feita com Fable. O que continua totalmente incerto para mim é se adicionar suporte a iOS era algo que modelos anteriores não conseguiriam fazer e só o Fable seria capaz