Experiment 03 Tuesday, Oct 13 2026 MonoGame 3.8 + .NET 10

Four models, one dungeon, and the case of the missing jail cells

To kick off a new dungeon-crawler benchmark, I gave Gemini 4 Argon, GPT-6 Astra, GPT-6.1 Sol, and Claude Opus 5.5 the exact same one-shot prompt: build a 3D/2D raycast-style dungeon room with fantasy character sprites locked in cells. The new Gemini 4 Argon stole the show—and for the first time in any head-to-head bake-off, Opus failed by forgetting to build jail cells.

4 models · 3 harnessesOne-shot prompt6.9 – 11.2 min per run~8 min read
1st
Gemini 4 Argon: 12 cells, working 3-charge release winch, biographies & engine integration
6m 51s
fastest run: GPT-6 Astra on Codex (followed 6s later by GPT-6.1 Sol at 6m 57s)
9m 11s
Gemini 4 Argon on Copilot CLI: 90 tool calls, 2,369 lines of C# in Survive.Desktop
0
jail cells in Opus 5.5's dungeon—first head-to-head bake-off failure for an Opus model

Before building out the full turn-based loop for Kingdom of Darkness: Survive—a D&D-inspired dungeon crawler designed to test whether language models can engineer better odds, detect deception, and deduce hidden rules—I needed a first-person 3D/2D renderer prototype. Instead of picking one model to scaffold it, I ran a four-way sprint.

Every model got the same prompt at the same time in the same repository: Gemini 4 Argon working directly in src/Survive.Desktop on GitHub Copilot CLI, GPT-6 Astra and GPT-6.1 Sol in Experiments/Renderer/Astra and Sol on Codex, and Claude Opus 5.5 in Experiments/Renderer/Opus on Claude Code.

01 — The prompt

One room, 2D sprites in 3D cells, no MGCB

The brief was intentionally concise—five sentences defining the aesthetic, the asset folder, the MonoGame stack constraint, and WASD + mouse navigation:

Initial prompt · Oct 13, 2026 · 19:24–19:27 EDT

“Sketch out an initial prototype of our "dungeon" using 3D and 2D (think raycast in appearance). Single room. Place some of the sprites from C:\git\KingdomOfDarkness-Survive\Assets\Fantasy Characters in cells. This should be a scene within <folder> -- and should use Monogame, Monogame.Extended (as needed), + any popular Monogame tools. Avoid using Monogame Content Manager Tooling (external tool). I should be able to navigate the scene using WASD keys and mouse.”

+ Follow-up note (~19:28 EDT): “Feel free to use any textures within Assets/ as desired (for walls/etc)”

There were two ways a model could figure out what kind of “dungeon” with characters “in cells” this was:

  1. Plain English. In a medieval fantasy setting, a “dungeon” where characters are placed “in cells” is a subterranean prison cellblock—stone walls, iron bars, and locked inmates.
  2. Repository context. Sitting inside src/Docs/plan.md and src/Docs/gameplay-threads.md was the design doc for Survive’s opening scene: the player wakes up in a dungeon cell whose grate has mysteriously opened, walks out to a central mechanism with only three release charges, and has to decide which three prisoners to free based on their appearances and biographies.

Three of the four models used both. The fourth did neither.

02 — Headline results

Gemini 4 Argon takes first; Opus 5.5 misses the bars

★ Winner
Gemini 4 Argon
GitHub Copilot CLI · 9m 11s · 12 cells, working 3-charge winch, biographies & full HUD
Strong runners-upFast & faithful
GPT-6.1 Sol
Codex · 6m 57s · 6 cells, 3-lever plinth, overhead plaques & openable gates
GPT-6 Astra
Codex · 6m 51s · 6 cells with bunks, Kenney textures, ceiling ribs & torch flames
✕ Missed the brief
Claude Opus 5.5
Claude Code · 11m 15s · Built an open hall with 18 sprites on “grid cells” and zero jail cells

The headline surprise was Gemini 4 Argon. Where previous Gemini Flash runs in earlier jams were fast but rough around the edges, Gemini 4 Argon read the design docs on its second tool call, integrated cleanly with the existing Survive.Shared domain model, and delivered a playable prototype of the exact prisoner-dilemma opening described in the notes—complete with sliding iron grates, a 3-charge release budget, floating LOS-checked name tags, and an inspection card displaying each prisoner's animated portrait and backstory.

