SotA

The New Britannia Herald

Friday, August 21, 2026

Work Log Podcast

Episode

The eye with no eye, a map that hoarded every map, and a young tyrannosaur

Friday brought a large pass over pets and creature movement, a map window that had been holding a gigabyte and a half of artwork to draw one page, and a new tier fifteen dinosaur with a hand-animated tail swipe. Animal Lore learned to tell stories about fourteen beast families, in eight languages. Vendor search stopped ignoring the filters you typed into it.

In this episode

  • Pet leash and creature movement overhaul
  • The map window that held every map at once
  • Animal Lore gains written lore in eight languages
  • The Young Tyrannosaur and its hand-built tail swipe
  • Vendor search filters that finally filter

Transcript

Good evening to thee, citizens of New Britannia. Lord British here, down from the throne with word of what thy makers were about on Friday. Thy pet will hold its fight now, even when the thing it fights backs away like a coward. The map thou openest with a keystroke had been hoarding every map in the realm in order to draw one, and has been talked out of it. Fourteen families of beast will tell thee their history, if thou wilt study them, in eight tongues. And there is a young tyrannosaur loose in the world who very nearly shipped bright pink. We begin, though, with the eye that had no eye.

A few days ago we put a creature into the world called the Scrying Eye. It is a floating eyeball. That is the whole concept. And when it arrived it was a smooth, featureless ball, drifting about, scrying nothing, because it had no iris on it at all. The model carries a thin shell over the eyeball, and that shell had been switched off, because anything solid on it hides the eye underneath. Switching it off does not stick. When a creature spawns, the game turns every one of its parts back on, and there went the eye.

Its name did not print either. Six creatures were wandering the world with their own names showing as a row of question marks, the Eye and the five new wrasses beside it, because a display name has to be registered with the translation system before the game will show it, and that step was missed. So you could not see the eye, and you could not ask what it was. Both are fixed. The shell wears a see-through material now, the eye reads properly and picks up a wet little highlight, and all six creatures answer to their real names.

Right. On to the big work.

The first one is about your pet, and it starts with a report from a player. Mondravis pointed out that a creature which kites away from a fight was doing two nasty things at once. It was breaking your pet off the fight, and then it was coming straight for you. Both of those, on inspection, are one bug wearing two hats.

Here is the shape of it. Your pet is on a leash, and the leash is measured from you to your pet. Your pet is fighting something. The something walks backwards. Your pet follows it, because that is what fighting is. The pet crosses the leash line, so the leash yanks it home, and then the leash hands whatever it was fighting over to you, on the assumption that somebody had better be holding this thing. Any creature in the game with the presence of mind to walk backwards could end the fight and pick a new target, and the new target was the person standing there giving orders. Your pet was doing its job perfectly. It was being overruled by arithmetic.

So the leash has learned some manners. While your pet is holding a target it may now range about twice as far from you as it does when idle, which means a caster or an archer backing off no longer wins the argument. And the other half of it: whatever your pet was fighting comes after you only when you were the one who walked away. Stand your ground while a creature retreats, and that creature stays interested in your pet, which is what you wanted when you summoned a pet in the first place.

There is a third piece, and this is the one I find quietly infuriating. The leash wiped the pet's threat every half second it was running, rather than once when it started. Your pet would build up a creature's attention, get called back, and throw all of it away, several times a second, the whole way home. That is a great deal of why pets have felt unable to hold anything's interest. A pet walking back to you keeps what it has built now.

Two more, from the same pass. Height is judged separately from distance, with its own eight metre allowance, so a pet one floor above you or partway up a staircase stops counting as far away and stops running back. And a pet that is walking home and getting no closer at all is simply placed at your feet after about twenty seconds. Before this, a pet whose summoning point had ceased to exist could walk toward it forever.

The rest of the day's creature work came out of the same audit, and it is a good one. Early Friday morning somebody sat down and wrote a single reference for how anything in this game decides where to walk. All four separate pathfinders: the one inside a scene, the one on the overworld hex map, the one the load-test bots use, and the router that works out scene-to-scene directions for quest instructions. It had never been written down in one place before. That document ended with a list of open problems. By lunchtime five of them had been fixed and the document had to be revised, because it was listing problems that no longer existed.

