SotA

The New Britannia Herald

Thursday, August 20, 2026

Work Log Podcast

Episode

Ninety-three blurry maps, missing shadows, and a siege nobody could win

Ninety-three zone maps had been loading at their smallest size for three weeks, ambient occlusion had never once run in a downloadable build, and the first real town siege refused every kill inside the town it was besieging. Tamed pets stopped dismissing themselves twelve seconds after every summon, quitting the Windows client dropped from twenty-six seconds to two, and large graphics cards finally get a texture budget worth their size. Also retroactive achievements, streetlight controls for town governors, and a comparison tooltip that does the subtraction for you.

In this episode

  • Ninety-three zone maps stuck at their smallest size
  • Ambient occlusion never ran in a shipped build
  • The town siege that could not be won
  • Tamed pets dismissed themselves after twelve seconds
  • Entering and leaving the game both got repaired

Transcript

Hail and well met, citizens of New Britannia. It is I, Lord British, with an accounting of what your makers were about upon Thursday. The maps you carry are drawn true again, ninety-three of them having gone to green mud. Shadow has returned to the corners of the world, having been absent from every copy any of you ever downloaded. A tamed beast will now stay at your side rather longer than a dozen heartbeats. And a town held under siege may at last be freed by slaying the man who holds it, which I am told was, until yesterday afternoon, quite impossible. We begin with the maps, for the tale behind them is a good one.

Tenebris Harbor. One of the team opened the map there and got back a green smear. No coastline in it. No piers. Nothing you could steer by. Now, I have seen that map. It is a hand-drawn harbour plan, four thousand pixels across, with the docks laid out properly and three sunken ships in the bay, and somebody spent real hours on those wrecks. Every player who pressed M in that town for the past three weeks got the green smear instead. So the question in front of us was a simple one. Where had the harbour gone.

The harbour was there the whole time, at roughly the size of a postage stamp, waiting politely to be asked for something bigger.

Here is the mechanism, because the mechanism is the interesting part. A modern game does not load every texture at full size. It loads a small version first, and then the graphics system watches what is actually on your screen, works out how much of the display each surface is covering, and asks for a larger version when you walk up close. Approach a wall and the wall sharpens. That is a streaming system doing its job, and it saves an enormous amount of memory.

It works because a wall is a surface out in the world and the system can measure it. A map sheet is not a surface. It is a flat picture on a window in your interface. It has no distance from the camera, no angle, no size on anything, so it never generates a request. The streaming system loaded the smallest version it had, waited for someone to ask for more, and nobody ever did. At any zoom. On any graphics card. With any amount of memory sitting free.

They went into that state three weeks ago, in a sweep that moved a great many textures into streaming at once. That sweep did carry a guard against exactly this problem, and the guard was a list of folder names that mean, in effect, this is interface art. Icons. Cursors. Fonts. The map art does not live in a folder named for the interface. It lives in a folder named for maps. Nothing in the way a texture is stored records who is going to draw it, and so ninety-three zone maps out of three hundred and sixteen went quietly down to the smallest size they had and stayed there.

The other two hundred and twenty-three survived on luck. They had no smaller versions in the first place, so there was nothing to stream, and the sweep passed them over.

All ninety-three are back at full resolution, along with ninety-four crown store images caught by the same hole, plus a light effect and one item icon that the audit picked up on the way through. The part I admire is that the team went back through the other three thousand seven hundred files that sweep had touched rather than assuming the maps were the whole of it. Three thousand of those are ordinary surfaces out in the world, which is precisely what streaming is for. The remainder were checked by hand, one at a time. And there is now a test that fails the build if a zone map is ever put back into streaming again, which is the correct ending to a story like this one.

Now this next one is embarrassing, and I intend to enjoy telling you about it anyway.