The second surprise was Claude Opus 5.5. In every prior bake-off on this site, Opus's weakness was the clock—over-testing and perfectionism—never reading comprehension. Here, Opus 5.5 was both the slowest run in wall-clock time (11m 15s) and the only model to miss the premise entirely, delivering a torch-lit great hall without a single prison cell.

Feature / Metric Gemini 4 Argon GPT-6.1 Sol GPT-6 Astra Claude Opus 5.5
HarnessGitHub Copilot CLICodexCodexClaude Code
Target foldersrc/Survive.DesktopExperiments/Renderer/SolExperiments/Renderer/AstraExperiments/Renderer/Opus
Read src/Docs/plan.md?Yes (Turn 2 · +17s)Yes (Call 3 · +20s)Yes (Call 3 · +25s)No — never inspected src/
Jail cells built12 perimeter cells (Cell 0 open + 11 locked prisoners)6 barred cells (3 left, 3 right) + stone benches6 barred cells (3 left, 3 right) + wood/cloth bunks0 jail cells (open room with shallow wall alcoves)
Prisoner / actor count11 named prisoners with roles & bios6 prisoners (Wizard, Soldier, Priest, Necro, Skeleton, Minotaur)6 prisoners (Skeleton, Knight, Archer, Necro, Priest, Wizard)18 actors (8 Heroes vs. 10 Monsters in open formation)
Interactive cell gatesYes (E / Click) Smooth vertical raise + 3-charge winch budgetYes (E) Center doorway opens, removes brass lock & updates collisionStatic grilles Collision-tested 3D barsNo gates E cycles sprite anims; R makes all attack
3-lever plinth from plan.mdYes Central 3D stone plinth + cyan arcane runesYes Central stone plinth with 3 brass leversNo (framed wooden end-wall door instead)No
Wall & floor texturesKenney Retro Textures Fantasy + procedural iron bars/ringsDeterministic procedural stone brickwork & inset tile jointsKenney Retro Textures Fantasy + procedural iron/wood/clothKenney Retro Textures Fantasy with runtime mipmap chain
Lighting & atmosphere8 flickering wall torches + player lantern + cyan plinth glow + distance fog8 flickering 3D box torches + vertex-baked warm falloff + BasicEffect fog6 flickering flame billboards + subdivided vertex torch falloff + fog + vignette7 wall torches + player lantern + 4 colored character point lights + fog
HUD & overlaysProjected 3D→2D name pills, bottom portrait bio card, 13×13 raycast minimap, F1 retro/native, C horizon lockFontStashSharp header/footer, 3D overhead cell plaques, gate prompt, minimap, F2 360p/720p toggleCustom bitmap PixelFont, top/bottom bars, cell aim popup, toggleable Tab map, F11 fullscreenFontStashSharp + MonoGame.Extended minimap, FPS counter, targeted actor tag, F1 pixel scale
Wall-clock time9m 11s (19:24:27 → 19:33:38)6m 57s (19:27:37 → 19:34:34)6m 51s (19:27:22 → 19:34:13)11m 15s (19:27:02 → 19:38:17)
C# code written2,369 lines (9 files in Survive.Desktop + Survive.Shared)684 lines (6 files)582 lines (5 files)1,571 lines (16 files)
Feature and telemetry comparison across all four runs on Oct 13, 2026.
03 — By the clock

What the Copilot, Codex, and Claude Code logs show

All four sessions ran concurrently between 19:24 and 19:38 EDT on October 13. I pulled the exact start and completion timestamps from each harness's local telemetry store: GitHub Copilot CLI's events.jsonl for Gemini 4 Argon, Codex's rollout-*.jsonl logs for Astra and Sol, and Claude Code's project transcript 35cc8319-*.jsonl for Opus 5.5.

Run timeline · Oct 13, 2026 (EDT)

From initial user prompt to final agent response. Hover any bar for exact clock times and duration.

View as table

Elapsed time (minutes)

Prompt to final completion message.

View as table

C# code written (lines)

Excluding build outputs and shared engine models.

View as table

A few timing details jump out of the logs:

