Game maken met AI: een Dune 2000-kloon gebouwd door Codex

Van 6 tot 9 september 2026 liet ik Codex en GPT-6 Astra een speelbare kloon van Dune 2000 bouwen in HTML, CSS en JavaScript. Zesenveertig beurten later slaagt het prototype voor 122 tests en spreekt het Frans, voor omgerekend 196 $ tegen API-tarief.

Game maken met AI: een Dune 2000-kloon gebouwd door Codex
Kort antwoord

Codex maakte met GPT-6 Astra een speelbare kloon van Dune 2000 in HTML, CSS en JavaScript, in 46 beurten of 11 u 16 min werktijd van de agent. De game heeft gegenereerde sprites, 34 gesproken meldingen in het Frans en 122 tests, en er waren 54 berichten en 12 screenshots nodig om de fouten van de agent te corrigeren. De sessie komt neer op ongeveer 196 $ tegen API-tarief, hier gedekt door een ChatGPT-abonnement.

Wie op Google “game maken met AI” intypt, krijgt een gegenereerd antwoord dat voorstelt om ChatGPT of Claude een minigame in HTML te laten schrijven. Ik wilde zien wat een zwaarder project oplevert, een Dune 2000-kloon die ik drie dagen lang aan een code-agent heb toevertrouwd.

Dune 2000 is het realtime-strategiespel dat Westwood Studios ontwikkelde en in 1998 uitbracht, een remake van Dune II. De agent is de desktopapp van Codex, met het model GPT-6 Astra op redeneerinspanning xhigh. De cijfers hieronder komen uit het sessielog, een JSONL-bestand van 1,3 GB, en uit de tests van het project, die op 14 september 2026 opnieuw zijn gedraaid.

Het uiteindelijke prototype start je hieronder, in je browser. De 51,6 MB wordt pas geladen als je op “Uitproberen” klikt.

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.

Protocol

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.

ACodex · GPT-6 Astragpt-6-astra (xhigh)

Het project draait in een geïsoleerde sandbox (iframe sandbox en CSP): geen toegang tot de site, cookies of je sessie. Er wordt niets geladen voordat je klikt.

Apart openen
Uitgever
OpenAI
Model
gpt-6-astra (xhigh)
Tool
Codex, application de bureau
Datum
2026-09-09
Duur
11 h 16 min de travail sur 46 tours
Invoertokens
120 107 006, dont 116 244 736 lus en cache
Uitvoertokens
822 700, dont 264 688 de raisonnement
Kosten
abonnement ChatGPT (≈ 196 $ au tarif API)
Projectgrootte
51,6 Mo, 393 fichiers
Opmerkingen
Clic gauche pour sélectionner, clic droit pour donner un ordre, A pour attaquer en se déplaçant, Espace pour la pause, ? pour l'aide. 122 tests Node au 14 septembre 2026.

De startprompt

Het eerste bericht telde 66 woorden. Hier is het, vertaald uit het Frans, met alleen de tikfouten verbeterd.

Ik wil dat je een kloon van Dune 2000 maakt in HTML, CSS en JavaScript en daarbij het project OpenRA als hulpmiddel gebruikt. Je bent vrij om de sprites te genereren die je wilt en nodig hebt, inclusief de animaties die daarbij horen. Ik wil een speelbaar prototype van een 1v1-partij, Atreides tegen Harkonnen. Het project OpenRA staat in de map /Projets/OpenRA-bleed.

OpenRA is een opensource-engine voor realtime-strategiespellen, geschreven in C#, die Dune 2000 en de eerste Command & Conquer-games draait. Astra heeft die code niet geporteerd. Hij haalde er de regels van de mod d2k uit, kosten, economie en ketens van bouwvoorwaarden. Daarna schreef hij een JavaScript-simulatie die los staat van de rendering, in Node te testen is en met Phaser 3.90 wordt weergegeven.

Ik gaf geen enkele instructie over de organisatie van het werk. Astra las uit zichzelf de skills van de plugin Game Studio die OpenAI publiceerde (web-game-foundations, phaser-2d-game, sprite-pipeline, game-ui-frontend, game-playtest) en de skill imagegen, die in Codex de afbeeldingen genereert. Dat zijn SKILL.md-bestanden die de agent laadt voordat hij aan de slag gaat, volgens het principe dat onze gids over Agent Skills uitlegt.

De sessie draaide zonder sandbox en zonder goedkeuringsverzoeken (danger-full-access, goedkeuringen op never). Astra kon Chrome starten, npm-pakketten installeren en overal op de schijf schrijven, zonder ook maar één vangrail uit ons artikel over wat de sandbox van Codex blokkeert.

Eenendertig minuten tot het eerste potje

