Episode
Offline play returns and the Mac build stops downloading itself twice
Offline single player is playable again, and it no longer asks for an account, a password or an internet connection. The Mac client had been shipping a second copy of the whole game since the fifteenth of September, and four new checks now stand between a build and that mistake. Player vendors speak for the first time, the Oracle learned which shopkeeper in which town stocks what you want, and buy orders on a player vendor can be filled a few at a time.
In this episode
- Offline single player is playable again
- The Mac client shipped a second copy of itself
- Player vendors have voices now
- The Oracle knows where to buy things
- Buy orders can be filled a few at a time
Transcript
Good evening to thee, citizens of New Britannia. Lord British before thee, with word of what thy makers were about on Thursday. Offline play is restored, and it asks thee for neither account nor password nor any connection to the wider world. Those of thee upon the Macintosh have been hauling down this whole world twice over, and that is mended. The vendors in thy markets have found their voices at last. And the Oracle can now name which shop in which town holds the thing thou seekest. A great deal to speak of. We shall begin, as is proper, with a ghost and his luggage.
Here is how death worked in this game right up until yesterday. You are killed. Your body is on the ground somewhere behind you. You are now a spirit, a weightless thing made of regret and a faint blue glow, and you are walking to the ankh at an absolute crawl, because your backpack is too heavy. That is real. The over-encumbrance penalty that slows you down when you are carrying too much stayed switched on after you died, and so did the dexterity hit that comes with it. A ghost does not have a backpack. The ghost was being charged for one anyway. Both of those lift now when you die, and come back when you are raised.
Right. The big one. Offline single player is playable again.
I want to be careful how I say this, because the feature itself has been finished for years. When you play offline, the client compiles a copy of the server's own gameplay code and runs the whole rule set on your own machine. The offline rules are the online rules. The offline-only merchants, the difficulty settings, the companion roster, all of it sits on top of that. It is a real, complete thing. And three separate walls stood between that thing and a player actually reaching it.
The first wall was the button. Play Offline on the main menu has been switched off in every build we have shipped since the middle of August. Not hidden. Just dead. A change went in that month whose own description called it a one-line revert, and one of the lines it reverted was the one that let you press the button.
The second wall is the one I find funniest and least defensible. If you did reach offline play, it asked you for your account name and your password, or a sign-in through Steam, and then made two calls out to our website before it would show you your characters.
Offline play. Which needed an account, and a working connection to the internet, and our website to be having a good day. That is all gone. The menu now shows you the connecting plate while your local save wakes up, and then takes you to the agreements and your characters. No account. No password. No network.
And the third wall was the paperwork. The agreements offline play showed you were the online ones, whose licence grant is written around using the online service, and whose terms are a pledge and payment agreement. Neither of those describes a person playing Episode One on their own computer for free. There is a proper offline licence and terms now, and they say what is actually true. Episode One in offline single player is free, there is nothing to buy, and there is no account to register.
Then there was the load that stopped. A number of you have described the same thing, where offline starts up and the bar creeps to near the end and then simply stays there forever. That was a character whose combat decks would not read. The part that loads your decks hit the failure, wrote a line about it, and returned without ever telling the rest of the load that it had finished. So the load sat there politely waiting for a report that was never coming. Four other pieces of character data could have done exactly the same thing, and now none of them can. While we were in there, an offline save that failed one of its sixteen upgrade steps used to skip every step after it, permanently. Each step stands on its own now and names itself if it falls over. And Claim Rewards, the one corner of offline play that still talks to the internet, has a forty-five second timeout that has been written into the code for years and was never once applied, so a request to a host that was not answering waited until the end of time. It applies now.
Now the one that makes me wince. If you play on a Mac, you have been downloading this game twice.
From the fifteenth of September, the Mac client published at twenty-four point nine gigabytes, while Windows and Linux published at about twelve point three. The extra twelve and a half gigabytes were eight hundred and fifty-nine files, and every single one of them duplicated a file already sitting in the build. It was a clone of the whole application, left behind on the Mac build machine during our Developer ID signing work, and left in the folder that gets packaged up and shipped to you. That folder never gets wiped between builds. So the same stray copy, under the same nonsense temporary name, got packaged and published three times running. About a hundred and ten of those files were stale on top of it, frozen from a build before the one you were downloading.
And here is the part that stings. No job went red. Nothing failed. The packaging step was set to ignore backup folders and debug symbol folders, and it did that faithfully. Our security pass scans the channels for backup folders and debug symbols, and it found none, correctly. Not one thing anywhere in that pipeline ever asked the simplest question available, which is whether this build is roughly the same size as the last one.
The stray copy is deleted, so the next Mac build drops back to about twelve and a half gigabytes, and the launcher takes the extra folder out of your existing install as part of that patch. Windows and Linux were never affected. There are four new guards now. Packaging sweeps its own scratch out of the build folder and stops the build on anything else it finds loitering there. The Mac signing step checks afterward that its own working copy is gone, because the cleanup it relied on does not run when the build system kills the step, which is precisely how this one survived. Publishing refuses a tree with that kind of junk at its root. And there is now a size check that fails a release when one platform comes in more than a quarter larger than another, or when a platform grows more than ten percent over its own previous build. We ran it against the recorded sizes of the bad build and it fails on both rules. We ran it against the good build before it and it passes.
On to something much happier. Your player vendors can talk.
Open a player vendor's shop window and it greets you. Close the window and it says goodbye. Until yesterday they were completely silent, which was a strange thing to stand next to, because the town shopkeepers and merchants have been fully voiced since June. You had one stall greeting you warmly and the stall beside it staring at you like furniture.
Here is why it took work, and it is a lovely piece of engineering. A player vendor is not a person. It is a decoration you placed. It has none of the machinery that makes a character in this game able to speak, no controller, no conversation, no sound source, nothing. The only path to a spoken line in our client runs through the conversation system, and that system could never reach a vendor. So rather than bolt the entire apparatus of personhood onto thirty-five decoration models, which would have switched on six other behaviours we did not want, we keep one speaking part in the world, disabled, doing nothing, and move it to whichever vendor is currently talking. It is a puppeteer's hand. And the object it gets built from had been sitting in the project unreferenced for years, made back in an era when somebody intended player vendors to talk and never finished the thought.
The voice follows the model. Male vendor skins speak with a man's voice, female skins with a woman's. The Automaton vendor stays quiet, because a human voice coming out of a clockwork would read as a bug rather than a feature. And a vendor with nothing listed for a fortnight stays quiet too, which matches the grey nameplate it already wears. The greetings reuse shopkeeper lines we had already recorded, so this added no new audio at all. There is a switch for it under Options, Audio, called Player Vendor Voices, kept separate from the NPC dialogue setting, so you can have your quest conversations without a market row of stalls all saying hello to you at once.
The Oracle learned where to buy things. This is one where the honest answer used to be embarrassing. If you asked her where to get something, she had no record of what any shopkeeper in the world stocks, so the best she could offer was a shrug and a suggestion to try another town.
All the information needed to answer that was already in the project, just never joined together. So we joined it. Three hundred and sixty shopkeepers, across sixty-four towns, one thousand eight hundred and thirty-nine distinct items, and sixteen thousand four hundred and fifty-seven shopkeeper-and-item pairings. She answers in three directions now. Name an item and she tells you who sells it. Name a town and she gives you its roster. Name a shopkeeper and she tells you what is on their shelves.
Before we let her state any of that as fact, we checked whether shop stock actually holds still. It does. Across every stock list a merchant can reach, nothing has a chance of not appearing, nothing has a weighted alternative, and nothing is filtered by season. Only the quantity on the shelf moves. Which means a shopkeeper who does not have what you want today will not have it tomorrow either, and our guides now say so, rather than telling you to come back later like a man who will not admit he does not know.
One more piece of this, because it made me laugh. Asking for something that does not exist used to be a trap. Someone asked where to buy dragon steak. The lookup matched Tuna Steak, on the word steak, and the Oracle was under strict instruction to answer from whatever the lookup handed her. So she sent a hopeful dragon hunter to a fishmonger. A result that leaves one of your words unaccounted for now gets reported as a near miss, and she tells you plainly that nothing is listed under that name.
Now, merchants. Two changes, and they belong together.
The first is a proper sales tally, requested by belladonnarose. Your vendor sends you a letter for every sale, and until now, working out what had actually been moving meant sitting down and counting letters by hand. There is a tally now. One row per item, with copies sold, gold received, and the date of the most recent sale. Type slash mysales, or slash mysales books for just the books. It groups on the book rather than the cover, so every printed copy of one title counts together while two different player-written books stay apart. It counts only the letters still in your mailbox, and it says so in its first line, because those letters expire after about a fortnight and go immediately if you discard on Take All. A merchant restocking off a number with invisible gaps in it is worse off than one with no number at all. The same figures now have a Sales tab in the vendor window, sortable by any column.
The second is the one I think changes how your markets work. Buy orders on a player vendor can be filled a few at a time. Before yesterday, an order for a thousand mandrake could only be filled by one person handing over all thousand in a single transaction. Too few was refused. Too many was also refused. So a player with three mandrake in their pack could not touch that order, and a player with a thousand and three had to go and split the stack by hand first. Now the poster leaves accept partial fills ticked, types the price of one, and anyone can sell any number up to what the order still wants. The rest of the order stays on the vendor, waiting.
The money is the delicate part, and it runs the opposite direction from a normal listing. On a listing, the commission comes out of the seller's proceeds. On a buy order, the commission is gold the poster already put down when they posted it, so a seller is paid the full price of one for every unit they hand over, and the poster's deposit is drawn down a share at a time as the order fills. Get that backwards and you skim every seller in the game a little. The tests assert that the deposit is conserved to the exact coin across any sequence of sales. And a seller who tries to hand over more than they actually have is now told they do not have enough, where previously they were told their goods were damaged and sent off to repair items that were in perfect condition.
A handful of smaller things worth your evening.
Global chat is now readable from outside the game. There is a page on our own dev portal showing the shard's four global channels as a live transcript with searchable history, and a box for replying on the three that accept one. A line sent from that page arrives in chat under the character Herald. The first test line we sent drew two replies from players in game within a couple of minutes, which is faster than anything we have had before. Switching it on taught us two things, both funny in hindsight. A service account fresh out of our accounts tool has no character at all, and nothing short of sitting down in the game client can give it one. And an account that gets disconnected cannot sign straight back in, because the previous session has not let go of it yet, which took two failed restarts to work out. On a related note, chat lines from a game master, including Herald announcements, now draw in purple across the player channels, so an official word no longer arrives in the same grey as everybody discussing their fishing.
The Options window has a new first tab called All, which holds every setting from the other eight in one scrolling list under headings naming where each group came from, and the window opens on it. The search box already narrowed every tab at once, but you could only ever see one tab's matches at a time. Nothing on that page is a duplicate, by the way. Each tab lends the page its actual rows and takes them back afterward, so a slider you move on All reads the same on its own tab. Separately, the settings file you save from Options is plain readable text now, grouped by section, with your key bindings and chat tabs sitting in it as ordinary entries instead of one long line of escaped gibberish. That was requested by Gravidy. Your custom interface themes travel in that file too, so loading it on a new computer brings your colours, ornaments and fonts along with the rest.
Your titles list got a search box, a category dropdown, Founder and Active chips, and a sortable Category column, in both the Titles window and the character sheet tab, with a line telling you how many of your titles the filter is showing. There are fifteen categories. None of them existed anywhere in our data, so the client works each one out from the skill mastery tables, the achievement catalog and a hand-built table covering the remaining hundred and fifty. That exercise found two titles everyone assumed were quest rewards which are actually granted by achievements. It also found that the character sheet had been rescanning the entire title catalog once per title, every two seconds, on a list nobody was looking at. Several hundred lookups a second, for nothing. It builds one table now.
A pinned pet sheet survives Escape and zone changes and repaints for the pet in the new scene, which the pinned character sheet has done for a long while and the pet sheet never had. The arrow keys in the quantity prompt nudge the number on every opening now, instead of only the first one in a session. A window that a scene change hid on you, and that you never reopened, stays closed at your next login. There is a Close All Windows keybind, shipping unbound, and pinned windows survive it the same way they survive Escape. And Use Mouse To Move In Combat now works on its own, rather than doing nothing at all unless the other mouse movement option was switched on as well. That one was requested by Wishdragon.
Lightning round. Seventy-seven tracker items closed yesterday, so I shall move quickly and in groups.
The art pass was mostly things being the wrong resolution or the wrong colour. Scots pine and Blue Spruce bark in Solace Bridge Outskirts had been loading blurry next to perfectly sharp oaks. The magic mirror on the Isle of Storms now answers a click anywhere on its face, where its clickable area used to be a sphere floating above it, leaving the bottom third of a three-metre mirror completely unresponsive. And the sky has stopped flashing white streaks at noon, because a second shooting-star emitter was firing without checking the time of day, which is a bold thing to attempt in broad daylight.
On the combat and pet side, Immolation damages practice dummies again, the rule that stops a follow-you aura from picking fights with neutral farm animals having been refusing the dummies along with the chickens. Summoned elementals have stopped wearing down the collar, toy and accessory belonging to your actual tamed pets, which they had no business touching. Rainbow Blast blooms centred on the caster instead of a metre off to their right. A Chaotic Clone summoned while you wear a size-changing artifact now matches your size, so your decoy has stopped giving itself away by standing beside you at the wrong height. And the siege Cabalist walks to his shrine and paces around it whether or not anyone is close enough to watch.
Elsewhere, three lines in Spanish and Italian had been printing raw markup instead of a sentence, because a masculine and feminine choice had been attached to a number and the text system has no way to answer that. Those are corrected, an audit of all eight translated languages found a hundred and eighteen of those markers in use with three of them wrong, and the formatter now falls back to sensible wording instead of giving up on the whole line. The zone load freeze is still with us, and it went up rather than down on the current test build, so every step of that load now names itself in the log, because the previous fix took away the one line that said what the client was stuck on. The last of our old content server is finally across, a hundred and fifty-six changelists landing as ninety-six commits, and that import caught a rename that was quietly undoing a fix made over here, which would have turned twenty-two decorating surfaces in player dungeons back into invisible walls. And our backup machine came home from an outage with one of its two mirror drives dead and nothing anywhere saying so, because the monitor was faithfully mailing its alerts to an address on a box with no mail delivery. It reports drive health on the main status line now.
That is Thursday. I am looking forward to the first evening when a whole market row of player vendors greets someone at once, and I am looking forward rather more to hearing from those of you who go and play this game offline, on a train, in a cabin, with no connection at all, which has been possible in principle for years and possible in practice since yesterday.
And to close. The Simple Wooden Wine Crate has been placing as a bright purple box, because the material it pointed at never existed in the project and our engine draws that in shocking pink. It is proper wood now. Which means that after all these years, we have finally got that crate to stop whining. Goodnight, my friends. Sleep well.