Can an AI agent build a real physics vehicle? Claude Opus 5.5 in Claude Code and GPT-6.1 Sol in Codex got the same prompt and the same reference picture: an off-road hill climb in Godot, with a truck that has to be a real physics body on working suspension. No downloaded or generated 3D models. Both worked inside Flockbay over MCP, pressed Play themselves, and decided when they were done.
Source: https://flockbay.com/blog/opus-5-5-vs-gpt-6-1-sol-physics-truck-game-in-godot/ · Updated 2026-10-05
The test
Then the bill, estimated at API prices: one run cost about seven times the other, and the video shows where it went.
Both trucks were driven by the same script on each game's own controls.
The prompt
The exact prompt both models got:
Build an off-road hill climb in Godot. The player drives a truck from a base camp at the bottom of a mountain up a rocky dirt trail to a flag at the summit. On the way up, the trail crosses a wooden plank bridge over a gap and goes over one jump. The truck must be a real physics body with working suspension, driven by engine force and steering at its wheels; don't move it along a path or set its position from code. If the truck rolls over, the player can press a key to put it back on its wheels. Use a chase camera behind the truck. Make the truck feel heavy, make the suspension visibly work, and make it look like the reference picture. Build every model yourself from code or primitives; don't download or generate 3D models. Playtest it yourself and hand it over when you think it's done.
What was judged
How close it looks to the reference.
How the truck drives: weight, suspension travel, grip, steering.
Whether it survives the course: stays on the terrain without tunneling, crosses the bridge, lands the jump, and comes back from a rollover.
What it cost: tokens, calls, time, and the estimated API bill.
In the video
- 0:00 No curve this time
- 0:13 The job
- 0:49 The models and their prices
- 1:10 The rules
- 1:36 Who drives
- 1:51 Opus 5.5: Summit Trail
- 2:31 Flat out, then the rollover
- 2:59 GPT-6.1 Sol: Alpine Ascent
- 3:55 The rollover and the reset key
- 4:21 Side by side
- 4:35 The ray-cast vehicle
- 5:33 Draw calls against triangles
- 5:56 How each one tested
- 6:12 The cost
- 6:50 What I would ship
It ran in Claude Code, on Flockbay’s MCP server
Claude Opus 5.5 ran in Claude Code for 31 minutes on the prompt above, with Flockbay’s tools connected over MCP: 79 calls to Flockbay’s tools and 29 to Claude Code’s own. Every call, from the run’s transcript:
| Tool | Calls |
|---|---|
flockbay_game_get |
26 |
| Bash | 21 |
flockbay_game_input |
18 |
flockbay_game_set |
10 |
flockbay_play |
7 |
flockbay_script_errors |
6 |
| Write | 4 |
flockbay_game_screenshot |
3 |
| Edit | 2 |
flockbay_game_tree |
2 |
flockbay_run_headless |
2 |
| Read | 2 |
flockbay_godot_status |
1 |
flockbay_last_run |
1 |
flockbay_project_info |
1 |
flockbay_set_project_settings |
1 |
flockbay_stop |
1 |
Godot’s output caught the first bug
The first check that failed was flockbay_script_errors. The lines it returned that name the problem:
Error at res://scripts/scenery.gd:428: Parse Error: Cannot infer the type of "foot" variable because the value doesn't have a set type.
Error at res://scripts/scenery.gd:542: Parse Error: Cannot infer the type of "foot" variable because the value doesn't have a set type.
The next edit went to res://scripts/scenery.gd
The next edit Claude Code made after that check, through Bash:
sed -i 's/var foot := gate.affine_inverse()/var foot: Vector3 = gate.affine_inverse()/; s/var foot := xf.affine_inverse()/var foot: Vector3 = xf.affine_inverse()/' scripts/scenery.gd
res://scripts/scenery.gd as it was handed over
Lines 457 to 489 of 668, from the game folder at the end of the build.
lamp.omni_range = 7.0
lamp.position = post + Vector3(0.55, 2.2, 0)
add_child(lamp)
# Gate where the trail leaves camp.
var gate := _trail_xf(54.0, 0.0)
p.xf = gate
for sx: float in [-1.0, 1.0]:
var foot: Vector3 = gate.affine_inverse() * terrain.beside_trail(54.0, -sx * 4.6, -0.4)
p.col = WOOD
p.cyl(foot, Vector3(sx * 4.6, 5.0, 0), 0.2, 0.16, 8)
p.col = WOOD_D
p.cyl(Vector3(sx * 4.6, 3.3, 0), Vector3(sx * 3.2, 4.55, 0), 0.08, 0.08, 6)
p.col = WOOD
p.cyl(Vector3(-5.2, 4.6, 0), Vector3(5.2, 4.6, 0), 0.17, 0.17, 8)
p.col = WOOD_L
p.box(Vector3(0, 3.85, 0), Vector3(4.4, 0.9, 0.08))
p.col = WOOD_D
p.cyl(Vector3(-1.8, 4.5, 0), Vector3(-1.8, 4.25, 0), 0.02, 0.02, 4)
p.cyl(Vector3(1.8, 4.5, 0), Vector3(1.8, 4.25, 0), 0.02, 0.02, 4)
p.xf = Transform3D.IDENTITY
for sx: float in [-1.0, 1.0]:
_col_box(gate * Transform3D(Basis.IDENTITY, Vector3(sx * 4.6, 2.3, 0)), Vector3(0.4, 5.4, 0.4))
_sign("SUMMIT TRAIL", gate * Transform3D(Basis(Vector3.UP, PI), Vector3(0, 3.85, -0.06)), 50, Color(0.16, 0.10, 0.05))
# ------------------------------------------------------------ bridge
func _build_bridge() -> void:
var half: float = terrain.BRIDGE_LEN * 0.5
var i0 := int(round(terrain.bridge_s - half))
var i1 := int(round(terrain.bridge_s + half))
var p0: Vector3 = terrain.trail_pts[i0]
Download Flockbay free: Built in Flockbay, a free AI game maker built on Godot. https://flockbay.com/free-ai-game-maker/
Related: How to make games in Claude Code, How to make games in Codex, The best LLM for Godot
I make Flockbay, a free AI game maker built on Godot. The original is on flockbay.com.
Top comments (0)