Ambient occlusion is the soft darkening you get where two surfaces meet. The inside corner of a room. The seam where a wall meets a floor. The underside of a table, where light does not reach. It is not dramatic, and you do not notice it when it is working. You notice it when it is missing, because everything in the room looks faintly as though it is hovering.

It has not been working. In the game you download, that is. It ran in our editor, on our machines, every single time, which is exactly why nobody caught it. The effect gets assembled while the game is running, and the camera asks for its rendering program by name. In the editor, every program in the project is sitting right there, and the request finds it. In a build you download, only what has been put on the shipping list actually ships, and this one had never been put on the list. So your client asked, got nothing back, wrote a single line into a log file that nobody reads, and rendered the whole world without contact shading. Every downloadable build since the lighting overhaul went out.

One line of configuration fixed it. Corners have depth again. Furniture sits on the floor instead of a hair above it. Better than the fix is what went in beside it: a test that reads every place the camera rig asks for one of these programs by name and fails if any one of them would be absent from a build you can actually download. It swept the other eight while it was being written, and those were all in order. One found, and a whole category closed.

The town sieges went to a real fight for the first time yesterday. Real players, a real town, and the fight found everything.

Begin with the worst of it. The server refused every kill. Every single one. You could swing at a cultist all evening, the cultist would fall over on your screen, and the server would decline to file the paperwork. No experience. No progress on the siege meter. And, most importantly, killing the Cabalist himself, the man responsible for the entire business, accomplished nothing whatsoever. A siege builds its enemies at the moment it begins, so the Cabalist and his rings of minions do not appear anywhere in the town's saved contents. And the part of the server that hands out credit for a kill checks the town's saved contents. It looked the boss up, found nothing filed under that name, and threw the kill away.

Which means that until yesterday afternoon, a besieged town was, in the strictest technical sense, unwinnable.

It gets better. When a siege started in an empty town, nothing spawned at all until a player happened to wander near the gate the Cabalist had walked in through, at which point all sixty-four of them appeared at once, in a heap, by the gate. And the Cabalist himself never went anywhere. His orders to march on the town centre were missing one small piece the movement system requires, so he stood at the gate. For the whole siege. Menacing a doorway.

And if you did somehow manage to kill him, he could come back. A leftover spawn instruction survived his death, so he would return, at zero health, against a checkpoint that immediately killed him again, with the credit going to nobody at all. The town stayed besieged. The villain kept dying. Nothing counted.

All of it is repaired. Kills resolve properly, and only inside rooms the server agrees are actually under siege. The rings fill in wherever the boss happens to be standing. The boss walks. A slain Cabalist stays slain, and a boss who lives through a change of host is adopted rather than forgotten. The whole fight now writes down what it is doing, where before it managed one line, total.

And there is a door out. Starting and ending a real siege could only be done through a developer console, which meant that on an ordinary client nobody could reach either one, and a siege has no expiry. A town whose Cabalist could not be reached would have stayed under siege until the end of days. Both sit on the game master panel now, alongside a new window for reading and repairing a stuck quest. As one who has, on occasion, been obliged to lift a curse from a town personally, I approve.

Rinaldi wrote in about the pets, and did the thing that makes one report worth ten of the others. He measured it.

A tamed pet, summoned any time in the past couple of weeks, would stand there for twelve seconds and then dismiss itself. Every time. Whatever you did. The taming necklace around your neck turned red the instant you summoned, and stayed red until you logged out and back in. And with the extra pet logging switched on, the client would patiently explain, about thirty times in a row, that the necklace was either unequipped or holding a different pet. It was neither of those things.

Here is what was happening, and it is a small, cruel thing. A taming necklace holds a note about whether the creature inside it is dead. When you summon a living pet, the necklace clears that note. It writes nothing there, because nothing is the correct answer. A tightening of the item checks a couple of weeks ago made the server stricter about what a date is permitted to look like, and the stricter reader looked at the blank where a death date used to be and said, that is not a date, and refused the entire write.

