What changed, and when
The rest of this manual describes the game as it is now. This file is the only place that remembers what it used to be.
Version is the commit count. alpha 0.140 is the 140th commit on main.
There is no release cycle yet; the number goes up when work lands.
The game only. This is a record of what changed for someone playing, so it
describes server and client and nothing else. Plenty of commits touch the
overseer, the playtest harness, shared or the manual itself; where one of
those also changed the game, only the game half is written down here. Entries
that described tooling were removed once that rule was settled, which is why a
few version numbers have no entry of their own.
Oldest first. New entries go at the bottom, so writing one is an append.
Hashes are given so anything here can be read in full with git show <hash> —
a commit will often contain more than the entry beside it describes.
alpha 0.1–0.7 — a world to stand in (March)
6ed3711 set up the client, 5282c47 gave it a world, movement and character
creation. Everything below is built on those two.
alpha 0.8–0.14 — fighting, and what fighting costs (March)
85cda6fencounters: joining, submitting an action, and a turn that resolves for everyone at once.b2303dadeath has a reason, and the character sheet says what it was. Techniques become manageable.761ab64a battle log, grouped so a turn reads as one event rather than six lines. Items become usable from inside a fight.6ed1035equipment starts mattering: a combat snapshot is calculated from what you are wearing, and the battle manager reads it.b9c60b5levelling up — points to spend, a rest button in a Meditation Sanctum, and a place for drops that would not fit in your pack.
alpha 0.15–0.22 — the map becomes a place (March–June)
e784d78a Meditation Sanctum can be seen before you are standing in it.89d9aaethe first written description of how any of this works.56b1e3b,deaa9ac,c6dff7ethe intro, and the map redrawn in Pixi.f234e45the camera starts on the player instead of finding them later.
alpha 0.29–0.32 — factions (July)
66482dc,6c4cd0cfactions exist: found one, join one, hold ground.b63c0a3movement is tracked in Redis, so two players can be in the same place at the same time and both know it.664bfc3raids, treaties, invitations and presence — the loop that turns two factions meeting into a war.
alpha 0.33–0.42 — loot, sockets and stashes (30 August)
a3c0e89a monster's attacks are priced by magnitude, the way a player's are. Density costs the same whichever way it points.1431808a socket matches on how much affinity a shard carries, not merely which kind.2c523bfan individual item can carry its own socket rules.4f4a9c7arms contribute density to a weapon's damage.a63eebdstarter gear that exists only to hold a shard — the pieces you find in your first hour.2e1781ca drop's affinity is rolled from the tile as well as the corpse, so where you kill something matters.d1286da,ef8d455the faction stash network, and rooms seeded with loot worth walking to.
alpha 0.44–0.52 — the game learns to explain itself (1 September)
A long list of things the game knew and never said. Most of this day is that list.
220c0afthe turn timer becomes configurable.678288efights and stashes become legible, and presence stops reporting players who had logged out.3118493a trip cancels the step it interrupted — stumbling and moving anyway is not stumbling.b270772every action is gated on death, not only movement.46b69d9attacks land, status tells the truth, presence stops shouting.563b79e,7a1b54fa malformed payload can no longer take the server down.
alpha 0.53–0.75 — saying what happened (1 September)
2add644the fight tells you how it ended.2ece2c2,9afe1a0,b6cb023the numbers every decision turns on, what each stat buys, and that reflex defends as well as attacks.01a44b8the experience the game was already paying is finally shown.d97593ea foe's numbers, and what the fight paid out.f88bea1you are told when a drop lands in your pack.2406f7ca turn spent on nothing says so out loud.455ac83,93ed1af,ac6b614deciding is what spends a turn; a turn that has not settled says so; a submission racing the clock is named as such.f2c3ee9,03e78a2,68e5d66rooms are drawn as themselves and listed with their distances, found by shape rather than by name.24dc3c9the damage arithmetic is written down, because composition is the real lever, not stats.
alpha 0.76–0.95 — monsters, items and money (1 September)
b7e4126a monster that cannot land a hit gives up and leaves.36a4c5ca monster that flees still pays for the fight it lost.70d7a25a wounded monster limps when it tries to run.0ccb791a monster's giving-up is counted from what it landed, not what you did.6e05126the log says which side left the fight.b1f56eesector-0 monsters pay out starter cloth and a weapon, so a first hour can end with something to wear.77db701a drop table honours the tables it refers to.3716923,d07388fan item's effect belongs to the item that was used, and healing stops at the ceiling instead of being wasted.c95d3d5currency stops being drinkable.12bb698a bad item id is a refusal, not an outage.23ebdf5a move that never answers still says what happened.46c6ea3a faction change is announced, not merely answered.
alpha 0.96 — duels (1 September)
452d4f5 players can fight each other: an ambush from the next tile, or a
request on the same one. Death is permanent for both.
alpha 0.128–0.131 — three playtests, and what they broke (2 September)
45123eca character could stay mapped to a fight that no longer existed, which refused everything it did afterwards.945fa08items, PvP openings and faction membership, corrected together.57fd8a3a shoulder slot, the first territory overlay, andtripped_on_rockcut from 1-in-100 steps to 1-in-5000 — at the old rate a 33-tile walk tripped you 28% of the time.
alpha 0.139 — borders, decay, and a slower world (2 September)
1e6836e.
- Every faction's territory is drawn, not only your own: rival ground, allied ground, and contested tiles, each with its own mark, each faction in its own colour. Territory used to be sent only to the faction holding it, so two factions could grow into contact, be pulled into the automatic fights that contact causes, and neither could see the line they were fighting over.
- A faction nobody has played in a week gives its ground back, a tile at a time, down to its headquarters and no further, and is marked as decaying on everybody's map.
- Encounters are rarer — roughly one fight every fifteen to twenty steps, down from one in ten.
- Walking costs stamina, about a point every ten steps. It used to be a point every three hundred, which made the one cost this manual named the one cost that did not exist.
- A duel pays experience and spoils; faction membership is by invitation and the invitations actually arrive; growth announces what it took from the pool; two combat actions landing together can no longer lose one; vitals cannot fall below zero.
alpha 0.140 — graves (2 September)
f693fcb.
A character that dies leaves a grave where it fell, and everybody can see it. Pray at one for 10 health and 10 stamina — the grave gives once every half hour, to whoever gets there first — or desecrate it, which takes the marker away for everybody, gains you nothing, and sometimes wakes what is buried there. A woken character comes back as a ghost with its own stats, level and techniques, fights like any monster, and hands over everything it still owned.
See Graves.
alpha 0.142 — a ghost you do not put down goes back to rest (2 September)
The first playtest of graves found the hole in them. A ghost is a player build, so it is roughly twice the threat of anything wandering the same sector, and none of that is knowable until the fight starts — and the grave was destroyed whether you won, lost or ran. One attempt, at a difficulty you cannot see, and losing your nerve spent it.
Now a ghost still standing when the fight ends returns to its grave, and the marker comes back for everybody. Desecration only sticks when somebody finishes it, so a grave can be left alone and come back to later.
That makes several graves on one tile ordinary — the one you failed to put down, and your own if the ghost finished the argument. You name the one you mean, and the game says who is actually there if you get it wrong; the graphical client gives each grave its own pair of buttons. Left unnamed, praying takes the first with anything left to give and desecrating takes the oldest, saying whose it was.
Graves are also retroactive: every character that died before graves existed now has one, at the last position the world recorded for it.
alpha 0.146 — the game stops contradicting itself (8 September)
Ten characters played one world for ninety minutes and filed 239 reports. Nearly all of them were two parts of this game describing the same thing differently.
Fights could come back from the dead. A fight that had announced itself won was re-created by an action still in flight, replayed its last four turns, and paid one player twice for the same kill. Its tile stayed occupied, and three minutes later a passer-by walked onto that square and inherited a fight nobody was in. A turn could also resolve twice, twelve seconds apart, with two different accounts of what happened.
A silence is no longer a refusal. Drinking a Minor Recovery Vial mid-fight was reported as refused after five seconds, landed after fourteen, and the retry destroyed the only other vial that character had. An answer that never came now says so, and says it in different words from a refusal.
The dead stopped haunting the map. Characters who had disconnected — one of them eight days earlier — were still standing in the world, visible to everyone and impossible to interact with. Presence now has to be kept alive rather than switched off.
Socketing a shard could make you weaker. A kinetic or cohesion shard in your head, torso or legs was adding 2% to the damage you took, per point, and no shard existed that would do the reverse. Those two now protect you, as the manual always claimed. Caloric and density were right and are unchanged: they are poles, so you armour yourself in the opposite of what you expect to face — wear the cold shard to survive the fire, which the manual now says.
A socket only ever offers what its slot can use. Feet and shoulders take kinetic, arms take density; there is no longer such a thing as a socket that accepts a shard and changes no number. Equipment found on a corpse rolls its sockets the same way equipment found in a cache always did.
Storage rooms open in negative sectors. Every stash north or west of the centre had been refusing to open since they existed, with an error message written for a programmer.
Leaving a faction tells you. Seven characters spent a run believing they led factions the game had already removed them from, because nothing was ever sent to say otherwise.
The manual changed with all of it, and two of its promises were simply wrong before today: it described socketed resistance backwards, and it called a shard that a socket refuses "inert", as though it would go in and do nothing. It also now says plainly that leaving the middle sector is expected rather than merely allowed, that monsters arrive in groups the further out you go, and that two players can fight one together without a faction between them.
alpha 0.154–0.161 — the game stops naming the wrong monster (8 September)
An ambush named a species that never turned up. "A Wild Minotaur Remnant blocks your path!" over a Thread Reader; "A Wild Bloom Oracle blocks your path!" — level 1, one strength — over a Rootbound Giant on 100 health with four. The announcement and the fight were rolled separately. Players pick their affinity by reading resistances off that card, so naming the wrong species handed them the wrong resistance table before they could commit. The announcement now names the monsters that actually spawn, and carries the real identifier of the fight it is announcing rather than one belonging to nothing.
A fight no longer stops for one player's paperwork. Choosing a technique made two database lookups while holding the fight open, with every other player's turn queued behind them. With five players one attack took six and a half seconds to be acknowledged — accepted and counted, but so late that two characters were told they had lost a turn the server had taken. Those lookups are about your gear rather than about the fight, and they no longer hold anybody up.
A walk interrupted by an escape carries on. Breaking away from a fight shoves you a tile, and a walk planned a moment earlier is then one tile out of date at every step. It used to give up. It now replans from where the server says you are and keeps going. Relatedly, stepping onto the tile you already occupy was refused with "only one-tile moves are allowed" — a rule that had not been broken and could not be acted on. It now says you are already there, and why that happens.
Arriving into an ambush says so. A walk that ended on the tile a monster was waiting on could report a clean arrival, because the fight was announced a third of a second after the walk stopped listening. One character read that, lay down to rest at the end of a sixty-step journey, was refused, and gave the monster a free first turn.
A slot shows which of a shard's affinities it will actually read. They are lit, and the ones it carries and ignores are dimmed — a shard is rolled from a monster and brings whatever that monster had, so the same shard can be worth two points in your head and one on your feet.
alpha 0.167–0.172 — a silence is not an answer (9 September)
Six things the game did and did not report. In every one the missing word was read as a different word: an absent field as a zero, a timeout as a refusal, an empty socket and a full one as the same socket.
b76dad5 The pool says how deep it is. Five bots timed a character read out
entirely while ordinary account reads took a second and three quarters, and
nothing could say whether that was the pool, the database or the game — because
the pool's size and its queue were both unrecorded. A query that "took two
seconds" may have run in three milliseconds after waiting the rest for a
connection, and only one of those points at the pool. This fixes nothing; it
makes the question answerable, and gives the pool size a name.
d75f1ef A monster pays one experience pool, not one per person hitting it.
The reward was worked out separately for each participant, so the total a fight
paid grew with the number of them and joining somebody else's fight became the
best trade in the game — 88 experience across two fights that cost no health,
because damage stays with whoever engaged first and the reward did not. The pool
now belongs to the fight and divides by the party's mean level, so a solo fight
pays exactly what it always did.
a9e099e An encounter frame is read rather than asserted. Maximum health was
cast from a field the server never sent, and every rule downstream — the flee
floor, the health bar, the warnings — stopped applying rather than saying it
could not. A frame now says nothing when it has nothing to say. Two more numbers
travel with it: which turn an action was aimed at against the one it landed on,
so a submission that slid into the next turn stops looking like a dropped one,
and the fight's own id, so joining a fight already on turn 9 stops being
announced as a fight starting. Vitals are also written outside the encounter
lock — an attack sent with seven seconds of turn left was measured taking
sixteen and a half, having queued behind a resolution busy saving health.
5bc7dd7 A claim that charges and takes no ground says so. Territory growth
spends members' stamina, and nothing told them: one run's figure fell from 58 to
11 with the client never hearing a word. The frame that would have said so was
only sent when a tile actually landed, so a claim that charged and then failed
was invisible everywhere — the only evidence was the number moving.
2323496 A socketed shard can be seen. A worn item listed what each socket
would accept and never what was in it, so a filled socket and an empty one read
identically. Two characters finished the whole kill, equip and socket chain with
no view anywhere that the shard had gone in.
2ae52cd The flee floor can see health again. The safety net that pulls a
character out below 30% was lost in a single cast and stayed lost for a whole
run, because the only way to ask what the combat policy had received was to run
a live session. Also: a faction command that took 479ms longer than its window
was reported as refused, and was disbelieved only because that character chose
to read the world instead of retrying a destructive order.
alpha 0.173–0.182 — you can make your own gear (9 September)
Crafting. Four stages and two verbs: fusing combines like with like, and crafting moves up a tier. Shards become a better shard, shards become a material, materials consolidate, and a material becomes equipment in a Fabrication Bay.
5f5b0d9 The ground it stands on. Three item capabilities — a book, a bearer
claim, raw forge stock — because each would otherwise have had to borrow one it
does not have, and the manual already records what that cost the last time: the
stash's currency called itself drinkable and players could destroy it by drinking
it. A bound flag for things that cannot leave your hands. And a bug found on
the way: a feature switch read the word false as true, because every non-empty
word was true. Anyone who had ever turned the stash off had it on.
ea507ad The arithmetic, separated from everything that writes to a database
so all of it can be checked. Substance is kinetic, density and cohesion; caloric
is process — what the fire and the water did to a thing, never what it is made
of. That distinction is the only thing that can tell two materials of identical
composition apart, which is the whole reason iron and steel are different words.
9bd758e Something that cannot be taken from you. Putting a thing on the
ground was already impossible; putting it in a box and putting the box on the
ground was not, and neither was handing it to a faction stash. Both are closed.
1082d63 350ca16 063bd79 All four steps, playable. Every roll is
intelligence against the weight of what you are attempting, on one curve, bounded
so that nothing is impossible and nothing is certain. Fusing shards is the only
action in the game that leaves you with nothing when it fails — so the odds
are shown before you commit, and refusals name the arithmetic rather than saying
no. Forging is the first thing in the game to spend hunger and thirst.
Two things worth knowing. Fused shards pass the ceiling dropped ones are held to, and past that ceiling each point is worth less than the one before — fusing always helps and never stops helping, it just stops paying in a straight line. And a quench needs heat and cold: hardness comes from the change in temperature, so cold on its own does nothing, and too much of it cracks the piece.
8358478 Binding Salt, which fusing burns, drops from monsters everywhere and
turns up in caches. Deliberately not held to the starting sectors the way cloth
is: a supply that thinned as you travelled would switch fusing off exactly when
shards became worth fusing.
d7abf45 A crafted thing says what it is. Invent a material, name it, and the
armour you forge from it carries the name — and the names of everyone whose hands
it passed through. A maker's mark outlives its maker.
6d9d45f The manual, both halves of it. Intelligence had been described as magic
damage, mana and mitigation since it was written; it decides every crafting roll
now, which makes it the busiest stat in the game.
alpha 0.183–0.188 — a smith gets a name and a book (9 September)
0d04ea5 A material weighs what it is made of. Density is mass, cohesion
binds it, and kinetic weighs nothing because motion has none — so two materials
with the same name can weigh different amounts, and a dense one can outweigh the
shards it came from. Melting things down is not a way to free up space.
That took fixing something older: every item's weight had always been read off its type, so the figure carried on each individual object was in every payload and had never once been consulted by a capacity check. It is now, and the weight you are shown is the weight the check used.
0d04ea5 You are created holding a book, and nothing in life can take it. It
cannot be dropped, put in a bag, or handed to a stash. The game ships no list of
recipes: a material tells you its signature — what it is made of and what the
fire and the water did to it — and if you like what you made, you name it. Every
material like it afterwards carries the name, and so does the armour you forge
from it. A Steel Cuirass rather than a Forged Cuirass.
Two rules, and neither ever overwrites your own vocabulary: one signature cannot have two names, and one name cannot mean two things. Two players disagreeing about a word is not a conflict at all — the name travels on the object, so a material someone hands you arrives called what they called it.
Deliberately, the signature ignores how good a material is. A modest one and an excellent one of the same composition and temper share a name, which is what lets your word for something survive your sourcing getting better.
58dc3ed Some shapes have to be learned. The seven equipment slots are
yours from the start, so forging is never blocked behind a find. Anything else
needs a pattern — which is a book you come across rather than a tool you buy,
and which never wears out. The first of them is a satchel, and it is a different
kind of thing entirely: no slot, no socket, no stats, spending what it has on how
much it holds.
d3a194d A forge screen that tells you before you spend. Forging costs
stamina, hunger and thirst, and a better material is harder to work well — so
the odds, the grade they were rolled against and all three costs sit above the
button, and when a vital is short it says which and by how much. It also says
what a temper will do while you are still choosing: a cracked material makes
something with no socket, a hardened one reaches further and takes heat or cold.
alpha — the market, and four things that were quietly broken (September)
The first system that does not route through a faction: players selling to each other, priced in the affinities and intensities the seller names.
0f84dc1character names are globally unique. They were unique per user, which stopped working the moment a name got stamped into something that outlives its author and circulates to strangers. It was also a live bug — faction invite refused two characters sharing a name with no way out. The migration found 87 characters and 87 distinct names, so nobody was renamed.8bfd0d5four ways an item could be in two places, or nowhere. Ownership and holding are separate facts and the stash only moved one: a placeable item could be deposited and then dropped on the floor, existing twice, while a factionmate who withdrew something could not equip or use it. Spending shards lost updates, so two concurrent spends created shards from nothing. And the Fabrication Bay's doorway refusal could never fire, so forging from a doorway worked while the code said otherwise.8511615adding a room no longer moves the rooms already there. Selection rolled against a cumulative weight cursor, so one new room file re-bucketed every anchor in every sector — moving rooms that stash deposits are pinned to.fabrication-bay.jsonhad already shipped through that once.5bb5ee0the currency the stash charges in now exists.eco_essence_shardhad no drop source at all, so the faction reserve could never be funded, no deposit had ever linked, and neither stash sink had burned a shard since it was written. Coins now drop with their variant taken from the strongest axis of the monster that dropped them.139c2acthe market. A 3×3 room — the first multi-tile one the world has generated — where listing escrows an item and hands back a bearer ticket. The ticket is the only claim: present it to cancel or collect, lose it and lose the goods, die with it and your killer inherits it. Browsing leads with what you can actually pay for. A tenth of every sale is destroyed, rounded down, so small trades are untaxed.61cc130both sheets on screen. The market panel, and the Fabrication Bay — which had shipped tested but unreachable, because nothing on the client could callcraft:forgeat all.
alpha 0.204 — what a runaway gives up goes to whoever stayed (12 September)
f79506e, out of two playtest runs. Most of it is the same fault in different
places: the game knew a number and never said it.
- A share nobody collected used to evaporate. Running away pays you nothing — that is the rule and it has not changed — but the share you gave up was destroyed along with your claim to it, so a player who stayed and finished a fight alone was paid on half a pool because their partner had walked out. It goes to the players still standing now, split by the damage they did. The pool is sized on everyone who fought either way, so leaving cannot make the fight worth more or less to the people left in it. Drops go only to those on their feet, and are drawn at random from among them rather than by damage, which is now written down because every reader of the experience receipt had reasoned otherwise.
- An escape says what it cost. The desperation bonus is charged in stamina on the attempt, and nothing anywhere showed it: thirteen attempts in one fight read as thirteen identical lines while a bar went from 39 to nothing, ending under the 5-stamina floor where every fourth step costs health. The log prices each attempt and shows both rolls, the fight card carries stamina at all, and a turn that changes your vitals now tells you — combat spent them fastest and was the one place that only spoke up on death.
- A step refused by a fight is no longer charged for as a stumble. The stumble was rolled first, so standing in a fight cost 8 health and a cancelled step for a walk that was never legal, and read as "you tripped".
- Currency is a Chit, and says which force it spends as. A Caloric Chit will not settle a kinetic fee, and the two printed as one line beside the crafting shard neither of them is — a whole run's crafting went into feeding money to a forge that will not take it. The affinity is in the name now, everywhere a name is drawn.
- A craft you completed shows up in your pack. Crafting was the only thing in the game that changed your inventory without telling anyone, so a fusion destroyed its inputs and left every screen holding the pack from before. A malformed request also names the field that was wrong, rather than "That is not a fusion."
- A grave a ghost runs away from is gone for good — written down at last. A ghost you fail to put down goes back to rest, but a monster that lands nothing for five turns gives up and leaves, and a ghost is a monster in that respect. Nothing is left to put back, and the marker goes with it.
alpha 0.206 — a server that survives its own database (13 September)
4650b73. Most of the commit is tooling and is not described here. What follows
is the part that changes the game.
- A dropped database connection no longer kills the server. Postgres and
Redis both raise an
errorevent when a connection goes; neither had anybody listening, and an unhearderrorin Node is an uncaught exception, which is a dead process. So a playtest ended whenever the network hiccuped — not degraded, ended, with every character still standing where they were. The clients are now listened to and reconnect with a backoff, and a read that arrives mid-outage degrades rather than throws. Faults that are not connection faults still stop the process, deliberately: a server that survives its own bugs is a server that lies about them. - The server always writes a log. It wrote one only when handed
LOG_FILE, which the overseer does when it starts a server itself — so a server started by hand logged to the terminal and nowhere else, and every tool that reads a log quietly worked only for servers something else had launched. There is a default path now. - A shelf carries the seller's id, not only their name. A name is not a handle — nothing in the game takes one — so a market full of listings from five different characters gave a browser no way to turn any of them into somebody they could act on. The market had the id all along, to credit the sale; it simply was not in what the shelf was built to carry.
- The world preview draws each room in its own colours. Every room
definition declares a
tileColorstriplet and the map payload ships them, and the preview renderer read tile values only — so a Market, an Ice Vault and a utility closet all came out the same shade of green on the one picture whose entire job is telling them apart. - A preview export puts its two halves in the same folder. The image resolved its path against the source file's own directory and the JSON against the working directory, so the two landed in different places and whatever stale image happened to be lying next to the JSON is what anybody looking for the picture actually found.
alpha 0.208 — everything the bots could do, you can do too (14 September)
0863559. The commit also touches shared; only what changes the server and
the client is described here.
- Every action a playtest bot can take, a player can now take. Twenty-one socket calls in the client had no caller anywhere: all ten item actions, six of the seven crafting ones, leaving or managing a faction, and joining a fight in progress. Nothing was missing from the protocol — the calls existed and nothing pressed them. A bot could equip, socket, fuse and drop while a player watched a list of what they were carrying and could touch none of it.
- The pack does things now. Equip, use, drop, open a container and move things in and out of it, seat a shard in a socket and take it out again — all in the character sheet's Inventory and Equipment panels, beside the numbers they change. Each row offers only what that item can actually do, read off the item's own definition: Use no longer appears on a rock, and a row with nothing to offer has no menu at all.
- Fusing and crafting are reachable, and say why when they are not. Both work on what is in your pack and neither is room-gated, so they sit beside it rather than in the Fabrication Bay. Each shows its odds before you commit and, when the button is off, which of the three things you are short of — no catalyst, no heat, no pattern book. A failed shard fusion still spends the shards and the catalyst, and now says so instead of congratulating you.
- An item dropped on the ground can be found again. It could not be. Picking one up needs its id and nothing in the game ever told a client one, so an item you dropped yourself was recoverable only if you had kept the id you dropped it with, and another player's was invisible forever. Ground items are now part of what the world tells you is near you.
- Graves stopped going missing. A grave reached you in exactly two ways: broadcast at the moment of death, and once for the single sector you connected into. Dug while you were logged out, or one sector over from where you arrived, and it was never sent again — the ground simply read as empty floor. They are sent with everything else nearby now.
- Somebody else's container opens only where it lies. Any container anyone had ever dropped could be read by anyone, from anywhere in the world, because being on the ground was the whole permission check. You have to be standing on it.
- A fight is joined from beside it. There was no distance check at all: any living character could join any fight it knew the id of, from anywhere, mid- turn. Now it has to be the fight's own tile or one of the eight around it — and the client only offers it where the server would agree.
- Equipping six things no longer risks the whole server. Each equip opened a second database connection from inside its own transaction, out of a pool of ten, so a handful at once could hold the process up until they timed out. Reading a twenty-slot container asked the database twenty-one times, once per thing inside, because it looked inside the rocks too.
- The character sheet shows what you are actually wearing. It merged live item state only during a fight; outside one it drew whatever had last been fetched over HTTP. Equipping appeared to do nothing at all, and the item was still listed in the pack it had just left.
- A new character no longer inherits the last one's death. The death notice was set when you died and never once cleared, so making a new character and walking back into the world was met by the previous one's death screen.
- The intro plays, and fills the screen. It stood up a second renderer beside the map's and the browser dropped a graphics context, which killed whichever one survived; the map now steps aside while the intro runs. It was also laying itself out in a quarter of the screen, from the same arithmetic mistake the tactical map had already made once and written down.
- Rooms tell you where their door is, with a bar on the edge it is on — and the doorway is a lighter shade of the room rather than the colour of the ground outside, which is what it used to be painted. Rooms whose colour was too near the biome around them are pushed off it: one declared exactly the same blue as a biome it could be generated in, and disappeared into it.
- Ground still loading pulses with diagonal hatching, instead of looking exactly like solid rock until it arrives.
- A walk can be called off. Clicking somewhere sent you there and the only way to change your mind was to go somewhere else instead — no use when the reason to stop is what just appeared on the tile ahead.
- You are drawn like everybody else, a disc rather than the only square on the map.