Brackenmere / dev log

Posts Building Brackenmere

Day one: a canvas greybox called Brackenmere

Brackenmere started on a Saturday afternoon as a 90-line canvas sketch with one gardener and an old gate. By midnight it was a Three.js village with a sword, a rigged hero, three monsters, people you could talk to and a house with real roof tiles.

G01 6 min read

How shall I tell it?

Where it came from

Brackenmere started as a conversation, not code. On a Sunday in September I sat down with my son and typed: "We've got an idea for a game. I'm going to give you a kind of brain dump between me and my son of all the things we're thinking about... I don't want you to build anything yet."

It was huge (eras, a growing town, families over generations), but one idea sat in the middle. "The maze would be part of the world that we live in. So, for instance, maybe early on, it's like a farmer's patch, and you're going through all their field to collect things." Every adventure would be a maze you walked to, not a separate level.

My son set the tone for combat: "My boy thinks we should keep it simple. The computer just does it for you. So if I'm attacking and maybe if I move forward and attack, it decides to go under legs to look cool."

Six days of questions

The agent asked questions one at a time and we answered them. On how dark it should get: "I don't want it to be too frightening, but I want it to be kind of Dungeons and Dragons style level. I don't mind an 8 year old playing it." On the very first quest: "something like finding a lost dog... or finding a mole that's been bothering a garden... something very easy and friendly and welcoming."

By the fifth day we were defining gem-socketing specialists, and I pulled us out: "I think we're spending too long trying to define every single little mechanic of the specialist here." That same morning I changed how the questions came: "for all the rest of the questions can you give me options (1, 2, 3 etc...) and I can just type the number. Also say the recommended route."

On the Saturday morning I ran out of patience: "Moving forward, can you just ask us some core high-level questions? And then I want you to go with all your recommendations... This kind of Q&A is taking a long time." Two answers from that round set the course. "I'm not going to handcraft every single maze. That should just be procedural driven." And: "We haven't got time, this is only me and my son, to be fully involved in all the aspects. There's going to be a lot of AI generated stuff, either in the game or pre-game."

The greybox

That afternoon I asked for something to look at: "I'm wondering whether to create a very simple isometric corridor / village to walk down so we can start to nail down the way it works and feels. Can work on detailed textures and stuff later on."

Minutes later the first commit landed. You can still open it from disk and walk around.

A flat isometric canvas sketch: a sandy lane across a green chequered field, four flat house plots, small round trees, a dark gate at the top right, a red-headed gardener and the hero. The HUD reads MAZE GAME / GREYBOX, Brackenmere, Late morning, Day 03. The first commit, opened from disk: a lane, four house plots, Mara the gardener and the old gate. "Day 03" was already in the corner.

It is a 2D canvas in fake isometric: a lane, houses so thin they read as rugs, and Mara the gardener, who says "The old gate leads to the garden paths." The brain dump in miniature.

Under the hood The whole first commit was 90 lines across three files: a canvas, a game loop and a stylesheet. No framework, no build tool, no models.

Within the hour: Three.js

Then: "What tech stack are we using? I'll probably end up with a Laravel backend as I know it, but front end are we using Three.js? Something else?" We settled on Vite, TypeScript and Three.js, and I was impatient: "Can we spin up 3 concurrent agents to work on this more quickly? Let's go." One built scenery, one movement, one the HUD, with a root agent integrating. The plan ended with something I want in every plan: a runtime verification list, each check marked PASS with evidence.

The first Three.js village: a cobbled square with timber-framed houses, red tiled roofs, a well, a striped market stall and round green trees on a floating island of grass. A serif "Brackenmere." heading sits top left. The same lane rebuilt in Three.js, later that afternoon. Every model here is procedural geometry.

Under the hood The rebuild was 23 files and about 2,200 new lines. The verification notes counted 558 draw calls for that little square.

A sword and an orc

Next came a HUD, a sword and a practice dummy, then: "Create one orc to test it against, and have them attack / defend as well. Let's see how health works with it." Tailwind went in for the interface, and the first Playwright test landed with the sword.

The village square with a HUD: health bars for the Adventurer and a Practice dummy, 124 gold, a "Sword practice" objective card, and Attack, Inventory, Map and Quest buttons along the bottom. The sparring ground and the first HUD. An orc and the training dummy stand in the square.