So the necklace could never record that your pet was alive. The client saw the refusal, decided the collar had gone bad, marked it red, and concluded that the animal standing in front of you could not possibly be yours. Ten seconds of grace, two seconds of dissolving, and your bear wanders off into nothing.

The server can read a blank as a blank now, and every save a necklace makes goes through again: summoning, dismissing, storing, taming something new, resurrecting something dead. The client half was hardened too, so a write the server does refuse no longer costs you a pet who is standing right there. And that verbose message says its piece once instead of thirty times, which I think we can all agree is once.

Gravidy sent us a loading screen that stopped at fifty-one percent, on the words Coordinating Data, and stayed there until he killed the client himself. This is the fourth stuck loading screen of this exact shape, and I am thoroughly tired of them, so let me tell you what this one was.

When you enter a player-owned town, the town sends your client a pile of settings, and one of those settings concerns where the spawn points are. Your client answered by rebuilding its list of spawn points out of the town you had just left. Which no longer existed. It had been unloaded on the way out. So the client reached for a set of markers that had already been demolished, fell over, and the failure carried it out of the routine before the line that says settings received could run. The rest of the town setup never finished. The loading bar sat waiting on a step that was never coming, and nothing writes to that bar between there and the sixty-four percent mark, which is why it always stopped on the same number with the same words underneath it.

The picker only rebuilds for the town you are actually standing in now. Two backstops went in behind it, and I care about those more than the fix itself. A settings handler that fails is written down and the rest of the setup carries on, so one broken piece can no longer abandon your entire arrival in a zone. And the three waits after you join a town give up after ninety seconds, name the scene they gave up on, and put you back on the overworld. Before this, they would have waited for you forever.

Now the other end of the evening. Quitting the Windows client took twenty-six seconds. We shipped a fast exit for this three days earlier, and on Windows it never once ran, because the way it asked the machine to end the process is unsupported in the runtime a player build uses. So every quit wrote itself a little note saying the fast exit had failed, and then sat through the full twenty-six second shutdown it had been built to skip. It ends the process directly now. Two seconds.

And while we were in there. The quit dialog used to leave you staring at "are you sure" with a dead button for up to ten seconds while it waited on the server. It says please wait immediately now, and those waits are capped at three seconds. Pressing Alt and F4 a second time, with the prompt already open, means yes. It used to mean nothing at all, and the window would simply refuse to close without offering you a reason. New Britannia: easy to love, hard to leave. For three weeks that was true in a way we did not intend.

Some smaller things now, each of which will improve somebody's evening.

If you own a large graphics card, the game has been wasting it. The texture budget was capped at the same figure on every machine, so a twenty-four gigabyte card received precisely the same allowance as the eight gigabyte card that is our minimum specification, and would sit there dropping to lower-detail textures in a well-decorated player town while most of its memory went untouched. Large cards now get up to double the old ceiling. Cards at or below minimum spec do not move by a single megabyte. A laptop with shared memory keeps the old limit deliberately, because its budget comes out of the same memory the game itself is running in, and one test machine would cheerfully have claimed seven gigabytes of textures out from under itself.

The item comparison tooltip does the arithmetic for you now. Hover a weapon you are not wearing and a third column appears telling you what would change if you equipped it: damage, critical, parry, charge time, and every stat the two pieces differ on, with the gains listed first. It also tells you which hand the swap would cost you. A two-handed weapon reads against both of your current ones together. A one-hander hovered while you hold a weapon in each hand gives you two readings, because only one of them is coming off and the game has no way of knowing which one you meant. Weapon tooltips also state the average damage beside the range, and how many seconds the weapon takes to charge, which until now you could only learn by watching the bar fill.

Governors, your streetlights are yours. Every lamp, lantern and torch built into a player-owned town can be right-clicked for the same light settings a lamp inside a house uses: nine colours, a custom picker, range, brightness, and a box for only at night. Settings are kept per lamp, so one lantern can burn blue while the one across the square stays exactly as it was built. The town console has a new tab for doing it wholesale, a whole kind of lamp or a whole town in one go. Knight's Watch, for reference, has twenty-seven built-in lights across eleven kinds. Lights inside houses and on residents' own lots are left alone.

