Brackenmere / dev log

Posts Building Brackenmere

The asset diet and quality tiers

Five days in, Brackenmere's village was a 215 MB download and the castle took a thousand draw calls. In one day in the cloud the agents put every model on a diet, measured before fixing anything, and gave the game Low, Medium and High graphics, without changing how it looked on my Mac.

G06 5 min read

How shall I tell it?

The night before, walking into the inn had come with a warning. To keep that one room under 20 MB, the agents had dropped six of its props to 512 pixel textures. Brackenmere was five days old and already heavy: every Meshy model went in exactly as it came out, 4096 pixel textures and all.

First person in the castle: a stone corridor lit by a wall torch, a studded wooden door ahead and the hero's sword in the foreground. The castle after the diet, on High.

I had seen it coming

On the second morning, in the middle of a clean-up, I had asked: "let's think performance now. As you can't 'look around in 3D' is there some optimisations to be had from the buildings / trees / etc so that they are more flat / don't have info on the back of them etc. I'm not an expert here so not sure about this, as we need shadows, sun light moving etc, but maybe some things we can do..."

Two days later first person arrived and killed that idea. I could see it myself: "I guess we still keep the 3D as an asset... Is there going to be any performance issues here if we do this?" The first attempt to measure was a Chrome performance run on my own machine, which kept pausing because the game lost the mouse whenever I touched it. My answer: "Yes, finish with performance marked partial."

A job for the cloud

On the morning of 24 September I cleared the decks: "ok so we're all good. Everything on main here, committed and pushed to GitHub? We basically at a clear slate now?" Then I asked how the Claudes fit together: "How does it work with a cloud session? So if I close my laptop, everything keeps on running."

The asset diet ran in one of those. I opened it by asking for a performance review across the hedge maze, the dungeon and the village, with the work carrying on in the cloud. It came back with four questions, and my answers set the terms: a 2048 pixel ceiling in WebP, delete what the game does not use, report performance numbers rather than test them, and do all four phases. A Claude owner worked through them on a branch, on a machine with no graphics card, and handed back one merge that evening.

The diet

Phase two was an optimise script that every model and picture now goes through: remove duplicates, prune what is unused, cap texture sizes by what the thing is (characters and big props at 2048, castle and interior props at 1024, a coin at 512), convert to WebP and compress the geometry. It deliberately simplified nothing. The script checks that triangle counts, animations, skeletons and names come out exactly as they went in, so nothing the game relies on can move.

Files the game never loaded were deleted, and every model now loads through one cached loader.

Under the hood The models in the game folder went from 272 MB to 97 MB. The village's download to the point you can play fell from 215 MB to 49 MB, the castle's from 69 MB to 17 MB.

Two near-identical views of the village square side by side: houses, the well, monsters on the cobbles, the market stall. Before the diet (left) and after (right): a quarter of the download, and you cannot tell them apart.

Measure first

Phase three began with a report, not a fix. One command opens every world in the test browser, draws a frame and prints draw calls, triangles, lights, materials and the game's step time. As I had asked, it never fails on a number.

The report pointed straight at two problems. In the hedge maze, the spiders were skinning every vertex of their bodies each frame just to find where their feet were. In the castle, every wall block, banner and torch was its own draw, and every torch had its own light.

Monsters now find their feet from only the bones that can be lowest, and monsters you cannot see are not posed at all. The castle's walls and torches draw in shared batches, each piece still fading on its own when the cutaway ghosts it, and torchlight comes from a fixed pool of lights lent to the torches nearest the hero.

Under the hood Castle draw calls fell from 1,001 to 93 and materials from 425 to 51. The maze's game step went from 12.7 ms to about 0.1 ms once the spiders stopped skinning 11,000 vertices a frame to find their feet.

One fix did less than hoped: Meshy's texture seams stopped far hedges simplifying much, so the saving came from a cheap stand-in for their shadows.

Low, Medium and High

The last piece was graphics tiers. The game guesses from your hardware (Apple silicon and proper graphics cards get High, built-in graphics Medium, phones Low), and you can override it in the journal.

