SotA

The New Britannia Herald

Saturday, September 12, 2026

Work Log Podcast

Episode

Invisible stairs, a crash we chased twice, and a stronghold raised in a day

A player found a staircase in his dungeon that did not exist, and pulling on that thread took two thousand eight hundred invisible walls out of ninety-eight dungeon rooms. The crash dropping people to the desktop in busy towns had a second cause hiding under the first, and the test shard went back several builds while the real fix was written. Also a new Cabalist stronghold east of the Obsidian Trial, dungeon entry that no longer freezes for the better part of a minute, and the arrow keys finally made safe.

In this episode

  • Invisible dungeon walls removed from ninety-eight rooms
  • The tabard crash and the rollback it forced
  • Dungeon entry and login freezes both gone
  • Arrow keys in number fields no longer kill the client
  • The Cabalist Stronghold and Vitium, the Hollow Eye

Transcript

Good evening to thee, citizens of New Britannia. Lord British, come with word of what thy makers were about on Saturday. A wall that no eye could see has been struck from ninety and eight dungeon rooms. A crash we thought slain rose again, and this time we found its true heart. Entering thine own dungeon no longer stops the world for the better part of a minute. And east of the Obsidian Trial a new seat has been raised, where every Cabalist the realm failed to put down shall be waiting for thee. We begin underground, at a door that opened onto nothing at all.

A player wrote to us about the secret door in his dungeon. The door worked. He pulled the lever, the stone swung aside, and then he walked into the opening and stepped up onto a stair. He stopped with his head against a ceiling. There was no stair. There was no ceiling. The rest of his dungeon, everything past that door, was sealed off behind a staircase that did not exist and could not be taken down, because there was nothing standing there to take down.

So what was he standing on? When we build a dungeon room, we put invisible surfaces inside it to tell the game where a decoration is allowed to sit. Here is the floor. Here is the wall. Put the torch against that. They are notes for the decorating system, and nobody was ever meant to touch one. But they were built as solid objects, and the game has no category for a solid object you are allowed to walk through. So the player walked into a note about where a lamp could go, and stopped dead.

Two thousand eight hundred and forty two of those surfaces, across ninety eight dungeon pieces, no longer collide with players or with creatures. Three of them in that one room were the actual staircase. Somebody had named them for steps, and the room they sit in has no steps, so they were floating about half a metre above a perfectly flat floor. That is the invisible stairway, right there, in a room where nothing else is wrong.

Nothing moved. That was the rule we set going in. A room already standing in somebody's dungeon is exactly where it was this morning, everything you have placed is where you put it, and decorating behaves the way it always has. The only difference is that the hints are hints again. There is also a new check in the editor that measures every one of those surfaces against the art behind it, and a standing test that fails any dungeon piece whose hints are solid. We would rather not do this one twice.

Now the crash. Some of you have had a rough few days, and this is the honest version of it. Two builds ago, the client began quitting to the desktop the instant it drew a character's equipment. Not a stutter. Not an error box. Gone. And because it fires on drawing equipment, it fires when you spawn, and again whenever another player wearing the wrong thing walks into view, which means a busy town killed the client within seconds of arriving. Ten crash reports from three players in a single afternoon, out of one town.

We found a cause fast. The step that packages the game for players had been copying new art files in without taking the old ones out, so about one and a third gigabytes of superseded files went out sitting beside their replacements, and the client was reading the wrong one. That is a real bug. We fixed it, we shipped it in the next build, and the crash came back, unchanged, identical, on a build that carried the fix.

Which is the moment you have to put your first answer down and pick the problem back up. The real cause was the way the game's art has been split into packages. The tabard model landed in one package and fifteen of its sixteen tabard items landed in another. Under the new engine, a piece of art that loads across two packages arrives with its behaviour unattached, and the moment you put that on a character, the client is finished. The same shape had been breaking street lamps with signs on them for weeks. No light, no moths, no sign swinging in the wind. Nobody connected the quiet lamp to the fatal tabard, because why would you.

