KINDLEFALL Play free
Part 1

From Idea to Prototype

From five rooms and one boss to a three-floor roguelite: how the game took shape, and how we worked.

Kindlefall started as five rooms, four kinds of skeleton and one boss. Today it has seven floors, five playable heroes, seven floor bosses plus secret duels, an epilogue, a soundtrack, and 200+ boons, relics and blessings to build a run out of. It runs in a browser tab, capped at 60 frames a second so a laptop stays cool.

Most of the code was written by AI, directed and playtested by a person with an Xbox controller who said, often bluntly, what felt wrong. This series is about how that worked: what we built, how we organised it, what we got wrong and what made the difference.

The openingEvery run starts like this: no music, the room rumbling awake, the dead rising, then the score creeps in once you have control. That shot exists because of a playtest note: "don't just throw you in".

What Kindlefall is

A top-down action roguelite: Dark Souls meets Zelda meets Hades. You're one of the Ember-born, descending the halls the First Flame burned into the earth. Most rooms are fights; after them, shrines offer a choice of three boons that change how you play; every floor ends with a guardian. Fall, and you rise again at the start of the room that killed you, boons intact, while a bloodstain holds the souls you dropped.

The story

The game's Codex tells it best. "Ages ago, on a night the old songs call the Kindlefall, the First Flame fell out of the sky. It did not stop when it struck the earth. It burned its way down, floor by floor, until it found the dark at the bottom of everything and lay there." The stairs you walk are its scar.

Before it fell, the First Flame took the dead home, "the way a hearth takes in the cold". Now it has burned low, and the dead have nowhere to go, so they walk toward the nearest warmth: the Ember in your chest, a spark struck from the Flame itself. "Every skeleton you meet is only walking home. You are carrying home in your chest."

Under the hood it is deliberately plain: three.js and ES modules, no build step for the game code, served by a tiny Python script. The art is the CC0 KayKit packs (dungeon pieces, adventurers and skeletons), merged into single skinned meshes and drawn with a toon shader, bloom and a warm colour grade. Every sound effect and every piece of music is rendered offline by Python synthesis code, with a few CC0 Kenney recordings layered under it. Nothing in the game needs an attribution line; that was a rule from the start.

The Kindlefall title screen: the gold KINDLEFALL logo over five hero cards (Ember Knight, Barbarian, Rogue, Pyromancer, Hollow), each with might, speed and ember ratings, and a row of mode buttons for Boss Rush, The Gauntlet, Trophies, Vows, Codex and The Hearth
The title screen todayFive heroes, a Boss Rush, an endless arena, 42 trophies, a 71-page codex and the Hearth. The first prototype had none of it.
7
floors, each with its own boss, music and ambience
5
heroes with their own movesets
200+
boons, duos, relics and blessings
329
sound effects (672 variants), all rendered by code
28k
lines of JavaScript in src/

How we worked

The loop was simple. Play the latest build, write notes, sometimes very blunt ones. The AI turned the notes into changes, tested them with a bot that plays the game headless, bumped the build number and shipped. Then play again.

Two things kept that loop from falling apart.

The first was AGENTS.md, a single file at the root of the project that every AI session reads first. It holds the rules ("every change gets a line in the changelog"), a map of every source file, the performance budgets, the things we learned the hard way, and a changelog entry for every build. When a session ran out of context or a new one started, it didn't start from zero: it read the file. That changelog is the best history of the project there is, and most of these posts are built from it.

The second was testing that didn't need a person. Early on there was a smoke test: a Playwright script that loads the game in Chrome, hands control to a simple bot, and plays a whole run invincibly, failing on any console error, any boss stuck in an invalid state, or any fight over the draw-call budget. Later each floor got its own run, and a regression script that plays every floor and reports frame times. That bot comes back in part 2, because it ended up being the referee for a whole set of AI teams.

A detail we likeThe early sessions didn't run on the development machine at all. The AI worked in a cloud sandbox and copied files back, and twice that bit us: once a sync silently wrote a stale copy, once Chrome kept running cached modules, so the playtest was reporting bugs in code that was already fixed. The fix was a build stamp on the title screen, a red banner if the running code is older than the files on disk, and a server that gives every launch its own URL prefix so the browser can't reuse old modules. Later the AI ran directly in the project folder and the syncing problem went away.

The arc

The early prototype
After the overnight sprint
Same floor, before and afterBoth clips are the real game, checked out from git and played by the test bot. The bones were there early on; what changed is everything around them: the HUD, the light shafts, the minimap, the style meter, the bats in the rafters.

From three floors to seven

For most of its early life Kindlefall was three floors of five rooms each: three fights with a shrine after each, a treasure room that ambushes you, and a boss, linked by a fire portal that opens where the boss dies. The Kindlescar (skeletons and the Bone Tyrant), the Ashen Archive (a burning library, a cult, the Hollow Archmage), the Hollow Barrows (a graveyard of the knights who came before you, and the Hollow King).

Floor IV was different from the start. Before any code, the AI wrote a design document for it, docs/FLOOR4.md: a hub with three wings instead of a straight line, light from lava below instead of torches, a puzzle, new monsters made of fire so fire stops being the answer. Building it needed the level code to support branching layouts and sealed gates, and building that taught us how to make a floor that's a place rather than a corridor.

Then came the request for seven hours of "go crazy". The overnight sprint finished Floor IV and added three more floors: the Drowned Cathedral, the Shattered Spire and the Hearth of Origins, where the story ends. Each has its own terrain system, five new enemies, a three-phase boss, a secret duel behind a cracked wall, its own music, and between 23 and 45 new sounds. Part 3 walks through all seven.

Floor IV, the Forge HeartA procedural molten colossus in a lava pool. Its fists stick in the floor after a slam; hit the fist. When it dies, every lava channel on the floor cools to black stone.

What's in this series

  1. From Idea to Prototype (this one)
  2. The overnight sprint: the turning point, an orchestrator and its sub-teams
  3. Floor by floor: seven identities, with clips
  4. Five heroes and the boon system
  5. Playtesting: what the notes changed
  6. What made it good: the lessons
  7. The Hearth, and making it fair for strangers
  8. A new name: Kindlefall
  9. Hundreds of things on screen, and no stutter: performance, with profiles
  10. Bending time to make you feel powerful: hit-stop, slow motion and telegraphs
  11. Warm, not white: the glare guard, strike the heart, the theft cutscene, the music
  12. Making the boons delight the eye: five icon styles and the living set

All the clips in these posts were captured from the real game by a script driving Chrome, using the same test bot that plays the game in every test run. Nothing is mocked up. Where we show "before", it's the actual old build, checked out from git and played the same way.

Play Kindlefall

In your browser, with a keyboard and mouse or a controller.