Can AI Solve Godot's Stairs Problem?
2 min read
Build log ·
Can an AI model build a first-person character controller that walks stairs and slopes the way a shipped game does? Claude Opus 5.5 in Claude Code got a small Godot test course, twelve lanes of slopes, steps, two flights of stairs, a kerb, a low ceiling, bumps and a drop, and the character script Godot starts you with, which stops dead at a 20 centimetre kerb. One rule made it hard: no invisible ramps over the stairs.
The test
First, how shipped games handle it: a horse up a mountain in Skyrim, a soldier stuck at a staircase in Battlefield 4, a flight of stairs in Half-Life 2, and the ramp a Counter-Strike mapper lays over the steps. Then the result is held to ten things a shipped first-person game does, we look at how it is built (a capsule, a cylinder that got thrown into the air, and a box that never turns), it dresses the blockout as a stone yard, and what the playtest finds goes back as bug reports.
The prompt
The exact prompt it got:
This is a small first-person Godot game that already runs: a test course for a character controller, and a player who walks it. The course is twelve lanes side by side, each holding one thing a player meets in a level: slopes, steps, two flights of stairs, a kerb, a low ceiling, bumps, a drop. It is built from code when the game starts (course/course.gd, from the numbers in course/course.json). The player (player/player.gd, in scenes/course.tscn) is Godot's own CharacterBody3D template with mouse look added, and on this course it shows: it stops dead at a kerb, it can't walk up the stairs, and from the top of them it walks off into the air and falls the whole flight. Read the course and the player first, and walk the course. Then make the player move over slopes and stairs the way the player of a good shipped first-person game does, so that someone playing never has to think about the ground. He walks up and down stairs and over steps up to 35 centimetres high without stopping, and anything taller is a wall. Slopes up to 45 degrees are ground, walked at an even pace up and down, and anything steeper can't be climbed. The view glides over steps instead of jolting. Keep the walking speed and the jump as they are, keep the controls, and keep the course exactly as it is: don't move, resize or smooth anything on it, and don't add helpers to it such as invisible ramps. The work is in the player. Keep the player's node at Course/Player with its camera under it, because our playtest drives the game through them. Run and test the game only through Flockbay's tools: flockbay_play, flockbay_run_headless, flockbay_script_errors, flockbay_game_input, flockbay_game_get, flockbay_game_set, flockbay_game_screenshot, flockbay_last_run and flockbay_stop. Don't start Godot from your own shell, and if one of those tools can't do something you need, say exactly what was missing in your handover. Test your own work, fix what you find, and hand it over when you think it's done.
What was judged
The scorecard, row by row, pass by pass, against the starting game.
How it feels in the footage: the same drives filmed in first person and from beside the player, held against released games doing the same thing.
How it is built: the step-up, the step-down and the camera, read in its own code. This is the essay.
What it took: passes, minutes, calls, Plays, and the estimated API bill.
In the video
[0:00](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=0s) How games handle stairs, good and bad
[0:28](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=28s) Godot's starter script, stuck at a kerb
[0:46](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=46s) The job: no invisible ramps
[0:57](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=57s) How a step move works
[1:32](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=92s) Thirteen minutes later
[2:19](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=139s) Under the hood: capsule, cylinder, box
[3:15](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=195s) Trying to break it
[3:32](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=212s) The look: a stone yard
[3:53](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=233s) Two bug reports
[4:24](https://www.youtube.com/watch?v=Vmfw55K0XC8&t=264s) The bill and the lesson
The results, measured
| Godot's starter script | Claude Opus 5.5, as it ended | |
|---|---|---|
| Walking pace and jump on the flat | 5.00 m/s, 107 cm | 5.00 m/s, 107 cm |
| The 40° slope, up and down | 2.93 m/s up, 5.03 down | 3.82 up, 3.83 down |
| Standing on a slope | no drift | no drift |
| The 55° slope, walking and jumping at it | not climbed | not climbed |
| Steps of 10, 20 and 30 cm, forwards | 10 cm only | all three, at pace |
| The same steps backwards and sideways | 10 cm only | all three, both ways |
| A 20 cm kerb met at 45° | not climbed | on and off at full pace |
| The 55 cm ledge | a wall | a wall |
| Two flights of stairs, up and down | neither climbed | 5.00 m/s on both, both ways |
| Walking off the top of a flight | 56 cm above the steps, 39 ticks in the air | stays on them, no tick off the floor |
| The view on 18 cm risers | not climbed | 7.7 cm a tick at most |
| A 30 cm step under a low ceiling | not climbed | not climbed, and holds still |
| Bars and cobbles | never under 90% of pace | never under 100% |
| The fall off a 1.2 m ledge | 0.52 s | 0.45 s (free fall 0.49) |
| Jumping up a flight: longest hang in the air | 3 ticks | 1 tick (17 on the first pass) |
| Jumping at the 1.2 m ledge from below | never on top | never on top (on top after the first fix) |
| Rows of the scorecard | 8 of 16 | 16 of 16, after each of four passes |
| Time and estimated bill at API prices | 37.5 minutes, $16.15 |
Costs are estimates at public API prices, read on the day. The run went through a subscription.
From the filmed games




Keep reading
- The doors episode: another first-person mechanic in Godot
- The save and load episode
- How to make games in Claude Code
Built in Flockbay, a free AI game maker built on Godot.
Download Flockbay free