De eerste beurt duurde 31 min 30 s, met 25 tool-aanroepen. Astra genereerde de sprites van de gebouwen, de harvester, de tanks en de infanterie. Vervolgens programmeerde hij het oogsten van spice, de energie, de productiewachtrijen, de gevechten en een Harkonnen-AI die in golven aanvalt. Fog of war, de minimap, selecteren met een sleepkader en attack-move op de A-toets zaten er vanaf deze beurt al in.

Astra sloot af met elf simulatietests, proeven in Chrome aangestuurd door Playwright en een geautomatiseerd potje dat wint op moeilijkheidsgraad Découverte (Ontdekking). De beurt kostte omgerekend 5,96 $ tegen API-tarief.

Het potje draaide, maar leek nog niet op Dune 2000. Mijn tweede bericht somde op wat ontbrak: animaties, tankkanonnen die kunnen draaien, meer bodemtexturen, eigen eenheden voor de Harkonnen en sneller bouwen. In 32 minuten scheidde Astra chassis en geschutskoepels om 360° te kunnen richten en tekende hij een zwart-rood Harkonnen-leger met quad en Devastator met twee kanonnen. Hij liet ook elk gebouw in 4 tot 6 seconden verrijzen, met fundering, steigers en kraan. Het project telde toen 17 tests.

Zesenveertig beurten in drie dagen

Een beurt begint met mijn bericht en eindigt met het antwoord van Astra. Daartussen werkt de agent zelfstandig commando’s, beeldgeneraties, browserscreenshots en tests af. Ik stuurde 54 berichten, voegde 12 screenshots toe, vaak rechtstreeks geannoteerd op de pagina van de game in de browser van Codex, en onderbrak 4 beurten.

Dag Beurten Werktijd van de agent Belangrijkste verzoeken Tests aan het eind van de dag Kosten tegen API-tarief
6 september 20 5 u 01 animaties, 157 terreintegels, acht richtingen voor de infanterie, zandwormen, cursors, eerste geluiden van ElevenLabs 56 83,86 $
8 september 23 5 u 51 interface van de originele game, Franse stemmen, Carryall, zes gebouwen en hun eenheden, texturen, decor, betonplaten 119 100,53 $
9 september 3 24 min betonplaten van één vakje, geplaatst door te slepen 122 11,62 $

Astra voegde bij elke functie tests toe zonder dat ik er ook maar één had gevraagd. De teller ging van 11 naar 17, 24, 29, 33, 41, 44, 51, 56, 67, 69, 75, 85, 90, 106, 111, 119 en ten slotte 122 op 9 september. Bij een nieuwe run op 14 september slagen de 122 Node-tests in 2,1 seconden. Het project bevat ook 24 browserscenario’s, één per grote functie, en 16 scripts die de afbeeldingen en de geluiden voorbereiden.

Waar Astra de mist in ging

Een correctie die de verplaatsing kapotmaakt

In beurt 12 meldde ik tanks waarvan de sprites elkaar overlapten. Astra mat voertuigen die elkaar tot op 30 pixels naderden, terwijl hun chassis er meer dan 60 meet, en gaf elk voertuig een hitbox op maat. Een aanval van twaalf Harkonnen-voertuigen, ingezoomd op 165%, bevestigde de correctie, en de 51 tests slaagden.

Vijf beurten later hielden de eenheden veel te veel afstand en weigerden sommige om tussen twee gebouwen door te gaan die ruim genoeg uit elkaar stonden. Astra vond twee oorzaken, waaronder zijn eigen correctie. De hitboxen besloegen de hele diagonaal van de sprites, en het navigatieraster sloot doorgangen af. Het herstel kostte 24 min 54 s en 32 tool-aanroepen, met een raster van 16 pixels, een footprint per voertuig en eenheden die opzij gaan om anderen door te laten. De test uit beurt 12 mat de overlap van de chassis en niets anders, en kon deze regressie dus niet zien.

Wat er verloren gaat bij een onderbreking

Op 8 september vroeg ik in één bericht om verschillende harvesters voor elk Huis, een Carryall die ze terugbrengt naar de raffinaderij, raffinaderijen die maar één harvester tegelijk lossen, en zes gebouwen uit de originele game met hun eenheden. Na zes minuten onderbrak ik die beurt om een screenshot van de originele harvester te sturen. Astra tekende de harvester opnieuw in acht richtingen, en verder niets.

In het volgende bericht moest ik schrijven “Dit heb je niet gedaan”, gevolgd door de vergeten Carryall en de loskades. Het antwoord van Astra past in één zin, “Je hebt gelijk, ik heb de sprites afgemaakt zonder de gevraagde logistiek toe te voegen”. Diezelfde dag ging op dezelfde manier een annotatie verloren bij een onderbroken beurt. Die ging over kleine bergen die als stenen in het zand waren hergebruikt, en ik heb haar drie beurten later opnieuw ingestuurd. De logistiek zelf vroeg 35 minuten en 40 tool-aanroepen, en het project ging naar 85 tests.

