Custom Roguelike - Getting Ready for the Demo
Published 2026-10-14
Getting Ready for the Demo
Clearing out the backlog
With all seven themes rebuilt, a lot of my backlog had gone stale, so I cleaned it up. The seven “this theme is done” notes came out, since each rework already has its own write-up in the done list. The balance item lost its long history and now just lists where each theme stands after its rework: the Sewer 85% at Dungeon Crawl, the Mountain 75% at 1 Blade, the Swamp 71% at 2 Blades, the Forest 61% at 3 Blades, the Dungeon 54% at 4 Blades and the Demon Castle 57% at 5 Blades. The music item was still waiting on tracks that came in during the reworks (the castle, hell, boss, final boss and defeat), so now only a Battle Arena track is left.
I’ve also called the animation work done for now. The hurt flinches, an enemy-by-enemy sprite review, extra boss attacks, the Hunter’s and the Mage’s walk redos, the Rogue’s dagger touch-up and more red in the Barbarian’s Rage all came off the list.
The story is next. It was written back when every tier could roll any theme, and now each tier is its own place with its own Blade and its own bosses guarding it, so the story needs working on again. I merged the two story items into one, and the Battle Arena comes after it.
Faces for the dialog box
Overnight every speaking character got a face close-up for the dialog box: the ten townsfolk (Elder, Blacksmith, Townswoman, Townsman, Young Child, Witch, Shopkeeper, Innkeeper, Fisher and the Cat), plus the Hero and the Demon for the prologue. Each townsperson has three little loops: worried when they have a quest for me, happy when I’ve just turned one in, and a talking loop for their everyday lore. The Hero and the Demon only talk. The whole batch cost 142 PixelLab generations, far less than I’d budgeted. Next I’ll go through them and put the keepers on a sheet.
Faces in the game
The faces are in. They’re packed onto one sheet and drawn in a square panel to the left of the dialog box, at twice their size. In town the face matches the moment: worried when someone has a quest for me, happy when I’m handing one in or just have, and talking the rest of the time. The prologue’s Hero, Demon and Elder get one too, and their box is a bit narrower so the face and the text stay centered together. Tutorial and narration boxes stay plain.
I also took the Healing Potion out of the Hellhounds’ drops. Battles never give potions in a real run, so the prologue shouldn’t teach that they do. Now the potion lies on room 3’s exit door, so the Hero has to walk over it to leave. A tutorial box explains that items lie on the floor and you pick them up by walking over them, and once he has it the Hero says: “A potion. As if I’d need one.”
The prologue in the battle tester
To check the faces without starting a new save every time, the battle tester got a third mode, Prologue, next to Battle and Dungeon. It plays the prologue from its first line, but never marks it as played, and when it ends (or I press Esc on the map) I’m back at the tester’s setup screen.
The Demon in the prologue
Playing the prologue in the tester showed two things wrong with its Demon. He came out smaller than the Fallen Champion, so he’s now drawn two and a half times as big (everywhere, not just the prologue). And he had all five Blades sticking out of him, when in the prologue the Hero still carries every one of them. Now he has none, and he dies with a plain death of his own. With five Blades in him, at the end of a real run, his death is going to be him being sucked into the nether instead.
The old castle comes back for the prologue
The castle rework painted over the Demon Castle’s first two battle backdrops, the keep hall and the throne room. They suited the prologue better than anything new, so they’re back for it: the keep hall for rooms 1 to 4 and the throne room for the Demon. The battle backdrop sheet was full and couldn’t grow any more (one more row and the game can’t number its pieces), so the two old scenes live on a small sheet of their own that the game swaps in for prologue fights only.
Enemies off the walls
I went through every battle backdrop and found ten where the enemies seemed to float: the Sewer tunnel, the catacomb crypt, the King’s tomb, the Swamp boardwalk, stilt hut and lair, and the castle’s outer bailey, labyrinth, courtyard and the Demon’s plateau. On those the back row of a group now stands almost as low as the front row, so everyone has their feet on the ground. The front row can’t go any lower without its names slipping behind the Actions box. The lone bosses were already in the right spot, so they stay where they were.
The Demon pulled into the nether
The Demon’s death at the end of a real run is now him being pulled into the nether: a portal opens under him and he sinks into it until only the portal is left, all five Blades still sticking out of him. It plays slower than an ordinary death so it has time to land. I tried a second version that I hoped would show the tentacles, but the portal never even showed up in it, so the first one stays. On the last frame before the portal closes, the Blades were left hanging in the air where his chest had been. Now they sink with him and go into the nether too.
Room for the castle’s enemies
The castle’s backdrops have walls that come so far down that even the lowest rows left the enemies standing against the wall, with their names sitting on top of the Actions box. So on every castle backdrop, the prologue’s two included, the Actions box now sits a little lower on the screen and the enemy groups come down with it. Now they stand on the floor. Every other theme keeps the box where it was.
Prologue touch-ups from a playtest
Playing the prologue again turned up a few things. The box telling me to walk over the potion flickered every time I took a step, because a lesson box is only drawn between moves. Now it goes away on my first step, and the potion lies one tile inside room 3 instead of on the door, so I can see it on screen as soon as the fight ends.
The Fallen Champion was far too big. His map art fills its whole tile and was drawn one and a half times over, so he stood twice as tall as the Hero. He now has his own map size, just under the Demon’s, and in battle he’s a little smaller too, so the Demon is still the biggest thing in the castle. That counts for the real castle’s floor 1 boss as well as the prologue. The Hero, on the other hand, looked small in battle, so he’s now drawn a quarter bigger than the classes, growing downward so his head stays under his bars.
Bosses also flashed when they died. The frame where a fight ends was never drawn at all, and in the prologue that one undrawn frame came out as a jumble of every battle backdrop in the game, since its two castle scenes live on their own sheet. Now that last frame is drawn like any other, and a dead boss stays on screen, lying on the last frame of its death, with the victory message over the top.
Cleaning up the docs
With all seven themes rebuilt, a lot of my working rules had gone stale, and the same rule often lived in two or three places, so one copy would get fixed and the others wouldn’t. I went through every rules file and every note Claude Code keeps between sessions and gave each rule one home: CLAUDE.md for what applies to everything, a file per task in docs/claude/ for the rest, and the session notes cut from 43 down to 8, holding only what’s next, where the last changelog and tags stopped, and a few facts about my setup. Rules now just say the rule, without the story of how it came about.
Two new task files came out of it: one for bot runs and reading balance results, and one for writing story and dialog, ready for the town script. CLAUDE.md now starts with a table of what my usual requests mean (“what’s next”, “let’s merge”, “let’s do a blog post”, “let’s do a new build”) so each one always runs the same steps, and every journal entry, merge and build is now also a check that the docs are still right. Each build updates the GitHub CHANGELOG.md again along with the Discord post.
The docs/ folder got sorted too: the glyph map and art guides in reference/, the story scripts in story/, the music prompts in prompts/, and the seven themes’ art prompt files, every round of them, in the archive. Along the way I found the map tile sheet is nearly full, with 30 of its 1024 rows left, so the next big map art will need a second sheet. The last loose folder, docs/wip_art/, stays as a scratch space where Claude drops art previews for me to look at, and it gets emptied at every merge and build so old mockups don’t pile up.
The prologue gets a castle of its own
The prologue’s map was still the plain one from when I first built it, so it got a look pass to match the reworked Demon Castle. It’s painted with the castle’s hall kit now, tall walls, stone slabs and glowing cracks, and laid out anew: the first three rooms climb north, a great hall opens south into room 4, and a passage turns back north to the throne room’s great door. The doors are arched with portcullises that rise as the Hero walks up, and a red carpet runs up to the throne. PixelLab drew the rest of the dressing: the throne, a rune disc, wall banners, torch stands, basins and columns.
Room 3 changed the most. The ambush now springs the moment the Hero steps into a smaller great hall, and the potion lies in the hallway just past its door, with the hint about picking it up waiting until he walks in there. The Flee lesson also says up front that you can only heal outside of battle, so the potion makes sense before he needs it.
The ending is scripted on the new throne room too. The five Blades lie on the carpet where the Hero vanished, the Elder walks in through the great door and stops beside them, and the acolytes come up the carpet in single file, each taking a Blade and walking back out beside the carpet until the room is empty but for the Elder.
A town script for every tier
The town’s lines were written back when any tier could roll any theme, so everyone talked about “the dungeon” in general. Now each tier is one place with its own Blade and its own bosses, so I wrote the town a script per tier: for every person, six lines for that run and three send-offs for the last visit before the Blade’s floor, all naming the place, its bosses and how many Blades you hold. One line is picked per person each visit and stays put while you stand there (and comes back the same after loading a save). The backstory now unfolds as you climb instead of being available all at once: the fallen hero and the scattered Blades at the start, the Blades as a lantern the nether can see at one Blade, the Elder begging the hero to spend them at two, the whisper the hero called confidence at three, the crimson door at four, and giving the Blades up at five. The town’s mood climbs with it, from no comment at all in the Sewer to plain fear before the castle.
The Elder’s first words now name each tier’s acolyte (he sent the ones he trusted least the shortest way, so the Sewer is the 1st Blade and the Dungeon the 5th) and the boss sitting on its Blade. The Townsman’s first bounty and the Blacksmith’s Fortress Ingot ask now fit the place instead of always sending you after goblins in the hills or to the old fortress ruins, the quests that said “down in the dungeon” now say “out there”, every tier’s intro names where the next Blade is, and the game’s text uses American spelling throughout (“armor”, “mom”). Endless keeps the old lines for now.
Where the Blades came from
Reading the town script back, I noticed it had the Blacksmith forging the Blades for the town’s founders, which isn’t the story I have in mind. The Blades are far older than anyone in town: they came up out of the nether with the Demon, called up by someone who wanted their power and didn’t understand the price. Who that was stays a secret until Endless. Heroes have struck the Demon down many times without knowing what the Blades are, so it always came back. When people found the Blades, they carried them off one by one for the strength they gave, never knowing the cost or that the Blades are the only thing that can send the Demon back for good. The prologue’s hero was the first to hold all five, kept their power, and was pulled into the nether, and the classes come later to finish what he should have done. So the Blacksmith now just distrusts steel he can’t place, the Elder says the Blades came with the Demon, and the “cut you” line became “every one of them has a cost”. The rule for the opening story is to keep it vague: the town hints, it never explains.
Testing the lore with the Debug class
To read every tier’s lines without playing five full runs, I took out the Debug class’s old theme picker, which came from the days when any run could roll any theme. A Debug run now plays its tier’s own place, and since its wins already earn that tier’s Blade, I can climb the whole ladder with it. Playing through it turned up a few things in the talk box: two lines in one box ran together, so separate lines now get a blank row between them, and a quest’s objective, progress and reward, along with the “you already have a quest” note, now show in gray under the speech so they read as the game talking rather than the person.
Getting ready for the Steam demo
With the Steam demo getting close, two things had to go first. Endless and the Battle Arena aren’t ready to ship, so both now say “Coming with the full game” wherever they’re offered and can’t be picked, and the final victory no longer promises that Endless lies open. I can still work on them with a build flag that unlocks both. The Windows build also stopped opening an extra console window behind the game. That window was where a crash’s message used to show up, so now every crash is written to a crash_log.txt in the save folder instead, which a player can send me.
Victory and defeat screens for every dungeon
With the themes reworked, the old end screens no longer fit: each theme had one defeat painting, and some victory lines made no sense anymore (“Blade 4 of 5 is yours - a harder dungeon opens”). To look them all over, I first added an End screens mode to the battle tester that lists every victory and defeat screen per tier and floor, with Left/Right to step through them. Then I wrote prompts for new paintings, picked the best in two rounds, and packed them into one new sheet of 36 scenes. Now every floor of every dungeon has its own defeat scenes: dying in a boss fight shows that boss’s lair (the Skeleton King’s tomb, the Ettin’s clearing, the Demon’s broken altar), and any other death shows a random scene from that floor. The Forest’s victory is now a walk out of the trees instead of a climb up stairs, both Dungeon victories got new paintings, and the Innkeeper and the Fisher finally join the town for the final win. The text changed too: a victory names the boss you beat and the Blade you won, and a first win points you to the next place, while a defeat names the enemy that landed the killing blow (“Slain by the Yeti King”) and the place that keeps you.
The Demon takes flight
When the Final Demon flees (a Stab, or a blow that would kill him while Blades are still missing), he used to vanish and turn up in any room of hell at random, sometimes clear across the map. Now he only flies a plateau or two away, one or two bridges from where you fought him. The flight plays in the battle screen too: he spreads his wings and beats them in place, two wingbeats lift him off the ground, and the next three carry him east off the screen, each downstroke pushing him faster while he bobs with every beat and leans back the faster he goes. His name and bars fly off with him, and a “The Demon Flees!” box under the Battle Log stays until you press Enter. The wingbeat took seven rounds of PixelLab animations to get right: most takes had fire or flashes in them, and every early one moved his legs, until a round asking for wide sweeping strokes gave a clean one with his wings spread wide. I also made the battle tester’s normal floor hand out the class’s abilities and potions, so a fight there plays like a real one.
A lone enemy back on the castle floor
When I moved the Actions box down on the castle backdrops, the enemy groups came down with it, but a lone enemy stayed where it was and ended up floating in front of the walls. Now it comes down by the same amount and stands on the floor like a group’s back row. The bosses keep their spots.