"A bit Duplo looking"

A detail pass gave the hero a procedural body with a cape and articulated joints. I put it next to my reference pictures: "Let's get one character right at a time. Let's work on the hero / me. It's a bit Duplo looking. I want more realism." My next reply stopped that approach altogether: "Nope, I want more realism, more textures etc. Shall I do a meshy.ai or something? I don't think basic shapes are going to get to the level we need."

So I made the hero in Meshy and learned rigging as I went. The agents imported him with a study page to preview each animation. I asked for him bigger and darker-skinned, then for "warmer, more tanned skin". The agents did the tint in the shader so the original model stayed untouched.

Before: a chunky procedural hero with a red cape stands in the square next to a green procedural orc with a round shield. The procedural detail pass. The hero is the small figure in the middle.

After: the textured Meshy hero with a red scarf and sword stands beside Gorak, a large green orc with an axe and a studded shield, on the cobbles. Less than an hour later: the rigged hero and Gorak, the orc sparring partner.

Under the hood The rigged hero was a single 23.8 MB GLB with 28 bones and six animation clips.

Gorak arrived with his own animations, then Spiger: "This is Spiger, another evil character, uses his claws, no weapon. Let's add him in and see how he moves." In the same breath I asked the question that turned animation into combat: "How does our hero change his attack type etc, and Gorak, is it just random when I hit space?" The answer became combos, a heavy attack and a parry. The agent checked the strike pose on every bone, then added that this "does not approve the artistic grip or swing." The machine checks behaviour; the taste stays mine.

The evening: people and houses

Later that evening I turned to the villagers: "When you go speak to someone, can it show on the left us, and then the person we're speaking to on the right, and the text in the middle, like a zoomed in conversation." Elsie the baker and Tobin the merchant were my Meshy models, and soon they were strolling round the square. My tree models replaced every procedural tree.

A conversation screen: the hero on the left, Elsie the baker on the right, and a cream card between them with her line and three numbered replies. The first conversation. "Fresh from the oven! Come and warm yourself by the bakery."

Then the houses: "Let's now work on giving the houses a bit more texture and interest. The roofs can use overlapping tiles for instance, and the walls some texture." The agents detailed one house and the spec said to "stop for first-house review before rollout". I approved it, and a few minutes later every house had it. My last instruction of the night, about Bram, the last procedural villager, was three words: "Remove that guy."

A close isometric view of one house: overlapping red clay roof tiles, a stone chimney, timber framing over cream plaster and window boxes. The first detailed house, shown to me before anything else changed.

The whole square near midnight: detailed houses with tiled roofs, a well, a market stall, gnarled trees, the hero, a training dummy and several monsters on the cobbles. After the house rollout: what stood at the end of day one.

Under the hood Day one was fifteen commits in under eight hours, ending with 19 Playwright tests passing.

What I took from day one

  • Talk before you build. A week of questions with my son gave the agents a game to aim at, not just a scene.
  • Make the questions cheap. Numbered options with a recommendation turned a slog into quick decisions.
  • Detail one, approve, roll out. I'll keep working this way.
  • Make the agents prove it runs. A PASS/FAIL list ends every plan.
  • Speed is cheap; structure is not. Day one was fast and rough, and that was fine.

Brackenmere started as a chat between me and my son, not as a game. By the end of its first real day, a Saturday in September, there was a little village you could walk around, a hero with a sword, monsters to fight, people to talk to and houses with proper roof tiles.

Where it came from

On a Sunday in September I sat down with my son and typed out everything we'd been dreaming up. It was huge: a town that grows, families over generations. But one idea sat in the middle. Every adventure would be a maze inside the world itself, maybe a farmer's field to start with, that you walk to rather than load up as a separate level.

My son set the tone for fighting: keep it simple, let the computer do the clever bits. "If I move forward and attack, it decides to go under legs to look cool."

Six days of questions

An AI helper asked us questions, one at a time. How scary should it be? "Kind of Dungeons and Dragons style level", but fine for an eight-year-old. It took a long time, so I asked for numbered choices I could answer with one tap, then for it to go with its own recommendations on the small stuff. The mazes would be made by the computer, not drawn by hand, and a lot of the game would be AI generated, because it was only me and my son.

