I have a test suite for this game. Sixty-five boards, which are small programs that start up a piece of the game, poke at it, and check that what came out is what should have. Three thousand four hundred and three checks between them. It runs in a few minutes and it tells me, truthfully, that the game works.

What it can't tell me is whether the list of people in the tavern looks like it ends where it ends.

I found that one by sitting down and playing. The option list on the left side of the screen scrolls. It has to, because on a busy evening there's more to do than fits on the screen. But a list that got cut off at the bottom and a list that actually ended look the same. Same last row, same empty space under it. Either way you get no signal, so either way you're guessing.

I wrote myself a note about it. It said there needs to be a line under the last item in the list, so the player can tell if they're seeing the whole list. Then I sat there a minute wondering if that was just polish. It isn't. It's the difference between knowing you've read the whole menu and hoping you have.

So the column draws a line under its last row now. Every screen works out its own. And the code that rebuilds those lines when the time of day changes had to learn to take that one back off again, or the list gets a little thicker every time the clock moves.

A pixel-art tavern at evening, a fire burning behind the bar. Down the left side, a boxed list of people to talk to, closed off by a line under the last option.

LOUD: Tavern

Not one of those 3,403 checks could have failed on the original problem. Every board was green. The bug was that the screen didn't say anything, and nothing is a hard thing to write a test for.

This keeps happening to me. The suite tells me nothing is broken, and somewhere along the line I started reading that as nothing is wrong. Those aren't the same sentence. There are screens in this game that were finished, and passing, and I had never once looked at them. At least, not consistently.

The shop is the best example. I built a panel on the right that shows what you already own while you shop, so you can compare before you buy. You have Chainmail. Change DEF +3. Sensible enough. It passed everything. Then I opened it, scrolled down the buy list to compare something, and the whole panel slid off the top of the screen. All four sections of that screen were sitting inside one scrolling box, so the panel whose entire job is to be read while you move down the list was moving down with it. The screenshot I took of the bug has no gold line in it, no item details and no mode rows. They'd scrolled away too.

A pixel-art armory. On the left, a list of armor and shields for sale; on the right, a panel comparing Scale Mail against the Chainmail already equipped, showing DEF +3.

LOUD: Armory

Fixing it meant picking a width for that column, so I guessed. I said 760 pixels. Then I wrote a small program to actually measure it, and the widest row this shop can produce is 905. It's a set of Masterwork Reinforced Robes at 1200 gold with "not enough gold" printed after it. The column is 920 now, and 920 is measured instead of guessed. That's the honest other half of this. The tests are very good at arithmetic and I'm not, and they caught me twice more the same afternoon.

Then there's the Stormcaller. It's the fragile class, the one that gives up armor for a ward it raises in a fight. I ran a balance pass over the three classes, simulated a couple hundred seasons, and moved the starting stats around until the numbers said a Stormcaller should come out of its first day hard but solvent. Hard but solvent. That's what I was aiming at, and the simulation said I got there.

Then I played a day as one and died with five fights left in the allowance. The Drag kept coming up. Its hits tore through wards faster than I could put them back up, and once a ward shattered it went straight into my health before I could raise another. It didn't feel hard but fair. It felt punishing, which is a different word, and no simulation I write is ever going to hand me that word.

So I tried something. I made the ward stronger at level 1 and let it taper off as you level, instead of growing the whole way up. Nothing else changed. I played the same day over and got through every fight, and finished the night with 51 health out of 62 and 78 gold left. There was one Drag I ran from, and I came back for it later after I'd bought a mana potion, a cap and a pair of boots. That time it was manageable.

Running was the right call, and so was coming back better equipped, and the game let both be true. That's the balance I was after, and it isn't a number. The only reason I found it is that I died first.

So the sheet I'm working from now has two kinds of rows on it. There are the ones where something is just wrong. A missing line, a click that doesn't register, a number that doesn't match. Those are fixes, and honestly a machine could find most of them.

Then there are the rows that only ask a question. Does leveling up feel like an event, or does it slide right past? Is the tavern with five people in it crowded, or comfortable? Did three days feel like a rhythm, or a grind?

Nothing is waiting on a right answer to those, because there isn't one. They aren't bugs. They're judgment calls. And they're the whole reason somebody still has to sit down and play the game.

Get the devlog by email.
A post every couple of weeks about building Legend of the Ultimate Dragon. Nothing else, no schedule, unsubscribe any time.