Brackenmere / dev log

Posts Building Brackenmere

The lore arrives: a world, a town and a running story written in the cloud

On 30 September seven pull requests from cloud sessions turned Brackenmere's scattered monsters, potions and quests into one world with one running story, "Bread at the Door". The lesson: lore written in parallel drifts like code, and it holds together the same way, with one source, a compile step and a checker.

G14 7 min read

How shall I tell it?

By the end of September Brackenmere had a village, a hedge maze, a castle, a mine, a home that grew with the hero and a town of people with lives of their own. What it did not have was a world. The monsters, potions and quests were whatever each feature had needed that week.

On 30 September that changed. It started with one message in a Claude project chat in the cloud, and by late that night seven pull requests had merged within minutes of each other: a compiled lore, the village's buildings, two expansion passes, a running story, and the quests as data the game could run.

The opening of the running story, Bread at the Door The opening of "Bread at the Door", the running story, as it was merged on 30 September.

Where the story came from

The story started before the code. In mid-September my son and I spent days answering an agent's questions about the game, and much of what we said was about people. "They should definitely remember things that have happened, and these events will affect their friends and family, how they treat us." We wanted a long story too: "there's a massive overarching storyline over the whole game that each era is kind of part of as well." And the hero: "We're a newcomer arriving there about teenager age. There will be a backstory, but we haven't figured that out yet."

Two weeks of building later, that interview was out of date. On the morning of the 30th I asked an agent to turn it into a design vision, with a warning: "since that Q&A was done, we've built a lot of the game and some of that contradicts what we had decided, so will need refreshing and parts removed."

It came back with seven questions and I answered them in one message: places would change, but "more like realistic world changes (ie a fallen tree, a collapsed tunnel, a new door and room built etc)", and they would be hand-made for now, with generated places coming later.

Five sessions, five versions of the truth

That afternoon I opened the project chat and started handing out subjects, each on its own branch. Monsters first: "I want to create a large pool of monsters, baddies and potential 'bosses' for this game, medieval times in this world... I want you to be inventive as well as classic fantasy genre. Up to 150 different enemies."

Then the townsfolk, the quests ("Don't just use the worlds / artefacts we have already, create new and exciting worlds"), the potions ("Make up ingredients that don't exist in the real world") and arms and armour, down to the power-ups: "ie sword plus ruby in hilt = …". When the potions session asked about effects the game couldn't do yet, I said "Yes I want effects, even if they aren't currently part of the game, add them in", and it built them in code.

Five sessions writing side by side would disagree, so I asked for a referee before any finished: "Once these all report back to you, I want you to compile them together and be responsible for a cohesive listing, ensuring that everything links together and is in sync, and doesn't contradict each other."

They did disagree. The compile's pull request listed "two names for the ancient intelligence, Deryn dead or alive, three causes of the Turning, two goblin kings, two dragons, the same people invented twice, and ids that pointed at nothing." The fix was to treat lore like code: one world bible, one decisions page and a checker that fails when any name points at nothing.

Under the hood The compile alone added about 61,000 lines of design data. After the second expansion pass the checker reported 61 places, 157 quests, 245 monsters, 87 folk and 47 potions, with "0 problems".

There was one detour. I asked for a single test picture of a monster, "Do not generate any more than 1 until I give the say so", and it came back as vector art: "What you can do in svg is not good enough, so don't carry on." Claude can't paint pictures itself, so the images waited.

Bigger, then decided

With the compile in, I asked for more, not less. "Extend the world, the lore, the whole world and terms, monsters, buildings to be extensive, and never completely discoverable because it's so extensive. Use fable for this." Then a second pass on top: "I want the world to have many routes, many artefacts... so people get involved and believe in the world, like Harry Potter and the like got."

By the end of the first pass 38 questions were parked for me, from whether the Tallyman should have a name to which worlds to build first. I didn't want to be the bottleneck: "For any questions, make a decision on what works best. No blockers, I'm happy at your decision." The second pass settled every one and wrote a line of reasoning beside it.

Decisions settled in the second expansion pass Decisions taken for me in pass two, each with its reason and each mine to overrule.

One running story

By evening it was big and scattered, so the third pass pulled the other way: "make sure that we're not over complicating the game, ensure that the world 'feels' like one world where characters interact and are part of the living moving world, not all separate characters. Characters have feelings, want, needs, are compassionate, have their own goals and long term thoughts."

Until then the lore had three long stories side by side and a hero who was, in its own words, "nobody from anywhere". Pass three wove them into one, "Bread at the Door". Our teenager became a fifteen-year-old raised in the city by an old gardener, sent up the valley with an errand they don't understand. Its central idea is one I wouldn't have reached alone: the Tallyman under the hills cannot count a thing given freely, and in the village bread at the door is not charity. In story.md's words, "The relationships the player built are the weapon."

Under the hood Pass three wrote 422 ties between people, each one both ways. It also cut the first version from 122 quests across 40 worlds to 81 quests and two hubs; nothing was deleted, the rest is marked for later.

Then I wanted it runnable: "More programmatic organised structural json and connections etc, rather than lexicon and prose." The last pull request turned the story into scripts, each step with its trigger, needs, changes and lines, and a checker proves no step waits forever on the hero.