One of those five: obstacle avoidance was switched off while a creature was walking home. So anything you pulled and then broke away from made the entire return journey with no ability to steer around scenery or around its own friends. That is very likely why enemies have been seen circling a doorway instead of going through it, which players reported near the teleporter room in The Rise. Another: a creature that stops making progress now re-seats itself on the walkable ground and looks for a fresh route. Until Friday only a pet chasing a target could do that, so a pet stuck while merely following you had no recovery at all, and your only option was to walk far enough away that it teleported to you.

Now, the map window, where the number is frankly absurd.

The M-key map was holding every single map picture in the game in memory. All three hundred and five sheets. A gigabyte and a half of source artwork, resident from the moment you logged in until the moment you quit, in order to draw at most one of them at a time. And none of it could be shed, either, because nothing in the game actually renders a map sheet onto anything, so the system that quietly evicts textures you are not looking at never so much as glanced at them.

The cause is a lovely little trap. There is a registry that lists the map sheets, and it referenced each picture directly. When the engine loads an asset, it loads that asset's entire reference graph along with it. So mounting one small catalog, a few kilobytes of list, dragged the whole cartography department in behind it. The client now keeps exactly one sheet, the map for the area you are standing in, and drops it when you travel. Two guard rails came along with the fix, because a gigabyte and a half is worth defending. The registry is checked for picture references on every test run, so putting one back fails a test instead of costing you a gigabyte, and the sheets now live in a bundle of their own.

And having won the memory back, the art team spent it. The scene maps were redrawn larger. Most were two thousand pixels across and are now four thousand, and Ardoris, Central Brittany, Owl's Head and Soltown go to eight thousand. All two hundred and forty seven of them also came off a hundred and twenty eight colour palette onto full colour, so the shading that used to step down in visible bands is smooth.

Two more map items, one of which I have to own personally. There were sixty nine joke cards in the game, the ones that say there is no map here, which is a fine gag. Their entries locked the map at minimum zoom. So the card could never be read. We shipped a joke that was, by construction, impossible to see. They are gone now. And Grusk Factory and The Obsidian Trials have dungeon maps at last. They were the final two player-facing places in the world with no map of any kind, and they had both been skipped by the original bake for reasons that took real digging. One carried a flag that inverted its map scale. The other had a placeholder floor band of zero height, which the tooling read as careful hand-authored data worth preserving rather than as the placeholder it obviously was.

One coda on maps, and nothing here ships. We spent part of the day asking whether a machine could repaint the map sheets as modern illustrations without moving anything. That last part is the hard part, because a map sheet is a coordinate system as much as it is a picture. Your marker is drawn onto it through a per-scene transform, so a building nudged twenty pixels is a building your dot stands beside instead of on. Repainting a whole sheet in one pass keeps the frame beautifully and does not keep the inside: between twelve and sixty four percent of each sheet came back as invention. Cutting the map into small tiles and repainting them one at a time held the layout to about a tenth of a metre across a whole town, because a model working on one small square has nowhere to move a building to. My favourite failure: a tile of empty forest is an invitation. The first good Soltown sheet came back with villages along its margins that do not exist. Saying, in as many words, that the content is fixed took the invented share from eighteen percent down to nine. Both towns keep their current maps. These are only candidates to look at.

Now for something you can go and do tonight. Animal Lore has told you a creature's numbers for years. It will now tell you its history. Study a beast and the readout grows a Lore section, up to four written passages about that creature's family, and the deepest passage only comes from studying a strong member of that family at high skill. Fourteen families are covered, from wolves and bears through satyrs and the new wrasses all the way down to the barnyard. What you uncover is permanent for that character, and it reads the same in the window as it does through the lore command.

The passages draw on the in-game book corpus and the community wiki, and famous individuals get lines of their own, the Spawn of Sobek and the Red Ice Snarler among them. There is a new Naturalist achievement category on top of it, with a Scholar deed for each family you complete, ladders for families opened and families finished, and the title Master Naturalist at the top rung. The new wrasses joined the bestiary with their own counters as well. And the Kind row on that readout now says Beast, Daemon, Clockwork and Object, in words a person says out loud, instead of the programmer's word for the category, which it had been showing you with a straight face.

