Episode
Lost experience comes back and the main quest stops forgetting you
A repair rule that ran in August had taken nearly thirty-three billion unspent experience from forty-six thousand characters, and all of it comes back at the next test shard restart. The main quest was read end to end three times in one day, which found a prophecy podium that took your quest items and then asked you for them again. Also three new companion pets, a museum holding every decoration in the game, and the reason Corpse Explosion had been going off for nobody but the caster.
In this episode
- Corpse Explosion detonating for nobody but the caster
- Thirty-three billion experience restored to forty-six thousand characters
- The main quest read end to end, three passes
- Town render costs, and a benchmark that was lying
- Koala, fox and goat pets, and everyone dances
Transcript
Good evening, citizens of New Britannia. Lord British speaking, with an account of what your makers were about these last hours. Near three and thirty billion points of experience, taken from you in error by our own hand, are restored to you. The great podium in the Confluence will no longer swallow your prophecy pages and then ask you to bring them. Every decoration in this world, all six thousand eight hundred and forty-one of them, now stands in one hall that you may walk. And a spell some of you have been casting these three days has been exploding for nobody at all but yourself. We begin with that, because it is the most absurd.
Picture the scene. You are a necromancer, you have worked hard for this, and there is a corpse on the ground in front of you. You raise a hand and the corpse comes apart in a thoroughly satisfying way, and everything standing near it is hurt. On your screen. Only on your screen. For three days, everyone else in the scene watched you gesture grandly at a perfectly intact body while nothing whatsoever happened. And if another player's machine happened to be running the creatures in that scene, the creatures took no damage either. The most theatrical spell we own, performed for an audience of one.
Here is what was going on, and I like this one, because it is the kind of bug you only get by being careful in the wrong place. When the server tells your machine about a spell, it packs the details into a message and sends the message along. Earlier this summer somebody added one more detail onto the end of that message, a small fact about the caster, and being thrifty, they wrote it down only when there was something to write. Sensible. Frugal, even. And the code that reads the message asks a simple question before it goes looking for that last detail. It asks whether there is anything left to read.
The trouble is that the detail was not the last thing in the parcel. Four more values were packed in behind it. So the reader asked whether anything was left, was told yes, and confidently read the label of the next value as "there is a detail here", then read that value as the detail, and then went hunting for the four things it had just eaten. It ran off the end of the parcel and gave up on the entire message. Every other machine in the scene threw it away. The caster's own machine never had to read it, because it was the one that wrote it.
The fix is about one line long. That detail is now always written down, even when it is empty, which costs one byte and inconveniences nobody. And there is a new comment sitting beside the writing code which says, in slightly firmer language than I will read aloud, never do that again.
Now the one I am least proud of. In August we copy the live player database onto our test shard, so that testers can work with their real characters. Part of that copy runs a repair pass, because data that has been alive for years collects oddities, and one of the repair rules looked at every character's pool of unspent experience and decided how much of it was legitimate. Its reasoning was that your pool cannot be bigger than what you have earned, minus what you have already spent on skills. Anything above that line could not have come from anywhere. So it took it away.
It could have come from three places, all of which we built ourselves. Training a skill spends your account's shared daily bonus pool before it touches your character's own pool. Pooled experience items credit your pool without ever touching your earned total. And creating a character seeds both. The rule looked at thousands of honest pools, could not account for them, and trimmed them to the floor.
Barugon noticed millions of experience missing from his characters and reported it, and that report was worth far more than it looked. When we went and counted, the pass had taken fifteen point seven billion adventurer experience and seventeen point one billion producer experience from forty-six thousand four hundred and seventy-four characters. And the very same rule was sitting in the ladder of steps for the live database move at the start of October, ready to do it all again to everybody at once.
So the rule has been rewritten. It now leaves a pool alone when it sits between a sensible floor and the ceiling the game server itself already enforces, it raises a pool that really is too low, and it keeps a written record of every change it makes. The two separate tools that apply it were run against each other over a hundred and twenty thousand character sheets until they agreed on every single one. Everything the August pass took comes back at the next test shard restart. Thank you, Barugon. That is a very good catch.
The main quest was read end to end three times yesterday, which is why roughly a third of the day's work has a story character's name in it. Start with the podium, because the podium is the worst of them. You gather eight prophecy pages and three lenses across the whole of the main story, you hand the lot to the podium in the Confluence Chamber, and the server takes them and stamps the claim. The flag that records "this person finished the hunt" was then supposed to be written by a piece of code that runs on your machine afterwards, once the thank-you messages have played. If the conversation window closed first, or one of those messages hit trouble, that code never ran. The server had your eleven quest items. Your character had no record of handing them over. The temple went on loading the hunt and the podium went on asking you for pages you no longer possessed. Every main quest hand-in now names its own progress flag, and the server writes it in the same operation that takes the items.
That was the shape of the whole pass. The story kept forgetting what you had done, and occasionally it forgot in spectacular fashion. On the Path of Courage you can hear Korabar's terms and then walk out of the Caverns of Skrekk without saying the words that end it. Doing that left you holding Lord Demig's baton forever, and the flag for that baton was the very thing summoning Lord Demig. So Lord Demig came back to life at his battle camp and demanded his trial again, every visit, for as long as you cared to keep visiting, while Korabar sat a few rooms away speaking of him as safely dead.
Lady Mara was doing something similar, standing beside Grannus in Valhold Palace after her own death. Dead story characters stay dead now. Named enemies used to say every death line they had, so the bandit leader near Etceter shouted about an ore deal at players who had never made one, and Mongo the shock monkey said his line twice for good measure. Estgard's gate guards stopped you with "Halt!" at every gate, on every visit, including long after the kobold camp had vouched for you. Seven lines shut their window after three or four seconds, which is not long enough to read a sentence, and one of them was Robert Villines yelling "Follow me to the boat!" and then closing the conversation before you could agree.
Two things I am pleased about in that pass. The compass used to route you toward the prophecy pages straight through the open player-versus-player ruins, which is a rude way to treat someone on a reading errand. It now leads you through the underground passages instead, and the journal names each one. And there is a new automated check that plays every main quest greeting through two hundred and fourteen distinct stages of the story and flags any that race each other or fall silent. It immediately caught four people who could pick the wrong greeting the first time you ever met them, which is the sort of thing a hundred human playthroughs will miss and a machine finds before lunch.
There was also a long review of what costs render time in player towns that carry heavy decoration counts, and it produced the most useful kind of finding, which is the kind that makes you go back and correct your own earlier work.
The first thing the review found was that our measuring stick was broken. The timer used to price the last three decoration performance passes was adding up work from several threads at once, so it happily reported the camera taking longer than the entire frame took. Which is impossible, and ought to have been a clue. On top of that, every benchmark run used a detail distance about a third of what players actually run with. Two older write-ups have been corrected accordingly.
With honest instruments, the real costs showed up quickly. In any town where you can see sea or lake water, the water was asking the camera, every single frame, for a picture of how far away everything is and which way it faces. Asking for that picture makes the engine draw every visible object in the scene a second time with a different shader. Nothing read the picture. The water already gets that information from the ordinary pass, and had done for years. Twenty-two of the town maps were paying for it. Lamps, torches and lanterns that loaded in after you arrived were skipping the limit on how many lamps may cast shadows at once, and each shadow-casting lamp makes the engine redraw everything near it six times a frame. The check that hides furniture inside other people's houses was running twice a second and rewriting every decoration in town each time, whether anything had changed or not. The grassland player towns drew grass out to two hundred and fifty metres where every other town stops at eighty.
My favourite, though, is the Oculus Mirror of True Reflection, which was redrawing everything around it, out to a kilometre, with shadows, from six directions, in one frame, every few frames. It is a mirror. It now looks one direction per frame, about thirty metres, and the regular stutter beside it is gone. When a town does drop your frame rate, the automatic quality adjustment now also switches distant objects to their simpler forms, which it was always meant to do and never did, because the detail slider quietly outvoted it. The changes that would alter what you see are shipping switched off until a capture in a real, fully decorated town prices them properly.
Three new companion pets. A koala first, and then a fox and a goat in the Crown Store at a thousand crowns each. Summon one from your backpack and it follows you about; set it on your lot and it lives there. All three lie down and rest and fall asleep when you stop for a while, and the koala will sit down, eat a leaf and nod off, and reward anyone who walks into it with a toss of the head and a thoroughly grumpy bellow. House pets can nap at all now, which they could not before. Sitting had been switched off for house pets for years, on the grounds that only the owner could see it. Visitors now see the nap at the same moment the owner does.
The dances are my favourite part of this. The koala's model pack arrived with no dance in it, so one was built by hand on top of the animal's own breathing idle: paw taps, a rear up with both arms in the air, a hip shimmy, and a crouch into a hopping twirl that lands on the beat. The fox play-bows, hops, rears up batting its paws and spins. The goat stamps, rears up tossing its head, skips sideways and leaps into a spin. The tool that assembles all of that is being kept, so the next animal pack that arrives without a dance can be given one the same way.
And pets now dance with you. Start any dance emote and every pet you have out that knows how will join in, and stop when you stop. A pet told to stay keeps staying. A pet in the middle of a fight keeps fighting, because a pet that breaks off to dance mid-fight is a pet that is about to become a story.
Also, and this one is entirely our fault, the commands slash pet dance and slash pet sit now do what they say. Until yesterday, typing slash pet dance played your own Pet emote at a player named Dance.
Two new places to go. The Decoration Museum lays out all six thousand eight hundred and forty-one decorations in the game across thirty-four gallery rooms and twenty-seven open-air yards, one wing per kind, bringing pieces in around you as you walk. Type slash showcase there and a panel filters the whole museum to free items, paid items or reward items, or to furniture against small items, moves the matches to the front of each wing, and gives you a card for every piece listing every way there is to get it. It arrives on the test shard with the next build. There is also a Wizard Tower for City lots, in the style of the village tower, forty-seven metres tall, with real stairs to every floor, a wraparound balcony, two turret rooms, a sky-bridge and a run of floating stepping stones. The whole tower is generated rather than placed by hand, and the build refuses to finish unless a player-sized walker and a pet-sized walker can both reach all eighteen rooms and landings starting from the front of the lot. The deed is testers only for now.
If you log out inside a town and that town falls under siege while you are away, you used to log back in standing in the middle of the Cabalist's army with no warning at all. Pressing Resume now checks first. It names the town and the Cabalist holding it and offers you three choices: start out on the overworld beside the town, walk in anyway, or go back.
For everyone playing in something other than English, about three thousand seven hundred NPC lines are translated again. Three tidying passes over the English earlier this month collapsed doubled spaces, fixed spellings, and put gestures inside asterisks. A line's translation is filed under a fingerprint of its English text, so nudging one space unfiled every translation of that line at once, and you got the English instead. Lines with no translation in any of the eight languages have gone from three thousand nine hundred and ninety-two down to three hundred and eight. In the main quest, from one thousand five hundred and seventy-three down to fifty-three. There is now a tool that carries a translation across to its reworded line, and a check that fails the build if a future edit leaves one stranded.
Add-on authors had a very good day, with thanks to John Markus and to Tirrag, who both asked for pieces of it. Add-ons can now read your own skills, quests, recipes, achievements and titles exactly as those windows show them, be told when items arrive in your bags or your combat chat prints something, add their own chat commands and key bindings, open the windows you click on, and declare that they depend on another add-on. The principle running through all of it is that the game wins every conflict. An add-on never gets a key the game itself uses, built-in commands always come first, and a command one typo away from a chat channel is refused outright, so a mistyped message can never land in an add-on instead of your guild.
Behind the scenes there was a heavy pass over the game servers, with launch in view. Player trades are now checked in full before anything at all is written, and written in an order that can never leave the same item sitting with both players. A shutdown waits for every logged-in player's progress to finish saving before the process exits. On the test shard, a stop used to cut the servers off after one second whether saves were running or not. They now get up to a minute.
A hundred and fifteen tracker items closed yesterday, so the rest of this goes fast. Being stunned no longer paints your screen solid black, which had been indistinguishable from a zone change; the edges dim now and a ring of stars circles the middle. Trolls have a solid body, so you can no longer walk through one like a bad rumour. The Z key puts your weapon away while you are hammering a practice dummy, which it had been refusing to do because a two-handed swing runs longer than the key was willing to wait. Town sign posts that read "Local Destinations" on the map now read like places. Player-owned towns have lost their fog of war and show in full the moment you arrive. And the launcher's Repair button now admits that it has started, instead of sitting there looking broken while it works.
A batch of objects that had been mute for years got their sound back. Alchemy stations in town shops bubble under their fire again, the arrow trap and the dart wall make a bow release when they fire, and the four small cascades inside Lost Vale run. Every one of them was pointing at a sound file that went missing years ago. Mimic barrels were on the same list, and there is a lovely twist there, which is that a mimic barrel's missing sound only plays when the barrel breaks, and a mimic barrel does not break. It wakes up instead. That sound has been unreachable since the day it was assigned.
Twenty-nine more characters whose voice and body disagreed have been reconciled, and so has Caesonia, the elf bounty hunter, who had been speaking in a woman's voice from inside a male archer's body at all ninety-six of her spawn points. The Oracle learned answers to fifteen questions players asked her this week and got nothing for, from where Tiger Sharks are caught to where Blood Leech bait actually comes from, which is nowhere, because no merchant has ever sold it. A chat tab can be cleared without closing it. And from the forum sweep, thanks to Cora Cuz'avich for pointing out that bought lots in NPC towns still wear their For Sale signs, which is now on the list.
That is the day. Launch is close, and what I am looking forward to most is the week we read the main quest end to end and find nothing at all, an event I am told is called optimism. One last thing before I go. The koala's model pack arrived with no dance in it, so a member of this team sat down and built one move by move, which means that for one entire afternoon the most pressing problem in this studio was a total absence of koala-graphy.
Good night, and be well.