The first sketch

That afternoon I asked for something simple to walk down, so we could get a feel for it. Minutes later there was this: a flat little drawing of a lane, four house plots, Mara the gardener, and an old gate. "The old gate leads to the garden paths," she says.

A flat isometric canvas sketch: a sandy lane across a green chequered field, four flat house plots, small round trees, a dark gate at the top right, a red-headed gardener and the hero. The HUD reads MAZE GAME / GREYBOX, Brackenmere, Late morning, Day 03. The very first version: a lane, four house plots, Mara the gardener and the old gate.

Within the hour: a real 3D village

Within the hour three helpers were working at once to make it properly 3D. By late afternoon the lane was a little cobbled square with timber houses, red roofs, a well and a market stall.

The first Three.js village: a cobbled square with timber-framed houses, red tiled roofs, a well, a striped market stall and round green trees on a floating island of grass. A serif "Brackenmere." heading sits top left. The same lane rebuilt in 3D, later that afternoon.

Then came a sword, a health bar, a practice dummy and an orc to fight.

The village square with a HUD: health bars for the Adventurer and a Practice dummy, 124 gold, a "Sword practice" objective card, and Attack, Inventory, Map and Quest buttons along the bottom. The practice ground, with health bars and buttons along the bottom.

"A bit Duplo looking"

The first hero was built from simple shapes, and next to my reference pictures he looked like a toy. "It's a bit Duplo looking. I want more realism." Basic shapes were never going to get there, so I made the hero myself in a 3D modelling tool and learned how to make him move as I went. I asked for him a bit bigger, with warmer, more tanned skin.

Before: a chunky procedural hero with a red cape stands in the square next to a green procedural orc with a round shield. Before: the hero made from simple shapes, the small figure in the middle.

After: the textured Meshy hero with a red scarf and sword stands beside Gorak, a large green orc with an axe and a studded shield, on the cobbles. Less than an hour later: the new hero and Gorak, the orc he practises against.

Then came Spiger, who fights with his claws, and proper combos, a heavy attack and a block. The helpers could check the moves worked, but whether a swing looks right is still my call.

The evening: people and houses

In the evening I asked for proper conversations: you on the left, the person you're talking to on the right, and the words in the middle. Elsie the baker and Tobin the merchant were soon strolling round the square, and my own tree models replaced the simple ones.

A conversation screen: the hero on the left, Elsie the baker on the right, and a cream card between them with her line and three numbered replies. The first conversation. "Fresh from the oven! Come and warm yourself by the bakery."

Then the houses. I asked for overlapping roof tiles and some texture on the walls. The helpers did one house first and showed me. I said yes, and a few minutes later every house had it.

A close isometric view of one house: overlapping red clay roof tiles, a stone chimney, timber framing over cream plaster and window boxes. The first detailed house, shown to me before anything else changed.

The whole square near midnight: detailed houses with tiled roofs, a well, a market stall, gnarled trees, the hero, a training dummy and several monsters on the cobbles. What stood at the end of day one.

What I learned on day one

  • Talk before you build. A week of questions with my son gave the helpers a game to aim for, not just a scene.
  • Make decisions quick. Numbered choices turned a slog into a few taps.
  • Do one, check it, then do the rest. I still work this way.
  • Fast and rough is fine at the start.
Building Brackenmere

G05 6 min read

Walk into the inn, forge and apothecary

On a Wednesday evening I asked to open a village door and step inside. By bedtime the inn, the forge and the apothecary were rooms bigger than their houses, furnished with my own Meshy models and staffed by eight people you could talk to.

Building Brackenmere

G27 6 min read

The Charwood: a new wood every visit

The Charwood, a charcoal burners' wood that is generated fresh for each visit, was built in an afternoon on 13 October and rebuilt that evening because it felt like the hedge maze in different clothes. The fix was a new layout, not more decoration, and playing it changed it twice more.

Building Brackenmere

G19 7 min read

The village, laid out three times

In five days I laid Brackenmere's village out three times: stretched over my hand-drawn map at 40 metres a cell, pulled in tight when the walks felt endless, then traced properly at 28 metres. The lesson was that a stylised map is a set of relationships, not a blueprint.