The build now keeps every scripted piece of art in the same package as whatever references it, copying it into both places rather than sharing one across a seam, and the packaging step fails outright if anything ever crosses that seam again. Fourteen new tests hold it there. While that was being written, we put the test shard back several builds on all three platforms, server and all. That was the first real use of the rollback we had finished the day before, the one that makes you type a reason before it will move anything. I am pleased we built it. I am less pleased about how quickly we needed it.

Let us talk about waiting, because two long waits died on Saturday. The first is the player dungeon. Walking into your own dungeon has been freezing the client somewhere between fifteen and fifty seconds, and worse on a plot with a lot of decoration on it. Here is what it was doing. For each room, to work out how big the room is, it gathered every solid object and every piece of terrain in the entire scene and measured all of it. Then it did that again for the next room. And the next one. On the worst report we have, the plot was loading twenty two thousand decorations, and it went through all of them once per room.

The wonderful part is that every room in the game already carries its own measurements, baked in, from the day it was made. The answer was sitting in the room's own pocket. We were simply too busy counting the entire dungeon to ask it. That sweep is gone. The load reads the number that was always there.

The second wait is the one everybody has stared at on the way in, the step on the loading screen that says it is equipping avatars. That has been costing people ten to twenty seconds every single time they enter the world. The client was building a small index of what kind of item everything is, and to read one identifier out of each record it was loading the whole item, one at a time, on the main thread, with the game held still. The identifier was written on the record. It reads the record now. That is the entire fix, and you will feel it on every login tonight.

Here is one I am not proud of. Pressing an arrow key while your cursor sat in a text box could kill the client outright. No error, no dialog, no crash window. We shipped a guard for this two days ago, and I said so on this show, and the guard covered ordinary text boxes and the chat box. It recognised exactly one kind of box. Every field where you type a number was still handing your arrow keys straight to the engine to be beaten with.

So: the tax days on your lot. The range and the brightness on a light you are placing. A vendor's minimum price. If you were decorating a house and you nudged a number with an arrow key, the game took that as its cue to leave. Four crash reports across three different machines with three different graphics cards, and the last of them arrived from a player running a build that already carried the fix. Four reports is four people that happened to, and it is a decorating bug, so every one of them was in the middle of something fiddly when it hit.

It covers every field now. And its cousin went down with it. A window that closed while your cursor was still in one of its boxes used to keep the keyboard. You could not walk, you could not use a hotkey, and there was nothing left on screen to click away from, because the window holding you had already gone. Two windows had each been working around that on their own. The client now checks every frame and takes the keyboard back.

And then there is the stronghold, which was designed, reviewed, built and finished inside one day. When the shard has no town siege running, and enough towns have been freed since the last one, the old siege road opens on its own permanent hex just east of the Obsidian Trial. It sits on your map at all times, reading dormant, with the door shut. When it opens, the camp on the hex lights up and the whole shard is told.

Inside, sixteen seats ring a throne. Eight of them belong to the Cabal, every Cabalist the realm failed to kill that cycle, and each one of those stands there at eight times the health you last fought him at. The other eight are for the ones you did kill, and in each of those chairs an Obsidian lich rises wearing the shape of the dead. Exactly one of each pair stands up. So the fight you walk into is a record of your own season. Every Cabalist you left alive is there in person. Every Cabalist you put down is there as something worse.

At the centre is a new one. Vitium, the Hollow Eye. A sorcerer of the Ebon Dawn who went into the Epitaph, found the Obsidian Eye's mask, put it on, and now sits in the empty seat at the middle of the Cabal and calls it his. He fights with a halberd. He will pull you to him from across the room. He calls up a pair of liches when you have him down to half, and he goes properly wild at a fifth. He carries the Mask of the Waiting One.

And he cannot be touched while a single one of his Cabal is still on his feet. I love this, because it makes the whole cycle count. Every town you freed this season made his guard smaller. Every town you left besieged is standing between you and him with eight times its usual blood in it. You are not walking in there to kill a boss. You are walking in to collect on a season.