Then all of it was translated into eight languages, and this is where it gets good. Four thousand one hundred and seventy eight records went across into German, Spanish, French, Italian, Russian, Portuguese, Japanese and Simplified Chinese. Then every one of those records was read back, one reviewer per language over the full set, with a second reviewer whose only job was to argue against each finding. A hundred and forty five problems were raised and ninety eight of them held up, and almost all were false friends, which no word-frequency check can ever catch, because the word is real and common and simply the wrong one. The Russian text was calling egg collectors ovaries. The German was using a word meaning monster for beast, in a description that two sentences later explains that only animals will respond. And the Tablet of Finding had become a serving tray on all three of its buttons.

Every place and creature name in the new text was also checked against the name that language already uses elsewhere in the game. Portuguese had about thirty of them still sitting in English, so Ardoris and Xenos and Novia now read in the lore the way they read on your map. German, Spanish, Italian, French and Japanese each needed a few. Russian needed none at all. Coverage across the eight now sits between ninety nine point four and ninety nine point eight percent, and everything still untranslated is player-book text, which travels through its own pipeline.

Next: there is a new dinosaur. The Young Tyrannosaur is a tier fifteen beast and a juvenile, about eight metres long against the twelve point three metre adult the model was scaled down from. It has two attacks. A bite every three seconds, and a tail swipe every twelve that catches up to eight targets standing around it, so the polite thing to do is avoid gathering in a ring around its hindquarters. It hunts players, game and farm animals with equal enthusiasm, and it does not run away when it is hurt.

The tail swipe had to be animated from scratch, because neither dinosaur pack in our tree ships a tail attack. So it was authored by hand against the twenty one joints of the tail, a one and a half second whip with the body pivoting into the swing, and the tail tip travels eighteen point seven metres in that second and a half. Both attacks land their damage on the exact frame where the animation connects, measured off the clips rather than guessed at, which is why it hits when it looks like it hits.

Three faults in the bought art pack had to be sorted before any of that could ship. The supplied death animation carries a full set of bone tracks and no motion in them whatsoever, so our tyrannosaur would have died standing bolt upright in its idle pose, which is dignified but unconvincing. Every material pointed at a shader this project does not have, which draws the entire animal in bright magenta. And eleven of its twelve skins are so close to black that the creature vanishes at any distance, so it wears the pale sandy one. This is the third creature built end to end from our own creature-creation documentation and the first that needed an animation written rather than picked. What it ran into went back into those documents.

Last of the big ones, and it is for anybody who buys and sells. Vendor search has been lying to you, and it has been lying in several directions at once.

Start with the filters. Ask for Dexterity of at least ten and you got back every result the name alone matched. The search service running on the test shard was an early July copy from before numeric filters existed, so it accepted your number politely and then ignored it completely. Searching for chest returned nineteen hundred and eighty seven listings whether you filtered or not. It now returns six hundred and ninety with Dexterity asked for, and two hundred and twenty four once you add Intelligence on top.

Worse, and older: the index had been refusing new listings since the thirty first of July. The indexer began recording stat values that month, and the index it was writing into was set to reject any field it did not already recognise, so every listing on an item with a varying stat came back as an error and the stale copy stayed put. That is thirty six thousand one hundred and forty two rejections. It is also why a row could read plus three while the item under your pointer was a plus eighteen. Moving to the new index recovered eight hundred and fifty nine listings the old one had lost outright.

Then the gems. A socketed gem adds a word to an item's name, of Theurgy, of Greater Sorcery, and the search had never recorded that word at all. So a shelf of differently gemmed armour appeared as several identical copies of one item, and typing Theurgy returned three hundred and fifty four results, every last one of them a loose gem, and not one single piece of armour actually wearing one. That search returns eleven hundred and nine now, and chest Theurgy went from nothing whatsoever to thirty six listings. A tester also worked out why halberds and crossbows kept turning up in a search for chests: the text search was matching the vendor's shop name as well as the item name. It matches item names now, and typing a shop's exact full name still lists that shop's stock.

