September was the busiest month on the project so far: 137 merged pull requests and a little over 400 commits. Most of the code was written by Claude Code sessions working with me, and the month had a clear shape. It started with rooms, moved into what a run looks like from start to finish, filled in the first region's enemies, and finished with a pass on how the game looks and sounds. Here's what got built.
Rooms
At the start of the month, rooms were drawn in LDtk and imported as collision-only greybox. That worked well enough to prove the next step: a zone is now assembled at run time from a pool of rooms, drawn from the run's seed, and the save stores the chain it built so a resumed run comes back identical.
LDtk didn't last the month. It's a paint-first tool with no way to edit the properties of one placed piece, and I do all my room work in the Godot editor anyway. So we built our own room editor as a Godot addon. It went through four iterations in its first four days, and the version that stuck is the simplest: a room is an ordinary Godot scene, and each placed piece is a node holding a kit asset. That means Godot's own selection, gizmos, copy and paste and undo do the editing, and the addon only adds what the editor doesn't have, like a place tool, a rectangle fill and a lint panel. A small C# tool reads the room scenes, checks them (can the player actually walk from the entrance to the exit?), and writes out the greybox and dressed versions. CI regenerates those files and fails if the committed ones are out of date.
Decoration that doesn't sit on the grid got its own home, a separate Decor scene beside each room that the room tools never touch. That's where the set dressing lives: the shacks, fences and hangar on the slum highway, and the backdrop behind it, with its own sky, sun and skyline.
Distant decoration is expensive to draw, so the last big piece of room work was baking it. Anything inside a marked group in a Decor scene gets rendered into flat cards, pictures of each mesh from the camera's point of view, and the game draws those instead of the real geometry. The bake is incremental, and a toggle switches between baked and real decoration so the two can be compared side by side.
Assets
The raw asset kits used to live in the repository as nine separate submodules, and nothing we ship used any of them directly. Removing them took each checkout's asset folder from 9.3 GB to 867 MB. Kits are now browsed in a separate project, and a piece comes into the game only when it's copied into our own kitbash with a record of where it came from. Two kits were brought in whole on purpose, a cyberpunk city set and a decayed shanty-town set, because we intend to use most of each. Release exports only include the parts of them a shipping scene actually uses.
On the policy side, we wrote down something that had been true in practice: generative AI never ships. Everything a player sees is from a bought kit or made by a person.
What a run looks like
A lot of September went into closing the loop between runs, so that finishing or losing one leads somewhere. There's now a hub you start each run from, with facilities you build and upgrade over time, and progress that carries from one run to the next. Finishing a zone moves you on through the region, and the difficulty climbs as you go. The upgrade list went from a handful of placeholders to our designer's full first set, and the weapon loadout was reworked so that what you carry grows over the course of a run.
The part I'm happiest with is the tooling behind it. There's now an Upgrades tab in the Godot editor, and our designer has already moved the upgrade tree into it from the diagram it used to live in. It shows every upgrade as a prerequisite graph you can edit, edits one entry at a time in a form, saves through the game's own loader so it can't write an entry the game would reject, and has a "Play with this" button that starts the game with that upgrade equipped. Upgrades that have been designed but not built yet can sit in the list as drafts, and the game never offers them.
Region 1's enemies
The first region got its full roster, all on placeholder bodies for now: the Gangster, a ranged fighter who keeps their distance and uses cover; the Thug, a faster, lighter version of the same idea; the Bruiser, who walks you down and carries a shotgun for when you try to stay out of reach; and the Nutjob, who throws grenades, with a clear warning on the ground before they go off.
Getting there meant pulling a shared humanoid enemy base out of a 2,400-line enemy class, so each new enemy only has to write its combat behaviour. Enemies can now also wait in the background behind the set dressing and walk into the lane along authored paths, either when you hit a trigger or when you get close. The sabertooth was retired and deleted.
On the player's side, dodge is in. It moves the character with real velocity instead of teleporting, so dodging into a wall stops at the wall and dodging off a ledge falls. Headshots are now decided along the line of the shot instead of by distance from the head, enemies see targets above them properly, and enemies no longer stall on ramps.
Animation
The player's Mixamo clips are now retargeted into a shared humanoid library, so any humanoid enemy can use them by adding one import setting. Ladders got clips synced to the rungs, the dodge uses a clip from a purchased animation pack, and the ledge pull-up and the wood monster's climb were both reworked to line up with the rigs they play on.
How it looks and sounds
For look, we tried a set of whole-screen art styles as post-processing passes: VHS, EC comic, giallo, lab schematic, drive-in, PS1 and thermal. VHS is the one I want while playing, so it's a toggle on the debug launcher. Lab schematic is a candidate for menus or the death screen, and the rest stay in the rotation for now. There's also a depth-of-field toggle, a V-Sync option, and a shadow setup matched to the side-on camera. The grenades got real models, both from Fab.
For sound, there's now an accessibility mode that draws game sounds on screen. Shape tells you what kind of sound it is and colour tells you how urgent it is, so it still works for colour-blind players, and off-screen sounds point in from the edge of the screen. We also added a raytraced audio engine as a second sound path beside the stock one, so the two can be compared by ear. My first listen was too much reverb but a fuller sound when shooting, so both stay until there's a verdict. Repeated sound effects now vary so they don't wear on you, and the credits screen is generated from the music list.
How we check the work
September was also when I wrote up how the agent checks a game it can't watch: it plays the game with scripts, renders every frame, and hands the pictures to a second reviewer that has to commit to a verdict. That's its own post, How a coding agent verifies a 3D game it can't watch, and the tooling is in a public Claude Code plugin.
Next
Two things are already lined up for October: the Region 1 enemies need their real models, and the stairs need a dedicated pass on the kit's actual flights of stairs rather than the test boxes they were tuned on.

