
O Codex, com o GPT-6 Astra, criou um clone jogável de Dune 2000 em HTML, CSS e JavaScript em 46 turnos, ou seja, 11 h 16 min de trabalho do agente. O jogo tem sprites gerados, 34 avisos de voz em francês e 122 testes, à custa de 54 mensagens e 12 capturas de ecrã para corrigir os seus erros. A sessão fica em cerca de 196 $ à tarifa da API, aqui coberta por uma subscrição do ChatGPT.
No Google, a resposta gerada para «criar jogo com IA» propõe pôr o ChatGPT ou o Claude a escrever um minijogo em HTML. Quis ver o que dá um projeto mais pesado, um clone de Dune 2000 entregue durante três dias a um agente de código.
Dune 2000 é o jogo de estratégia em tempo real desenvolvido pela Westwood Studios e lançado em 1998, um remake de Dune II. O agente é a aplicação de desktop do Codex, com o modelo GPT-6 Astra e o esforço de raciocínio definido como xhigh. Os números que se seguem vêm do registo da sessão, um ficheiro JSONL de 1,3 GB, e dos testes do projeto relançados a 14 de setembro de 2026.
O protótipo final pode ser lançado abaixo, no teu navegador. Os seus 51,6 MB só são carregados quando clicas em «Experimentar».
Clone de Dune 2000 : le prototype de Codex et GPT-6 Astra
Le prototype tel que Codex l'a laissé le 9 septembre 2026 : une escarmouche Atréides contre Harkonnen, à la souris et au clavier. Rien ne se charge avant votre clic.
Protocolo
Construit avec l'application Codex et le modèle gpt-6-astra en effort xhigh, du 6 au 9 septembre 2026 : 46 tours, 54 messages, 11 h 16 min de travail de l'agent. Compilé par Vite sans modifier le code du jeu, chemins des ressources rendus relatifs pour l'hébergement.