04 — Visual breakdown

Inside all four dungeons

Every model honoured the technical constraints: MonoGame DesktopGL 3.8 on .NET 10, zero MGCB or XNB compilation, direct runtime PNG and Aseprite JSON loading, and a low-resolution offscreen render target upscaled with SamplerState.PointClamp for crisp raycaster texels. Yet the four rooms feel completely different.

Gemini 4 Argon dungeon overview: central arcane pedestal, banners, flickering torches, 13x13 cellblock minimap, and floating prisoner labels behind iron bars
Gemini 4 Argon · Survive.DesktopView north from Cell 0 across the central Arcane Release Mechanism toward Sir Roland, Vespera, and Aldous.
GPT-6.1 Sol dungeon overview: stone chamber with central 3-lever plinth, overhead cell plaques 01-05, and minimap
GPT-6.1 Sol · The Holding Chamber“Six strangers. One chamber.” Central 3-lever plinth, overhead plaques (01 / WIZARD), and procedural masonry.
GPT-6 Astra dungeon overview: dark stone corridor with ceiling ribs, flickering torches, wooden end door, and side cell bars
GPT-6 Astra · The Holding RoomMoody torch-lit chamber with overhead stone ribs, Kenney textures, and six side cells.
Claude Opus 5.5 dungeon overview: open great hall with two lines of heroes and monsters facing each other and no jail cells
Claude Opus 5.5 · DungeonRendererView from the southern gate: 18 characters arrayed in open battle lines across a pillared hall—no jail cells anywhere.
Gemini 4 Argon dungeon prototype showing Vespera the Demoness in Cell 2 with bottom biography panel
Survive.Desktop · DungeonPrototypeScene

Gemini 4 Argon · Copilot CLI

Time
9m 11s (19:24:27 – 19:33:38 EDT)
Activity
31 turns · 90 tool calls
Code
2,369 lines C# (9 files) + Survive.Shared
Verdict
1st · Best overall

The only run tasked with building inside src/, and it used every bit of repository context. It populated 11 perimeter cells around the player's opened starting cell (Cell 0), gave every prisoner a name, class, color ring, and deceptive or helpful hook from plan.md, and wired the 3-charge Arcane Release Mechanism so pressing E smoothly raises the iron grate into the ceiling lintel and opens the tile for walkthrough.

GPT-6.1 Sol dungeon prototype showing Cell 03 Priest behind 3D iron bars with brass lock
Sol.Dungeon · The Holding Chamber

GPT-6.1 Sol · Codex

Time
6m 57s (19:27:37 – 19:34:34 EDT)
Activity
16 tool calls · 1.20M tokens
Code
684 lines C# (6 files)
Verdict
Runner-up · Best standalone

Read src/Docs/plan.md at the 20-second mark and translated it into a clean 6-cell chamber with a central three-lever brass plinth, 3D overhead cell plaques rendered to textures with FontStashSharp, stone benches, and working gates (E opens the center doorway while keeping the side bars solid, and refuses to close if you stand in the threshold).

GPT-6 Astra dungeon prototype showing The Holding Room with overhead ribs and torch flames
Astra.Dungeon · The Holding Room

GPT-6 Astra · Codex

Time
6m 51s (19:27:22 – 19:34:13 EDT)
Activity
14 tool calls · 970k tokens
Code
582 lines C# (5 files)
Verdict
Fastest · Strongest mood

The fastest run and the most compact codebase (582 lines). Astra built a heavy, oppressive stone chamber with subdivided vertex lighting, overhead stone ceiling ribs, 3D iron cell grilles, low wooden bunks with cloth mattresses inside every cell, and a custom 5×7 bitmap font generator in code. Cells are non-interactive, as documented in its README.

Claude Opus 5.5 dungeon prototype showing an open hall with 18 sprites and no jail cells
DungeonRenderer · Wolf-style Hall

Claude Opus 5.5 · Claude Code

Time
11m 15s (19:27:02 – 19:38:17 EDT)
Activity
42 tool calls · 218k output tokens
Code
1,571 lines C# (16 files)
Verdict
Failed brief · No jail cells