When he falls, the Light of the Eight burns for a day. Every player online, whether they were in that room or not, carries five percent more weapon damage, five percent more spell damage, five percent more healing received and five percent more health, for twenty four hours, on top of the experience bonus. It touches nothing about harvesting or crafting, before anybody asks. None of it is live yet. It is built, it is switched off, and it is waiting on the next build.

But it is in there.

A few smaller things that will improve somebody's evening. The Oracle is audible again. A player wrote in to say he had to max the dialogue slider and his speakers both to hear her on the Isle of Storms, while Arabella, standing a few steps away, came through at a perfectly normal volume. The echo chamber her voice runs through was throwing away about twelve decibels and giving back three, and nothing in the pipeline was measuring the result. Which means the public vote that chose her voice was comparing four equally inaudible candidates. All five hundred and twenty one of her lines have been re-cut, same voice, same chamber, at the level of the characters around her, and every voice chain is now measured against a test tone before it ships.

Animal Lore has a payoff in the field. Study a beast, and that beast is easier to tame for the next five minutes, from two and a half percent on a shallow reading up to ten percent on a deep one. The bonus belongs to the animal you studied, so the second wolf standing next to it is exactly as difficult as it was before, and the Animal Lore window shows you the size of the bonus and the seconds left on it.

Item links in chat are worth a word. When somebody linked an item to you, what you hovered was a copy of the tooltip their client had drawn, written by their client, checked by nobody at all. The message now carries a short reference to a copy of the item the server took at the moment of linking, after confirming the sender actually owns it. You get the real tooltip: icon, rarity colour, stats, durability, enchantments, and the comparison against what you have equipped. The link keeps working after the sender logs out or sells the thing, and it expires after a day. Universe chat, which was the one channel dropping the item on the way out, works again as well.

Patching got faster, by the method of discovering it had been slow. One missing field on a pointer meant every file was coming from the origin server instead of the edge network, at about a third of the speed. Three megabytes a second where it should have been thirty two, against a thirteen gigabyte patch. And a first install on Mac and Linux now arrives as one large file the way it always has on Windows, instead of thirteen gigabytes pulled one file at a time.

Now the fast part. Sixty seven tracker issues went down on Saturday, and I will not march you through them, but there are a few I cannot leave on the floor. Snow was falling indoors. It has been for a while. A roof stopped rain, because rain falls straight down, and snowflakes drift sideways for several seconds on their way, so they arrived under the roof and kept settling on your rug long after the storm outside had passed.

Pets set to aggressive were refusing to swing at things they were standing directly beside, because the creature measured the distance to its target from the nearest patch of walkable ground instead of from itself, so an enemy up on a dock plank or a rock read as several metres away. Control point waves were stuck reading wave seven while the fight carried on around them, one of them for fourteen minutes. There was a Cabalist hood authored at minus five hundred percent durability where its siblings carry minus five, so everything worn with it wore out about seven times faster. Fishing works while you are ankle deep. The stuck command works while you are swimming, which it ought to have done from the day the first person fell off a dock. And an owl pet was dragging a patch of its own wing feathers out through its belly on every wing beat, which is fixed, and which I would rather not picture again.

There was a great deal of website work as well. Guild and town pages can mirror their activity into a Discord channel the leader owns, player towns are getting a chat channel of their own that residents hear from anywhere in the world, and the game has finally started pointing at those pages from inside the Social window. Most of it is dark until the next build, so I will tell that story properly when you can put your hands on it.

What I am looking forward to is the first shard that clears its towns and finds out what has been waiting east of the Obsidian Trial, with eight of its own failures standing between it and the Hollow Eye. Somebody is going to get there first. I would like it very much to be a proper mess.

And now your joke, which you have earned. We took two thousand eight hundred and forty two invisible walls out of the dungeons this week, including one staircase that was never there.

Every last one of them was a step in the wrong direction. Goodnight, my friends.