Two achievements now credit your past. The emote-learning ladder was never counting anything for anybody, because your client reported the total slightly before anything was listening for it, so it read zero for every player who has ever played. It will land on your next login with the emotes you already know. And the eleven Soltown and Path of Love story quest achievements grant retroactively, so quests you finished years ago, before those achievements existed at all, will unlock. They arrive as one summary banner rather than eleven separate ones, which strikes me as a kindness.

Allium Oop reported losing her chest armour while riding. Head, hair and bare arms drew perfectly well. The chest simply left. The box the game uses to decide whether a worn piece of clothing is on your screen was being fitted to whatever pose you happened to be in when you entered the zone, and a rider does not fit inside a standing person's box. So with the camera close in, at certain headings, the game concluded that her shirt was off screen and stopped bothering to draw it. Every worn piece keeps its full box now, which also covers swimming, dying and being resurrected, all three of which had the same problem lying in wait.

The whole-catalog combat balance audit ran for the first time since early July, at the same settings, so the two sets of numbers compare directly. Water climbed forty-two percent and moved up into the target band. Subterfuge climbed by the same amount in the wrong direction and now leads the next tuning pass. Bard has left the damage rankings entirely, because every song in the reworked set resolves to a buff or a heal. One figure needs saying plainly: Chaos appears on the new chart to have fallen by nearly seventy percent, and nothing about Chaos changed. The audit had been scoring Chaos Bolt as though all five of its branches landed on every cast, when it fires one of them. The skill is what it always was. The chart was wrong.

The rest went by quickly. Your action bars take any shape their slot count allows now, one row of twelve, two of six, three of four, and every slot carries its number in the corner, so an empty bar is no longer twelve identical squares staring at you. Windows resize from all four corners instead of only the bottom right, which matters a great deal once you have shoved one against the edge of the screen. Right-click menus stopped drawing behind the window that opened them and staying that way until you restarted the client. Buff icons stopped hopping between rows several times a second while you stand in a Ring of Fire. And your catchphrases can perform an emote when they fire, chosen from the ones your character has learned, which required no new network traffic at all, because the emote was already travelling on the channel that shows other people what you are doing.

Out in the world, eleven kobold spawners in a player dungeon that had been failing all at once now wait for the dungeon's navigation to finish loading before they place themselves, a stairs hall that no creature could path through has its navigation data at last, the Firespinner outfit is textured on male characters again after drawing flat white since before the engine upgrade, and two dead elves in the tutorial had their heads raised back out of the dirt, which is a sentence I did not expect to be reading tonight.

Behind the curtain, our test shard now runs on the real account database, four hundred and twelve thousand logins restored from a live backup, so if you are testing with us, your live username and password will get you in and your restored characters will be waiting. necronut asked a fair question about the imbued gem socketed recipes, and the answer, written down properly now, is that no merchant sells them at all. They drop in the Obsidian Panopticon in Mistrendur, from the Watch Commander and from the high-tier two-key chests. The ordinary versions are still on the alchemy shopkeepers in the crafting cities. Beyond all that, another eighteen items closed on the tracker and thirty-six testing tasks were signed off, most of them interface work that has been sitting in testing for weeks.

That is Thursday. Four people wrote in with reports that carried half of tonight's episode, and every one of them is named above, so I shall not repeat myself at them. What I am looking forward to is the next real siege, and one moment in particular: a Cabalist walking somewhere.

And before I go. I asked how an entire lighting effect could go missing from every build we ever shipped without a single person noticing, and one of our engineers said, without looking up from his screen, that it had been keeping to the shadows. I am not sorry. Be well, and I shall see you in New Britannia.