O projeto corre numa sandbox isolada (iframe sandbox e CSP): sem acesso ao site, aos cookies nem à sua sessão. Nada é carregado antes do seu clique.
O prompt inicial
A primeira mensagem tinha 66 palavras. Aqui fica, traduzida do francês e apenas com as gralhas corrigidas.
Quero que cries um clone de Dune 2000 em HTML, CSS e JavaScript, usando o projeto OpenRA como ajuda. Tens liberdade para gerar os sprites que quiseres e de que precisares, incluindo as respetivas animações. Quero um protótipo jogável de uma partida 1v1, Atreides contra Harkonnen. O projeto OpenRA está na pasta /Projets/OpenRA-bleed.
O OpenRA é um motor open source de jogos de estratégia em tempo real, escrito em C#, que faz correr Dune 2000 e os primeiros Command & Conquer. O Astra não portou o código. Foi lá buscar as regras do mod d2k, custos, economia e cadeias de pré-requisitos, e depois escreveu uma simulação em JavaScript independente da renderização, testável no Node e exibida com o Phaser 3.90.
Não dei nenhuma indicação sobre como organizar o trabalho. O Astra leu por iniciativa própria os skills do plugin Game Studio publicado pela OpenAI (web-game-foundations, phaser-2d-game, sprite-pipeline, game-ui-frontend, game-playtest) e o skill imagegen, que gera as imagens no Codex. São ficheiros SKILL.md que o agente carrega antes de agir, segundo o princípio explicado no nosso guia dos Agent Skills.
A sessão correu sem sandbox e sem pedidos de aprovação (danger-full-access, aprovações em never). O Astra podia abrir o Chrome, instalar pacotes npm e escrever em qualquer parte do disco, sem nenhuma das salvaguardas descritas no nosso artigo sobre o que a sandbox do Codex bloqueia.
Trinta e um minutos para uma primeira partida
O primeiro turno durou 31 min 30 s, com 25 chamadas de ferramentas. O Astra gerou os sprites dos edifícios, da ceifeira, dos tanques e da infantaria, e depois programou a recolha de especiaria, a energia, as filas de produção, o combate e uma IA dos Harkonnen que ataca em vagas. O nevoeiro de guerra, o minimapa, a seleção por retângulo e o movimento ofensivo na tecla A já estavam presentes neste turno.
Terminou com onze testes de simulação, ensaios no Chrome controlados pelo Playwright e uma partida automatizada que vence no nível de dificuldade «Découverte» (Descoberta). O turno custou o equivalente a 5,96 $ à tarifa da API.
A partida corria, mas ainda não se parecia com Dune 2000. A minha segunda mensagem enumerava o que faltava: animações, canhões de tanque que rodam, mais texturas de solo, unidades próprias dos Harkonnen e uma construção mais rápida. Em 32 minutos, o Astra separou chassis e torres para apontar a 360°, desenhou um exército Harkonnen preto e vermelho, com quad e Devastator de dois canhões, e pôs cada edifício a erguer-se em 4 a 6 segundos, com fundações, andaimes e grua. O projeto tinha então 17 testes.
Quarenta e seis turnos em três dias
Um turno começa com a minha mensagem e acaba com a resposta do Astra. Pelo meio, o agente encadeia sozinho comandos, gerações de imagens, capturas do navegador e testes. Enviei 54 mensagens, anexei 12 capturas de ecrã, muitas vezes anotadas diretamente na página do jogo, no navegador do Codex, e interrompi 4 turnos.
| Dia | Turnos | Trabalho do agente | Principais pedidos | Testes no fim do dia | Custo à tarifa da API |
|---|---|---|---|---|---|
| 6 de setembro | 20 | 5 h 01 | animações, 157 tiles de terreno, oito direções para a infantaria, vermes da areia, cursores, primeiros sons do ElevenLabs | 56 | 83,86 $ |
| 8 de setembro | 23 | 5 h 51 | interface do jogo original, vozes em francês, Carryall, seis edifícios e as respetivas unidades, texturas, elementos decorativos, placas de betão | 119 | 100,53 $ |
| 9 de setembro | 3 | 24 min | placas de uma célula colocadas ao arrastar | 122 | 11,62 $ |
O Astra acrescentou testes a cada funcionalidade sem que eu pedisse um único. O contador passou de 11 para 17, 24, 29, 33, 41, 44, 51, 56, 67, 69, 75, 85, 90, 106, 111, 119 e depois 122 a 9 de setembro. Relançados no dia 14, os 122 testes Node passam em 2,1 segundos. O projeto contém também 24 cenários de navegador, um por cada grande funcionalidade, e 16 scripts que preparam as imagens e os sons.
Onde o Astra se enganou
Uma correção que estraga os movimentos
No turno 12, assinalei tanques cujos sprites se sobrepunham. O Astra mediu veículos que chegavam a 30 píxeis uns dos outros quando o chassis mede mais de 60, e depois deu a cada um uma área de colisão à sua medida. Um ataque de doze veículos Harkonnen, com zoom a 165 %, validou a correção, e os 51 testes passavam.
Cinco turnos depois, as unidades ficavam demasiado afastadas umas das outras e algumas recusavam-se a passar entre dois edifícios bem afastados um do outro. O Astra encontrou duas causas, uma delas a sua própria correção. As colisões cobriam toda a diagonal dos sprites, e a grelha de navegação escondia passagens. A reparação levou 24 min 54 s e 32 chamadas de ferramentas, com uma grelha de 16 píxeis, uma área de ocupação no solo para cada veículo e unidades que se afastam para deixar passar. O teste do turno 12 media a sobreposição dos chassis e nada mais, por isso não podia detetar esta regressão.
O que se perde com uma interrupção
A 8 de setembro, uma mesma mensagem pedia ceifeiras diferentes para cada Casa, um Carryall que as levasse de volta à refinaria, refinarias que só descarregassem uma ceifeira de cada vez, e seis edifícios do jogo original com as respetivas unidades. Ao fim de seis minutos, interrompi esse turno para enviar uma captura da ceifeira original. O Astra redesenhou a ceifeira em oito orientações, e mais nada.
Na mensagem seguinte, tive de escrever «Não fizeste», seguido do Carryall e dos cais esquecidos. A resposta do Astra cabe numa frase, «Tens razão, terminei os sprites sem acrescentar a logística pedida». No mesmo dia, uma anotação sobre pequenas montanhas reaproveitadas como pedras na areia perdeu-se da mesma maneira, num turno interrompido, e voltei a copiá-la três turnos depois. Já a logística levou 35 minutos e 40 chamadas de ferramentas, e o projeto passou para 85 testes.
Imagens para refazer
Vários lotes de imagens tiveram de ser refeitos. No turno 36, as miniaturas dos seis novos edifícios eram todas parecidas e não tinham o aspeto do captador de vento desenhado dois dias antes. Refazê-las uma a uma, ao mesmo tempo que se integravam as novas unidades, levou 47 min 54 s e 67 chamadas de ferramentas, por 16,16 $ à tarifa da API, o turno mais caro da sessão.
O Astra também detetava defeitos antes de mim. As suas primeiras folhas de sprites de infantaria em oito direções mostravam vistas demasiado parecidas entre si, e ele refê-las antes de as integrar. No turno 41, duas gerações de texturas, a rocha e o cascalho, voltaram sem imagem, e ele relançou-as.
Quando o Astra foi verificar o jogo original
Várias vezes, o Astra foi ler o manual de Dune 2000 antes de aplicar um pedido. Eu queria saber se o jogo original associava um Carryall a cada refinaria. O Astra respondeu que não, citando as páginas 16, 17 e 45 do manual de 1998. Cada refinaria vem com uma ceifeira, trazida por um Carryall, e os Carryalls de transporte constroem-se à parte, na fábrica de alta tecnologia. Reli essas páginas, e dizem mesmo isso.
Na noite de 8 de setembro, pedi que fosse possível construir na areia, sobre placas de betão. O Astra começou por lembrar que o jogo original reserva as construções à rocha, onde as placas protegem os edifícios do desgaste, e depois aplicou a minha variante. Um edifício colocado em rocha nua começa danificado, um local de construção totalmente coberto de betão dá-lhe todos os pontos de vida, e o estaleiro inicial assenta em nove placas. Os vermes da areia contornam este betão, mesmo colocado na areia, e no dia seguinte reduzi a placa a uma célula, colocada com um clique ou ao arrastar, a 5 créditos por célula.
Efeitos sonoros e vozes gerados com o ElevenLabs
Os primeiros sons eram sintetizados pelo código. No turno 13, pedi-lhe que passasse a usar o ElevenLabs através de um skill. O Astra instalou o skill oficial sound-effects do ElevenLabs e preparou um ficheiro .env.local, excluído do Git, para a chave. A primeira chave foi recusada (401 invalid_api_key). A segunda, válida durante 24 horas, produziu 20 efeitos com o modelo eleven_text_to_sound_v2, convertidos para WAV mono pelo FFmpeg.
A 8 de setembro chegaram 34 avisos de voz em francês, de «Alerte ! Notre base est attaquée» (Alerta! A nossa base está a ser atacada) a «Commandant, votre base est opérationnelle» (Comandante, a sua base está operacional). Como a voz francesa da biblioteca do ElevenLabs está reservada aos planos pagos, o Astra escolheu uma voz multilingue padrão com eleven_multilingual_v2 e depois pôs o Scribe v2 a transcrever os 34 ficheiros para verificar cada frase. Os avisos passam por uma fila de prioridade, baixam o volume da música e aparecem em legendas. Seguiram-se doze efeitos sonoros de veículos no turno 39.
A música não foi gerada. Command of the Scorched Plain é um ficheiro MP3 que eu forneci, tocado em loop com o seu próprio volume. Todos os sons são servidos a partir do projeto, sem chamadas à API durante a partida, e a expiração da chave não afeta a sua reprodução.
Tempo, tokens e custo
Cada resposta do modelo deixa uma linha token_usage_record no registo da sessão, guardado em ~/.codex/sessions/. Este comando calcula o total sem carregar o registo inteiro na memória:
jq -c 'select(.type == "token_usage_record") | .payload.usage' \
~/.codex/sessions/2026/09/06/rollout-2026-09-06T13-20-25-01a07672-bb68-7500-b23a-db1fc7ccbe3e.jsonl \
| jq -s '{reponses: length, entree: (map(.input_tokens) | add), cache: (map(.cached_input_tokens) | add), sortie: (map(.output_tokens) | add)}'{
"reponses": 856,
"entree": 120107006,
"cache": 116244736,
"sortie": 822700
}| Medição | Clone de Dune 2000 |
|---|---|
| Período | de 6 de setembro, às 13h23, a 9 de setembro, às 11h26 (hora de Paris) |
| Trabalho do agente | 11 h 16 min em 46 turnos |
| Respostas do modelo | 856 |
| Chamadas de ferramentas | 800 |
| Compactações do contexto | 15 |
| Tokens de entrada | 120 107 006, dos quais 116 244 736 lidos em cache (96,8 %) |
| Tokens de saída | 822 700, dos quais 264 688 de raciocínio |
| Custo à tarifa da API | 196,00 $ |
O cálculo segue a tabela de preços do GPT-6 Astra publicada no OpenRouter e consultada a 14 de setembro de 2026, ou seja, 10 $ por milhão de tokens de entrada, 1 $ na leitura de cache e 50 $ na saída, abaixo dos 272 000 tokens de contexto. A janela do Codex estava limitada a 258 400 tokens, pelo que todos os pedidos ficam dentro desse escalão. Isso dá 38,62 $ de entrada sem cache, 116,24 $ de cache e 41,14 $ de saída.
Não paguei nada por consumo. O Codex corria com a minha subscrição do ChatGPT, que desconta o uso numa quota, e este montante serve de referência. Sem cache, só os tokens de entrada teriam custado 1 201 $, quase oito vezes os 154,87 $ contabilizados. Uma correção do cursor, no turno 4, levou 1 min 24 s e custou 0,86 $. Para situar o GPT-6 Astra face ao Claude Fable 5.1 num exercício mais curto, vê o nosso comparativo em three.js.
O que contém a pasta
O projeto final tem 41 ficheiros de código-fonte (3 261 linhas, 332 KB), 956 linhas de testes e 2 172 linhas de scripts. A pasta public/ serve 227 imagens PNG, 57 WebP, 32 ficheiros WAV e 35 MP3, e onze ficheiros JSON guardam os prompts das imagens geradas. O protótipo não usa nenhum ficheiro de Dune 2000: os sprites, as ilustrações e os sons foram produzidos para ele.
Trata-se de uma escaramuça a solo contra a IA, sem campanha, sem multijogador e sem possibilidade de guardar o jogo. As regras do OpenRA foram adaptadas quando eu o pedia, como o betão na areia ou a produção em paralelo, em que duas fábricas reduzem para metade o tempo de fabrico de um tanque e três reduzem-no para um terço. O mesmo agente construiu depois um RPG numa noite com um método completamente diferente, descrito em criar um jogo com o ChatGPT, um RPG ao estilo de EarthBound.
A reter
- O Codex e o GPT-6 Astra produziram um jogo de estratégia em tempo real jogável em 46 turnos e 11 h 16 de trabalho do agente, com 54 mensagens minhas para corrigir o rumo.
- O OpenRA forneceu as regras iniciais, e o manual de 1998 resolveu a questão do Carryall e a das placas de betão.
- Uma interrupção apaga os pedidos do turno em curso. Por duas vezes, foi preciso reenviá-los.
- Os testes passaram de 11 para 122 sem que eu os pedisse, e nenhum antecipou a regressão de movimento do turno 17.
- É a cache que decide a fatura. 96,8 % dos tokens de entrada foram relidos a 1 $ por milhão em vez de 10 $, num total de 196 $ à tarifa da API.
Erros frequentes
npm run test:pathfinding aqui, antes de validar.~/.codex/sessions/…/rollout-….jsonl. Coloca-a no .env.local, excluído do Git, e dá ao agente apenas o nome da variável.danger-full-access, sem aprovações. Reserva esta configuração para uma pasta descartável, sem nenhuma chave de produção ao alcance.