Three things about getting into the game. First-time installs now arrive as one resumable download from the CDN instead of thousands of individual file fetches, verified against the signed manifest and unpacked for you, and an interrupted download continues from where it stopped the next time you launch. That was proved on a real machine: a clean folder, the download deliberately cut off partway, resumed, verified, unpacked, and Ready in about seven minutes. The Chaos test shard launcher is also a public direct download now, for Windows, Linux and Mac. Install it once and it patches itself from there, and you sign in with your ordinary Shroud of the Avatar account name and password. The Steam sign-in does not work on the test shard, the Mac build has no sound yet and needs a right-click to open the first time, and a new build-farm job keeps that install archive current after every release.

And a fourth, related. We found out why a client can sit on a loading screen that never resolves. When the server turns down a scene join, the client waited ten seconds and sent the same rejected credentials again. No limit, no backoff, no giving up. In one report it asked fifty seven times and was still asking when the log ended.

Two things about the interface. Overhead names, titles, guild tags and health numbers now draw a dark halo behind the lettering, so a pale name still reads over bright ground like sunlit stone or sand. They had an outline before, but it sat centred on the letter edge, so half of it fell inside the glyph and the outer half dropped under a pixel at normal size, which is an elaborate way of saying it was doing nothing. Vendor signs, decoration pet names and the overworld town labels picked it up too. The window backing patterns were also reworked: Leather, Smoke and Glass are out, Oak, Stone, Redwood, Iron, Damask, Elm and Marble are in, patterns tile at a fixed size instead of stretching across the window, there is a Pattern Intensity slider on the Themes tab, and you can drop in an image of your own and use that.

One thing about telling us things. The Oracle has taken feature requests for a while, but everything downstream was treating them as bug reports. Your one paragraph idea arrived under a Steps To Reproduce heading over an empty box, with your world position and the full machine table stacked on top of it. Requests read as proposals now. The duplicate check also only ever looked at the bug board, so anyone asking for something already sitting on the wishlist filed a fresh duplicate of it, and that check spans both boards now.

Lightning round. Twenty six tracker issues went down on Friday, most of them verification passes on the test shard rather than fresh bugs, which is the boring kind of number I like very much. A week of automatic crash reports came down to six real problems out of forty six reports, and the thread worth pulling is Castle Atos, which has now produced client crashes on three machines, across three builds, on both operating systems. We also cleared a suspect. The higher-resolution paper maps landed in the same builds as two of those crashes, but only one map is ever in memory, so the timing was coincidence, and it was better to say so than let it sit in the file looking guilty.

Housekeeping, of the sort nobody sees. The editor log on the main development machine had reached a gigabyte and three quarters, nearly all of it one warning from a plugin printed on every repaint of the scene view, with more than sixty four thousand copies of it in the last chunk alone. Fixed. A second plugin had registered the wrong property editor against the wrong attribute and had been throwing an error on every inspector repaint since forever. Fixed, and the clamp it was meant to apply now runs for the first time in its life. The whole editor test suite is back to zero failures out of nearly seventeen thousand tests, twenty of the forty six reds having been one single fault echoing itself. Three portal prefabs were carrying a component whose script was deleted from this project years ago, generating over a thousand complaints per session, and a hair shader of nearly five thousand lines written for a renderer we do not use went out with them.

The rest, briefly. A pile of oversized uncompressed textures got compressed, worth somewhere around a gigabyte of texture memory. The Load Time Baking checkbox is gone from the Video options, and the second copy of scene geometry it held onto goes with it. Besieged towns show their camps and their proper label on the overworld again. Our GMs have a new Players Online page that can act on an account with a reason recorded against every action. A disconnected player can no longer be left listed as online forever. And six community wishlist items were filed off a forum sweep, including a plant-once agriculture loop and pinnable favourite zones, which I am rather fond of.

That is Friday. What I am looking forward to is the first person who studies a beast four times over and finds that the game has an actual opinion about wolves, and the first person who stands in the wrong place beside a very young tyrannosaur and learns what a tail is for.

And before I go. Our new dinosaur has an extremely limited vocabulary. Mostly biting. Which is a shame, because you know what you call a dinosaur with an extensive vocabulary. A thesaurus. I will show myself out. Good night, and be well.