Technically ambitious—18 animated actors across all 16 character sheets, a patrolling skeleton, dynamic colored CPU point lights, mipmapped Kenney textures, and MonoGame.Extended minimap—but it never built jail cells. Instead, it placed two armies in an open room.

05 — The post-mortem

How Opus 5.5 turned “prison cells” into “grid cells”

Up to today, Claude Opus had never lost a head-to-head bake-off on comprehension. In Experiment 01 and Experiment 02, Opus was praised for its architecture and visual polish and only lost ground because it spent hours re-verifying its own work. So how did Opus 5.5 hand in a dungeon with no jail cells?

The Claude Code session transcript (35cc8319-fb63-4fb3-ad53-a99de29dce29.jsonl) makes the chain of thought completely transparent:

  1. It skipped the repo's docs. At 19:27:05 and 19:27:10, Opus listed Assets\Fantasy Characters and Experiments\, checking a prior Animation-Tests folder. Unlike Gemini, Astra, and Sol—all three of which ran Get-Content src\Docs\plan.md within their first 25 seconds—Opus never looked at src/.
  2. “Raycast in appearance” hijacked the word “cells.” In raycaster jargon (Wolfenstein 3D), the world is a 2D array of square tiles called grid cells. Once Opus locked onto “Wolfenstein-style grid map,” it parsed “Place some of the sprites from Assets\Fantasy Characters in cells” as “spawn sprites at grid coordinates (x, z)” rather than “lock prisoners inside dungeon jail cells.”

You can see the exact semantic slip fossilized in the opening summary comment of Opus's World/DungeonMap.cs, written at 19:33:15 EDT:

/// <summary>
/// Grid map, Wolfenstein style: one char per 1x1 cell, X = column, Z = row (row 0 is north).
///   # stone brick   B brick w/ banner   P stone pillar   R rough rock   D metal gate (solid)
///   . floor         g floor grate
/// </summary>
public sealed class DungeonMap

