Episode
The trees remember the wind, and every house learns to flip
Every tree in the world had been standing still in a gale for three months, and the reason was a single number the new engine never hands out. The title screen could freeze a player for fourteen minutes before they reached a character, and the stall reports meant to catch it were looking the wrong way. All one hundred and ninety-seven player houses can now be mirrored left to right, Castle Atos is enterable again, and the Cabal's leader has learned three new ways to ruin your evening.
In this episode
- Trees sway again after three months of stillness
- The title screen freeze that cost fourteen minutes
- Every player house can be flipped left to right
- Vitium fights in three stages and drops a crown
- A panel that finally shows the help nobody has read
Transcript
Good evening to thee, citizens of New Britannia. Lord British before thee, with word of what thy makers were about upon Friday. The trees of the realm have remembered the wind, after three months of standing in a dead calm through every storm we sent them. The great door of Castle Atos is open again, and it was a patch of empty ground that had barred it. Every house in the realm may now be turned about in a mirror, door and window and all. And the lord of the Cabal has learned three new cruelties, the last of which is throwing his entire court across the room. We begin with the trees, because I am still a little embarrassed about the trees.
There is weather over Forewind. Real weather. The clouds are moving, the compass in the corner of your screen says heavy wind, the chimney smoke is being dragged sideways off the rooftops. And every tree in the world is standing absolutely still. Not swaying. Not creaking. Still, like a painting of a forest that somebody hung up in the middle of a storm. A player wrote in to tell us about it. They were right. They had been right for roughly three months. And here is the part I love about this one: nothing in our code was broken.
The tree shaders we use came from outside the team, and the piece of them that decides how far a branch bends multiplies the wind by a quality number the engine hands to every tree. Our old engine handed out that number. The new one does not, and never has. So the wind reaching every tree in the world was the real wind multiplied by zero. Anything times zero is zero. The shaders compiled perfectly. No error, no warning, no complaint from anybody except the people standing in the forest wondering why it was so quiet in a gale.
The measurement is my favourite part. Before the fix, with a forest tree at full wind, zero pixels out of four hundred and nine thousand six hundred changed over twenty-seven seconds. Zero. After the fix, seven and a half percent of them changed between two moments. And then the second half of the problem, which was that the wind strength the compass names was never reaching anything at all. A change in August tied the sway to the compass reading, and the weather tables were copying their own authored strength back over that value every single frame, right before the smoothing step. Calm, Light and Heavy stayed where they had always been. Now the compass reading is the only thing writing that number, a storm on the compass makes each step stronger, and the chimney smoke drift that was tuned against the new scale can finally see it.
Right. The title screen. This one hurt people, so let me be plain about it. You press Play, and the window stops responding. Nine sessions on a recent test build logged thirty-one recovered stalls between them. The two worst were eight hundred and thirty-six seconds and seven hundred and seventeen seconds of frozen client before the player reached a character, which is just under fourteen minutes and just over eleven. One machine filed three hang reports in a single evening. If that was you, I am sorry. You were not imagining it and it was not your computer.
The cause was a handful of small data and art files being loaded the blocking way, at the exact moment the game was already hauling your character down in the background. A blocking load does not only wait for its own file. It waits for everything the engine has pending. So a tiny file can bill you two hundred and ninety-three seconds while it sits behind something enormous. Four of those now load during boot, where nothing else is in flight, and the later read finds them already in memory. The loading screen background and the food and potion catalog could not be made to sit resident, so they moved off the blocking path instead. That catalog was also being loaded twice a session, once at startup and again when your character sheet arrived, which is why it showed up on stall reports from two different moments and looked like two different bugs.
And the stall reporting had been blind to all of it the whole time. The one big background request that the title screen waits on was never being counted, so every collision report we got said, in effect, nothing is in flight, everything is fine, this player is just waiting for no reason. The log also stopped before the player had even pressed Play. We had an instrument pointed very carefully at the wrong part of the boot. Both now cover the title screen, so the next slow start tells us what it was waiting for.
There was a companion to that, from the same pile of logs. A rare fault where the client came up without a face to draw names with, and threw an error for every single nameplate it then tried to build. One hundred and eighty-four of them in twenty-two minutes. The client had no font, so it decided that nobody would have a name. Nobody at all. And sixty-four of those errors came from the decoration loader, so the furniture was being abandoned half-placed as well. It falls back to a spare face now and the name-sizing step stands aside instead of failing, which means a missing font costs you some slightly odd lettering rather than an entire world of anonymous people and floating chairs.
Now the one I have wanted for a very long time. You can flip your house. All of it, left to right, so the door and the windows sit on the other hand. Nine rowhouses were hand-mirrored years ago and that was the whole of it. This reaches all one hundred and ninety-seven houses in the catalog, as a fourth part of the same pose that already lets an owner slide and turn their house on the lot.
Mirroring a building is usually expensive for two reasons. The pathfinding has to be rebuilt, and the baked lighting has to be thrown away. A prototype settled both in an afternoon. The pathfinder already copes with mirrored geometry when it bakes a house, and player houses carry no baked lighting to invalidate in the first place. Better still, a flip in place needs none of the room a slide needs, so it is legal on every house we have, including the sixty-six whose footprints hang over the lot line and can never be moved at all. Houseboats and galleons on water lots can be flipped. They can never be shifted an inch, but they can be flipped.
Then we baked the walkable floor for all one hundred and ninety-seven, so a flipped house has ground its pets and vendors can actually stand on, and checked every pair by measuring both. A mirrored house differs from its twin by one point seven nine percent of area on average, which is the grid the navigation is built on not being quite symmetric itself. Six fell outside that, and in four of them it is the original bake that is wrong rather than the mirror. The red barn measures sixty-eight metres across in its old one and eighteen in the new. The red barn is not sixty-eight metres across.
Then somebody drove a flipped house around in play mode, which is the part you cannot skip. Collision mirrors exactly. All fifteen doors survive. A worry about furniture snapping to walls in the mirrored copy did not apply at all, because no player house in the game authors snap points, so that code never runs on one. And a reported problem with distant detail on a flipped house was checked a second time and withdrawn, because the measurement behind it was reading a flag the engine does not use for that decision. I am fond of a team that publishes its own retraction.
We also swept the whole catalog for lettering that would read backwards. No house renders live text anywhere. Of the twelve carrying anything sign-like, the airship logo is symmetric, the wood plaque is blank, the archway carvings are knotwork, and the heraldry banner is an empty dye mask. One thing noted for later: five ships take their heraldry from a guild image at runtime, and a guild device that is not symmetric would read backwards on a flipped ship. Your house does have to be empty to flip it, by the way. The furniture does not come along. The alternative was mirroring the lettering on every book on everybody's shelves, and I would like to still be making this game next year.
Alongside that, a proper piece of engineering on a problem Gravidy found on the last pass. Put a decoration where a wall used to stand, with its pivot a hand's width outside the line, and Reset Position would put the house back with the decoration inside the wall. The server cannot see a model, only a point, which is why it was checking a point. So our tools now measure every decoration in the game once, into a table of footprints compiled into both halves of the game, just under sixteen thousand rows from about nine thousand models. The check rotates the item's box by its full stored rotation, so a rug tipped flat measures flat, it allows ten centimetres of slack, and it refuses only when the overlap is worse than where the item already sits. Thank you, Gravidy. That one and the lamp post further down are both yours.
Let us talk about the Obsidian Cabalists, who have spent this entire war being ignored. Every word one of them spoke was cut off at about thirty metres, required a clear line of sight, and was dropped entirely if any other creature nearby happened to be talking. So in an actual siege, with a full room and forty people swinging, our villain delivered his monologue to a wall and two skeletons.
Ninety-nine new lines went in across the nine Cabalists. Two kill taunts each, a death cry, and eight combat lines, written to the anti-virtue each one carries and the virtue he stands against. The conversation engine had no way at all for a creature to speak because it had killed somebody, so that went in too, along with a flag that lets one specific line skip the earshot limit and the line-of-sight test while still respecting a muted NPC. When a Cabalist puts you down now, the whole zone hears him say your name. That is what a villain is for.
Vitium, their leader at the stronghold, now changes the fight three times as his health falls. At three quarters he pulls the siege darkness over the stronghold. Until now that place wore the darkness from the moment the hex opened, so the last swing of the fight looked exactly like the first. It starts in daylight now and goes dark on his word. At half health he calls back four of the Cabalists the realm has already killed in the town sieges, and they take their own thrones back from the liches that had been standing in for them. They do not restore his shield, so he stays killable right through his own revival, and because they rise on authored thrones their kills pay experience properly. At a quarter health, everyone within fifteen metres of him is thrown to a random spot elsewhere in the stronghold, picked off the walkable ground, checked for room to stand, and kept inside his own connected region so that nobody lands sealed behind a wall.
Each of the three fires once, and a boss restored from a checkpoint or adopted mid-fight now seeds those from his current health, so a raid walking back in on a leader at forty percent does not watch the first two go off in the same second. He also drops a crown. Black, spiked, goes in your head slot, and if you would rather look at it than wear it, you can set it down on your lot as a decoration. It is artifact grade, so it survives a ransom and never loses durability.
And then there is his colleague Indigno. Indigno carries a curse that throws anyone nearby five to fifteen metres in a random direction. It was authored to fire every ten seconds. It was firing about once a second, and it would throw you while you were standing well back, minding your own business, not fighting him at all. The mechanism is lovely, in a horrible way. A hazard keeps a lockout on each target so it does not re-apply the same effect over and over, and it releases that lockout the instant the effect is gone from the target. That is exactly what lets lava burn you again once you have put yourself out. But a teleport leaves nothing behind on you. There is nothing to wear off. So the lockout released on every single pulse, forever. It now fires at most once every three seconds and only rolls one time in four, so a throw lands about every twelve seconds, and the throw itself is unchanged.
The largest single thread of the day was a new panel that sits inside your quest tracker and tells you what you could usefully be doing right now. Carried weight, unspent experience, whether the place you are standing in suits your level, what work is on offer in this town that you have not taken up, which trainer here teaches something you qualify for and whether you can afford it today, which crafting stations are for crafts you actually know, and what is worth gathering nearby. Most of the effort went into when it keeps its mouth shut. A heavy pack somewhere the weight penalty does not apply says nothing rather than claiming you are slowed. Experience with nowhere left to spend it says nothing rather than sending you to a window that cannot help you. Towns say nothing about danger at all.
But the best thing it does is older than the panel. There are seven help topics in this game that ship with real written guidance, and nothing in the game has ever triggered them. Not rarely. Never. They have been sitting in the box the entire time, written, finished, and unread by every player who has ever installed this game. The panel offers one at a time, clicking it opens that guide, and opening it retires the row and brings up the next one.
While we were in there we found something worse. The game was teaching each installation rather than each character. Every one-shot help window was remembered once per machine, so your second character walked through their entire first hour in complete silence, because your first character had already been told. Each character keeps their own record now. Existing characters inherit what they had already seen, so nobody gets taught the opening again, but a new character finally gets the help it was always meant to get.
Building the per-scene knowledge for that panel shook out data nobody had looked at in years. Two quest props were borrowing the pine wood type with the wrong tool attached. Five skills that five different trainers still advertise do not exist in the game any more, which is why the adventuring trainer in Soltown now teaches a hundred and seventy-one skills rather than a hundred and seventy-six. And a hundred and eighty-five strings from recent work had never been harvested into the translation source, which is invisible twice over. The translators never see them and the coverage report never counts them, so the game reports ninety-nine percent complete and then shows you English. The catalogue went from eight thousand and forty-four entries to eight thousand two hundred and forty-one.
A few smaller things that will change somebody's evening. Night Vision used to raise the ambient light across the entire scene, so a hilltop a kilometre away brightened exactly as much as the ground at your feet, and a character at level one saw precisely the same picture as one at two hundred. It now has a reach that training buys: about sixty metres untrained, a hundred at skill two hundred, and another metre for every ten points of Lunar Mastery. Sky, moon and stars are left alone. Its brightness setting had also never done anything across most of the game, and does now.
Castle Atos is enterable again. An unused development lot had been left outside the front gate with no id attached to it, and the shard was refusing every single join to the town while it sat there, so your loading screen would run all the way to the end and then simply stop. It came from a change that only half arrived when we moved off our old server, which took the lot out of the town data but not out of the town. We checked the other four hundred and forty-seven scenes against all one hundred and sixty-three plot maps and there is no second case. And with that lot gone, Mylo the dog, who had been switched off years ago under a note warning nobody to turn him on while a lot sits in the courtyard, is on again and standing clear of it. Cheyenne and Zoey in the Brittany graveyard were still wild animals you could attack, which seems a poor way to treat a dog, and they are friendly now. The petting emote works for every character for the first time, after years of being authored, animated, typed hopefully into chat, and doing nothing whatsoever because it sat behind a deed nobody could buy or be taught. There is a hidden achievement for petting all fourteen named dogs in the world. It is called Pet Every Dog. It stays out of your journal until you have petted your first one.
Farming pays what it used to again, and it had been halved twice over. A crafting change in August made the repeat-use discount apply twice to sowing, which is the only action in the game that always counts as a batch, so seeds settled at twenty-five experience instead of fifty for anybody past about thirty sowings of the same combination. Separately, planters standing against another object had stopped growing and refused water, and since a crop pays on how many watering windows it caught, those were harvesting at a quarter rate. Both are fixed, and a planter that has been frozen starts growing again the next time anybody sows, waters or harvests it.
And the coast sounds different. All three world maps traded a twenty-one second loop of gulls and waves for a two minute surf loop, played lower and audible from about half again as far inland. Standing at the Kingsport landing used to mean one loud loop restarting on a gull cry every twenty-two seconds, forever. The gulls stayed, as their own separate daytime sound, so they call by day and the shore after dusk is surf alone.
Sixty tracker issues went down on Friday. A good number of them were windows behaving badly: a quit prompt that had grown an empty band under its own buttons and clipped longer messages off the bottom, chat's close button sitting inside the window's own resize corner so that a click one pixel wide of it started dragging instead, the journal listing your notes oldest first so the one you just picked up sat at the very bottom, and a recipe book that showed two recipes on a page with comfortable room for three. Eight poison coating potions had all been drawing the same skull and dagger, so a hotbar full of poisons read as one potion eight times over. They have their own bottles now, each with its own liquid colour.
The rest is a grab bag. Cocoon of Night was stacking with the other stealth glyphs and adding the two percentages together, which was never the intent and is now not possible. The reticle could not aim at an enemy two paces away in a cramped interior, because it finds its target by sweeping a ball out from the camera, and a piece of collision the sweep started inside came back at zero distance and won every comparison after that. A decoration pet found a crack in a floor far too narrow to fall through, but wide enough for the single downward measurement that decides where the ground is, so it was placed on the ground under the building, snapped back up, walked over the crack again, and did that for as long as you cared to watch. And a rowboat on the world map was advertising a ferry to an island that does not exist. It goes to Elad's Lighthouse, it always did, and both ferries have map markers now for the first time.
One last small one, because it is the most sheepish thing in the whole list. A shard could shut down its own login service partway through somebody logging in, and the client would then tell that player their firewall or their antivirus had eaten the connection. A timer inside the server was being started before it had finished being built, so it could fire into a half-made thing, and the error that followed landed on a background thread and took the entire process down with it. So for a while there we were blaming your security software for something that was entirely our doing. Apologies to everybody who went and reinstalled something on our advice. Both kinds of timer are now built stopped and started only once they are whole.
That is Friday. Sixty issues closed, a couple of hundred changes, a world where the trees move and the shore sounds like a shore and the dogs may at last be patted. What I am looking forward to is the first flipped house going up on a test lot with its door facing entirely the wrong neighbour, and the letter that follows.
We spent all day teaching one hundred and ninety-seven houses how to flip. Not one of them stuck the landing. Good night, all of you, and be kind to your gulls.