Afbeeldingen die over moesten

Meerdere reeksen afbeeldingen moesten opnieuw worden gemaakt. In beurt 36 leken de iconen van de zes nieuwe gebouwen allemaal op elkaar en misten ze de stijl van de windtrap die twee dagen eerder was getekend. Ze één voor één opnieuw maken, tegelijk met het inbouwen van de nieuwe eenheden, kostte 47 min 54 s en 67 tool-aanroepen, voor 16,16 $ tegen API-tarief, de duurste beurt van de sessie.

Astra spotte ook zelf gebreken voordat ik ze zag. Zijn eerste spritesheets van de infanterie in acht richtingen toonden aanzichten die te veel op elkaar leken, en die maakte hij opnieuw voordat hij ze inbouwde. In beurt 41 kwamen twee textuurgeneraties, rots en puin, zonder afbeelding terug, en die startte hij opnieuw.

Toen Astra het origineel naging

Meerdere keren las Astra eerst de handleiding van Dune 2000 voordat hij een verzoek uitvoerde. Ik wilde weten of de originele game aan elke raffinaderij een Carryall koppelde. Astra antwoordde van niet en verwees naar pagina 16, 17 en 45 van de handleiding uit 1998. Elke raffinaderij levert een harvester, gebracht door een Carryall, en Carryalls voor transport bouw je apart, in de High Tech Factory. Ik heb die pagina’s nagelezen, en daar staat precies dat.

Op de avond van 8 september vroeg ik om op zand te kunnen bouwen door betonplaten te leggen. Astra wees er eerst op dat je in de originele game alleen op rots bouwt, waar de platen gebouwen tegen slijtage beschermen, en paste daarna mijn variant toe. Een gebouw op kale rots begint beschadigd, een volledig betonnen ondergrond geeft het al zijn levenspunten, en de bouwplaats waarmee je start ligt op negen platen. Zandwormen gaan om dat beton heen, ook als het op zand ligt. De volgende dag heb ik de plaat teruggebracht tot één vakje, te plaatsen met een klik of door te slepen, voor 5 credits per vakje.

Geluidseffecten en stemmen gegenereerd met ElevenLabs

De eerste geluiden werden door de code gesynthetiseerd. In beurt 13 vroeg ik om via een skill over te stappen op ElevenLabs. Astra installeerde de officiële skill sound-effects van ElevenLabs en maakte voor de sleutel een bestand .env.local aan dat buiten Git blijft. De eerste sleutel werd geweigerd (401 invalid_api_key). De tweede, 24 uur geldig, leverde 20 effecten op met het model eleven_text_to_sound_v2, door FFmpeg omgezet naar mono-WAV.

Op 8 september kwamen er 34 gesproken meldingen in het Frans bij, van “Alerte ! Notre base est attaquée” (Alarm! Onze basis wordt aangevallen) tot “Commandant, votre base est opérationnelle” (Commandant, uw basis is operationeel). De Franse stem uit de bibliotheek van ElevenLabs is voorbehouden aan betaalde abonnementen, dus nam Astra een standaard meertalige stem met eleven_multilingual_v2. Om elke zin te controleren, liet hij de 34 bestanden daarna door Scribe v2 transcriberen. De meldingen lopen via een prioriteitswachtrij, zetten de muziek zachter en verschijnen als ondertiteling. In beurt 39 volgden twaalf geluidseffecten voor voertuigen.

De muziek is niet gegenereerd. Command of the Scorched Plain is een MP3-bestand dat ik heb aangeleverd en dat met een eigen volume in een lus wordt afgespeeld. Alle geluiden komen uit het project zelf, zonder API-aanroep tijdens het spelen, en het verlopen van de sleutel verandert niets aan het afspelen.

Tijd, tokens en kosten

Elk antwoord van het model laat een regel token_usage_record achter in het sessielog, dat onder ~/.codex/sessions/ staat. Dit commando telt ze op zonder het hele log in het geheugen te laden:

bash
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)}'
json
{
  "reponses": 856,
  "entree": 120107006,
  "cache": 116244736,
  "sortie": 822700
}
Meting Dune 2000-kloon
Periode van 6 september, 13.23 uur, tot 9 september, 11.26 uur (Parijse tijd)
Werktijd van de agent 11 u 16 min over 46 beurten
Antwoorden van het model 856
Tool-aanroepen 800
Contextcompacties 15
Tokens input 120.107.006, waarvan 116.244.736 uit cache gelezen (96,8%)
Tokens output 822.700, waarvan 264.688 voor redeneren
Kosten tegen API-tarief 196,00 $