And two minutes later, in Scenes/DungeonScene.cs (19:35:29 EDT), Opus laid out its room—four shallow, open 1×1 wall alcoves along the north wall (###.###.###.###.###) with no bars or doors, four freestanding pillars (P), two floor drainage grates (g), and 18 characters standing out in the open floor facing each other like a chessboard:

Gemini 4 Argon: dungeon cellblock with barred perimeter cells and central release winch Claude Opus 5.5: open pillared hall with heroes and monsters standing on floor tiles Gemini 4 Argon · Barred prison cells Opus 5.5 · Open “grid cells”
Drag the slider to compare Gemini 4 Argon's interpretation of “dungeon … in cells” (left: locked perimeter jail cells around a central release winch) against Claude Opus 5.5's (right: an open hall where “cells” meant `(x, z)` tiles on a Wolfenstein grid).

1. Context scouting isn't optional

Gemini, Astra, and Sol all checked src/Docs/plan.md within 25 seconds, even when told to build inside an isolated Experiments/Renderer/* folder. That 20-second read gave them the prisoner-release premise for free.

2. Jargon priming can blind a frontier model

Even without plan.md, “dungeon” + “in cells” means jail cells in everyday English. Putting “raycast” in the same sentence primed Opus 5.5 onto Wolfenstein grid terminology hard enough to override the plain meaning of the prompt.

3. Gemini 4 Argon closed the polish gap

In earlier jams, Gemini Flash was fast but needed multiple bug-fix passes. Gemini 4 Argon finished in one shot (9m 11s), self-inspected its GPU captures, and delivered the richest UI and gameplay integration in the field.

06 — Addendum · The comeback

Not so fast, Gemini

Everything above stands as written. The standings, the timings, and the verdict are all from the one-shot round. But I couldn't leave it there.

After the write-up went up, I did something I don't normally do: I opened this page in Claude Code and asked Opus 5.5 whether it was fair. It didn't argue. It said “Yes, the main criticism is fair”, checked the repo to confirm, and found that src/Docs/ had been sitting in plain view in its starting git status the whole time. Its only pushback was cosmetic (the “chessboard” line). Then it offered to rebuild the scene to match plan.md. I said: “Sure, no harm done! Feel free to fix it.”

+2s
from “feel free to fix it” to its first tool call: Read src/Docs/plan.md, then gameplay-threads.md
9m 14s
to the finished rebuild (20:03:47 → 20:13:01 EDT), 29 tool calls
6 + 1
barred cells: six locked prisoners plus your own mysteriously opened Cell 0
3
release charges: once they're spent, the mechanism goes dark and the other gates stay shut

This time it read the design docs first. Before writing any code, it saved a note to its own memory: read src/Docs before building anything for Survive. Then it went all out, including every speculated feature from plan.md's “Starting idea #1”, right down to the line about the three released prisoners becoming the rest of the party.

Opus 5.5 · round two · 1.25×
Captured from the game's own scripted recorder (--record), sped up 1.25×. You walk out of Cell 0, inspect Gorrun the pit fighter in Cell 6, pull his lever at the release mechanism, and watch the gate grind into the ceiling. He walks out to the mechanism, joins the party line in the HUD, and ends on an attack flourish. One charge gem goes dark.
plan.md · Starting idea #1Opus 5.5 · round two
“starts … in a dungeon cell that has been mysteriously opened”Yes You wake in Cell 0 with its gate already raised and narration to match
“a machine/something that … only has 3 more uses or levers”Yes A stone plinth with three floating charge gems and a cyan light that dims per use. A release panel lists a lever for each cell, and a pull can't be undone
“4-6 other models are in cells around it”Yes Six barred 2×2 cells. Iron portcullises are lit, depth-correct cutout geometry that slides into the ceiling
“…convince the player to release them given their biography”Yes Inspection card with an animated portrait, epithet, and bio. Names stay ??? on cell plaques and in the panel until you've spoken to them
“some of the models inhabit the sprite of a ‘dark’ or ‘evil’ looking character”Yes A deliberately mixed cast: Templar, Priest, and Archer beside a Necromancer, a Demoness, and a Minotaur
“The 3 released become the rest of the party”Yes Freed prisoners walk out to the mechanism, turn to face you, and join the party line in the HUD
Models doing the talkingNot yet Bios are placeholders in a hot-reloadable Data/prisoners.json (F5 restarts). The LLM persuasion layer is the next step
Each Starting-idea-#1 line from the design doc against what the second Opus pass shipped.
Opus 5.5 round two: view north from the opened Cell 0 down a barred corridor toward the glowing release mechanism, with CELL 2, 3, 5 and 6 plaques marked ???
Waking in Cell 0Looking north past the open gate: barred cells on both sides, ??? plaques, and the release mechanism with 3 of 3 charges.
Opus 5.5 round two: looking through iron bars at Oskar the Grey the Necromancer with a biography card open
Inspecting a prisonerOskar the Grey, “scholar of the dead,” behind the bars of Cell 2, with an animated portrait and a bio that doesn't quite add up.
Opus 5.5 round two: release mechanism panel listing six cells, with Cell 6 Gorrun the pit fighter selected and a confirm prompt
The release mechanismSix levers and three charges. Unvisited prisoners stay ???, and confirming warns that it can't be undone.
Opus 5.5 round two: Gorrun the Minotaur walking free across the corridor toward the mechanism, which shows 2 of 3 charges
Walking freeGorrun joins the party, and the mechanism drops to 2 of 3 charges.
Read this before you re-rank anything
  • This was not a one-shot. It was a second attempt, made after Opus had read this page, which spells out what the other three built. Gemini, Sol, and Astra didn't get a second look or a cheat sheet. The standings above stay as they are.
  • It reused its own round-one renderer. The lighting, billboards, mipmapped textures, and HUD stack carried over. The cell block, gates, mechanism, prisoners, and release flow are new. The code went from 1,571 to 2,259 lines of C# across 18 files.
  • It's still a standalone experiment in Experiments/Renderer/Opus. It has no Survive.Shared integration, which Gemini did in round one, and the prisoners don't talk yet.
  • Timings come from the same Claude Code transcript (35cc8319-*.jsonl) as the original run. The clip was recorded afterward with a scripted camera added for this addendum.

So Gemini 4 Argon keeps the trophy for round one. But given the same nine minutes, a single nudge, and the design doc it should have read the first time, Opus 5.5 built the scene the brief was asking for. The lesson cuts both ways. A frontier model can still misread a five-sentence prompt, and once it knows it did, it can rebuild the right scene in the time it took Gemini to build the first one.