High was defined as the game exactly as it looked before. Low drops antialiasing, halves the sun's shadow detail, stops small props casting shadows and lights only the four nearest castle torches.

The village square cropped side by side, Low on the left and High on the right: softer, shorter shadows on Low. Low (left) and High (right) from the same spot. The difference is in the shadows and the edges.

The hedge maze cropped side by side, Low on the left and High on the right. The hedge maze on Low (left) and High (right).

The differences are small, and that was the aim: the same game on a weaker machine.

The journal open on the Quest page, with a Graphics section offering Low, Medium and High and a note that Low suits phones and older laptops. The Graphics choice at the foot of the journal. Choosing one reloads the place you are in.

For my eye

The agents' handoff listed things "for Nick's eye": lossy normal maps on the big characters, smaller roughness maps and that 512 pixel coin.

What I took from it

  • Measure before you fix. The report found the spiders and the castle; guessing would not have.
  • Report numbers, don't test them. A failing frame time on someone else's machine tells you nothing.
  • Shrink files, not what you can see. High had to look exactly as it did before.

Five days in, Brackenmere was already heavy. Every 3D model went into the game exactly as it was made, with enormous, finely detailed pictures wrapped round it, and the village took a long time to download. So on 24 September the AI helpers put the whole game on a diet, and added a choice of Low, Medium and High graphics, without changing how it looked.

First person in the castle: a stone corridor lit by a wall torch, a studded wooden door ahead and the hero's sword in the foreground. The castle after the diet, on High.

Working while my laptop was shut

This job ran in the cloud, which means on someone else's computer, so it could keep going even if I closed my laptop. I answered four questions at the start and the helper worked through the rest on its own, handing back the finished result that evening.

The diet

Every model and picture now goes through the same tidy-up: duplicates removed, unused bits thrown away, and pictures shrunk to a sensible size for what they are. A coin doesn't need the same detail as a character. Nothing you can see was simplified, and files the game never used were deleted.

The village's download dropped to about a quarter of its old size, and the castle's too.

Two near-identical views of the village square side by side: houses, the well, monsters on the cobbles, the market stall. Before the diet (left) and after (right): a quarter of the download, and you can't tell them apart.

Measure first

Before fixing anything, the helper measured how hard each world was working. That pointed straight at two problems. In the hedge maze, the spiders were doing a huge amount of work every moment just to find where their feet were. In the castle, every wall block, banner and torch was handled separately, and every torch had its own light. Both were fixed, and the game got much lighter on its feet.

Low, Medium and High

The game now guesses how powerful your computer is and picks Low, Medium or High graphics. You can change it yourself in the journal. High is the game exactly as it looked before. Low has softer shadows and slightly rougher edges, so the same game can run on a phone or an older laptop.

The village square cropped side by side, Low on the left and High on the right: softer, shorter shadows on Low. Low (left) and High (right) from the same spot. The difference is in the shadows and the edges.

The journal open on the Quest page, with a Graphics section offering Low, Medium and High and a note that Low suits phones and older laptops. The Graphics choice in the journal.

What I learned

  • Measure before you fix. Measuring found the spiders and the castle. Guessing wouldn't have.
  • Shrink the files, not what you can see. High had to look exactly as it did before.
Building Brackenmere

G10 6 min read

Performance by construction

A week in, Brackenmere ran well on my Mac and I had no idea what it cost anyone else. One day of measuring turned performance from a clean-up job into rules the tools enforce, and an overnight blind review stopped the agents optimising away detail my kids would see.

Building Brackenmere

G37 6 min read

Four rooms, built from the pictures I sent

I sent the agents an isometric picture of the inn I wanted, then three more for my home, the Forge and the Apothecary. All four were rebuilt in one evening. It took a second day, and my complaint that the inn felt stale, to make them warm.

Building Brackenmere

G30 6 min read

Immersion: a world that answers the hero

One quiet night I asked the agents to research what makes game worlds feel real and build it in three independent rounds: the hero's touch, a world that lives, and places that tell stories. Then three more rounds paid for it, and my own play the next morning found the rough edges.