Custom Roguelike - One Theme per Blade, a New Town and the Forest Rebuilt
Published 2026-10-06
One Theme per Blade, a New Town and the Forest Rebuilt
Step 1: the full theme sweep
With every class redesigned and the music in, it was time for the balance pass. The plan is to tie each themed dungeon to a Blade tier by how hard it plays, so first I needed to know how hard each theme is now. The bots played every theme on every tier from Dungeon Crawl to 4 Blades, all five classes, 15 runs each, plus the Demon Castle at 5 Blades: 1,950 runs in about 45 minutes (#159-#164).
| Theme | Crawl | 1 Blade | 2 Blades | 3 Blades | 4 Blades | All |
|---|---|---|---|---|---|---|
| Dungeon | 89% | 84% | 56% | 81% | 85% | 79% |
| Forest | 93% | 80% | 63% | 81% | 85% | 81% |
| Mountain | 87% | 89% | 85% | 84% | 85% | 86% |
| Swamp | 81% | 85% | 91% | 92% | 88% | 87% |
| Sewer | 97% | 99% | 96% | 96% | 99% | 97% |
The Demon Castle won 33% (Barbarian 20%, Mage 27%, the other three 40%), and 46 of its 50 losses die on floor 3, at the Demon.
The target was about 80/70/60/55/45/40 from Dungeon Crawl to 5 Blades. Only the Demon Castle is anywhere near its number; every theme wins about as often at 4 Blades as at Dungeon Crawl, so the Blades barely make a dungeon harder at all. The Sewer is close to a free win everywhere. The one real bump is 2 Blades in the Forest and the Dungeon, where 23 and 28 runs die on floor 1 (every other theme and tier loses 0-7 there); the Mage and the Hunter win 27-60% of those. Elsewhere the losses are on floor 2, the chest guard and the boss. By class over the five themes, the Barbarian won 91%, the Amazon 89%, the Rogue 86%, the Hunter 86% and the Mage 79%.
So the themes rank Dungeon and Forest hardest, then Mountain and Swamp, with the Sewer far behind, but the gap between them is a few points except for the Sewer. Mapping themes onto tiers can’t make the curve by itself; the tiers themselves need to get harder, which means enemy damage and health going up with each Blade.
Step 2: making the Blades bite
First I found out why the curve was flat. Each floor’s enemies are bought from a chip-damage budget, and the price of an enemy is worked out from its tier-scaled health and damage, while every tier had the same budget (355/500/650). So raising a tier’s enemy damage just bought fewer enemies, and the budget cancelled it out. The real levers are the budget per tier, enemy damage and budget together, and the boss’s damage.
I tried two of them on the Forest, 15 runs per class per tier (75 per tier), with Dungeon Crawl left at 1.0:
| Round | 1-4 Blades | Crawl | 1 Blade | 2 Blades | 3 Blades | 4 Blades |
|---|---|---|---|---|---|---|
| R1a (#164) | enemy damage and budget x1.1/1.2/1.3/1.4 | 92% | 71% | 47% | 59% | 73% |
| R1b (#166) | budget alone x1.15/1.3/1.45/1.6 | 88% | 71% | 40% | 44% | 83% |
| R2 (#168) | damage and budget x1.1/1.05/1.35/1.65 | 84% | 73% | 52% | 53% | 51% |
R1a won: harder hits on about the same number of enemies. R1b’s extra enemies piled 40 deaths onto floor 1 at 2 Blades and did nothing for 4 Blades. R2 put every Forest tier within 8 points of the target.
Then I stopped looking at one theme. The plan is one theme per Blade tier, so every result has to stay per theme; a number that pools them all hides exactly what I need to choose with. I ran the R2 numbers on each theme separately at 30 runs per class (150 per tier), then again with every factor 0.2 higher, to see how each theme reacts:
| Theme | Crawl | 1 Blade | 2 Blades | 3 Blades | 4 Blades |
|---|---|---|---|---|---|
| Forest (#170 / #176) | 85 / 87 | 73 / 54 | 60 / 33 | 50 / 31 | 50 / 43 |
| Dungeon (#171 / #177) | 84 / 72 | 69 / 39 | 62 / 32 | 42 / 23 | 20 / 9 |
| Swamp (#173 / #179) | 87 / 60 | 80 / 46 | 90 / 71 | 52 / 23 | 26 / 18 |
| Mountain (#174 / #180) | 93 / 79 | 87 / 83 | 85 / 70 | 83 / 63 | 51 / 51 |
| Sewer (#172 / #178) | 97 / 84 | 89 / 75 | 95 / 89 | 87 / 66 | 59 / 51 |
The order from easiest to hardest came out Sewer, Mountain, Swamp, Forest, Dungeon, so I tried that order as the mapping: Dungeon Crawl in the Sewer, 1 Blade on the Mountain, 2 Blades in the Swamp, 3 Blades in the Forest and 4 Blades in the Dungeon. I tuned each tier only on its own theme, and ran the result twice (R6, then again inside the R7 sweep):
| Tier | Theme | Factor | R5 (#182-#186) | R6 (#188-#192) | R7 (#194-#198) | R6+R7 | Target |
|---|---|---|---|---|---|---|---|
| Crawl | Sewer | 1.33 | 85 (at 1.26) | 79 | 76 | 77 | 80 |
| 1 Blade | Mountain | 1.45 | 62 (at 1.55) | 74 | 71 | 72 | 70 |
| 2 Blades | Swamp | 1.34 | 57 (at 1.37) | 47 | 57 | 52 | 60 |
| 3 Blades | Forest | 1.28 | 53 (at 1.3) | 56 | 56 | 56 | 55 |
| 4 Blades | Dungeon | 1.3 | 52 (at 1.2) | 48 | 50 | 49 | 45 |
The Demon Castle’s 5 Blades came out at 48% with boss damage 0.95 (375 runs), 35% at 1.0 (225 runs) and 37% at 0.97 (300 runs), so 0.97 it is. The boss numbers are whole, so the steps in between barely change anything.
What’s left:
- These numbers only work with the mapping. Today every run rolls a random theme. On the wrong theme a tier is way off: in R7 the Forest goes 85/33/25/56/80 and the Sewer 76/72/82/91/91. The mapping isn’t built yet.
- Swamp at 2 Blades sits about 8 points under its target, and in both Swamp sweeps 2 Blades played easier than 1 Blade, so something in that theme and tier pair isn’t scaling the way the others do.
- Floor 1 takes most of the deaths once a tier gets hard (100+ of 150 in the toughest cells). That looks like the enemy-crowding problem, which the budget doesn’t price in.
- Dungeon Crawl’s own damage went up to 1.33 for the Sewer. If Dungeon Crawl is meant to stay the plain game, the Sewer needs a different lever there.
Step 3: one theme per Blade
The tuned numbers only hold with the theme pairing, so I built it: each tier now always goes to its own place. Dungeon Crawl is the Sewer, 1 Blade the Mountain, 2 Blades the Swamp, 3 Blades the Forest, 4 Blades the Dungeon, and 5 Blades stays the Demon Castle. Only Endless still rolls a random theme. A Debug run can still pick any theme, and a saved run keeps the theme it had. A new test starts a run on every tier and checks it lands in the right place.
Splitting the results by class showed the cost of making enemies hit harder: on the paired tiers the Barbarian wins 69% of the time and the Mage only 41%, down to 38% at 2 Blades and 17% at the Demon Castle (60 runs per cell). The Barbarian barely notices the Blades; the Mage, with its -5 Defense, gets caught by all the early hits. The Mage needs to survive better at the higher tiers, and a bit more speed is the first thing I want to try.
Step 4: evening out the classes
The goal was every class at about 60% on the paired tiers. The Mage came first. At 39% to start, more speed (8) got it to 64%, but one point of Defense (-5 to -4) did as well and touched less, so I kept that: 61% over two runs, 88/80/53/62/40/43 by tier. Defense and Ice Armor turn out to be steep levers for the Mage (Defense -2 jumps to 88%), while more health, a bigger Mana Shield or a second Ice Armor did nothing at all.
The Barbarian was the other outlier at 71%. Speed 7, health 91 and Defense -1 each overshot down to the low or mid 50s, so I settled on a small cut: health 105 to 102, 57% in each of two runs. The Amazon re-ran at 61%, already on target, so it stays as it is, along with the Hunter (62%) and Rogue (60%). Every class still dips at 2 Blades on Swamp floor 1, which is a tier problem rather than a class one.
Step 5: a docs clean-up
With the balance merged I tidied the project’s notes. The backlog’s balance item had grown to over a hundred lines of history, so I cut it down to where things stand and what’s still open, and moved the old sweeps and the two comment-cleanup passes into done.md. The 35 one-off art placement scripts went into tools/archive/, leaving only the five that still serve as templates, and CLAUDE.md lost a few rules it was stating twice.
Step 6: fixing the Swamp
2 Blades on the Swamp was the one tier under its curve, at 52%, with about three quarters of its deaths on floor 1. The cause was the Alligator: at 9 damage it was the hardest-hitting floor-1 enemy of any theme (the others hit for 5 to 8), and with the 2 Blades factor and the Blade buff it hit for about 13 before I’d found a weapon. Since it keeps one stat block across all three floors, it was really sized for floors 2 and 3.
So floor 1 now gets a Juvenile Alligator instead: 10 HP, 6 damage, the Alligator’s own art drawn smaller, the same trick as the Mountain’s Yeti Cub. The full Alligator only shows up on floors 2 and 3. That alone took 2 Blades from 52% to 84%, with floor-1 deaths down to 3 of 24, so the Alligator really was the whole spike.
Then I raised the 2 Blades factor to bring it back down. 1.5 barely moved it (80%), 1.8 overshot to 51% and brought the floor-1 deaths back (a bigger factor also grows the chip budget, so floor 1 gets crowded again), and 1.7 came in at 62% and 67%, 65% over 300 runs. The curve now goes 77/72/65/56/49/37, the right way round. The Barbarian is the low class there at about 47%, against 62-73% for the rest, which I’ve noted for later.
With that the tiers are where I want them, so the next thing is a theme rework: going through every theme’s tiles, enemies and art one at a time, plus the camera at the map’s edge that a friend pointed out.
Step 7: calling the Barbarian done
The last loose end from the Swamp fix was the Barbarian at 2 Blades, at about 47% while every other class sat at 62-73%. Its deaths turned out to be attrition rather than one big hit: on Swamp floor 1 it walked into ordinary Snake fights and the Massive Alligator boss with 2 to 21 of its 118 HP left and no potions. It’s also the only class whose starting kit is nothing but potions, with no Defense or Evasion to soften the many small floor-1 fights.
So I tried three fixes on every tier, 30 runs each:
| Barbarian | Crawl | 1 Blade | 2 Blades | 3 Blades | 4 Blades | 5 Blades | Overall |
|---|---|---|---|---|---|---|---|
| As it is | 73 | 80 | 67 | 73 | 77 | 43 | 69% |
| Starting Rage | 63 | 67 | 37 | 60 | 50 | 30 | 51% |
| Starting Roar | 70 | 93 | 53 | 97 | 83 | 30 | 71% |
| Defense +1 | 83 | 87 | 70 | 90 | 70 | 73 | 79% |
The unchanged Barbarian came in at 67% at 2 Blades this time, so the gap is partly noise: pooled over 120 runs it’s about 52%. None of the fixes targets the Swamp. Roar helps everywhere but there, Defense +1 lifts every tier far too much (the Demon Castle to 73%), and a starting Rage made things worse everywhere, which says Rage itself needs a look. The Barbarian stays as it is and I’m calling it done. The Swamp’s floor 1 will get its turn in the theme rework.
Step 8: the theme rework starts with edge tiles
With the balance where I want it, the theme rework begins, theme by theme, starting with the Town. A full render of the Town showed what holds it back most: every street, plot and patio stops in a hard square against the grass, the tree border is one tile repeated like wallpaper, and the roofs are flat stripes. A reference picture of a pixel-art town made the gap clear: ground that blends from cobble into dirt into grass, deep roofs with dormers and chimneys, big trees.
I want to get there with tiles rather than painting the Town as one picture, because the same logic can then run on the dungeons. So the first piece is an edge pass. Every tile now has a ground terrain, and a theme can list transition sets: 16 corner tiles between two terrains, which fit as a 4x4 block on the tile sheet just like the existing theme blocks. After the map is built, every grass tile that touches cobble picks the tile that matches its four corners, so a street gets rounded corners, inner corners where streets meet, and a proper edge along every side. The edge sits on the grass side, so even a one-tile-wide run of cobble still shows whole.
To prove it works I cut a rough placeholder set from the Town’s own grass and cobble tiles. The real set will come from PixelLab, along with sets for dirt, soil and water, a set for one-tile paths with end caps, and a roof kit. The preview tool draws the edges too, so I can judge a layout without launching the game.
Step 9: real edge tiles from PixelLab
With the edge pass working on placeholders, I generated the real sets with PixelLab’s tileset tool, which makes exactly the 16 corner tiles the pass reads. I wrote a small tool for it that sends our own Town tiles as style references, so the new art matches what’s already there, and repacks the result into the order the game reads. Each set cost a single generation, so the whole Town’s ground came to about 16 of my 110.
The Town now has eight sets: grass into cobble, soil, dirt, light stone and the forest, cobble into light stone and the forest, and a pond’s water into grass. The streets have a small stone kerb, the farm plots crumble into the grass, the plaza is light stone right across (it used to be a ring of it around cobble), and the tree border has a proper leafy edge with a shadow. A new pond sits in the empty corner by the smithy, with a dirt lane running out to it.
Two sets took more than one try. The forest’s first round had bright lime grass, which I fixed by forcing the set onto our grass and tree colors. The pond took three rounds: the first copied our old water tile, which turned out to have grass baked into its top edge; the second, forced onto only grass colors, came back entirely green (a forced palette needs every terrain’s colors in it); the third had the right shape and banks but loud mint water, which I recoloured to a muted teal. Its clean water tile also replaced the old flawed one.
Still to come: a set for one-tile paths with end caps (the dirt lane reads as a wide strip for now), a roof kit, and redrawn props for the light stone, since the benches and well still carry their old ground.
Step 10: a rounder square and a prop layer
The light-stone square looked worse with edges than without, because the stone touched grass, cobble and flower beds all at once and a tile can only take one edge. Setting the light stone as a rounded disc inside a cobble square fixed it: every corner now has just two terrains.
The bigger problem was the props. Every lantern, barrel, signpost and planter had its ground painted into its own tile, which was fine on plain grass but showed as a square on anything else. So I added a prop layer: the ground is drawn first, edges and all, and the prop goes over it with a see-through background, while the tile underneath still blocks the way. A prop works out what it stands on from its neighbors, so a barrel by the street sits on cobble and a scarecrow sits in its soil.
The newer props still had see-through originals. The older ones didn’t, so I had PixelLab redraw them in one batch of 64 (20 generations) and picked the best of each. The fence and the old street lanterns cut cleanly out of their grass by color, so the farm plots now meet the grass right under the fence posts. The new lanterns came out as lantern heads with no post, which I liked enough to hang them on the house walls beside the doors.
I also tried PixelLab’s cliff tiles for the forest, to get a row of trunks along its bottom edge, but they drew two stacked rows of trees with red trunks. The forest edge will get whole trees placed on the prop layer instead.
Step 11: whole trees along the forest edge
The forest still ended in straight lines and right-angle steps, and the start street ran right into the trees. I roughened the forest’s outline with a fixed-seed script that pushes bulges into the grass and cuts dips into the trees, 2 to 5 tiles wide, never leaves a one-tile-wide strip, and checks afterwards that every door, townsperson and the gate can still be reached. The start street now stops short, and the player starts on open grass.
The front stoops became short cobble paths from the street up to each door, and the wall lanterns shrank to 60%, which suits the houses better.
Then the trees themselves. PixelLab’s single-object tool drew a whole tree, a round crown with a brown trunk and roots below it, for one generation each, and I kept the two that matched the forest. A new pass finishes every forest edge facing south, east or west with these trees: the edge tile becomes grass that still can’t be walked through, with the trunk in it and the crown in the tile above. Down a side edge each crown covers the trunk above it, so only the last tree shows its trunk, and the north-facing edges keep the canopy edge as the tops of the trees. The same pass will work for the Forest theme’s dungeons.
Step 12: forest edges cut from the canopy itself
The whole trees still didn’t line up with the canopy, so I sketched what I wanted: the canopy tile I already have, finished off by four edge tiles around it, round crown tops along the north, crowns bulging out with trunks at the sides, and a row of trunks along the south. Two attempts to have PixelLab draw them failed (one returned a flat green box, the other rows of small trees that didn’t fit the tile grid), so I built them from art the game already has.
The canopy tile turns out to be a regular staggered pattern of round crowns, so a script can tell which crown every pixel belongs to. An edge tile is the canopy pattern carried onto the square next to the forest, keeping only the crowns that belong to the forest, outlined where they were cut, with a trunk from the edge trees standing under each crown on the south and sides. That gives the four edges and four corners, and since they’re cut from the canopy itself they join it exactly.
They’re placed without changing where you can walk: the south, east and west pieces go on the forest’s own outer tiles, which were already blocked, so the canopy visually ends a tile in. The north piece goes on the walkable square above the forest, on a new overhead layer drawn above the characters and below the HUD, so the player walks behind the treetops.
Along the way the props showed black squares in the game: the fancy console fills a sprite’s see-through pixels with its background color, so props now draw with a transparent background.
Step 13: the Fisher, a pier, and roofs that look like roofs
The Town gets a new face: a Fisher, an old man in a straw hat and a rust-orange sweater, who fishes from a little wooden pier on the pond’s east side. He keeps his eyes on the water and only turns to the player when he has a quest to give or take back. His three animations (fishing, looking worried when he needs help, and jumping for joy on a hand-in) came from PixelLab. The townsfolk sheet had hit the graphics card’s size limit, so I repacked it twice as wide with every frame keeping its number: no code changed and there is room to spare. A one-tile-wide dirt path now leads from the main street to his pier. It needed PixelLab’s roads tool, which drew every straight, bend, junction and end cap, at a steep 40 generations; I cleaned its own grass and shading out so it sits on the Town’s grass.
A lot of smaller fixes went in along the way. The inn’s patio became a raised wooden deck beside the inn, running north to south, so the Innkeeper’s door opens straight onto the street. The shop lost the wooden apron in front of its counter, gained a door, and its awning now hangs right over the stall. The farm’s hay moved off the soil, the flower beds became walkable flowers on grass, and the smithy yard lost its dark coal squares. The forest’s trunks got thicker, with roots spreading east.
Under the hood, the edge pass can now stack edges: a square touching two terrains gets its second edge as a see-through overlay, and the path is an overlay on its square’s own ground. That fixed the last places where one edge cut into another.
Last came the roofs. Their end caps used a different shingle grid from the middle, so every roof looked like a band with boxes on its ends, and the stone buildings’ roofs were rubble. A whole roof drawn by PixelLab came back as a flat grid, so I rebuilt each roof kit from its own shingles instead: a ridge course along the top, the shingles running unbroken into the eaves, a wooden gable board at each end, and a stone chimney as its own piece. The smithy, the witch’s house and the gatehouse now have real slate roofs.
The Forest, step 1: the Town’s engine on a random map
The Town is done, so the theme rework moves on to the Forest. Its floors still used the original 16-tile set from September: walls were one repeating tree tile, and grass, moss, dirt and leaves were dropped on as hard squares with no edges between them. The Town’s engine (terrains, corner edges, the prop and overhead layers, the forest edge pieces) was built to be reused, so the Forest now runs on it. The difference is that the map is random instead of a hand-drawn template.
A new ground pass paints real terrain over the cave layout once it’s carved. Walls become forest canopy with the Town’s edge pieces, the floor becomes grass, and a dirt trail runs from the start to the exit. Patches of other ground grow out from random spots and are smoothed. Any square left in a one-tile-wide strip goes back to grass, since corner edges can’t draw anything that thin. Two different patches always keep two squares of grass between them, so no square ever needs two edges at once. Stumps, boulders and bushes stand on floor squares beside the trees, and each one is only placed if every square that was reachable before stays reachable. Flowers and toadstools are scattered on the grass.
The first render showed a problem the Town never had. Cave maps are full of thin wall strips, and canopy on a thin strip hangs its treetops over the floor on both sides, so a narrow passage disappeared under the trees with the trail running beneath them. Now only thick masses of wall stay canopy. Every thinner bit becomes a standalone tree, its trunk on the wall square and its crown overhead on the square above, which reads as an open wood instead of a hedge maze.
The Forest should be darker than the Town (“the trees grow too close to let the sun in”), so a theme can now set a color multiply over every map square, prop and treetop. The Forest reuses all of the Town’s tiles in a cooler, dimmer light, and the shade is one number to tune. A new preview tool renders any seed of any theme exactly as the game builds it. The dirt and leaf patches still use stand-in art.
The Forest, step 2: dirt, fallen leaves and grass with some life in it
The patches got their real art. The dirt clearings use a grass-to-dirt set PixelLab made back during the Town rework, which never found a place there. Fallen leaves are new: PixelLab’s first try had a good edge and real leaves but came back a loud red-orange, and the second try looked like gravel. So I kept the first and toned it down toward ochre. In the game it still looked like a woven mat, and I liked the old Forest’s leaf litter better, so a last set was built around that original tile. I tried moss too, twice. It came back first as a hedge, then as a flat dark carpet that looked like a hole in the ground even when lightened, so the Forest has no moss.
The Town’s grass is one flat color, which showed over a whole open map, so 15% of the plain grass now uses the Town’s tufted grass tile. Building the props list also turned up a mislabelled glyph: what the Town’s prop table calls poppies is actually a wooden planter box.
The Forest, step 3: a first look in the game
The first real run turned up invisible walls around the weapon prefab. Half the time its ring of walls becomes a water moat, and the water’s edge set draws the shore on the water side. A moat one tile wide is all shore, so it drew as plain grass that still blocked the way. The Forest’s prefabs keep a ring of trees for now; moats come back when the prefabs are rebuilt with water at least two tiles wide. The preview now marks every square that can’t be walked, so a check can catch any wall that draws as bare ground.
The map was still too bright, so I darkened it to the colors of the Forest’s battle clearing: deep, cool greens instead of the Town’s sunny olive. The Battle Arena borrows the Forest’s theme for its shop and wave maps, so it now has its own copy that keeps its old look until its turn in the rework.
The flowers didn’t belong in a dark wood, so they’re gone. Toadstools now grow only at the foot of something: a trunk, a stump, or a new rotting log from PixelLab, which joins the stumps, boulders and bushes as something to walk around.
Playing it turned up squares that looked open but weren’t. Where a block of canopy ends on its east or west side, its outer squares show only half a crown bulging in, so they looked like grass you could walk on. Each of those now gets a standalone tree as well, so it reads as a tree. The preview tool can now tint every un-walkable square red, which made these easy to find.
The darker light had also turned every brown a flat gray, so the trail nearly vanished and the dirt looked like ash. The Forest now has its own copies of the trail, dirt and leaf tiles, with their earthy pixels warmed ahead of time so they come out a dark earth brown under the tint. Their green pixels are left alone so the edges still meet the grass. Fallen leaves now only gather right under the trees.
Three things from the old Forest came back. Ponds are dug into open clearings with a ring of grass around them, at least two squares wide so the shore can draw, and only where they cut nothing off. You can’t walk through them but you can see across them. Root-covered ground and rubble return as patches with real edges, each set built around the old Forest’s own tile the way the leaves were, with roots only under the trees. PixelLab’s attempts at roots and pebbles as single objects missed (a whole tree, a boulder, a crystal), but building edges around the old tiles worked first time.
The Forest, step 4: shadows, leaf litter under the trees, and a real trail
I gathered some reference pictures of pixel-art forests and made a list from them of what my Forest was missing. The first three needed no new art.
Trees now cast shadows. I drew them myself as half see-through pixels, which the map’s console blends properly: a dark oval at the foot of every standalone tree, and a band along the forest’s south edge that starts under the trunks and runs a few pixels onto the grass below, so the wall of trees stands on the ground instead of floating over it.
The leaf and root patches are gone. My first try put fallen leaves or roots on each tree’s own square and let the edge tiles spill them out around it, but the edge art is straight, so every tree stood on a hard 2x2 square and a row of trees became one long brown band. Instead, more than half the trees now get a small round patch of the old leaf or root texture centered on the trunk, cut from the tiles I already had.
The one-tile trail to the exit became a proper dirt track, two to three squares wide, laid with the dirt edge set so its sides blend into the grass, and its width changes as it goes. One to three branches split off it toward the far parts of the map, so it isn’t just an arrow pointing at the exit, and any dirt clearing it touches simply joins it.
The Forest, step 5: plants and brown toadstools
The open grass between the trees was still bare, so I had PixelLab draw some plants for it, one generation each. A low clump of wild plants came out right first time. The fern I asked for came back as a broad star-shaped leaf plant, which still looks at home in a wood, so I kept it as that, a little darker. A second try at a real fern drew one cropped frond in neon green, so there is no fern for now. Both plants now grow on the grass within two squares of the trees.
The red toadstools got brown cousins that grow in the same places, at the foot of trunks, stumps and logs. They came with a mossy base that showed as a pale ring on the dark grass, so I cut it off, and warming them like the ground tiles made them glow orange, so they get a gentler version. Nothing grows any more on the square just north of a standalone tree, where its crown hid everything but a toadstool’s cap.
The Forest, step 6: pebbles on the trail
I was never sure about the gray rubble patches, which looked like slabs of concrete dropped on the grass, so they’re gone. Their stones live on as pebbles along the trail. A script lifts each stone off the rubble tile’s flat gray ground and builds three small scatters from different handfuls of them. Under the Forest’s cool light the gray stones turned teal, so their colors are corrected ahead of time to come out a neutral gray. About one trail square in ten gets a scatter.
The Forest, step 7: pines and old oaks
Every tree in the Forest was the same round broadleaf, so PixelLab drew two more for three generations. The first pine came out as a near-black cone with no branches showing; the second has real tiers of drooping branches with lighter tips, and it now stands among the other trees as one in three.
The other is a landmark: a huge old oak two squares wide and two tall, with a wide crown and a thick gnarled trunk. One or two stand on each floor, always in an open clearing, never cutting anything off, at least eight squares apart. Its trunk blocks the two squares at its foot, the crown hangs over the two above so you can walk behind it, and a wide shadow spreads under its roots. It came out darker than the other trees, so I brightened it to match.
The Forest, step 8: the camera at the edge, and a cliff along the top
Friends had told me twice that walking to the edge of a dungeon felt wrong: the camera stopped scrolling, so the hero drifted off to the side of the screen and what was at the edge was hard to see. Letting the camera run past the edge into darkness fixed that, but the map still visibly ended. Now every floor is half a screen bigger on every side, 120 by 74 squares instead of 80 by 50, and the extra ring is scenery you can never walk into: the theme’s walls, or in the Forest a deep wood and the plateau above the cliff. The part you play in is the same size as before, so the camera always stays centered on the hero and the screen is always full. The ring starts out drawn as ground you have already seen, since no line of sight ever reaches most of it.
The top of every Forest map is now a cliff. A raised plateau runs the whole width of the map, edge to edge, and fills the scenery above it, with a brown rock face looking south over the forest, so it never just stops in the middle. My first two PixelLab tries drew a pink wooden palisade and then gray stone blocks, both of which looked like walls. Working from a few reference pictures, the third came out as a tall brown face streaked top to bottom, with tufts of grass at its foot. The face steps back and forth by two rows along the way, turning a corner each time, so it reads as rock and not as a fence. The plateau is crowded with trees, bushes and boulders, and some trees stand at the foot with their crowns hanging over the face, never cutting a path off. Where the forest runs right up to the cliff, the treetops stand in front of the rock. A clearing that comes close to the top is pulled up to meet the cliff, so more of the face shows. The three tries cost six generations.
The Forest, step 9: a cliff that flows, and scenery all round
The stepped cliff still looked like a fence, all right angles. A rounded PixelLab set came out looking like planks, with corners barely rounder, and whole cliff pieces drawn as single images came back as round mesas that looked like tree stumps. So I drew it myself, with a script that reuses the PixelLab set’s colors. The rim is now one smooth line that rises and falls across the whole map. Each square of the face is cut from a gently sloping piece, and the slopes always meet their neighbors, so there are no steps at all. Under a grassy lip the rock is streaked top to bottom, darker under the lip and toward its foot, and it stands taller where the rim rises. The foot waves a little, with tufts of grass and a soft shadow on the ground below. Some trees still stand at the foot with their crowns over the rock.
The plateau and the rest of the scenery ring are no longer an empty green field. They’re laid out as a real piece of forest, dense canopy with clearings, and dressed the same way as the part you play in, with trees, dirt, toadstools and logs. A dirt path winds along the whole plateau. None of it can be reached: every clearing keeps at least two squares of forest between it and anywhere you can walk. The Forest’s dirt patches also became twice as common, since the bigger map had spread them thin.
The Forest, step 10: a ruin you can see over
The weapon vault used to be a ring of trees in a neat diamond or square, which looked nothing like a forest. In the Forest it’s now a ruin: low, broken gray stone walls with gaps to walk through, a cracked flagstone floor with grass coming up between the slabs, and the weapon on an old stone plinth in the middle. PixelLab drew a nice wall, but on a diagonal, so it couldn’t join up square to square. I drew the kit with a script in its colors instead: straight runs, corners and T-joins, crumbled ends with loose stones, whole blocks missing from the top. The first floor I tried was mostly grass with a few paving patches, then a tidy grid of small tiles. Now it’s three rows of uneven slabs per square, mostly stone, with grass breaking through in a few places and thinning out toward the gaps. The walls are low, so you can see over them but not walk through them, the same as water. Enemies inside spot you over the wall and come out through the gaps. The ruin comes in four layouts: a hall, two rooms side by side, an L, and a round temple. The walls only join square to square, so a round ruin was tricky. A ring of standing stones looked like a graveyard, then like scattered sticks when PixelLab drew them, so the temple has short walls facing the four sides and its corners cut by columns, some whole, some snapped off, one just a stump. The columns stand two squares tall like the trees, so you can walk behind them, and like the walls you can see past them. Every theme will get its own scenes like this later, since the layout only says where the guards, the loot and the walls go, and each theme decides what they look like. The camp for the chest room is next. The art cost 11 generations, and only the plinth made it in so far, but the tent and campfire are waiting for the camp.
I also had PixelLab redraw all eight Forest enemies, rotations only for now, to compare old and new side by side before deciding anything (16 generations).
The Forest, step 11: a camp for the chest room
The chest room was a small box of trees. In the Forest it’s now a camp in a clearing of trampled earth, with a tent, a campfire with a log to sit on, and two bedrolls. The chest sits beside the tent, and its guards stand on either side of the fire. The tent, the fire and the log block walking but not sight, like the ruin’s walls, and the tent’s peak hangs over the square behind it, so you can walk behind the tent. The Forest’s darker tint was turning the fire a dull brown, so a few glowing things, the fire for now, skip the tint and keep their own color, only dimming when out of sight. The tent and fire came from PixelLab. Both PixelLab bedrolls came back looking like a log and a pink sleeping bag, so I drew one by script, a fur mat with a brown blanket turned back and a pillow at one end.
The fire glowed in the game but sat still, so now it flickers: four frames of flame, drawn by script over the PixelLab fire’s stones and logs. Each frame has a tall tongue and two short ones at different heights, leaning one way or the other, with a spark rising above. Any prop can now be animated this way, each square starting at its own point so two fires never flicker in step.
The Forest, step 12: an edge that doesn’t look like an edge
Friends could still tell where the map ended along the south: the forest began in one dead-straight row, because the scenery always kept at least two squares of forest between its clearings and anywhere you can walk, so wherever the floor reached the edge of the play area, the trees started along a ruler line. Now the floor near the south, east and west edges is worn back by a depth that rises and falls along the edge, up to four squares, and anything that cuts off is filled in, so the forest starts along a flowing line. The start, the exit and their surroundings are left alone. While checking it I found the chest room could be placed on top of the weapon vault, which has been possible in every theme since the prefabs went in. Now a prefab never lands on one that’s already there.
The border used to start out already seen, so it showed instead of black. That backfired with a Dungeon Map: the map shows everything in a darker “known from the map” shade, but the border stayed in the brighter “already seen” shade, so the edge of the map stood out as a frame. Now the border and the cliff are like everywhere else, black until you look at them, and the same shade as the rest when the map reveals them.
The Forest’s enemies, part 1: new looks, and bigger bosses
With the Forest’s ground looking right, I started on its enemies. PixelLab redrew all eight from their original prompts, cleaned up, and I compared old and new side by side before deciding anything. I kept the new Goblin, Ettin, Goblin Chieftain and Orc Warlord, kept the old Orc, which had lost its orc face in the redraw, and sent the Ogre back for a complete redo. The Ettin Overlord took five tries. The first redraw without its crowns lost its armor too. Giving PixelLab the old picture as a reference brought the crowns straight back, whatever the prompt said. Cutting the crowns off the reference left the heads looking chopped off. What finally worked was drawing two round bald heads onto the reference in its own skin colors.
The walks were the hard part. PixelLab’s walk templates assume a normal-sized body, so my big brutes came out thin, and the Ettin even lost a head. The heavy ones now walk in a mode that starts from their own standing art, so they keep their bulk. The Goblin’s spear wouldn’t stay put on its east side, so its east walk is its west walk flipped. That means the spear swaps hands when it turns, but it looks clean. Every enemy also got a short flinch for when it takes a hit, to replace today’s flash. That’s next to build into the battle screen.
The bosses are moving to a bigger canvas, 48 pixels instead of 32, so they keep their detail and stand bigger in battle, like the Demon at the end of the game. One surprise: given a reference image, PixelLab draws at the reference’s size, so three of my “48 pixel” bosses came back at 32 until the references were scaled up first. Each boss is getting an idle, an attack, a flinch and a special move of its own.
So far the enemies have cost about 100 generations, a few of them wasted on a bug in my animation tool that paid for one walk twice, now fixed.
The Forest’s enemies, part 2: a spear that leaves his hand, and a line-up to check them on
The Goblin Chieftain’s special is a spear throw, and three tries at it from PixelLab all kept the spear in his hand. The last one even put it back at the end, after I’d asked for him to finish empty-handed. So I built it by script from the second try, which had a good stance and a good lunge. The script cuts the spear out of the first frame and tips it back over his shoulder about his fist while he leans back. His lunge lets it go, and the last two frames are empty-handed. In the fight, the spear itself will fly across as the projectile. It cost no generations.
Then, before placing any of the new art in the game, I built a way to check it. The battle tester has a new mode, the enemy showcase. You pick a theme, and instead of a fight it opens a floor of that theme with a clearing in the middle, where every enemy of the theme stands in a grid. Each enemy gets a column, with its name above it, and there is one row per facing: walking south, north, east and west. None of them is a real enemy, so nothing moves, chases or starts a fight, and I can walk around the grid with the camera following. The whole grid fits on one screen, so one screenshot shows every walk of a theme, and cargo battle --mode showcase --theme Forest --go goes straight there. The battle animations stay with the fight side of the tester, where they’re actually played. The clearing is cut before the floor gets painted, so it gets the same ground as the rest, and the ruin and the camp never land on it.
After my first look at it, I split the tester’s setup in two. The Mode row now picks Battle or Dungeon, and a Type row under it picks within that: a normal fight, class only or enemies only for Battle, and the enemy showcase for Dungeon, the first of what I expect will be more dungeon checks. The name labels sat where they should on the first try.
The Forest’s enemies, part 3: in the game, and the bosses fight back
The new Goblin, Ogre and Ettin are in, on the rows their old art used. Two walks needed fixing after I watched them: the Ettin’s west lost its club, so it’s now its east walk mirrored, and one frame of the Orc’s north walk had the sword in the wrong hand. The Goblin’s first attack swung its spear out past the edge of its square and lost the spearhead, so PixelLab redid it as a short downward stab for one generation.
The bosses are 48 pixels now on the map and in battle, drawn half again as big as everyone else so every pixel shows. Two of their walks were mirrors of the other side: the Goblin Chieftain’s west showed two spears, and the Ogre Warlord’s east had white streaks coming off him. In battle they use their own idle, attack, flinch and death. Every Forest enemy now flinches when it’s hit, along with the flash it already had.
The bosses also have their own moves now. Each one attacks twice, then does its special, over and over. The Goblin Chieftain throws a spear, and the spear actually flies across. It’s his own spear, cut out of his art, and if it hits you bleed for three turns, armor or not. The Orc Warlord roars and hits 20% harder for three turns, and doesn’t roar again until that wears off. The Ogre Warlord slams the ground for a heavy hit that slows you down. The Ettin Overlord cleaves with both blades, two hits in a row at 75% each.
The Forest’s battle screens: teaching the camera where to stand
The Forest is getting a battle screen for each kind of ground: the forest floor, the trail, the ruin, the camp and the pond’s edge, plus a war camp for every boss fight. A fight will use whichever one matches the ground I was standing on when it started.
Getting them out of Leonardo took most of the day, because it’s the same fight every theme has had: the camera comes out either down at eye level, where the enemies would stand in the tree trunks, or straight overhead. Words never fixed it. What did was giving it a picture. Claude drew a rough layout guide, just blocks of canopy, a band of trunks and the ground starting a third of the way down, and I attached it as the reference. Leonardo’s Auto mode turned out to use Gemini for that, which treats the guide as a picture to paint over, and that came with its own lessons. A flat brown guide gave me flat brown ground. Round blobs in the guide came back as round blobs in the trees. Pasting the negative prompt into the box just gave it more things to draw. And a pond or a bonfire “at the back” kept landing right where the enemies stand, until they went in the back-left corner, behind my side of the field.
To check each picture, there’s now a script that draws me, a lone enemy, a boss and a group of four on top of it at their real positions in a fight. Every new screen put the lone enemy up in the trees, so each battle screen will get its own standing spots. Five of the six are picked, and the camp gets one more try.
The bosses also got a few fixes. A buff or debuff boss now attacks once, casts it, and then keeps it up, recasting as soon as it wears off. The Chieftain’s thrown spear turns to point along its flight. PixelLab made a batch of status icons for bleeding, slowed and Attack Up, plus a stock of others for the other themes’ bosses.
Then they went in. All six are on the battle sheet, the forest floor replacing the Forest’s old screen, and the map now remembers what kind of ground each square is: the ruin’s flagstones, the camp, anywhere next to the water, the trail (but not the loose dirt patches), and plain forest floor for everything else. A fight looks at the square I’m standing on and picks the matching screen; every boss fight is in the war camp. Where the enemies stand now belongs to the battle screen instead of the theme, since each picture’s ground starts at a different height, and all six Forest ones share the same spots. The battle tester’s Backdrop row lists every screen in the game, each Forest ground and both of the Demon Castle’s, instead of one per theme.
The first screenshots showed two things to fix. The front row stood low enough that its names went behind the Actions box, so the whole group moved up a little. And a boss is drawn bigger around the middle of its square, so its name ended up across its legs; a boss’s name now goes under its feet.
The next round of screenshots showed the second enemy’s name still hiding, so the group moved up again, back to where the front row stood before today, and a boss’s name now sits above it, over its bar, where nothing is in the way. The camp’s and the pond’s ground still looked bad, flat brown and round blotches. The fix that worked was to stop giving Leonardo the rough layout sketch and give it a finished picture instead, asking it to change only the ground. Since it edits whatever it’s given, the camera and the layout stayed put and the ground came back detailed on the first run.
The camp looks a lot better now. Its right two enemies were standing on the lean-to, so a battle screen can now nudge the right half of a group, and on the camp they step down and to the right, in front of it. The pond’s ground is fixed, but its trees came out as round green blobs, so it goes back to Leonardo once more, this time built on the forest floor picture, whose trees are good.
The pond took two more runs. Asking Leonardo to keep everything detailed just kept the blobby canopy it was given. What worked was asking it to change only the canopy, saying exactly what was wrong with it, big smooth round green blobs, and what it should be instead: small separate leaf clusters with a light top edge and a dark shadow underneath. One run, and the trees finally look like trees.
The boss’s war camp, and no more stairs in the Forest
With the battle screens done, the map needed to match the boss’s. The boss of each Forest floor now holds a war camp: a ring of sharpened stakes round him, with a gate facing the way I come in, a torch on each side of it, a skull totem against the back wall and a bonfire in a corner. The stakes are drawn by script, like the ruin’s walls: the first try’s side walls came out as a thin pole with pale bands where each square cut its logs off, so the sides are now a strip of log tops seen from above. The totem and the torches came from PixelLab, one generation each. The boss always stands at the far end of the floor, which is usually right against the edge, where a camp doesn’t fit, so the camp moves him to the farthest spot it does fit round. On sixty test floors it found a spot every time. Any fight inside the stakes uses the war camp battle screen.
A random set of stairs in the middle of a forest never made sense, so the Forest doesn’t have them anymore. Beating the boss ends the floor: once the Victory screen is closed, it’s straight on to the shop. The last floor still has the Blade lying in the camp. The bots learned the same rule, heading for the boss instead of the stairs, and two quick runs cleared all three floors.
The bosses’ effects finally have icons: a bleeding gash and a stomped boot by my health when the Goblin Chieftain’s spear or the Ogre Warlord’s slam lands, and a flaming fist over the Orc Warlord while his Attack Up lasts. They went into the original font sheet, on the card-suit cells nothing ever used.