No Feature Friday last week, and no Technical Tuesday either. Both went into getting the playtest ready, which is the first thing to cover.
The playtest is open!!
Anyone can sign up. There's no application, no form, and nothing to write.
Access goes out in batches drawn at random from everyone waiting. I'm growing that pool slowly rather than letting everyone in at once, because a hundred people hitting a bug I can actually fix is worth more than a thousand hitting it while I'm still reading the first report. If you don't make the first batch you stay in for the next one. Nobody needs to sign up twice.
The tavern stopped selling tips
A barrel of beer is 34.8 gold. A trade tip is worth thousands. No single price was ever going to be honest about both, which is why buying the same fact twice felt so mechanical.
Standing a round costs 25 gold, once a day per town, and what it buys is a place in the room. Welcome is counted in rounds stood per city and decays while you're away. The landlord gives up more of the same arrangement the better he knows you: first the ware, then the port that wants it, then the money. Standing in town seats you nearer the fire before you've bought anything, though never all the way.
It arrives as talk overheard rather than a briefing. A landlord grumbling that three men have come in asking after the stuff. A clerk from another port sat in the corner all evening, marking down what came off which hull. Not drinking. Marking. Some of it asks for a moment's inference, and about one reading in eight somebody is past caring what he says and the whole thing spills at once, ware, price, port and the sum on a full hold.
The dice table got the same treatment. Stakes now scale to your purse rather than a flat 100-gold cap, there are long odds alongside even money, and a throw is held for a second or two while the dice tumble instead of resolving before they've moved.
Windows that hid what the engine already knew
This turned out to be the same fault in five different places. The figure existed. Nothing printed it. All five now show it.
Money Lender sized your borrowing cap from your total debt, then never showed you the debt. Loans came one at a time, so the sum, the interest running and the headroom left were all yours to add up in your head, on the one page in the game where those three numbers are the entire decision.
Church runs a timed blessing and a grace period that files a real heresy charge when it expires, and displayed neither, so the Pray button simply failed with no reason given.
Guild couldn't name its own admission fee, because the fee lived in the handler where the window couldn't reach it.
Market square called your provisions "sorely lacking" without naming a single ware, and never said what goodwill the feast would buy. There's a proper larder list now.
Competitors' Office was a list of bare names, so learning anything about a rival meant opening every one of them in turn. Rank, company worth and the city's regard are on the row now.
Factories had the same problem in miniature. "No workers assigned, set a worker count above" is correct for exactly one of four possible causes, and a newly built factory already asks for its full complement, so you'd follow the advice, nothing would happen, and the game looked broken. It names the actual reason now, whether that's nobody unemployed in town, no housing for a recruit, your standing being too low, or simply hiring already underway.
Things that didn't behave like controls
Four rows you click constantly were panels with a handler bolted on, which is invisible as a control: no cursor change, no hover, unreachable from the keyboard, and silent when clicked, because the sound system finds buttons by walking the tree and never found these. They're proper buttons now. The shipyard berths were worse still, built inside a bare Button, which never measures its children, so the hull name and condition spilled straight out of the row.
Alongside those: saves load on double-click, right-clicking a port your ship is already lying in opens the market from the water again, and every greyed-out button now says why it's dead. Grey with no explanation is indistinguishable from broken.
Reading the market
The columns didn't line up. Then they lined up until the first week's supply figures arrived, and went crooked again. The pips were coming from a fallback font, four of them measuring 52px inside a 50px column, and a label reports its own width as a minimum size, so a full row shoved everything to its right out of place. They're drawn rather than typed now, which also explains the follow-up report that the empty pips looked bigger than the full ones. They were. Both are fixed.
Pip colour was comparing against a fixed base price, which painted the entire board amber and red on the harder difficulties, where thinner background supply parks every town above base anyway. It compares against a world median ask now, so the colour actually distinguishes a cheap town from a picked-over one.
Ten barrels now visibly come out of a crate at the moment you buy one, so "Cargo 12" and a hold reading "120 / 450" stop being two unrelated numbers. Two attempts at explaining that with a small diagram on every row got built and binned, because twenty rows of the same drawing with two possible values reads as texture and the eye skips it.
"+9% fortune for 5 days" is gone. The formula isn't on screen, so the precision was fake and only invited arithmetic you can't actually do. Money, prices, fees and dates you have to sail to stay exact.
Bug of the week: the factory nobody could ever staff
You build a factory. It asks for forty workers. It gets none. You check the worker slider, which is already at maximum. You wait. You come back a season later and it still has none.
The hiring system recruits out of the town's beggar pool, which is the correct model and matches how the original game did it. The problem is that nothing in Argosy ever created a beggar. The shipped maps declare a beggar population of zero, and the only code touching that class drained it. So the pool started empty, stayed empty, and every factory in the game was drawing from it.
A full-map run confirmed the scale of it: a player factory sat at 0 of 40 workers after three simulated years, and all 24 towns read zero beggars from day one. The feature had never worked, for anybody, at any point.
Fixing it properly meant going back and recovering the actual model rather than inventing one. The beggar count isn't an influx rate, it's a target the town converges toward each day, sized off population and satisfaction. Two things fall out of that shape. A town with poor satisfaction has almost no hireable workforce however large it is, so an undersupplied city can't staff anything. And because the relationship is a square root, four times the population buys only twice the labour, so a metropolis can't casually crew every works in town.
For numbers: a 2,650-soul town filling a 40-worker factory takes 8 days at satisfaction 0.75, 23 days at 0.35, and 40 days at 0.25.
While in there, the same audit found that a player-built house could never take a tenant either. Occupancy filled municipal dwellings first and gave players whatever was left over, and towns are seeded with spare municipal capacity by design, so the remainder was structurally zero. An owned cottage sat at 0 of 280 while 556 places stood empty across the town. Both features had shipped, and neither had ever done anything. Both work now.
Other fixes and improvements
Every delivery notice was a guaranteed loss. You buy the cargo, it's consumed on arrival, and the purse was a fraction of what you paid. The reported case cost 72,600 and paid out 36,307. They pay properly now.
Pirate bounties paid whoever happened to be nearby. An 11,000-gold raider bounty went to a player whose ships never left port, because a pirate leaves the game the instant its last hull sinks and three separate payers read "gone" as "you killed it". The kill is recorded now, so the gold goes to whoever actually did it.
Hiring a captain hired somebody else. The command carried no captain id, so picking the five-star navigator got you whichever entry the list enumerated first.
The dice returned the same result for every throw in a tick, whatever the stake, which is why one player reported neither winning nor losing anything across 200 games.
AI ships oscillated in and out of harbour. A departing ship keeps the port's position for its whole departure epoch, so anything searching for the nearest city sent it straight back in. That's the 40-ship pile-up from the report.
Formations sailed up rivers they can't enter. Fixed, with one honest consequence: a ship that could previously only reach somewhere via a river now strands instead. That's the one voyage that used to succeed and no longer does.
Exported maps were cropped at the last land vertex, so open sea past the final island silently vanished. Both shipped maps were affected, one losing 254 world units off its right edge. The author's canvas travels with the map now.
Deleting a save or a map fired on the first click, sitting right next to Load, with no confirmation. There's a confirmation now.
Text size is now its own setting, 85% to 160%, separate from UI scale, which grows the panels and art along with the letters and runs you out of screen at 1080p.
The off-centre, borderless window some of you saw at launch was graphics settings only being applied as a side effect of opening the options screen. Ultrawides also got a proper aspect picker, 5:4 through 32:9.
Performance
The stalls the game would sometimes have came from pathfinding with no budget running inside the tick, worst being a storm bypass that could sweep the open sea three times in one command. Worst frame went from 819ms to 209ms. The tick cost then halved again on top of that, mostly from work being repeated every tick that only needed doing when something changed.
The AI pass got about four times cheaper, off the back of a report titled "2801 AI are slow". On that save, 2,717 of 2,800 merchants were re-thinking on every single pass and 98% of that work produced no decision. Throughput actually went up afterward, because stuck ships had been occupying the slots that ships with something to do were waiting for.
There's more coming in that direction. An old system that was previously needed to keep AI performance in check is getting removed. I covered it in one of the previous Technical Tuesdays: only 3 AI merchants would get to think each tick. The AI pipeline is now fast enough and decoupled enough that we can drop that limit completely. Let me know if you want to know more about this one.
Ship chases also track where a ship actually is now, rather than where it was a few seconds ago.
Map Editor
Rivers were carving a chain of round bites instead of one channel, because the carver built the banks in a way that folds through itself at every tight bend. Chasing that turned up something much larger sitting behind it: the land mask was being built by testing every cell against every polygon, which on one map is 50 billion edge tests, paid on the river tool's first click and again on every coastline edit. That's now 61 seconds down to 35 milliseconds.
Every landmass in a generated map also existed twice, forwards and backwards, because the contour extractor threw away which direction its segments ran. Two shipped maps had every polygon duplicated. That's now fixed.
Maps now live in one folder each, so the source, routes, decorations and paint masks travel and delete together. Image export is tiled, holding memory flat regardless of picture size. And roughly 2,400 decorations were finally filed correctly, including 465 "people" sprites who had been sitting in the Animals category.
Still rough
The barrel and Load explanation has shipped twice and been pulled back twice, and the current version may still be wrong. The housing numbers above come from one reported town and may not survive a 155-city map. And Overland Trade has no door at the moment, deliberately, until it gets a proper home rather than a row jammed into a header that didn't fit it.
Join the Discord
Playtest access, early screenshots, and the fastest route to having your feedback reach the build.
More next Friday.