De berekening volgt de prijslijst van GPT-6 Astra op OpenRouter, opgevraagd op 14 september 2026, oftewel 10 $ per miljoen inputtokens, 1 $ voor cachelezen en 50 $ voor output bij minder dan 272.000 tokens context. Het contextvenster van Codex had een plafond van 258.400 tokens, dus alle requests vallen in die schijf. Dat geeft 38,62 $ voor niet-gecachete input, 116,24 $ voor cache en 41,14 $ voor output.

Ik heb niet per gebruik betaald. Codex draaide op mijn ChatGPT-abonnement, dat het verbruik als quotum afrekent, en dit bedrag dient als referentie. Zonder cache hadden alleen de inputtokens al 1.201 $ gekost, bijna acht keer de berekende 154,87 $. Een cursorcorrectie in beurt 4 kostte 1 min 24 s en 0,86 $. Hoe GPT-6 Astra zich op een kortere opdracht verhoudt tot Claude Fable 5.1, lees je in onze vergelijking in three.js.

Wat er in de map zit

Het uiteindelijke project telt 41 bronbestanden (3.261 regels, 332 KB), 956 regels tests en 2.172 regels scripts. De map public/ serveert 227 PNG-afbeeldingen, 57 WebP-bestanden, 32 WAV-bestanden en 35 MP3’s, en elf JSON-bestanden bewaren de prompts van de gegenereerde afbeeldingen. Het prototype gebruikt geen enkel bestand uit Dune 2000, de sprites, artworks en geluiden zijn ervoor gemaakt.

Het gaat om een skirmish voor één speler tegen de AI, zonder campagne, zonder multiplayer en zonder opslaan. De regels van OpenRA zijn aangepast waar ik daarom vroeg, zoals beton op zand of parallelle productie, waarbij twee fabrieken de bouwtijd van een tank halveren en drie fabrieken hem door drie delen. Dezelfde agent bouwde daarna in één avond een RPG met een heel andere methode, beschreven in game maken met ChatGPT, een RPG in EarthBound-stijl.

Wat je moet onthouden

  • Codex en GPT-6 Astra maakten een speelbaar realtime-strategiespel in 46 beurten en 11 u 16 werktijd van de agent, met 54 berichten van mij om bij te sturen.
  • OpenRA leverde de basisregels, en de handleiding uit 1998 gaf de doorslag over de Carryall en over de betonplaten.
  • Een onderbreking wist de verzoeken van de lopende beurt. Twee keer moesten ze opnieuw worden verstuurd.
  • Het aantal tests ging van 11 naar 122 zonder dat ik erom vroeg, en geen enkele test zag de verplaatsingsregressie van beurt 17 aankomen.
  • De cache bepaalt de rekening. 96,8% van de inputtokens werd opnieuw gelezen tegen 1 $ per miljoen in plaats van 10 $, voor 196 $ in totaal tegen API-tarief.

Veelgemaakte fouten

Een beurt onderbreken zonder het verzoek opnieuw te sturen De verzoeken van een onderbroken beurt worden niet hervat. Zo gingen de Carryall en een annotatie over het decor verloren. Neem het verzoek opnieuw op in het bericht na de onderbreking.
Een collisioncorrectie goedkeuren zonder doorgangstest Grotere hitboxen voor de tanks lieten de infanterie vastlopen tussen twee gebouwen. Laat een scenario schrijven dat door een smalle doorgang gaat, zoals hier npm run test:pathfinding, voordat je goedkeurt.
Een API-sleutel in het gesprek plakken Die blijft in platte tekst staan in het log ~/.codex/sessions/…/rollout-….jsonl. Zet hem in .env.local, uitgesloten van Git, en geef de agent alleen de naam van de variabele.
Een reeks gegenereerde afbeeldingen accepteren zonder stijlreferentie Zes gebouwiconen die in één keer werden gemaakt, leken op elkaar en volgden de stijl van de eerste niet meer. Geef een al goedgekeurde afbeelding als voorbeeld, hier de windtrap.
De agent zonder sandbox op een echt project laten werken Deze sessie draaide in danger-full-access, zonder goedkeuring. Gebruik die instelling alleen voor een wegwerpmap, zonder productiesleutels binnen bereik.

CodexGPT-6 AstraJavaScriptJeu vidéoPhaser

Damien Flandrin Webdeveloper sinds 2010, maker van Gekkode en Email Impact. Elk artikel wordt vóór publicatie getest op een echt project. Contact
Nieuwsbrief

Nieuwe tests, tutorials en projecten, per e-mail.

Reproduceerbare tests, geversioneerde code, gedateerde resultaten. Nooit spam.