One quest step and its conversation as data One step of the first quest, and the line Tilly says on the lane.

Late that night the scripts reported decisions up to D100. "What are decisions 80-100?" I asked, read the list, and checked: "So nothing I need to make a decision on?" There wasn't. "Let's merge."

Not losing it

The next day the lore was everyone's business. "Okay, all this stuff is great. I think we should merge all this into main now with all the docs, lore, in there." I wanted a handover note, "because there's so much in here that I'm going to forget about if I just try using my brain."

The ruling that mattered was the shortest thing I said all day: "docs/lore/ is the source of truth". The game reads it through generated data, never a second hand-kept table.

The lore reaches the game

On 2 October that became real. The first slice generated the catalogue from the lore, and its spec admitted a player would see almost nothing: "this slice moves where the data lives, not what the player has." The second stocked the shops, and you could see it at Mother Agnes's counter.

The apothecary's Buy list before the lore stocked it Before: the apothecary's hand-kept shelf.

The apothecary's Buy list after the lore stocked it After the second slice: the lore's balm, remedy and tonic, grouped by family.

Under the hood The story scripts came to 109 scripts, 855 steps and 629 conversations. The first slice into the game replaced 66 hand-written catalogue rows with generated ones, with a proof that nothing the player has changed beyond a short list.

What I took from it

Lore written in parallel drifts like code, and holds together the same way: one source, a compile step, a checker and the decisions written down. What let it happen in a day was letting the agents decide instead of queueing questions for me, and where the lore promised more than the game did, I kept the game.

By the end of September Brackenmere had a village, a hedge maze, a castle, a mine and a town full of people. What it didn't have was a world behind it: a history, a story, monsters and potions that belonged together. In one day it got all of that.

The opening of the running story, Bread at the Door The opening of "Bread at the Door", the story that now runs through the whole game.

Where the story came from

It started with my son and me. In mid-September we spent days answering questions about the game, and a lot of what we said was about people. We wanted them to remember what happened, and for it to change how their friends and family treat you. We wanted one huge story running through the whole game. And the hero would be a newcomer, about teenage age, with a backstory we hadn't worked out yet.

Lots of writers, one referee

I asked my AI helpers to invent the world, each on its own subject, writing side by side: up to 150 monsters, the townsfolk, quests in brand new places, potions made from ingredients that don't exist, and swords and armour you could improve.

Lots of writers at once will disagree, so I asked for a referee to pull it all together and make sure nothing contradicted anything else. They did disagree. There were two names for the same ancient power, two goblin kings, two dragons, and the same people invented twice. The fix was one big book of the world, a page of decisions, and a checker that complains whenever a name points at nothing.

Bigger, then decided

Then I asked for more. I wanted a world so big you could never discover all of it, with many routes and treasures, so people really believe in it, like Harry Potter. Questions came back for me, dozens of them. I didn't want to hold things up, so I told the helpers to decide for themselves and write down why. Every decision is still mine to change.

Decisions settled in the second expansion pass Decisions the helpers made for me, each with its reason.

One story

By evening it was big and scattered. So I asked them to pull it back together: one world where people know each other, have feelings, wants and their own goals, not a crowd of separate characters.

Three separate stories became one, "Bread at the Door". The hero is now a fifteen-year-old raised in the city by an old gardener, sent up the valley on an errand they don't understand. At its heart is an idea I wouldn't have reached alone: the Tallyman under the hills can't count anything that is given freely. So the friendships you make in the village are your real weapon.

The story was then written out step by step in a form the game itself can follow: what starts each step, what it needs, what changes and what people say.

One quest step and its conversation as data One step of the first quest, with the line Tilly says on the lane.

The lore reaches the game

From then on, the book of the world became the one place the truth lives. The game reads from it, rather than keeping its own separate lists. A couple of days later you could see it in the Apothecary, where the shelves are now stocked from the world's own potions.

The apothecary's Buy list before the lore stocked it Before: the apothecary's old shelf.

The apothecary's Buy list after the lore stocked it After: the world's own balm, remedy and tonic, grouped by kind.

What I learned

A world written by lots of writers at once drifts apart, and it holds together the same way anything does: one book of truth, someone to pull it together, a checker, and decisions written down. What made it possible in a day was letting the helpers decide, instead of waiting for me to answer every question.

Building Brackenmere

G39 6 min read

The quest ledger, and five worlds finally joined up

Brackenmere had five worlds that no quest sent you to. I asked for the quest ledger to be redrawn as a map, sent it to two AI reviewers to play it in their heads, and the agents built the chapter that threads those worlds into the story: the Five Stones.

Building Brackenmere

G31 6 min read

Village life: 22 new people, their weeks and how they walk

In one day Brackenmere went from fifteen people in a village of empty houses to thirty-eight with homes, trades, bedtimes and a week of named days, and they stopped walking like chess pieces. The surprise was how empty the old village really was once the agents measured it.

Building Brackenmere

G28 6 min read

A whole campaign in a day: first morning to Lantern Night

One evening I asked the agents for a whole story, and by the next morning Brackenmere had seven main quests, nine side quests, two named bosses and a finale on Lantern Night. Two reviews on paper and a playthrough by a fresh hero did most of the work; my own play found the rest.