Episode
A ninety foot dragon, and a month of your things audited
Dragon totems in player dungeons were summoning creatures nine storeys tall into rooms with ceilings, and paying nothing at all when you skinned them. A month of server changes was read back line by line hunting item loss and duplication, and more than twenty real defects came out of it. The bard trainer sells the bard school again, catchphrases stopped undressing people, and the server stopped printing developer error text into player chat.
In this episode
- Totem dragons cut to a fifth of their size
- Field dressing worked on almost nothing players placed
- A month of item loss and duplication audited
- Four hundred developer error lines out of player chat
- Eleven of fourteen bard skills were unbuyable
Transcript
Good evening to thee, citizens of New Britannia. Lord British here, with word of what thy makers were about on Tuesday. A dragon called into a player's own dungeon has been cut down to a size his room can hold. A full month of the realm's trade has been read back line by line, hunting for goods gone missing and goods gone double. The bards may once again buy the bard's art from a teacher, which had somehow stopped being possible. And the game has stopped shouting at thee in the private tongue of its makers, in red, where none could turn it off. Sit thee down. We begin with the dragon, because the dragon is the best of them.
So you have built yourself a dungeon. You have saved up for a dragon totem, and not the modest one, the top of the range. You set it down, you step back, and a dragon arrives whose wingtips reach about twenty-seven metres off the floor. That is ninety feet. That is a nine storey building, in a room with a ceiling on it. What you actually get to look at is a chin. An enormous, magnificent chin, coming down through the roof, with the rest of the animal somewhere up in the rock above your head. And then you kill it, you go to skin it, and it gives you nothing at all.
Both of those were fixed yesterday, and both are more interesting underneath than they sound.
Size first. Dragon totems come in six tiers, and all six were summoning creatures built for open country. Out in the world that is correct. The Rise wants a dragon you can see from the far end of the room, and the ancient encounters want the same. A dungeon a player has laid out with corridors and doorways wants something rather different. So totem dragons are now a fifth of what they were. The top tier stands about five and a half metres instead of twenty-seven, and every tier below it came down by the same ratio. Dragons out in the world are untouched, because the totem spawn point carries its own set of them. Nothing in The Rise got smaller while you were not looking.
Here is the part I find lovely. Making the model smaller is about ten minutes of work, and on its own it would have made everything worse. Around every creature in the game there is an invisible shape, and that shape is doing four jobs at once. It decides how far the creature's melee can reach, how much room it claims on the walking map that pets and other creatures navigate by, where you have to put your cursor to target the thing, and where its name plate floats. That shape does not follow the model size on its own. Shrink only the art and you get a five metre dragon with a twenty-seven metre punch, standing in a corridor the game still believes is completely blocked, wearing its name badge somewhere up near the ceiling.
So the volume came down by the same fifth, along with the shape it dies with, the size of its effects, and its movement speed, so it keeps the gait it had. A dragon at one fifth scale moving at full size speed does not walk. It skates. Three new tests fail if any of those numbers drifts off the ratio, which is the sort of thing you write immediately after counting them all by hand once and deciding never to do that again.
Now the skinning, which is my favourite bug of the day. When you field dress a creature, the server checks what it is about to pay you against a list of what that particular scene is allowed to hand out. Sensible enough. It stops a boar in the starting fields dropping something from the far end of the game. The trouble was in how the list got built. It was built by scanning folders. Whatever creatures had been placed in a scene by hand, at build time, in the ordinary way, those went on the list.
A dragon you summon from a totem is placed by you. A decoration you set down on your own lot is placed by you. Neither of them lives in anybody's folder. So the dragon paid nothing but kill experience, however impressively large it was standing there. And a decoration turkey, which players buy and put out and quite reasonably expect to be able to carve, was skinnable in two scenes. Out of three hundred and ninety-six.
Two. Somewhere in this game there are exactly two places where the turkey is legal, and I do not know which two, and neither does anybody else. The list now reads what a dungeon room or a decoration actually spawns, so both of those work everywhere they should.
Two more from the same family came out while we were in there. A harvest that failed one of its rewards used to throw away all of them. It ate the corpse, paid you nothing, and did not even count towards your gathering tally. It pays what it can now and skips only what it cannot. And a summoned creature used to leave a corpse only the summoner could skin, so everyone else in the scene got a body whose entire function was to refuse them. Ordinary loot had known to skip summons for years. Field dressing had never been told. Thank you to Wishdragon, who reported both halves of this and was more patient about it than I would have been.
If you remember one thing from tonight, make it this next one, because it is about your things.
Somebody on the team spent yesterday morning reading a full month of server changes with two questions in hand. Can this lose an item. Can this make a second one. That is a miserable way to spend a morning, and it found more than twenty real defects.
The one that would have hurt most is the merchant sale. Selling an item put it into the loot recycling pool before the sale itself had finished saving. If the save failed at the wrong instant, the item stayed with you and sat in the pool at the same time, and the pool is where loot drops come from. So there was a narrow window in which the game would make a second copy of your own sword and then give it to a stranger in a chest somewhere. I would like to tell you that nobody ever hit that window. I cannot tell you that. What I can tell you is that the pool now waits for the sale to commit.
The rest, roughly in the order they were found. A refused craft was deleting the storage records of its ingredient containers before the final check ran, so you kept the container and lost the thing that made its contents readable. A crafting pull interrupted by a server restart could leave a supply chest checked out forever, refusing to open for anybody at all, and checkouts now age out after ten minutes. Reading the disclosure on a lot listed for sale took a one minute hold on every placed container, and the transfer that ran seconds later treated a held container as unreachable, so the buyer was handed a chest with nobody's name on the contents. Two redeem paths, for titles and for emotes, destroyed the item after refusing it. And saving your character rewrote your entire main backpack on every scene load, using whatever copy of the pack the scene still had lying about in memory, which meant a stale copy could put an older version of your pack back and take with it anything you had picked up since.
Almost every one of those is the same mistake wearing a different hat. The irreversible step ran first and the check ran second.
The best part came at the end of the morning. There is now a read only sweep over the real database that walks every stored item and proves it sits in exactly one container, cross checked against the recycling pool. The tests we already had proved the transfer code against a pretend database, which is useful and is not the same thing. This one audits the real one, and it can run every night. Beside it there is a fixture pinning every ordering fix from the day, so none of them can drift back.
Now the one I am least proud of. Roughly four hundred places in the game server could take an internal error message, sometimes a sentence one developer wrote for another developer, sometimes the raw text of a fault, and put it straight into your chat window as a red line. No chat tab could filter it. It forced the window open. So the way you learned something had gone wrong was that the game opened your chat without asking and printed a sentence that was never meant for your eyes, in the colour it reserves for the shard being on fire.
All four hundred of those now send the reason to the server log, where a reason belongs, and the client does its own wording for the refusal. That change dragged half a dozen smaller relatives out with it. Type your own name into your lot's permission window and the game used to answer with one of those red server lines; it now says in a plain notice that the lot owner cannot be banned or given extra access, which is both true and considerably less alarming. Drop an item onto a container that will not take it and nothing at all used to happen, which looks exactly like a drag the game simply missed. It now tells you whether the owner has not given you permission or the container cannot hold your things. The property manager admits when the server refuses to move a storage instead of putting the entry back where it started and saying nothing about it. A lot sale refused because a container is open, or because a basement is still placed, opens a proper message window; that reason used to live at the foot of the lot sign, below the fold, where you had to scroll to find it.
And a pet summon that could not go through used to report the pet as summoned. So nothing appeared, nothing was said, and you stood there wondering whether you had pressed the button at all. Saying nothing is the worst error message there is. It is worse than the red line, and yesterday we got rid of a great deal of both.
Catchphrases had a day. Catchphrases are new. They let you set a phrase your character speaks out loud. And yesterday they came for everything else in the building.
Start with the clothes. If you bought a catchphrase and then travelled, your armour could vanish. It was still equipped, still in your pack, still protecting you. Every other player in the zone simply saw you standing about with nothing on. And after one more zone change you got to join them, because then you could see it too. Knightrider reported that one, and I imagine wrote the report with some care. A purchase interrupted by travel now says it was interrupted and hands your cotos back on the next scene load.
Then the pets. People making catchphrases found their summoned pet disappearing and refusing to come back until they logged out and in again. The necklace was never taken from them. The game reloads your backpack around a purchase like that, and for a moment it lost sight of the necklace, and the pet read that moment as being dismissed. Pets now ride that out, and a pet that really is put away leaves its necklace ready to summon again. Reported by Ceal, and the connection to the necklace was spotted by Allium, which is the sort of catch that saves a whole day of looking in the wrong place.
Then the keys. Catchphrase binds were added into the middle of the stored bind table last week, and everything after the emote toggle shifted along by one. If your keys went strange around the fifteenth, that was us. Binds saved before the fifteenth read correctly again. Any catchphrase key you have bound since then needs binding one more time, and I am sorry about that.
And then the voice. A phrase typed in capitals was read out one letter at a time. So "follow me", shouted, came back as eff, oh, ell, ell, oh, double you. Emm. Ee. Anyone who wanted to be heard across a battlefield got a small polite robot spelling at them instead. Capitals are spoken as words now, and short abbreviations still spell out, on purpose. The bar itself got sorted out too. It is meant to be three tiles across and four down, and it was drawing two across and six down, because a margin from the theme made every tile slightly wider than the row had budget for and the layout wrapped early.
Bards. We reworked the entire bard school. We added seven skills, retired eight, and forgot to tell the man who sells them. Instrument Proficiency sits underneath most of that tree, and it was one of the skills the trainer no longer knew about, so it took most of the school down with it. Eleven of the fourteen bard skills could not be bought from any trainer anywhere in the world. Three could. If you rolled a bard in the last few days and came away with the impression that it was a very small school, that was our doing entirely. All fourteen are back on the shelf, the retired ones are gone, and there is now a test holding the trainer's list against the skill table, so a school gaining or losing a skill without its teacher hearing about it cannot happen quietly again.
The songs had their own trouble. Savage Sonata, Dirge of Dissonance and Requiem of Ruin have shown nothing on cast and nothing while playing since the fourteenth. A pass that stripped a retired skill's artwork out of those three emptied the slots and never pointed them anywhere new, so you have been standing there playing a dirge with no visible evidence of it whatsoever except the numbers moving on your target. Two better pieces of news to finish the bards. The debuff songs now scale with what they are hitting, taking a share of the resistance the enemy actually has on top of their flat amount, which makes them worth playing against the very things they used to bounce off. That came from feedback by Vesper. And bard auras have stopped landing on anybody's pet, tamed creature or summon, including pets belonging to players who are not even in your party. Your bear was being demoralised by a passing stranger. Also, when two bards play the same song on one target, the stronger performance wins now, instead of whoever happened to play last.
Three things about how the world looks tonight. Bloom, which is the glow on bright surfaces, was running at full strength and is now a tenth of that in the default, town and dungeon profiles, so a white wall in sunlight has stopped trying to blind you. Eye adaptation is off, so walking from a bright street into a dark cellar no longer has the whole scene slowly re-expose around you. And the mirror in character creation was drawing you about sixty percent wider than you are, which is why the face you carefully built never quite matched the one that walked into the world. It had been sharing a canvas with the character sheet and inherited a stretch meant for a taller portrait. It has a square canvas of its own now.
Sound. Waterfalls and rivers were cutting out for a second at a time while you stood near them. When the client ran short of sound channels it dropped the longest running sound to make room for the newest one, and the newest one was usually a footstep. Continuous sounds hold their place now, and the client plays sixty-four sounds at once where it used to manage thirty-two.
Player towns feel different. Lot decorations build in the background as you walk up, so crossing a lot boundary has stopped stuttering and one heavy decoration cannot freeze a frame on its own. Claiming a lot or swapping a house goes the same way, which used to hitch for everybody standing in town. Decorations arrive at the same pace they always did, nearest lots first, and there is a live switch to put the old loader back if it misbehaves.
One that hurt people. Characters with a very long quest history could fail to load their quest state at character select and come back with an error instead of a journal. A guard against runaway writes was being applied to routine tidying of records that had already been saved, so a character who had simply played a great deal of content could no longer read its own history. Playing more of the game should never be the thing that breaks it. The guard now applies where new data comes in and stays well out of the way of the tidying.
And one piece of arithmetic I cannot stop thinking about. A skill tooltip was asking trainers to price skills they do not teach. Nothing appeared on screen. It simply wrote an error every frame the tooltip was open, and one player standing at one trainer for one session produced three quarters of a full day's worth of client errors on our test shard. Nothing looked wrong at all. It was the loudest thing in the log.
The rest goes quickly. Something close to thirty interface fixes landed, and walking you through them one at a time would be a service to nobody, so here is the shape of it. The store category rail can be dragged without costing the shelf a column of items. The Guild Wars headings stay inside the window. Books stopped offering Back and Next when there is nowhere to turn. The emote bar lights the emote you actually performed. A pinned vendor listings window survives travel and reloads for the town you arrive in. And the log-in screen has stopped demanding your user name in shouted capitals above a politely lettered Password, which Echondas noticed, and who also asked for the keybinding list to be sorted alphabetically, and it is.
Out in the world, three sigil plaques in Ardoris were lying flat, so half of each one sat inside its wall with the face aimed at the ceiling. The fountain in Brittany Alleys can be reached from the ground. The road siege encounters run their attack waves in public instances now instead of waiting for a private party that was never coming. A shopkeeper who had respawned would answer you and then open nothing, which also covered trainers, bankers and post office clerks. And all three butterfly chairs could not be placed anywhere in the game, on any floor, because the check for what sits underneath an item was measuring from the seat.
Seventy-five tracker issues closed. The automated tests went from eighty-nine failures back to none, and about ninety-six of those were tests that had rotted rather than anything broken in the game. A sweep of one day of logs folded roughly sixteen hundred error lines into two hundred and ninety-six distinct problems. An internal report now counts eight hundred and eleven player owned towns and how long it has been since anyone in charge of them logged in, and that one deserves a better night than this, so I will come back to it. And there is a piece of work I am not allowed to describe yet, half of which a merge had quietly removed from the branch, unnoticed until nothing would build. It has been put back. That is all you are getting.
That is Tuesday, and it was a long one. My thanks to Wishdragon, Knightrider, Ceal, Allium, Echondas, Vesper, Alley, Rinaldi and Gravidy, who reported things carefully and got them fixed for everyone. What I am looking forward to is somebody placing a dragon totem in a dungeon they built with their own hands, watching a dragon arrive that fits through the door, killing it, skinning it, and getting paid for it, with nothing whatsoever remarkable about any of that.
And I have been sitting on this since yesterday afternoon, so brace yourselves. We spent a full day cutting those dragons down to a fifth of their size, and the truth is that their height was never really the problem. The problem was that they were massively overscaled. Good night, and mind your ceilings.