Changelog
Every change and fix, newest first.
- Fix
SIGNED OUT MEANS SIGNED OUT. Sign out on a device you'd played on and the page could go on showing your record — the party in the side drawer, the battles, the heroes — under a "Playing as a guest" banner. Two things conspired: with no account on the tab, every read fell back to the device's original stores, which after a sign-in are exactly the account that just left; and the clean start was tied to the fresh guest identity that follows a sign-out, so when that guest sign-in failed or hung (a network that drops the sign-in service does exactly that), nothing ever reset. Signing out now resets the page at once, and a signed-out visitor on a claimed device reads an empty world of their own — never the owner's. Sign back in and everything is where you left it.
- Fix
THE BEAM LANDS ON THE BODY. With Moonbeam or Flaming Sphere armed, clicking the creature you meant to burn did nothing — only an empty square moved the zone, though the rules have always let it settle on someone. A click on a creature now sweeps the zone onto its square.
- Fix
THE CURSOR SAYS SO. The faint 🫡 that sat on every companion you could order is gone; the pointer turns to a context-menu cursor over an ally you can order or a body you can search, and a pending order still shows its own icon in the corner until the ally acts on it.
- Feature
EVERY CLASS A WHOLE CLASS. The 2024 audit found eight classes stopping at level 3 in their subclasses and the druid, ranger, warlock and monk missing their spines. All twelve now run to the level-12 cap: every subclass has its 6/7 and 10 tier, every class ladder its missing rungs, and the missing spells (Fog Cloud, Barkskin, Call Lightning, Pass without Trace, Protection from Energy, Sleet Storm, Fount of Moonlight, Ensnaring Strike, Hail of Thorns, Lightning Arrow, Conjure Barrage, Freedom of Movement, Hypnotic Pattern, Crusader's Mantle, Beacon of Hope, Guardian of Faith, Heroism, Dimension Door and more) sit in the catalog. Where the engine had no seat for a rule the feature was trimmed and the trim written down (docs/RAW-DIVERGENCES.md), never faked.
- Feature
REAL CHOICES IN THE FORGE. A class can now put a decision on the sheet — the druid's Primal Order and Elemental Fury, the cleric's Blessed Strikes, the warlock's invocations, the sorcerer's Metamagic (two at 2, three at 10), the Wild Heart's Bear/Eagle/Wolf, the Draconic ancestry, the Champion's second Fighting Style, the Battle Master's maneuvers. Each shows in the forge and at level-up with a recommended pick already lit; companions take the recommendation.
- Feature
THE DRUID IS A DRUID. Wild Shape at 2 with seven beast forms (a wolf to a polar bear by level; the Moon circle's bigger beasts and spellcasting in fur), Wild Resurgence at 5, the Land's Nature's Ward and Nature's Sanctuary, the Moon's Moonlight Step, the Spores' Halo of Spores, Symbiotic Entity and Spreading Spores — and the spells to go with them.
- Feature
RANGER, WARLOCK, MONK. Favored Enemy's free Hunter's Marks, Deft Explorer, Roving, Tireless, Relentless Hunter and every Hunter/Gloom Stalker/Fey Wanderer tier; Magical Cunning, Mystic Arcanum, the full invocation list and the Great Old One; Uncanny Metabolism, Deflect Attacks, Slow Fall, Empowered Strikes, Heightened Focus, Self-Restoration and every Way to level 11.
- Feature
CLERIC AND PALADIN. Divine Intervention at 10; Life's Blessed Healer, Light's Radiance of the Dawn and Warding Flare, Trickery's Invoke Duplicity, War's Guided Strike and War God's Blessing — with each domain's spells. Aura of Courage at 10; Devotion's Aura of Devotion, the Ancients' Nature's Wrath (vines that RESTRAIN) and Aura of Warding, Glory's Aura of Alacrity, Vengeance's Relentless Avenger — with each oath's spells.
- Feature
BARBARIAN, BARD, ROGUE. Berserker's Retaliation, the World Tree's level-sized Vitality, Life-Giving Force, Branches (a pull) and Battering Roots, the Zealot's Fanatical Focus and Zealous Presence. A bardic die that grows, Expertise at 2 and 9, Font of Inspiration, Countercharm, Magical Secrets, Lore's Magical Discoveries and Valor's Combat Inspiration. The rogue's CUNNING STRIKE — Poison, Trip, Withdraw, armed like a smite — with Improved Cunning Strike's Daze and Knock Out, Supreme Sneak, the Soulknife's Psionic Power and Soul Blades, the Assassin's 2024 Assassinate and Envenom Weapons.
- Feature
SORCERER, FIGHTER, WIZARD. Metamagic that actually casts — Quickened, Twinned, Heightened, Empowered, Careful, Distant, Extended, Transmuted — billed in sorcery points from the cast intent; Elemental Affinity, Tides of Chaos, Bend Luck, Bastion of Law. The Champion's Heroic Warrior; the Battle Master's dice that ride a hit with Trip, Menacing or Disarming, Precision Attack on a narrow miss, Riposte, Rally; Eldritch Strike; Telekinetic Thrust and Guarded Mind. The Abjurer's Projected Ward and Spell Breaker; the Evoker's Empowered Evocation.
- Feature
REACTIONS THAT FIRE THEMSELVES. A single rulebook now answers a hit, a blow landing, a turn ending, a fall, a miss, a narrow roll — spending the creature's reaction and its pool for human and AI alike, the way Uncanny Dodge always did. No new popup; the log says what happened and what it cost.
- Feature
A WALL IS NOT A HILL. Anyone could scramble up a castle rampart from below — the rule that once cured a wolf pack idling at the wall's foot. Now a built wall is refused to every grounded creature: stairs, a raised ladder, a breach or wings are the only ways up, while a hill step or a rock shelf is still climbed by anyone, slowly. The preview, the referee and the AI's own map all read the one rule, so nothing is offered that the move would refuse.
- Feature
THE ESCALADE. Every wave now carries its own way up: one bearer in four brings a siege ladder, walks it to the stretch of wall nearest the defenders and raises it there — an action — and the rest climb. A defender standing on the rampart above can shove it down, and that costs its action too: a swing not taken, for every climber that ladder would have carried; the ladder lies at the foot until someone spends an action raising it again. Click the wall cell a ladder leans on to shove it (or, from its foot, to raise one); the AI garrison shoves on its own, and the model's menu offers both.
- Feature
THE CASTLE STANDS SOMEWHERE. It used to sit dead centre with the gate always east and the waves from all four sides. Each seed now draws a SITE — open field, one wall on the map's edge, a corner, a moat bridged only at the gate, or a lake along one whole face — and turns the finished keep so the gate faces open ground. Waves muster only on the sides that are field; a moat is wadeable but slow and takes no ladder; the ground before the walls is kept flat, because a hill leaning on a rampart is a ramp; and a breach now runs through the wall's whole thickness instead of stopping at the parapet.
- Feature
THE BAILEY. The yard inside the walls was an empty square with two barrels. It now holds two or three solid buildings against the walls to fight around, a well mid-yard, crate clusters for cover — and stairs where they are needed: one for every stretch of wall a breach has cut off, and one near the middle of every face, so the garrison spreads instead of filing around from the gate. Nothing placed may seal a stair or the gate's inner cell.
- Feature
THE MOUTH IS ANYWHERE, AND ANYTHING. The way down into a delve always stood mid-field, dressed by what lay beneath. It now stands where the seed puts it — a clearing, the map's edge, a hilltop, a waterside, a corner — and wears one of ten faces drawn at random: a ruined tower with a ladder down its shaft, a chapel, a burrow, a cave, a barrow, a sinkhole, a dry well, a ruin with a trapdoor in a broken ring, a hollow tree, or a crypt behind an iron door among headstones. The road still leads to it.
- Fix
THE NARRATOR AT THE MOUTH. On the surface floor the opening was written from 'an open, wind-bitten battlefield' — so the Narrator described a battle where the party stood in a clearing before a door. It now opens on the clearing and the way down, by name, with nothing stirring on the surface and the dungeon waiting below — and no 'first round' that isn't there.
- Feature
THE NARRATOR'S DESK. The battle-start screen used to warm the model first (a dozen seconds on a cold box), only then ask for the opening, and give up after fourteen — so what you read as the Narrator's words was almost always a stock line, arriving all at once over a bar that measured nothing. Now the opening is asked for the instant the screen opens, alongside the warm-up; four real milestones tick off with what they found — the rooms surveyed, the kinds of foe counted, the Narrator awake, the opening written; the line is typed out in front of you; and the battle no longer waits on the model: Begin frees the moment the board is ready, and a late opening follows you into the feed. A stock line appears only when the Narrator is truly late, says so, and gives the stage back the moment the real one lands.
- Feature
THE NARRATOR KNOWS WHAT IT'S LOOKING AT. The cold open used to be written from 'a cramped dungeon, N foes' — so it invented monsters and rooms. It now works from the facts: your heroes by name, the rooms the map actually dressed, whether you walk by torchlight or darkvision, and the kinds of foe present — and is told to invent none. At a Ukrainian table a line that slips into Russian or English is sent back once, then dropped, never printed as the Narrator's own.
- Feature
VOICES IN THE FEED. Heroes' and monsters' spoken lines — barks, order acks, the Narrator's voiced quips — used to live only in the combat log; the Narrator's feed carried narration alone. Every spoken line now joins the feed under its speaker's name, party in blue, monsters in red, so the fight reads as narration and dialogue in one place. The combat log keeps them under its 💬 filter.
- Fix
THE BLIND BANDIT'S MENU. A bloodied bandit who could see no one — the rampart's blind side — was offered exactly 'Douse your torch' and 'Dash to close in', and was told to plan two attacks it did not have, so it named goblins from the example. With nobody in sight the defensive picks (Hide, Dodge, Disengage) are offered beside a Dash that now reads as a reposition, and the attack plan is asked for only when an attack is actually on the menu.
- Fix
STEADY AIM SAYS WHEN IT'S POINTLESS. Advantage doesn't stack: a rogue on the high ground with a Vexed, blinded target braced every round for nothing. The 🎯 button now says 'already at advantage' when every legal shot already has it, so the bonus action can go to Cunning Action instead. (And the high-ground advantage itself is now documented as the house rule it is.)
- Fix
THE TRAY OPENS ON THE RESULT. The dice tray showed its throwing face first and turned to the result only after a roll — so the face you actually read, your last throw and the table's last engine roll, was always a click away. It is the face the tray opens on now; ⇄ turns it to the dice, and a throw still turns it back by itself.
- Fix
STEADY AIM IS FOR THE ROGUE WHO STOOD STILL. The brace could be taken after a dash across the room — the rules say only if you haven't moved this turn. The button now hides once you've covered ground, and the referee refuses it if asked anyway; a fresh turn brings it back. Being shoved is not moving.
- Fix
NINE ACTION BUTTONS FINALLY SPEAK YOUR LANGUAGE. Steady Aim, Bardic Inspiration, Hand of Healing, Flurry of Blows, Patient Defense, Step of the Wind, Large Form, Celestial Revelation and Adrenaline Rush showed their raw key on the action bar ("steadyAim") in both languages. Named now, in English and Ukrainian.
- Fix
ONE ROW OF TOGGLES ON THE SHEET. The ⇄ SKILLS and ⇄ FEATURES buttons sat on different lines with the turn's action chips between them, each above its own panel. They share one row above the ability grid now, and the reactions/features leaf sits directly under the abilities, so each button stands over the thing it turns; the turn's chips follow.
- Feature
THE HORN. The master of the dungeon used to die in an empty room — a Frost Giant woke with seventeen of its garrison still breathing three rooms away, and not one of them stirred, because a dungeon's sleepers only ever woke to what they could see or hear through open air. The boss's fight is the whole floor's fight now. The moment the boss stands in a running fight, a horn goes up: every living creature left on the floor wakes — walls or no walls — and comes. They do not teleport; they Dash and run the corridors on their own legs, so distance and speed decide when the tide arrives, and the initiative column fills as they join. With nothing in sight they march to the boss; with a foe in sight they fight. Pull out of the lair and the horde gathers round its master rather than chasing you — a defended room, a doorway to hold. The secret vault's prey never hears it, and neither does anything above ground.
- Feature
A MARCH IS NOT A DECISION. A creature answering the horn with nothing to swing at never asks the Narrator what to do — twenty of them asking every round would be the old slow-turn hang all over again. They walk; the moment one sees a foe it is the Narrator's again, and its brief now says the horn has sounded and how far the boss is.
- Fix
Honestly said: the boss room is now boss + retinue + every garrison you skipped, and the encounter pricer does not yet know it. The calm before the boss door (the bonus short rest) is doing real work now. The horn has a switch in the exploration balance config so the crawl probes can measure with it off and on; the boss room's difficulty ladder gets re-bracketed from those numbers, not guessed.
- Fix
THE FIGHT THAT FROZE ON A SHIELD NOBODY COULD RAISE. Flip WATCH MODE on, let the AI play your hero for a while, and the AI loop kept treating the hero as yours: it had been built with the seat it saw on its first turn and never asked again. When a giant's swing then paused for a Shield decision, the engine waited for the human it believed in while the watching board — rightly — drew no Shield bar, and every intent after that was refused. The turn loop now reads the LIVE seat on every turn, so a watched hero's swing settles on the AI's own judgement, and the bar appears whenever the engine actually waits — including a commander's CALL on an AI ally's Shield or Counterspell, which the old gate never showed at all.
- Fix
WATCH MODE NO LONGER DEMOTES YOUR HERO. One turn played while you watched used to rewrite who drives each creature, and the seat read that stamp back afterwards — your hero stayed the AI's for the rest of the fight. Who drives whom is roster truth the engine never touches now; the only thing it stamps is who owes an answer to a reaction. Saves made before this release are repaired on load.
- Feature
THE BODY SAYS WHAT IT HOLDS. A slain foe used to be a gravestone and nothing more — the only way to learn it could be searched was to know it already. Every body with something on it now wears its spoils from across the room, the way a chest wears its 🧰: a 💰 for a body nobody has searched, a 🎒 for one you searched and left something on, nothing at all once it is picked clean. Step within reach on your turn and the body rings gold — right-click it and the search begins. The dying are never marked: a downed companion is someone to save, not something to rummage.
- Feature
THE COMMAND SLOT. You could always right-click a companion and give an order — Rush, Retreat, Help, Heal — and nothing on the board ever said so; worse, the word you gave vanished into the log with no sign it had landed. Every companion you may command now carries a small 🫡 at the shoulder, and the moment you give the order it becomes the order itself — ⚔️ Rush, 🏃 Retreat, 🤝 Help, 🩹 Heal — until they act on it. The line under the board says it too now: right-click a companion to order them, a foe to mark it, a body to search it.
- Fix
A downed hero's death-save tally (✓ / ✕) and health bar were drawn as faint as the gravestone beside them. The dim falls on the body alone now; what you need to read stays readable.
- Feature
THE NARRATOR SEES THE DARK. The model deciding a creature's turn never knew whether it stood in the black, in a torch's dim edge or in full light, nor which of its foes it could not actually see. It does now — one line of light, one line of the unseen — and the torch is on its menu: it may douse to hide from the dark or light to see it, the same free choice you have. For you, hovering an attack on a shape your hero cannot see reads "unseen — disadvantage" before the swing, where cover already reads its bonus. A sleeping guard, a blinded ally or a caged captive no longer calls out targets for the rest of the side.
- Feature
SUN-BLIND MONSTERS CARRY TORCHES. Bandits, cultists, veterans — the human kind, with human eyes — walk into their dungeons with a torch burning, the way your heroes do. Which means their rooms GLOW before the door opens, and a darkvision hero with a doused torch takes them from the dark at advantage while their arrows come back at disadvantage. The torch itself has left the shop shelf: everyone already owns one, and it never burns down.
- Feature
DARKVISION, BOTTLED AND CAST. The Darkvision spell (2nd level — wizards, sorcerers, druids, rangers) and the Potion of Darkvision grant sixty feet of it for the fight, and every rule that asks "can this one see in the dark?" now asks the same question. A sun-born caster who knows the spell casts it on themself at the dungeon mouth instead of lighting a torch — and keeps their stealth. BLINDSIGHT is real, too: the bats, oozes and spiders that have it in the books see within it through any darkness, and no shadow hides you from them.
- Fix
A DOUSED TORCH STAYS DOUSED. Put your torch out on one floor and every stair, every descent and every arrival used to light it again behind your back — the douse lived only as long as the floor did. It is a decision now: a torch you doused stays cold through every door and every floor until you light it yourself, while a torch that has never been lit still catches at every dungeon mouth for the sun-born who need it. Carry one up into daylight and it simply goes out. And a companion held fast by a spell with a cold torch in the pack no longer spends every turn failing to light it.
- Feature
THE LIGHT HAS A CAUSE NOW. Sun-born heroes used to glow in the dark for no reason anyone could point to — no torch in hand, no spell cast, just a warm pool that followed them about. Every hero now carries a real torch in their pack: the sun-born walk into a dungeon with it burning, darkvision folk keep theirs cold and their stealth intact, and lighting or dousing it is the turn's free interaction — a 🔥 button on the action bar, a lit/doused readout beside the torch on the sheet, a small flame on the token that carries it. A torch costs no hand (a shield-and-sword fighter carries it lit without argument) and never burns down. Companions and torch-bearing monsters light their own when they stand in the black.
- Feature
THE DARK BITES BACK. A foe you cannot see — no torch, no darkvision, thirty feet of black — is a shape to swing at, and your swing rolls at DISADVANTAGE, as long as someone on your side can see it and call it. Nothing nobody on your side can see is a target at all. And the one that sees you when you cannot see it has the edge: the darkvision archer loosing at the doused human rolls with ADVANTAGE. Douse your torch and you hide from the dark; keep it lit and it shows you to everything that lives there.
- Feature
THE PRICER CAN SEE YOUR PARTY NOW. A crawl priced above deadly cost a party of three a total of 31 hit points — the monsters' eighteen swings landed four. The encounter maths was pricing a fight that never happened: a pack's damage against the party's AVERAGE armour while every claw went into the fighter at AC 21; a rogue at its bare shortsword while every hit carried Sneak Attack; nothing at all for the Sap that staggered half the pack's swings, the Blindness that spoiled the rest, or the Shield of Faith the cleric kept up the whole way down. Round-power now prices a pack's melee against the front line it actually meets and its archers against the soft targets behind it, counts Sneak Attack, prices Sap and one control spell as swings the monsters will roll at disadvantage, and puts Shield of Faith on the tank. Every difficulty ladder was re-scaled to keep the same promise for an average party — which means a tank-and-rogue party finally meets a pack sized to what it can take, and a party of four wizards a lighter one. Levels 1–3 were re-measured; levels 4+ are scaled by the same factor and will be re-measured.
- Fix
A BOW IN YOUR FACE IS NOT THE BETTER WEAPON. An elite gnoll loosed its longbow four times with the cleric standing five feet away — every shot at disadvantage, every shot a miss, a perfectly good spear in its other hand. The target pick ranked weapons by their dice alone; now it reads the same rule the referee applies, and a shooter with a foe at its throat swings instead. The Narrator's menu shows the squared odds and says why.
- Fix
A BOSS HELD TO ITS LAIR STILL FIRES. The Veteran spent two of its six turns on "will not abandon its lair" with a loaded crossbow and the cleric fifty feet away. The hold handed the idle action to the creature's own brain — which, seeing movement still in hand, planned a charge first; the fill refuses to re-plan movement, so it broke on the charge and never reached the shot behind it. The brain is now asked with no movement left, and falls through to shoot rather than idle.
- Fix
A SHORT DUNGEON IS NO LONGER A STROLL. A dungeon's difficulty is promised one ROOM at a time, and nothing ever asked how many rooms there were — but what wears a party down over a crawl is accumulated damage, and a three-room lair never accumulates any. Measured: at level 3, a lair on its DEADLY band was won 81% of the time with 57% of the party's health still standing, and its whole ladder was flat — easy to deadly moved the survivors' health by two points. The same promise on a five-room dungeon left the party on 7%. A short crawl now asks more of each room, so the shortest dungeon in the game — the delve beneath the field, the one most runs actually fight — leaves you at about a third of your health instead of untouched. It buys MORE BODIES, never bigger ones: spending the correction on the weight class instead made the deadly band EASIER than the easy one, because a pack of a few elites hits softer than a crowd worth the same on paper.
- Fix
The five-room dungeon every difficulty band was originally measured against is untouched by design, so none of those fitted numbers move. Longer dungeons are untouched too, deliberately: they were found to be delivering less than half of what they promise — the garrison runs out of room against the monster cap long before it runs out of budget — and quietly asking less of a promise nobody was keeping would only have made them softer. That shortfall is a separate fault and is still open.
- Fix
GOING DOWN THE STAIRS IS NOT A TELEPORT, AND EVERY FLOOR TRACES ITS OWN. While a party is split, whatever happens on the floor you left is copied into the log you are reading so the run holds together as one story — and those copies carry the OTHER floor's coordinates. The replay took them at face value: a companion's walk upstairs was drawn straight across the dungeon's rock, and the step between the two floors came out as a long teleport that never happened. Each floor now traces only its own, so a descent simply begins at the ladder, and flipping the board to another level shows that level's routes instead of dragging the last one's along behind it.
- Fix
A VICTORY BELOW SHOWS ITS NUMBERS AGAIN. Winning inside a delve ended in silence — the banner, and then nothing. The results were being deliberately withheld for a win below ground, and for a good reason at the time: the party was carried up to the surface within the same beat, and the tally would open there instead a moment later. Now that nothing carries anybody anywhere, that decision had nothing left to defer to and simply ate the results. The tally opens where the fight ended, which is the whole point.
- Fix
AND CLOSING THE TALLY DOES NOT MOVE YOU EITHER. Every version of “and then the party is carried up” has been wrong, in four different places — the moment of victory, a view rule, a button, and finally the act of closing the results. Reading the numbers is not a decision to leave the room. The party leaves a floor when the party walks out of it, and never because the screen judged that the moment had come.
- Fix
THE FIGHT ENDS WHERE THE FIGHT ENDED. Killing the last thing in a delve used to carry the whole party up to the field above before you had seen a single number — so the victory, the tally and the board all arrived somewhere nothing had happened, seconds after a battle that happened somewhere else. Three attempts to fix that by choosing a better view all failed differently, and all for the same reason: they were correcting the picture of something that had already moved the party somewhere they never chose to go. Nothing moves you now. You stand in the room you won, the tally opens over it immediately, and every hero is where they actually finished — nobody is drawn standing on ground they never reached. The climb back into daylight is bookkeeping the run still needs, so it happens quietly when you close the tally: by then you have read it, in the place it belongs to.
- Fix
ONE BOARD, FLIPPED — NOT TWO BOARDS SIDE BY SIDE. Looking at another floor used to build a second battlefield: its own map, its own camera, its own zoom, sitting in front of the real one. Two boards is two of everything that can disagree — which map you are reading, how far in you are zoomed, which floor the results in front of you are actually about — and it is why the screen kept feeling like it was showing you the wrong place. There is one board now and choosing a floor points it there. Everything the board does it still does: the same map at the same zoom, pan and zoom exactly as before, and no second thing to lose track of. A floor you are only visiting draws as a record rather than a fight — no reachable squares, no targeting, nothing to click, and no fog, because a floor you have finished has nothing left to hide.
- Fix
AND A TELEPORT IS DRAWN AS A TELEPORT. Arriving on a floor by the stairs moves a body without it taking a single step, so the next thing it actually walked began somewhere unconnected to where it was last seen — and the replay joined those two points with a plain line. The result was an invented corridor: a hero who had merely stepped onto the map appeared to have sprinted a hundred and forty feet through solid rock in a dead straight line, and was credited with the distance. Ground that was skipped rather than covered now draws faint and broken, and is not counted as walking.
- Feature
THE REPLAY NOW RUNS ON THE REAL MAP. Close the results and the floor you cleared is there at full size, with every hero's route drawn across the actual dungeon — the rooms they crossed, the corridors they ran, the corners they turned — and the mark of each thing they did sitting exactly where they did it. The lines live inside the board rather than floating over it, so they stay locked to the stone through every pan and zoom: zoom into one room and the routes zoom with it. Press play and the fight draws itself, or drag the scrubber to any moment and see where everyone had got to. The small version under the results table stays where it was, for a glance at the shape of the fight without leaving the numbers, and the two share one clock and one set of colours so they can never tell you different things.
- Feature
AND YOU CAN PICK OUT ONE HERO AT A TIME. Four routes down the same corridor is a knot, so every hero has a chip of their own: click it to take that line out of the picture, click it again to bring it back, double-click a name to see that hero alone and double-click again for everybody. The chips carry the colour and the distance walked, so they are the key as well as the control — one row of them instead of a legend saying the same thing on a second line.
- Fix
THE PLAYBACK IS DRAWN ON THE GROUND IT WAS WALKED ON. A cleared delve's whole record travels up with the party so the tally can count it — and the coordinates travel too. The trace then plotted a dungeon's routes across the field above it: lines striking off the edge of a board nobody had set foot on, and heroes credited with a thousand feet of walking through open grass. Positions only mean anything against the map they were made on, so when a settled delve is hanging below with its own record of movement, that is the map the routes are drawn on.
- Fix
AND CLEARING A SECOND DUNGEON OPENS ON THAT ONE TOO. Coming up from a delve leaves the screen looking at it until you choose to go up, and that choice was remembered as a plain yes — but the battle screen is not rebuilt between fights, so the yes outlived the dungeon it was about. Clear one delve, step up to the surface, take the next battle and win that one too, and the screen had already been told you did not want to look, so it dropped you on the field again. The answer now belongs to the delve it was given about, and a new one opens on its own ground.
- Feature
AND YOU CAN WATCH THE WHOLE FIGHT BACK. Under the results table there is now a map of the ground you fought over, with one unbroken line per hero tracing every step they actually took, and the mark of each thing they did — a swing, a bowshot, a critical, a spell, a heal, a fall — dropped exactly where they were standing when they did it. Press play and the battle draws itself from the first step to the last blow, or drag the scrubber to any moment and see how far everyone had got. Nothing had to be recorded to make this work: the game has always written down the full path of every move, so this is the fight as it actually happened rather than a reconstruction. Each hero keeps their own colour, the key says how much ground each of them covered, and the monsters are left off — twenty more lines would be a ball of wool, not a trace.
- Fix
THE PARTY COMES OUT OF THE HOLE IT WENT INTO. Climbing back up from a delve put every hero back in the exact cell they had been standing in before they went down — so a party that had fought its way to the far end of a dungeon reappeared scattered across the field in its old formation, as though the last hour had not happened. Worse, a hero who died at the bottom was carried up to that stale cell too and drawn lying on the grass, a body resting somewhere it had never fallen. Nobody on that board was where they actually ended. Everyone who was below now emerges at the mouth they climbed out of, the fallen carried up with the rest, using the same seating the stairs already use — so nobody stands on the ladder, nobody stacks on anybody else, and a companion who never went down is left exactly where they were, because they were never in the hole.
- Fix
AND IT ACTUALLY OPENS THERE NOW. The first attempt at ending where you fought watched for the moment a cleared delve appeared and switched the view then — but that moment is a race, and it kept losing: the board arrives with the delve already cleared while the floor itself has not finished, the single instant passes unwatched, and nothing ever opens. The second attempt stopped watching for moments but still waited for the run to be over, which an expedition floor is deliberately never allowed to be — the stairs onward are the only way forward — so the floors that most needed this were exactly the ones excluded. Which layer you are looking at is now simply worked out afresh every time the screen draws, with no moment to miss and no ending to wait for.
- Feature
AND THE DUNGEON YOU CLEARED IS STILL THERE WHEN YOU WIN. Clearing a delve used to delete it: the floor the battle happened on stopped existing at the moment of victory, so you surfaced onto a field where nothing had occurred and could never look back at the place you had just fought through. It is kept exactly as you left it, every body where it fell, and the way down is stamped spent in the same breath — a map to revisit, not a door to wander back into. The board now opens ON that dungeon rather than on the field above it, so the fight is read where it happened, and one button takes you up to the surface when you are done looking — after which it leaves you alone. It does not wait for the run to be formally finished before doing so: an intermediate floor of an expedition deliberately never finishes, because the stairs onward are the only way forward, and waiting for an ending that by design never comes meant the floors that most needed this never got it.
- Fix
THE ENEMIES YOU FOUGHT ARE BACK ON THE SCOREBOARD. A delve's tally listed three heroes and nobody they had fought. The roster is rebuilt on whichever board the party ends up standing on, and a battle can span two — the field above and the dungeon below — so every foe met downstairs was a name the tally could not look up, and a name it could not look up it quietly dropped. Your own columns came out right the whole time, because a kill is credited to whoever last drew blood rather than to the corpse; the corpses simply had no rows. A combatant that appears anywhere in the battle's own account is now found wherever it stands. A dungeon nobody has walked into yet still keeps its monsters to itself — being listed takes having actually turned up.
- Fix
AND THE DICE SHOW YOU WHAT YOU THREW. The tray has two faces with a corner button naming the other one, and rolling left you on the face with the buttons — you had to click across to read your own result. Worse, the face labelled RESULT held the engine's last roll and your older throws, but not the one you had just made: that sat on the other side, under the dice. Throwing now turns the panel over on its own, and your roll leads the face that claims to be the result. It turns for every throw, not just the first, so the same formula rolled twice still brings you the second answer.
- Fix
THE RESULTS SCREEN NO LONGER FORGETS THE FIGHT YOU JUST WON. Clear a delve and climb back into daylight, and the tally that met you said nothing happened: no rounds, no damage dealt, none taken, no kills, no crits — while your heroes stood in the same table visibly at half health, which is a strange kind of nothing. The climb rebuilds the encounter from the field ABOVE, the one board that never drew steel, and it carried your bodies up without carrying the battle's record: the round count and the running account every one of those numbers is read from stayed at the bottom of the hole. Health came back because health rides on the heroes themselves; everything else did not. The delve's record now travels with the party, and where the two accounts overlap — the game copies what happens above you into the log you are reading below, so you never lose the thread — the copy is dropped rather than counted a second time. Turn back half-way and nothing is folded in at all: that delve is still waiting under the mouth with its own record intact, and merging it early would charge you twice for the same blows on the way out.
- Fix
THE FLOOR ABOVE REALLY DOES KEEP MOVING NOW — INCLUDING WHEN YOU GO DOWN ALONE. Yesterday's fix cured one way a floor could freeze and missed the way most people actually hit it. The screen decides that a turn has passed by watching who is currently acting on your floor and noticing when it becomes somebody else. That works while you have company down there. Descend on your own and it never becomes somebody else: you are the entire order, so your own name comes round again and again, nothing appears to have changed, and the machinery that gives the other floors their turns simply stopped running after the first one. The companions you left behind stood still for the rest of the run. It now counts turns instead of watching names — the count the game already keeps for itself, which goes up whoever takes the turn and however few of you are on the board.
- Fix
THE COMPANIONS WHO STAYED BEHIND WERE STANDING STILL. Take the stairs down while part of the party holds the floor above, and that floor could stop dead — the ones who did not follow you never took another turn for the rest of the run, no matter how many turns you ended. The reason was small and completely fatal. A floor keeps a marker for whose turn it is, and when a hero walks down the stairs the floor they left records them as gone. If that marker happened to be resting on the hero at the moment they left, the floor was pointing at somebody who no longer takes turns anywhere — and the scheduler, which only ever advances a floor when its marker matches whoever the shared order names next, matched nothing and moved on. The one thing that would have nudged the marker off the departed hero was the very turn being skipped, so it waited forever. A floor pointing at somebody who has left is now nudged along instead of skipped; a floor genuinely in the middle of somebody's turn is still left alone.
- Fix
AND LOOKING AT ANOTHER FLOOR NO LONGER DRAWS IT IN A SLIVER. The new full-screen layer view was being placed inside the two-column layout that holds the character sheet, so whenever anybody was selected it was handed the sheet's narrow column: a squeezed map, a headline broken across four lines, and the rest of the screen black. It sits beside that layout now rather than inside it, and takes the whole board area as intended.
- Feature
WHEN A FIGHT BEGINS, THE WHOLE PARTY IS IN IT — INCLUDING WHOEVER IS UPSTAIRS. Everyone rolls, wherever they happen to be standing, so there is one order for the battle rather than an order for the people in the room and a separate clock for everybody else. What that does NOT do is drag them into the room: nobody is moved, nobody appears. A companion two floors up simply has a place in the order from the moment steel is drawn, and spends their turns walking toward the noise at whatever pace their legs allow — the same distance they could cover doing anything else. The roll-call names them and says they are on their way.
- Feature
LOOKING AT ANOTHER FLOOR NOW USES THE WHOLE SCREEN. Picking a different level out of the strip used to open a little window over the board — which is a smaller, worse view of exactly the thing the screen is already built to show. It swaps the main view instead, with a marker on the floor you are actually standing on and one button to come back. Your own floor keeps playing the entire time you are looking elsewhere: it stays running underneath rather than being packed away, so glancing at what the rest of the party is doing never costs you the run.
- Fix
THE ONE TURN ORDER NOW ACTUALLY COVERS THE FLOOR YOU ARE NOT ON. Everyone on every level was supposed to share a single order and take their turns in it, as though the whole party were standing in one room. Between fights, they were not. A fight runs on rolled initiative; the walking-about between fights ran on the order the characters happened to be created in — and those are two different orders. So whenever the game looked at another floor and asked "whose turn is it up there?", it got one answer, found somebody else standing ready, and moved on without letting anybody act. Every time. That floor simply stopped, which is why companions left above never came down. Walking and fighting now use one rule, applied everywhere it was being decided separately — when a battle begins, when a battle ends, and when the exploring order is rebuilt.
- Fix
AND TWO WAYS OF BREAKING A TIE HAVE BEEN MADE ONE. When two characters roll the same initiative, the rules here have always settled it by who was created first. The new shared ordering settled it alphabetically instead. Almost always identical — and different precisely when two characters tie, which is the hardest case to ever notice going wrong. There is now one tiebreak, and it is the original one.
- Fix
THE GUARD AGAINST WALKING IN CIRCLES HAD ITS EYES SHUT. A companion left alone on a floor could pace between two squares for the rest of the run — six paces north, six paces south, forever — and there is a guard built for exactly that: the game remembers the last four places a creature finished its turn, and when they read as two squares alternating it makes them stand still for a beat so something else can break the tie. The guard was fine. The memory it reads was being thrown away. Anything a creature remembers about its own recent decisions lives in one place, and two different pieces of the game write to it; one of them rebuilt that memory from scratch each time it recorded a decision, quietly dropping the walking history — and since a creature acts and THEN finishes its turn, the history was erased between every pair of entries and never grew past one. Four are needed to see a circle. So the guard has been blind since the day it was added, and its own tests passed the whole time, because they wrote the walking history by hand instead of earning it by walking. Both are fixed: the memory is preserved by everyone who touches it, and there is now a test that makes a character actually walk before it looks.
- Fix
THE THREE CUTS OF EACH SOUND ARE ACTUALLY DIFFERENT NOW. Yesterday's attempt at variety changed the wrong thing. Each sound is part hiss and part ring, and the three versions were made by re-rolling the hiss — which, measured, produces a completely different signal and, heard, produces no difference whatsoever. The ear does not care which particular rush of noise it was; what it identifies a struck object by is the note it rings at and how long it rings for, and those were identical in all three. So the variation moved onto the things that carry: a blade catching a different part of a breastplate now rings a tone and a half away and dies at its own rate, and dull sounds with no note to speak of — a body blow, a mace — vary in how abruptly they arrive instead. On top of that, every single play is nudged again in pitch and loudness, so even the same cut twice in a row is not quite the same.
- Feature
THE GAME ASKS ABOUT SOUND NOW, ONCE. It has to start switched off, because a browser will not let a page make a noise until you have told it to — which meant a speaker icon could sit there lit over a completely silent game. But off by default has its own problem: nobody finds the setting, so nobody hears any of it. So the first time you walk onto a battlefield you are asked, with the volume slider right there and a real sword blow behind it — move the slider, hear it at that level, and decide. The click that says yes is the very permission the browser was waiting for, so it starts working immediately. Whatever you answer is remembered, including saying no: a question that comes back every battle is not a question, it is nagging. Both the switch and the level are kept, and both stay changeable in the settings drawer.
- Feature
THE FIGHT COMES FROM WHERE IT IS HAPPENING. Sound used to arrive from a single point in the middle of your head no matter where on the field the blow landed. Now it is placed left or right by where the body being struck is standing — and it is where it LANDS, not where it was thrown from, so an arrow crossing the hall belongs to the person it hits rather than the archer. It is placed against the map rather than the camera on purpose: tying it to the view would slide an ongoing fight around your head every time you scrolled. Nothing is ever pushed fully into one ear, which reads as a fault rather than as distance.
- Fix
AND THE TWENTIETH SWORD BLOW NO LONGER SOUNDS LIKE A COPY OF THE FIRST. One recording played back identically every single time turns into wallpaper by the third fight. The sounds you hear constantly — the blade, the critical, the miss, the arrow, the mace, the body blow, the magic hit — are now cut three separate times each, taken in turn, and every play is nudged a few percent in pitch and loudness on top. Rarer sounds keep a single cut, because every extra file is weight for something you hear twice an hour.
- Feature
AND THE SOUNDS THAT CARRY THE GAME CAN NOW BE REAL RECORDINGS. Making noise from arithmetic will always have a ceiling, and swords are well above it. Any sound may now name a recording; when the file is there it plays, and when it is not the made-up version stands in — so a sound is never missing, adding one takes no code, and removing one simply steps back down. Twenty-one are named so far, the ones you hear constantly: the blade landing, the critical, the body hitting the floor, the fireball, the trap. Everything else — the long tail of the spellbook and every weapon — keeps its voice worked out from its own description, which is what stops the sound library from becoming a list somebody has to remember to add to. The workshop at /sound now marks which sounds are real and which are still standing in.
- Fix
THE SOUNDS WERE WRONG, AND IT WAS NOT THE SETTINGS. Blows, spells and healing all had the same SHAPE — a single tone and a wash of noise, opened and closed by one fade — so they differed only in pitch and none of them belonged to what was happening on the board. Four things were the matter. There was no structure: a real impact is a bright click, then the material's body, then a tail, where this was one lump. The pitch slid across the whole sound instead of dropping in a blink, which is why hits read as slide whistles. The muffling never moved, when a collapsing brightness is the single thing that makes noise sound like something being struck. And because every sound used one shape, a heal and a sword swing were the same gesture at different heights. Sounds are now built in layers — the strike, the body, the ringing — each with its own timing, with metal given the clashing overtones that make it metal, and a slow swell now breathes where a blow snaps.
- Feature
EVERY SPELL AND EVERY WEAPON NOW SOUNDS LIKE ITSELF. The first pass gave a handful of famous spells a hand-written noise and let the rest fall back on what the damage was made of, which meant a great many things sounded like each other. Two changes fix that, and both work by listening to what the game already knows. First: the spells were already telling us. Every spell in the book carries, in its own entry, the name of the sound it makes when it is cast and again when it lands — someone wrote those down long ago for the visual effects, and nothing was reading them. Now they are read. There turned out to be twenty-two distinct sounds named across the whole spellbook, so twenty-two voices were written instead of one per spell, and a spell that deliberately says it makes NO sound is now respectfully silent. Second, and the part that matters for everything added from here on: anything without a name gets a voice worked out from its own description. A spell's school decides its character — evocation bites, necromancy sinks, abjuration rises warm — its level decides how heavy and low it is, its dice how big, and how it reaches you decides its shape: a dart is a short tap, a burst is long and loud, a wall lingers. Weapons the same, from what is written on them: a seven-pound two-handed greataxe rolling a d12 lands lower, longer and louder than a one-pound dagger's d4, and an arrow bites higher than a mace. A spell added tomorrow has a fitting voice tomorrow, with nobody writing a line of sound for it.
- Feature
A WORKSHOP FOR THE SOUNDS, at /sound. The game's noises are built from numbers rather than recorded, which makes them cheap to add and impossible to review by reading — a line saying "sawtooth, two hundred hertz, falling to forty" tells you nothing about whether it sounds like a fireball. So every sound in the game is now on one page: click any of them to hear it, turn the dials while it plays, and copy the result straight back into the catalogue when it sounds right. The same idea as the sprite workshop, for the ears.
- Feature
THE GAME HAS A VOICE NOW. Blades land, spells go off, traps snap shut, and you hear the moment somebody drops. Every sound is MADE as it plays rather than loaded from a recording — a handful of numbers describing a shape, a pitch and a fall, the same way the monster art is drawn rather than painted. That is not a shortcut: it means a spell added tomorrow can have its own voice tomorrow, there is nothing to download before the first fight, and the whole library costs no space at all. Sounds are chosen from the most specific thing known about what happened: Action Surge sounds like Action Surge, a Fireball sounds like a Fireball rather than a generic burst of fire, a critical reads as a critical before it reads as a sword — and only then does it fall back to what the blow was made of. Cold is thin and high, thunder is a low shove, necrotic sinks. Chatter, turn markers and the bookkeeping in the log stay silent, deliberately: a game that pings at every line is unbearable. A flurry of hits is capped so six victims of one fireball read as a fireball and not a crackle. It is OFF until you turn it on, in the settings drawer — not out of caution but because a browser refuses to let a page make noise until you have asked it to, and a speaker icon lit over a silent game would be a lie.
- Feature
A FIGHT THAT HAS STOPPED HAPPENING NOW GETS SHAKEN UP. A delve was reported that ran past its hundred and fortieth round: two heroes ended their turn, every turn, while a single wolf swung at them from behind cover and missed nineteen times in twenty. Nobody was going to win it, and nothing in the game had noticed. Every previous cure for this named a particular shape — a spell the rules bounced, a big body that could not fit through the door it was told to walk through, an enemy one step up a terrace and therefore untouchable — and each of those was real, but there is no reason to think the supply of shapes runs out. So the question being asked is a blunter one now: has anything at all happened in the last dozen rounds? Nobody hurt, nobody felled, counts as nothing — a wolf circling a room is not progress. When the answer is no, any fighter standing there with no blow to strike and no spell to cast stops standing there and goes somewhere else, preferring ground that closes on the enemy, and never back to a square it has been ending its turns on. It cannot take a turn away from anyone who still has something to do, and it can only ever propose a step the rules have already agreed to — so the cure cannot become the disease. Measured on the seeded delves: in fights that were going fine, it never speaks at all.
- Feature
THE DICE TRAY STOPS TAKING UP TWO PANELS' WORTH OF ROOM. Throwing your own dice and reading the last roll the table made are two different things you do at two different moments, and they were both on screen at all times — the throw controls above, the engine's damage breakdown below, one always idle. They now share a single leaf that turns over, the same one the character sheet uses for stats and skills: one face at a time, and the little corner button names the other.
- Feature
THE SHEET READS IN THE ORDER YOU THINK IN. Reactions and features have moved up to sit beside stats and skills, instead of being stranded at the very bottom with the whole inventory between them and the switch that matches them. The sheet now tells you who this fighter IS — what they can do, what they know, what they react to — and then what they have to hand this turn: their weapons and their bag.
- Fix
THE CHARACTER SHEET'S LITTLE SWITCHES STOP SITTING ON TOP OF THINGS. The two ⇄ buttons that turn a panel over — stats to skills, reactions to features — were pinned twenty-two pixels above their own panel, which is not empty space; it is whatever happens to be written there. So the skills switch covered the end of the health line, and a hero who had been knocked down could not read that they were down. The features switch was worse: it sat squarely on the last thing in your bag, over the button you press to use it. Both now occupy a line of their own, where nothing can be underneath them.
- Feature
ONE TURN ORDER, HOWEVER MANY LEVELS DEEP YOU ARE. A delve is several places at once — the room you are standing in, the room you left, the field above the mouth — and until now each of them kept its own clock. The one you were not looking at was handed a whole round of its own every time you ended a single turn, which meant three companions upstairs took three turns while you took one. They crossed the room, reached the ladder and came through it inside two or three of your turns, and it did not look like walking; it looked like they had teleported to you. Slowing that down was never going to help, because the problem was that they moved in a lump at all. Everyone on every level now rolls into a single order and takes one turn when that order reaches them — so the companions you left behind walk at exactly the pace everyone else does, and you watch them come. A level with no fight on it is in the order too, rather than standing frozen until something attacks it. The log follows suit: what happened above you is written where it actually happened, in between your own turns, instead of arriving in a block.
- Fix
SOMEONE COMING UP A LADDER TAKES THE PLACE THEIR ROLL EARNED. An ally arriving from another level used to be added to the end of the turn order, which was the right rule when each level counted its own — it is the rule a room of monsters waking up still follows. With one order across the whole delve it was wrong, and quietly so: they would sit in a spot the shared order never put them, and their turns could be passed over entirely. They now slot in where their initiative says, and the creature currently acting keeps its place while they do.
- Fix
WHEN THE FIGHTING STARTS, THE PARTY COMES. Your companions walk a delve as a column behind whoever is leading, which is right for exploring a dark passage and wrong the instant somebody draws a blade — and nobody had told them the difference. The rule that keeps them at your shoulder was decided from what each of them could personally see, so any companion who could not see the enemy from where they stood — round the corner, behind whoever got there first, in an unlit room — went on keeping station while the fight happened fifteen feet away. Silently, too: holding position writes nothing to the log, which is why a delve could show ten straight rounds of a hero simply ending their turn while two of their friends fought the room alone. The column now breaks the moment steel is drawn, and they head for the fight — which they already knew how to find; they were just never asked to. Measured over sixteen delves: turns where a companion stood idle beside a live fight fell by more than a third, and the single largest cause of them is gone outright.
- Fix
A FIGHTER WHO FALLS OVER GETS BACK UP. Knocked flat by a fumble, a shove or a wolf, an AI-run hero only ever stood again if the very next thing it chose to do was swing at something. Choose anything else — walk, drink a potion, hand a comrade a potion, size up the enemy — and it stayed on the ground, and kept staying there: one companion went down on a fumbled swing in the first fight of a delve and was still lying in the dirt three fights later, every foe beside her striking at advantage the whole way, because her turns kept being spent on useful things that were not attacks. Getting up now happens first, before the turn is planned at all, which matters more than it sounds: standing costs half your speed, so a walk decided while still flat would be refused the moment the standing took its cut, and the turn would end with nothing done. Your own hero is left alone — if you chose to lie down, that is your business. Enemies live by the same rule, which they never did either.
- Fix
A HERO WITH THIRTY FEET OF ROOM STOPS STANDING STILL. Two of the four companions in a delve spent an entire ten-round fight doing nothing at all — no step, no swing, not a word — while the other two fought it alone. The cause was a piece of arithmetic that quietly disagreed with itself: when a fighter can see an enemy but cannot swing at it, it asks where the nearest patch of ground is that it COULD fight from, and then walks there. The answer it got back was ground nobody could actually stand on — the cell its own healer was standing in, or a cell underneath the enemy's own body — so the walk was refused and the hero, having been given somewhere impossible to go, simply gave up and ended its turn. And for the big enemies, the ones that take up four squares rather than one, it only ever looked at the ground around one corner of them, so the perfectly good footing beside the other three was never considered at all. It now only offers ground the body can really occupy, and it looks all the way around a large enemy. Measured over sixteen seeded delves: turns where a companion stood idle beside a live fight fell from seventeen to one, and one delve that had a paladin frozen for nine straight rounds ten feet from an ogre mage finished four rounds sooner.
- Feature
THE NARRATOR CAN BE ANY MODEL NOW, CHOSEN BY WHOEVER RUNS THE SERVER. Which service answers, which model, and where it lives are five settings rather than a code change — and they can be set separately for each KIND of question the game asks. Choosing a move from a list the rules already vetted is small work; so is a one-line taunt; but the cold open that introduces your party is the only thing you read as writing. A host can run a cheap local model for the first two and buy a good writer for the third. Out of the box it reaches Claude, anything speaking the common OpenAI dialect (which is most of the industry), a local Ollama, or a hand-rolled endpoint — and a misspelt setting now says so in the log instead of quietly serving the wrong model.
- Feature
THE PARTY TALLY IS ONE SHEET PER HERO NOW. It used to be a grid — every stat down the side, a column for each of your four — which answered "compare them" while the question you actually ask is "how did MINE do?", and which ran off the side of a phone the moment a fifth name joined. Each hero has their own tab and their own page: their profit and remaining HP up top, then the whole breakdown, with accuracy worked out for you. Zeroes are printed instead of left blank — a fighter who cast nothing should say so rather than show an empty line. And the results panel reads down the left edge now, the way a table should, instead of wandering about the middle. The roster on the Overview tab now shows PROFIT too, and ranks by it: damage dealt used to decide the order, which read a wizard who buffed, healed and never swung a blade as the worst body on the field. Profit already knows better — it counts the kills, the heals and the spells that landed, and charges for what you soaked and for going down. A hero whose fight cost the party more than it won shows in red, which is a thing worth knowing.
- Feature
A SUPPORT SPELL IS WORTH WHAT IT WAS. Every damage-less cast used to score the same flat amount, so Bless — which hands the whole party a bonus on every attack and every save for a minute — counted exactly as much as Mage Armor on yourself, and a fifth-level Hold Monster counted the same as Command. Each support spell now carries its own worth in the content files, tuned in one place; anything not yet priced falls back to a value read from its level and how many it reaches, so a new spell is never worth nothing by accident.
- Feature
A CREATURE THE PARTY HAS DECIDED TO KILL STOPS SWINGING BACK. When two or more of you concentrate on one body hard enough that it will not live to see its next turn, hitting you back buys it nothing — so it does something that might actually work instead. If a comrade can reach its side next round it covers up and holds on; if none can, it breaks off and runs to them; and if nobody is coming at all it stops trying to survive and empties everything it was saving for a later fight it will not see. Which of those a creature can even attempt comes from what it is: the sense to cover up is one thing, the wit to withdraw in good order is another, and a cornered animal fights whatever it has. Your own AI-run heroes live by the same rule, and the party healer now goes to whoever is being swarmed rather than to whoever has the lowest health bar — which was never quite the same person, and was usually the same person a round too late. A boss does none of it: it is the master of the place and it goes down where it stands, spending everything.
- Feature
THE TALLY SAYS WHAT EVERYONE ACTUALLY DID, INCLUDING THEM. Every fighter on the field now has a page of their own — yours and theirs — and you reach any of them by clicking their line on the results roster, which is also the ranking, so there is one list and one way in rather than a row of tabs that could only ever hold your own party. On each page: which spells were cast and what each one did (six Fire Bolts and six Fireballs are different battles, and the old "casts: 6" could not tell them apart), and which class features were spent — the surge, the second wind, the flurry — which the screen could not show at all before, because using one left nothing behind but a line of prose. Anything a fighter did none of is simply absent; a heading over an empty list helps nobody.
- Feature
THE ENEMIES ARE SOMEBODY NOW — but you have to find out who. Three lines on the results roster all reading "Lizardfolk Warrior", one of them dead, told you nothing about which was which, so the rank and file are numbered now and you can finally tell them apart. And the ones who stand out — an elite, anything that casts, anything that speaks, the great singular things — answer to a name among their own people. You do not get told it. You are a stranger to them: your log says "Elite Goblin" because that is all anyone in your party could honestly write down. You learn a name the way you learn one across a crowded room — somebody who already knows it says it out loud, close enough to hear, and not through a wall. Hear it once and it is a rumour, written with a question mark. Hear it again and it is a fact. Beasts and the walking dead have no names to learn.
- Fix
PROFIT STOPS AT ZERO, AND EXPLAINS ITSELF. A wizard who buffed the party three times and was then cut down read −27, which is the results screen saying the party would have been better off leaving them at home. It would not have been: soaking damage and going down are costs against what you earned, not debts you owe, so they now rank you below someone who did the same and lived, and no further. The one exception is hitting your own side — a blast through your own line is a subtraction from your fight rather than a cost of it, and it goes straight through the floor. It also no longer PAYS you for that damage, which it quietly used to. And there is an ⓘ beside the number now: every figure in it is read from the same code that scores the battle, so it cannot drift into describing a version of the rules that no longer exists.
- Fix
A CAMP CANNOT BE PICKED APART IN SILENCE ANY MORE. Two rules kept guards asleep until the fight was actually at them — one so a distant sighting stopped waking three war-parties at once mid-march, the other so a single scuffle at a dungeon entrance stopped rousing every room on the level. Between them they left a hole you could stand in: shoot a sleeping guard from far enough away and nobody sees you, and the guard you hit is too far from you to raise the alarm — so the goblin FIVE FEET AWAY slept through its neighbour being killed, and a war-party could be taken apart one body at a time without ever fighting as a war-party. A wounded comrade within earshot now wakes you wherever the shooter is standing, and a body hitting the ground is louder still. It cannot spread the way the old bugs did: it takes actual blood to raise, and waking somebody draws none.
- Feature
THE PAID PLAN GETS AN HONEST METER. Champion now includes 120 narrated battles a month — about four a day, more than anyone has played in a month — counted per calendar month and reset when it turns. It is written in the plans file next to the free tier's two trial fights, so changing it is an edit, not a release. A narrated dungeon crawl asks the model over two hundred questions; a flat price with no ceiling was a promise the game could not keep at scale.
- Feature
THE NARRATOR CAN NOW RUN ON A HOSTED MODEL, and it should. The single graphics card behind the tunnel answers one battle at a time and takes about eight seconds a turn — roughly six fights an hour, whether or not anybody is playing. The hosted route costs about the same per fight, answers many times faster, and does not queue. Which model does what is now decided by what the call IS: choosing a move from a list the rules already vetted is small work, and so is a one-line taunt, but the cold open that introduces your party and the wide-lens scene beats are the only lines you read as writing — those get the better writer.
- Fix
THE NARRATOR'S DOOR HAD NO LOCK IN IT. The server checked your free fights with "used is at most the allowance" — and because the ledger stops counting AT the allowance, that sentence was true forever. Every account kept the AI Narrator for life, and the paid plan had no ceiling at all. The check now asks the ledger the question it was always meant to ask: is THIS battle paid for? Your battles are unaffected — a fight already under way is never cut off mid-turn, which is what the broken comparison was clumsily reaching for.
- Fix
YOUR COMPANIONS THINK FOR THEMSELVES AGAIN — literally. AI-run party members were asking the language model what to do on every turn, which turned out to be three of every four questions the whole battle asked, because your side acts every round while the monsters are still asleep in the next room. They now fight on the party doctrine that every balance pass was tuned against, and the Narrator spends itself on the creatures across the table — which is the half you are actually watching. The old behaviour is one setting away if you want it back.
- Fix
THE TABLE STOPPED TALKING OVER ITSELF. The Game Master could speak fifty times in a single battle. Nobody scrolls back to re-read the fiftieth joke, and it was costing more than the fight it was joking about. Fifteen now — the deaths, the turns of the tide, the openings.
- Fix
A WARLOCK WHO KNEW MISTY STEP QUIETLY LOST THE NARRATOR. Cell-aimed spells are filed together, and a teleport was being handed to the part of the code that measures who a blast would catch — which asked a spell with no blast radius how big its blast was, and fell over. The failure was caught and hidden: the hero fell back to the instant AI and nothing said why, for the rest of the battle. It happened in as many as two or three turns of a deep run.
- Fix
Every switch in the ☰ drawer now works the same way. The AI Narrator, tactical control, strict commander, watch mode and the speed dial had each been built by hand, and two of them shared a single signal — so changing either quietly woke both. They run on one mechanism now, and every setting you had already chosen carries over untouched.
- Fix
The map of the code now matches the code. Which part of the game may lean on which had been kept by review alone, and review had let nine wrong-way dependencies through — including one out of the rules engine, the piece that is meant to depend on nothing at all. That rule is now a test that reads every file and fails on the first arrow pointing the wrong way, so it cannot drift again. Nothing about play changes; the groundwork underneath it stops rotting.
- Fix
The fight that could not end, ended. One battle in forty used to freeze forever — a giant pocketed in its own spawn corner, a spell menu offering casts the rules would refuse, a mover asking for ground its body could not take, packs stacking regenerating monsters no spent party could finish. Four causes, four cures: the open field clears a path from every spawn, the AI never again proposes what the dice will not allow, at most one regenerator marches per warband, and a tripwire now guards the dungeon's forward march. Thirty-eight frozen battles from the hunt: all of them now finish.
- Feature
The tally learned names: flip the battle statistics to HEROES and every companion answers for their fight — swings, hits, misses, fumbles, casts, support, heals, kills — crowned by a PROFIT score that prices a body's whole fight in one honest number. Medals for the top three; the ledger does not flatter.
- Feature
One more? The victory screen now offers the next battle directly — same settings, fresh field, one click while the blood is still up.
- Feature
Every passage is now wide enough to die in: corridors, mouths and camp lanes guarantee a 10ft route, so a dire wolf the size of a cart no longer paces behind a squeeze while you pepper it with arrows. In dungeons, if it spawned, it can reach you — 37 of 40 dungeons used to strand something; now none do. The wild keeps a few stubborn camp corners; the wolves there squeeze out all the same.
- Feature
The dungeon learned mercy without learning softness: short rests now scale with the band (the easy road breathes, the deadly road runs lean), and the party is granted one breath at the boss door — the finale is decided by the fight, not by arriving empty. Deep dungeons above level 3 got their own fitted prices; fair warning, they run HARD — past easy the halls stop being fair, and deadly means most parties do not come home.
- Feature
The promise of a fight changed: every difficulty now aims for a real contest — win two of three, no more, no less — and DEADLY means a coin flip. Easy, medium and hard choose what you face; deadly chooses whether you should have come. Fitted over some seven hundred measured fights, at every level, in the open field and down the halls alike. Bring bandages.
- Fix
The war chief brings the warband: the arithmetic that retires low-level chaff from high-level fights was also stripping leaders of their own kin, so an orc war chief marched with trolls and giants and not one orc behind it. Up to four of a leader's own people now ride with it from below the cut — honestly priced, and exactly as expendable as they look.
- Fix
The Bands were re-measured against the smarter pack. Once wolves learned to pull down the wounded, the old promises ran hot — a level-1 party lost two of every three deadly dungeon crawls. Hard and deadly came down where the probe said so (a few thousand fights have opinions), and every difficulty now lands where its word says it should: hard fights are hard, deadly fights are survivable by the skin of the teeth, at every level and in both shapes.
- Fix
The pack hunts the WOUNDED again: the wolf's playbook was reading a health percentage as hit points, so it pulled down the biggest body on the field instead of the bleeding one. The mistake inverted the doctrine; the fix is one honest fraction.
- Fix
A stranded creature now falls back only to ground it can truly FIGHT from — the engine's own reach math, height gap included. No more marching to the base of a parapet to be shot, and no more shuttling between the wall and the gate road while the party watched from the ramparts.
- Fix
The mimic went back into its chest: it is content, not a soldier, and it no longer headlines low-level dungeons (where its 'anyone may join me' neutrality also dissolved the faction lines). It still springs from a stamped chest, as written.
- Fix
A dungeon boss must be able to STAFF its halls: the strongest body that can actually field a garrison now takes the throne. The level-1 'dungeon' of one lonely lizardfolk in five empty rooms is over.
- Fix
The pricer stopped lying about two things: a fire rider on a bite now counts toward what a monster is worth, and a giant's thrown boulder no longer does — the boulder is the map's to give, one throw each, and a bare hall leaves the giant honestly melee-only.
- Feature
A GAME-SPEED DIAL. The settings drawer grows a pacing control: 1× is the readable default, 2× and 3× hurry every AI beat and every walk together — the animation and the turn loop read the same clock, so nothing gets cut mid-stride. Turn it up to watch a big fight resolve or to march a wilderness without the wait; your choice is remembered.
- Fix
SMOOTHER ON PHONES. The board now caps its canvas resolution at 2× (a triple-density phone was pushing more than twice the pixels per frame for no visible gain) and drops per-shape edge buffering nothing in this art style needs. Measured on a throttled phone profile: panning the big wilderness went from 58 to 74 frames a second — same look, less heat.
- Feature
THE HORDE SCATTERS INTO WAR-PARTIES. A big open-field force no longer stands as one wall of bodies: the pack deals into groups of two to five, each war-party claiming its own ground 150+ feet from the next — a warband holding the map, not a queue at your muster. And they SLEEP until met: each party is dormant in its own camp, waking only when the heroes come near (or when its own fight's noise carries), so the turns between your moves belong to the fight you're actually in — no more waiting on twenty distant monsters pacing in the dark. Clearing camp after camp is a gauntlet, and it earns the crawl's breathers: short rests between engagements, budgeted to how many camps the field holds.
- Fix
A CAMP HOLDS ITS GROUND UNTIL THE FIGHT IS AT IT. Open-country eyes reach far — far enough that marching mid-field used to wake two or three war-parties at once, and every round after crawled through the whole map's roused stragglers. A camped party now stirs only when heroes come within 60 feet (or when blood is drawn at any range) — one camp, one fight, and the turns between your moves stay yours.
- Fix
A DEADLY ×5 IS A HORDE NOW. High-level, high-multiplier brawls were quietly fielding a tenth of their budget — nine goblins against a party that paid for ninety. Three causes, all fixed: the per-kind cap now scales with the encounter dial (a ×5 fields five ogres, though a dragon stays singular), the roster's mid-CR spine — veterans, captains, chain brutes, the war chief, the ogre mage — no longer retires at high levels, and the shown budget clamps to what the bestiary can actually field, the same honesty the dungeon packs already had. Measured: a level-12 ×10 brawl went from 17% of its budget to 91% — a thirty-four-body war. Normal ×1 fights are untouched.
- Feature
THE SHEET TURNS ITS SECOND LEAF. The battle sheet's long trait list no longer stretches the card to the floor — Reactions and Features now share one flipped panel, turned with the same ⇄ corner button the ability grid uses for skills. The sheet stays short and battle-focused; the full feature text is one flip away.
- Fix
A HAMLET, NOT A BLOB. Village homes could land on each other and melt into one walled mass. Every house now keeps at least a one-cell lane from its neighbours — the hamlet reads as separate homes with alleys between them.
- Feature
THE MAP FITS THE FIGHT. The map-size switcher is gone — the battlefield now sizes itself to the encounter actually rolled: a handful of goblins gets a tight 30×20 yard, a mid-weight warband a 50×40 field, and only a genuinely deadly horde unrolls the full 75×75 world. The measure is the monsters' true CRs, not the mob-inflated math — seven cheap gnolls are still a yard fight. No more four heroes lost on an empty map. The one map you still choose is the Wilderness Quest — that's a different journey, not a bigger yard. Old share links with a chosen size reproduce their exact battles, and the sizing thresholds are plain data in the arena catalog.
- Fix
THE PACK STAYS A PACK. On the big zoned fields the enemy force always dealt itself across both camp grounds — so a two-monster fight left one lonely foe in each far corner of the map. A pack now splits only when it has the heads for it (about three per camp); anything smaller musters together at the nearest ground, so the fight is a fight and the walk is short.
- Feature
THE WILDERNESS DRESSES ITSELF TOO. The dungeon treatment steps into the open air: village huts get real plank floors, ruins worn flagstone with moss creeping through, the castle courtyard its cobbles. And out in the open ground, the land remembers: a cold campsite with its fire pit and dragged stores, a ring of standing stones over pale runes, an old burial plot in orderly rows, a bone field where something giant died (its skeleton in the dirt — bear, dragon, spider, or worse), a cart wreck spilled beside the road with ruts curving past, and spider thickets webbed thick — sticky ground, half speed to cross, flyers glide over. All of it is paint and set-dressing on the same fight: every share link and saved battle deals exactly the spawns, roads and doors it always did.
- Feature
BIG MAPS ARE WHOLE WORLDS, WHATEVER THE SCENE. A large map with a chosen landmark used to be the small battle box floating in empty outland — now every medium-and-up field lays out through the zoned world engine, scene included: a forest scene grows a true forest world, a road scene paves its whole connector network to the horizon, and a village scene raises the hamlet at your muster — the party defends its own homes, plank floors and all. Scene-less big maps keep their exact layouts; the classic bounded arena still owns the small yards.
- Feature
THE DARK IS REAL NOW. Every dungeon cell is bright, dim, or truly dark — and sight follows the light. Sun-born heroes carry a lit torch in their kit (a warm pool that walks with them, bright 20ft, dim to 40); darkvision races prowl unlit and keep their edge; monsters see 60ft in the black. Themed rooms mount real wall sconces and the corridors keep a torchline, so lit halls and dark pockets are the map's own story — a fungal grotto shimmers on its own, the ritual pool glows. What you see is what the rules see: a lit foe shows at range, an unlit one only inside your darkvision — or a 10ft grope into the murk. And the shadows work for you too: hiding in dim light or darkness shaves the watchers' passive Perception. The board shows all of it — torch pools, sconce glow, and a night-wash on the cells you see but cannot light.
- Feature
THE DUNGEON DRESSES ITSELF. Every room now rolls a floor worth looking at — worn flagstone, planked halls, packed dirt, cobbles, moss — and wears its purpose on it: bones and cobwebs thicken in a crypt, blood pools in a slaughter pen, and wear gathers where one ground gives way to another. Blob-carved chambers read as true CAVES, jagged rock walls and all; corridors sprout blind dead-end stubs, and some carry a story of their own — a blood-streaked massacre trail. Set-piece rooms hide among the halls: a ritual pool ringed in pale runes, an overgrown grotto, barred prison pens, a banquet hall with long tables to fight across, a crypt of headstones, an abandoned mine with cart tracks curving through ore heaps, a shrine watched by its stone idol — and, rarely, a bone hoard with a giant skeleton embedded in the floor. All of it is paint on the same fight — every existing share link and saved battle deals exactly the rooms, doors and monsters it always did. And mind the webs: spiders have claimed some halls — a webbed square is sticky ground (half speed to cross; flyers glide over), woven thick through cobwebbed passages, crypts and bone caves.
- Feature
THE HERO CARD LEARNS A SECOND TURN OF THE WRIST. Skills and Traits & Features now share one full-height card in the Hero Forge — two sides of the same leaf, turned with the ⇄ in its corner. The traits escape the cramped strip they lived in and get the whole card to breathe, the skills keep their two columns, and the card's own turn works everywhere the forge appears — the co-op story lobby included, where the footer's big flip stays home.
- Feature
THE HERO FORGE IS THE STORY TABLE'S LOBBY. A co-op story no longer configures itself on the battle builder — it opens at the forge, where story characters have always been made: the illuminated card, rolled or bought stats, the team tabs. Friends CONNECT INTO THE TEAM: a player who joins claims the next tab and forges their character on their own screen; tabs nobody claims march as the host's AI companions, exactly as a solo team would. The table bar sits above the anvil — code, seats, Ready, Begin — with the host's run terms beside it, and the run is a level-one expedition: an open approach over a boss dungeon, descended together. Nothing touches anyone's hub — the run is its own tale for now.
- Feature
A LOGIN NO LONGER LIVES FOREVER. A signed-in account left silent for thirty days is signed out to a fresh guest on its next visit — the sign-in dialog opens by itself and says why. The stamp refreshes while you actually play, so an active player never meets it; guests are exempt on principle, because an anonymous identity IS the device's own world and expiring it would orphan it. (The stricter per-browser-session sign-in was considered and rejected: it is per-TAB under the hood and would demand a fresh login in every new tab.)
- Feature
EVERY TAB AGREES WHOSE WORLD IT IS. An account switch — sign-in, sign-out, another account entirely — is announced on a browser broadcast channel, and any tab running under a different identity reloads itself into the right one: with local data scoped per account, a stale tab must never keep writing into the old world. Browsers without broadcast channels get the same guarantee through storage events; the tab that made the switch reloads too, so screens never show one account's data under another's name.
- Fix
A GUEST'S DOOR SAYS SIGN IN. The account sidebar offered "Sign out" to guests with no account attached — which would have handed them a brand-new identity and, with per-account worlds, orphaned the one they were playing. A guest now sees 🔑 Sign in (the modal, right there); only a real account gets the door out.
- Fix
A STORY LOBBY STOPPED CALLING ITSELF BATTLE SETTINGS. Hosting a co-op story landed you on a page titled "Encounter builder · Battle settings" — the right room in the wrong clothes. A story table's lobby now says what it is: 📖 Co-op story · The expedition, and its settings section reads "The run".
- Feature
THE STORY TABLE BECAME A REAL RUN. Opening a co-op STORY table no longer builds the same skirmish as a battle — it builds a shared expedition: the party musters on an open approach, the dungeon waits under the found stairs, the refereed descent carries everyone down together, and the run ends when the delve's master falls. The lobby knows what it is — story tables hide the arena knobs (the run brings its own ground) and wear the mode's name. The full persistent campaign — a shared town, many runs on one ledger — remains the road ahead, and says so.
- Fix
THE BOARD POSTS WHAT YOU CAN REACH. A level-1 muster in Aldermoor stood under notices built for level 4 — technically a choice, practically a mislabelled town. The notice board and the barkeep now fold their range to one step above your strongest living hero: a fresh party sees the gentle end, the deep end opens as they climb, and a veteran still can't drag a village board above its own ceiling. Over-reach stays possible — by one rung, not three.
- Feature
SIGNING IN IS A MOMENT, NOT A DESTINATION. Every "Sign in" and "Keep my progress" now opens the sign-in as a modal over the page you're on — the profile, the builder, an invite you just followed — and closes back to exactly where you were, signed in. The /login page remains for links from outside.
- Fix
THE DOOR TO STORY MODE SAYS SO. "New profile · Create" read as bookkeeping — it is in fact the beginning of a campaign. The card now says what it does: Begin a new story — a home town, heroes to raise, a shared bank, expeditions into the wilds — name the saga and step in.
- Fix
ONE POPUP, ONE ACCOUNT PICK. A returning Google player on a fresh guest session had to choose their account TWICE: the first popup tried to link the guest, learned the account already existed, and the fallback opened a whole second popup to sign in. The failed link's error already carries the credential the player just proved — sign-in now completes with it directly, no second window.
- Fix
A NEW ACCOUNT STARTS WITH A CLEAN RECORD. Signing into a fresh account on a well-used machine used to inherit the device's whole history — 53 battles, somebody else's heroes, somebody else's gold. The local stores now belong to an account, not a machine: the first account to touch the device keeps everything it already had (no migration, nothing moves), any other account gets its own untouched world — heroes, battles, saves, gold, the works — and switching back restores the first one exactly. A guest who upgrades to a real sign-in keeps everything, as always; a guest who arrives after someone signed out starts clean instead of borrowing their history. Erasing your account now erases YOUR world, and only yours.
- Feature
THE FIRST ADMIN NEEDS NO TERMINAL. Every account document now carries its roles field from birth, and a new cloud trigger keeps the real credential — the signed token claim the server verifies — in step with it: edit the array in the Firebase console and the grant follows within a second; delete the document and the privileges go with it. The admin panel writes the very same field, so once one administrator exists, every later promotion happens there, on the record. (Touch-writes — a login stamp, a consent mirror — are recognised for what they are and never burn an Auth call.) The freshly granted must still sign out and back in: a claim only travels with a fresh token.
- Fix
THE ACCOUNT PAGE STOPPED RUNNING THE OLD LOBBY. Play-together on the profile still joined the pre-lobby way — a saved hero snapshotted the moment you clicked, landing in the bare room. A battle player now lands in the one true lobby, the Battle settings screen, hero forged and committed at Ready like everywhere else; the Game Master and story tables keep the room, and an old room link quietly walks a player to the right place.
- Feature
LEAVE THE BATTLE — AND COME BACK. The shared board gained a door: step out mid-fight and your heroes fall to the referee's AI, the table plays on without you (host or not — the board has no throne). Your seat stays yours: reopen the battle and take back control, or find it on the builder's new MULTIPLAYER tab — New battle, Solo saves and running shared fights each under their own tab now — listing every fight you're part of: your hero's name, class and tier, HP, the round, how the sides stand, whether your seat rides the AI, and how long ago it last moved — days later, any of them, one Rejoin away. And when EVERYONE steps away, the fight freezes exactly where it stands; nobody returns to a defeat the AI played out unseen.
- Feature
A NICKNAME OF YOUR OWN. The account page now takes the name tables show for you — set once, seen at every lobby and roster, never guessed from an email. Seat chips say who the person is; their hero can be called whatever the hero is called.
- Fix
THE PHANTOM SECOND FIGHTER. Two things conspired: a hero was snapshotted the moment you joined — an untouched default fighter, frozen before you forged anything — and a friend's seat landing on a slot you HAD forged silently swallowed it. Ready is now the only moment a forge crosses the wire (the host's Begin takes the last snapshot), and a joining friend shifts your forged companion into the next free slot instead of eating it. What fights is always what the screens showed.
- Fix
NO MORE TRIPLET ADVENTURERS. Unnamed heroes at a shared table all wore the same fallback word — three of them in one initiative list. Blank names now ride blank and the battle names each one the way single-player always has: a random famous name, every one distinct.
- Feature
THE BUILDER IS THE LOBBY NOW. No separate settings page for playing together — opening or joining a table keeps you on Battle settings, and the screen becomes the table. Friends map onto the party slots in join order: slot one is the host, the second player to join lands in slot two with their own full forge on their own screen, and any seat nobody claims stays the host's to forge — it rides into the fight as an AI companion. The host's knobs (party level, difficulty, arena, scene, field size, stealth) are the fight's terms, synced to every seated builder live; guests see them locked with an honest padlock.
- Feature
READY FREEZES YOUR HERO. The table bar sits where the co-op card was: the code to read out loud, everyone's ready state, your "I'm ready" (which snapshots your forge as the hero you bring — un-ready to keep editing), and the host's Begin, which takes its own final snapshot so late joiners and last-second gear swaps are never lost. When the board rolls, every seated builder walks to it together. The lobby survives a refresh — the table rides the address bar.
- Fix
AT A TABLE, CONTROL IS A FACT, NOT A TOGGLE. The You/AI switch on a slot made sense alone — at a table it lied: your seat is always yours, and an unclaimed slot always fights as an AI companion until a friend takes it. In table mode the chip now just says which — "🎮 You" on your seat, "🤖 AI · seat open" on the rest — with nothing to click.
- Fix
LAST RELEASE'S LOBBY SETTINGS CARD IS GONE. It lasted a day — a second, smaller copy of the builder was the wrong answer to "where do I set up the fight", and the builder itself was the right one. The room page keeps only what it still owns: the handoff to a started board.
- Feature
THE TABLE DESCENDS TOGETHER. The dungeon mouth works at the shared table now — the referee learned the encounter-layer swap the engine always refused. A hero stepping onto the found stairs slips into the dark one by one, waiting below while teammates finish up top; the last hero's step swaps the board for everyone, stragglers and companions carried down with it; and clearing the delve climbs the whole table back into daylight, loot in hand. (Two floors running live at once — each with its own turns — remains future work, and honestly said so.)
- Fix
THE LOBBY OWNS THE FIGHT'S TERMS. "Join and ready just started the battle with random params" — because the builder's settings were frozen at the moment the table was opened, not the moment it began. The room now shows the fight ahead — level, difficulty, arena, scene, field size, stealth — and the HOST tunes it right there until Begin; every change is a refereed write that joiners watch land live, so nobody readies up for a mystery. The builder's Play-together card still seeds the values; it just stopped having the last word.
- Fix
NOBODY WAITS ON A GHOST. The referee used to consider a hero's turn worth waiting for even after that hero had slipped below or fled the field — a fight could stall on a seat whose creature wasn't on the board. An off-board hero's cursor is now the skip-guard's to clear, like any other.
- Feature
THE SHARED TABLE GOT THE REAL BATTLE. The co-op board is no longer a thin map with four buttons — it is the same battle screen single-player gets: the character sheet, the magic drawer, the inventory, the full action bar, targeting rings and range previews, the initiative column, the combat log, the dice tray, loot chests and corpse-searching, the results tally at the end. Every action the engine knows is now yours at a friend's table — the server referee was already running the full rules; the screen finally shows them.
- Feature
THE BUILDER OPENS TABLES NOW. The Play-together card moved to the top of Battle settings — and it means what the screen says: open a table there and the hero forged in slot one (name, class, ancestry, point-buy, gear) is the hero you bring, while the encounter settings around it (party level, difficulty, arena, scene, field size, stealth) become the fight the whole table walks into. Tables opened from the account pages still play the classic medium open field.
- Feature
THE GAME MASTER'S SEAT SEES LIKE ONE. At a table with a DM, their screen now wears the full master's lens — enemy health, hidden traps, no fog — and their monsters get the same sheet and action bar the heroes do.
- Fix
BEAMS CROSS THE WIRE. Scorching Ray, Magic Missile and Eldritch Blast work on the shared board the way they do at home: mark your targets projectile by projectile, and the volley flies — one refereed intent for a split cast, one refereed swing per blast beam.
- Feature
YOUR ACCOUNT IS A RECORD OF YOUR ACCOUNT NOW. It used to hold an email and a timestamp. It holds who you are as the server knows it: your picture, whether your address is verified, and EVERY way you can sign in — the Google button and the password you added afterwards both, because a sign-in token only ever names the door you came through this time, and the account should know all of them. None of it is taken from the browser's word for it.
- Feature
WHAT YOU ALLOWED IS KEPT WITH YOUR ACCOUNT, NOT ONLY IN THIS BROWSER. Answer the privacy ask and a copy of the answer — what you allowed and when — is filed against your account. Sign in on a new machine and the answer you are already living under travels with you. The device you clicked on always wins: the copy is a record to produce later, never something that reaches back and changes what this browser does.
- Feature
TERMS OF SERVICE, DRAFTED BUT NOT YET IN FORCE. There is a /terms page, thirteen sections of plain-language terms behind it, and the machinery to ask you to accept a numbered version — and the asking is switched off until the draft is finished and reviewed. Until it is, the page says so, nobody is asked to accept anything, and no acceptance is recorded. Your device remembers which version it agreed to, so publishing the terms, or changing them later, asks everyone again rather than quietly assuming the old yes still counts.
- Fix
THE CLOUD LEARNED TO OPEN THE VAULT. Every account route on the deployed site crashed before it could speak: the auth library's newest release pulls in a key-checker built in a module format older Node runtimes refuse to load. The library is pinned back to the same major the game's own cloud functions already run — verified against a production build, table opened and joined — and the project now declares the Node 22 runtime besides.
- Feature
ADMINISTRATORS ARE MADE IN THE PANEL NOW, AND THE GRANT IS ON THE RECORD. Who may administer this game used to be a line in the server's environment — invisible from inside the game, changeable only by whoever could redeploy it, and silent about who decided. A grant is a document now: the roles held, who granted them, when, and a note saying why. The panel shows all four beside each account, so "why does this person have this" is a question the game can answer instead of a thing somebody has to remember.
- Feature
THE GRANT AND THE LIVE SESSION CAN DISAGREE, AND THE PANEL SAYS SO. A role reaches its holder inside their sign-in token, which refreshes on its own schedule — so for a little while after a change, what is recorded and what is enforced are two different answers. Rather than pretend otherwise, the panel marks the account and says it will settle on their next refresh.
- Fix
THE ENVIRONMENT NO LONGER MAKES ANYONE AN ADMINISTRATOR. ADMIN_UIDS and ADMIN_EMAILS are gone, and nothing outside the panel grants a role. The very first administrator is seeded once with `npm run grant-admin`, which is the only way in: a privilege that rides in a sign-in token cannot be written from a database console, so the seed has to be a deliberate act carrying the server's own credentials.
- Fix
THE PRODUCTION BUILD STOPPED TYPE-CHECKING THE REFEREE. The Cloud Function that referees shared battles is its own package, with its own dependencies — but the app's build was reading its source as if it were part of the app, and failing on the first import it could not find there. It is checked on its own terms now, and the app builds again.
- Feature
GIFTS TRAVEL BY COURIER. An admin can grant gold or an artifact — it waits in a claim inbox no player's client can write to, and lands the next time its owner reaches the hub: a courier line in the log, the note the admin wrote, gold into the bank, the artifact onto the shelf. Claimed exactly once, server's word on it — asking twice pays nothing.
- Feature
THE TABLE MOVED TO WHERE PLAYERS MEET. A compact Play-together card now sits on the profile picker and on the battle builder — open a co-op table or type a friend's code right where you were already standing, no detour through the account pages (which keep the full view: seats, roster, everything).
- Fix
"YOUR SESSION HAS EXPIRED" MOSTLY WASN'T. A tab left open long enough would carry an aged token to the table routes and be turned away. The table calls now retry once with a freshly minted token before believing the rejection.
- Fix
"THAT DIDN'T WORK" LEARNED TO TALK. A table route that fell over mid-sentence (a backend not yet set up, a store read gone wrong) used to answer with an unreadable error page, which the room could only shrug at. Unexpected failures now come back as honest words — "the table server stumbled, try again" — and the shrug itself says at least which kind of failure it saw.
- Fix
ONE EMULATOR, ONE NAMESPACE. Local play-together was broken by a name split: the emulators start under the project in .firebaserc, while the app's emulator mode insisted on a demo id — so the browser, the server and the referee each talked to a different namespace and every table call failed. Emulator mode now follows the configured project id (the demo name stays as the no-config fallback); a table was opened and joined end-to-end against the local suite to prove it.
- Feature
THE WORK IS OUT THERE, ON THE MAP. Every quest you take now hangs a dashed gold pin on the realm map — a rolled number of day-marches out from the town that posted it, harder work rolling deeper into the wilds. Click the pin for the deal; march out and you walk a real road to it: camps, night dice, ambushers weighing your renown — and the site itself is the fight at the end. No more teleporting into a quest camp from a menu: you move between quests the way you move between towns, because it is the same walking.
- Feature
THE MARCH STARTS WHERE THE WORK WAS POSTED. A commission taken in Aldermoor is marched from Aldermoor — its pin says so, and from anywhere else the card points you down the road first. The same quest always sits in exactly the same place; abandon it and the pin folds its tent.
- Feature
TAKING A NOTICE IS SIGNING, NOT TELEPORTING. Pulling a job off the board now puts it in your journal and pins its site on the realm map — nothing more. The dungeon it advertised is still exactly the dungeon you'll get, built when your boots actually arrive: the notice's own floors, skulls and posted level ride the journal to the site. The board's taken-quest notes now point at the map instead of launching you through it.
- Feature
ARRIVING IS CAMPING, NOT CHARGING. Walking the road to a quest no longer dumps you into the fight at the end: the party makes camp within sight of the work — the map shows the tent pitched at the pin — and the assault begins when YOU say so. Won or wary, the camp stays until you break it and walk the road home; winning never teleports anyone anywhere.
- Feature
THE ROAD HOME ROLLS ITS OWN DICE. Breaking camp doesn't blink you back to town — the same length of road walks the other way with fresh dice: day trouble, night ambushes, camps that rest, hunters who weigh your renown. The map's marker slides from the site back toward the gates, day by day.
- Feature
THE CAMP AT THE SITE IS NOT A SAFE ROOM. The night you pitch camp within sight of the work now rolls the ambush dice like every camp on the road — the sentry's watch against the dark, hunters weighing your renown before they dare, the same surprise if the watch fails. Survive it and that night is still a night's rest; the assault waits for morning and your word.
- Feature
THE ROAD KILLS LIKE THE DUNGEON. A party that goes down on a journey is a party that died there — the hero for good, the fallen companions with them, the purse into the ditch, the epitaph naming the road that took them. The bank in town survives, as it always has. Sounding the retreat is still an escape: fleeing a road fight limps you home alive.
- Feature
RUNNING COSTS THE PURSE. Fleeing a road fight saves your necks, not your coin — every purse the party carried empties in the scramble, the hero's and each companion's alike. What sits in the town bank stays yours; what was on your belt is in a ditch somewhere behind you.
- Feature
MERCHANTS HIRE SWORDS NOW. On any town road of two days or more, a caravan may be waiting at the gates — travel as its guard and the fee lands on safe arrival, split through the party like any honest pay. But wagons draw hungry eyes: the night ambush dice run hotter the whole way, and a party that flees or falls collects nothing. A new caravan rolls each day; the road card shows who's waiting and what they offer.
- Feature
THE WAGON SELLS AT THE HALT. When trouble stops an escorted road, the caravan's trader opens the wagon: a small shelf of road goods — potions, scrolls, a vial of something unkind — at road prices, because convenience costs. Purse only, no haggling on a roadside, and what you buy rides in the pack for the next fight, not the one already drawn.
- Feature
THE WAGON BUYS, TOO. The caravan's trader will take loot off your hands at the halt — at roadside rates, which is to say cheaply, and only as far as a wagon's till stretches. Anything too rich for the road waits for a town ledger. Sell the ring you're attuned to and the attunement leaves with it.
- Feature
THE WAGON STANDS ON THE FIELD. When trouble finds an escorted road, the caravan is THERE — parked beside the party, a fat slow target the raiders can burn. It takes no turns and neither wins nor loses the battle: but if the wagon falls, the contract falls with it — no fee at the gates, and the rest of the road walks quieter without the freight. Guard your ward, or fight for nothing. And it LOOKS the part: a canvas-bonneted wagon on the board, painted in the same 16-pixel hand as the monsters — with its two draft horses hitched alongside, and a caravan whose team is cut down is as stranded as one whose bed burned.
- Feature
THE FREIGHT IS RIGHT THERE. The escorted wagon's strongbox sits unloaded beside it in every road fight — the merchant's own goods, and nobody is watching it mid-melee. Crack it open like any chest and take your pick: you keep what you steal, and the merchant keeps his eyes open — the contract burns on the spot, no fee at the gates. An honest guard leaves it shut.
- Feature
THE RAIDERS WANT IT TOO. Any enemy who fights their way to the strongbox tears into it in passing — the freight is plundered, gone for everyone, and the contract with it. Guarding a caravan is now a matter of ground, not just of kills: hold the line around the wagon, or win the fight and still walk home unpaid.
- Fix
A RETREAT FALLS BACK TO THE CAMP. Sounding the retreat at a quest site returns the party to their tent at the pin — the hub reopens on the atlas, not on streets three days away — and the next "Begin the assault" re-enters the same marked run, licking its wounds at the gates, instead of quietly starting a second one.
- Fix
A ROUT ON THE ROAD SCATTERS THE SIEGE. Flee a fight while marching to or from a quest and the party doesn't just limp home — the half-fought run waiting at the site is lost with the road: it's marked abandoned, not held open for a company that was chased off the countryside. The quest itself stays in the journal; the approach starts over.
- Fix
THE TAG WALKS THE MAP. The party's marker now glides from where it stood to where it stands — town to town, town to camp, camp to home — instead of blinking across the realm; even an arrival that came through a road fight slides in from the far end. And the terrain painter stopped grumbling into the console about caching an unmeasurable canvas.
- Fix
OUT OF TOWN MEANS OUT OF TOWN. While the party camps at a quest site, the sidebar no longer offers the tavern, the trader and the notice board from days away — the town's card waits until you're back inside its walls. And the party camp's signpost knows where it stands: at home it reads "back to town"; out in the wilds it reads "back to the road" and leads to the map.
- Fix
A DEADLY FIGHT IS DEADLY AGAIN. A "deadly" roll could field two lonely monsters at a fifth of its budget: the first pick anchors the pack's faction, and some anchors — a lizardfolk shaman whose only companion is a ghast — have nobody else to call. The builder now throws a starved roster back and re-anchors, keeping the best attempt: sixty seeds of level-7 deadly all land real fights now, none below 60% of budget.
- Feature
SHARED FIGHTS GO IN THE SHARED BOOK. When a co-op battle ends, the referee files a game record every participant can read — who fought, how many rounds, how it went. It lives in its own collection because a fight that belonged to two people can't be filed under either one alone, and it survives any one player's self-erasure.
- Fix
TOWNS BECAME MAP PINS, AND THE MILES GOT THEIR MAP BACK. The realm's day-grid was always honest — a 5-day road really did span five squares — but each town wore a card wider than the road beside it, so everywhere looked next door. The world map now marks settlements the way a real map does: a small pin with its name, the full card waiting on a click — and suddenly seven days looks like seven days.
- Feature
THE STORY HUD WEARS THE HOUSE STYLE. The town screen's left panel is redrawn to the same design language as the account pages: coin and artifacts as icon chips, the hero's card with a slim gold experience bar, and the Camp and location cards trading their button stacks for quiet action rows that warm to gold under the cursor — the quest book's open runs now sit in a proper count badge instead of parentheses.
- Fix
THE PANEL KNOWS WHERE YOU'RE STANDING. At the campfire, "Go to the camp" and the town's own shortcut list no longer offer to take you where you already are — outside the walls the town's doors are a walk away, not a click. And a long hero name at the camp no longer wraps into the sheet hint beneath it.
- Fix
THE WORLD HAS NO EDGE OF NOTHING. The four regions now tile the whole atlas — marsh to the west, forest to the south, high country east, the plains corridor between — so every mile of every road crosses painted land instead of black void. Undiscovered regions show a heavily fogged hint of their terrain rather than flat darkness, and the day-grid draws bolder, so "7 days" finally reads as seven squares on the ground.
- Fix
ALDERMOOR REMEMBERS WHO MUSTERS THERE. A town's notice board normally posts level 3–6 work — cruel odds for a company formed that morning. The starting town now reaches down to level-1 errands (up to 4), using the same per-settlement override any place can carry in its data.
- Fix
DOORS SAY WHY THEY'RE SHUT. Battle history waits, greyed with its reason on hover, until the first fight writes the first line. Playing together now asks you to sign in first — a shared table needs an account your friends can find again — and the erase-account button shows only to a signed-in account, because a guest has no cloud account to erase.
- Fix
THE ROAD RETURNS THROUGH THE ATLAS. Coming back to the hub from a journey — arriving somewhere new, or limping home beaten — now opens on the world map first, your party's tag standing where the road left you, instead of cutting straight to the streets. You walk down into town yourself.
- Feature
THE ROAD PAYS ITS DUES. Trouble met travelling — an ambushed camp, a fight on the march — now banks experience exactly the way a dungeon floor does: the kills' worth split across everyone who fought, companions included, ready to spend at the very camp that was attacked.
- Feature
WORD OF YOUR DEEDS TRAVELS AHEAD. Bandits and goblins hunt the night for easy prey — and a renowned, high-level party is not that. Before a night ambush becomes a fight, the hunters check their nerve against your dread; when it fails, shapes circle the camp and melt back into the dark, and the travel log says so. Day trouble never flinches — the road's traffic doesn't know who you are until steel is out. Thresholds are tuned in data, not code.
- Feature
THE REALM MAP IS DRAWN TO SCALE. One square of the world grid is now exactly one day's march — a 7-day road spans seven squares, and distance can be read off the ground before the day chip confirms it. The grid is anchored on Aldermoor and drawn through the same mile-true transform as the towns, so it never lies.
- Feature
THE LAND BETWEEN THE TOWNS HAS A FACE. The realm's regions — the Greymarch plains, the Blackmire, the Thornwood, the Crownpeaks — paint their own terrain across the atlas, fading to fog where the party hasn't ridden. Borders dither into each other the way marsh gives way to downs, not the way polygons meet.
- Feature
ONE TAG = ONE PARTY. Your party wears a single chip on the realm map at all times: hanging off the settlement they stand in between journeys, and sliding along the road at exactly the day they've walked to while one is underway — named for the hero who leads it.
- Feature
PLAY TOGETHER MOVED WHERE IT BELONGS. The invitation to a shared table left the village — a hamlet's market square is no place to organize a campaign across the internet. It lives in your account now, beside the who's-playing roster, because sitting down with friends is an account-level act: a shared story will be its own profile, one world with its own ledger.
- Feature
THE TABLE SHOWS WHO'S ACTUALLY COMING. Picking a hero now lists the real party that will be seated — you with your blade, and each companion the AI runs beside you, tagged so nobody is surprised who walks in.
- Feature
THE DRAWER CARRIES POCKET CHARACTER SHEETS. The ☰ drawer's hub view now lists your party — press a name and it unfolds: ability modifiers at a glance, gear, spells, and the carry-load bar — the sheet you want mid-errand without leaving the screen you're on.
- Fix
ROADS MAKE SENSE NOW. Battlefields used to carve three or four dead-straight parallel roads that never met — and then let huts and walls squat right on top of them. There is ONE road now: a trunk that wanders the way walked roads do, with branches forking off it — a T-junction here, sometimes a crossroad. It is planned before anything else is painted, so houses stand beside the highway instead of on it; hamlet paths and forest trails tie into it; and any painted lane that ends up walled off from the world is erased rather than left as a road to nowhere.
- Feature
SOMEONE CAN SIT ON THE OTHER SIDE OF THE SCREEN. A shared table now has two kinds of seat: players, who bring their heroes — and one Game Master, who brings the monsters. Sit down as the GM and every creature on the enemy side answers to you, through the same refereed turns the players use: your monsters, your initiative, your calls. No GM seated? The AI runs the monsters exactly as before.
- Feature
THE GM SEES THE WHOLE BOARD. Enemy health, hidden traps, no fog — the Game Master's view shows what the players must not see, because running the fight fairly requires knowing it. What each seat can do and see comes from one small table of capabilities, not scattered role checks — the same discipline the admin panel's permissions follow, applied to the game itself.
- Feature
ONE GM PER TABLE, AND ALWAYS SOMEBODY PLAYING. The rules hold the chair: a second would-be GM is politely refused, a GM refreshing their page keeps their seat, a GM brings no hero however hard their client insists, and a table can't start until at least one actual player is seated — a game of only Game Masters has no party to master.
- Feature
THE NARRATOR SWITCH CHECKS FOR A PULSE. Opening the settings drawer now pings the AI narrator's backend; if nothing answers, the switch can't be turned on and says why, instead of letting you enable a narrator who isn't there. If it was already on when the connection dropped, the switch stays in your hands — the instant tactical AI plays the turns meanwhile, and you can always turn it off.
- Fix
WATCH MODE NOW TAKES THE REINS MID-BATTLE. Flipping it on during your own turn used to do nothing — the turn loop was already parked waiting for you, and nothing woke it. The flip itself now nudges the loop, so the AI picks up your party on the spot.
- Feature
THE SETTINGS DRAWER LEARNED TO EXPLAIN ITSELF. Every switch — AI Narrator, Commander asks, Strict, Watch mode — is now a real toggle with its explanation right there in the row, instead of an ON/OFF button whose meaning hid behind a hover. Strict sits visibly under Commander and goes to sleep when Commander is off, because a child setting pretending to be independent was a small lie. The language picker matched the new look while it was at it.
- Feature
THE DRAWER KNOWS WHO'S PLAYING. The foot of the drawer now names the active profile — "Playing as Alice" — and one press lands directly on the who's-playing roster in your account, which also learned to open on whatever section a link asks for.
- Fix
THE COOKIE BANNER STOPPED EATING THE MOUSE. The consent bar's invisible edges stretched across the whole bottom of the screen, and anything underneath — the sign-out button, parts of the battle controls — silently ignored the pointer until you answered it. The bar now catches clicks only where the bar actually is.
- Fix
THE PAGE NOW NOTICES YOU SIGNED IN. Upgrading a guest account keeps your player id — that's the whole point, it's what keeps your heroes yours — but the sign-in machinery only announces itself when the id changes, so after creating an account every screen went on calling you a guest until a full reload. The service now says so itself the moment any sign-in or upgrade completes, and the page updates on the spot.
- Feature
THE ACCOUNT PAGE GREW UP. What was one long scroll is now a proper account area with a sidebar: your record at a glance, a battle-by-battle history, the who's-playing roster, account settings, and billing — each its own room, your face and your way out at the edge of all of them. The record itself reads better too: battles, heroes and expeditions each under their own banner, with your win rate and most-played class picked out in brass.
- Feature
A BATTLE HISTORY THAT TELLS THE TRUTH. Every recorded fight, newest first — when it was, what kind of fight (its tier, your party's level, whether the AI narrator ran it), how many rounds it took, and how it ended. A retreat is marked as a retreat: walking away was never the same thing as losing, and the table refuses to pretend otherwise.
- Feature
ACCOUNT SETTINGS SAY WHAT THEY CAN DO — AND DO IT. Change password sends a real reset link to your email; privacy settings and the erase-everything flow moved in under the same roof; and billing shows the plan you actually hold — the paid tier's upgrade button says plainly that it arrives with co-op story, rather than pretending there is something to buy today.
- Feature
YOUR DATA, PLAINLY — AND A WAY OUT. A small banner now asks new visitors one honest question: anonymous session replays help us see where players get stuck — allow them or not? Nothing runs until you answer, silence counts as no, and the choice can be changed any time from the account page. Sign-in and saving your game were never up for debate: the game doesn't work without them, and the banner says so instead of pretending they're optional.
- Feature
ERASE EVERYTHING, YOURSELF, IN ONE ACTION. The account page can now delete your entire existence here — every hero, every run, the account itself — from this device and from the cloud, with no email to support and no waiting period. The cloud is erased first, so a failed attempt leaves everything intact and retryable; type DELETE to arm the button, because there is genuinely no undo. Guests get the same right: data is data, whether or not you ever typed an email.
- Fix
EVERY TEXT FIELD IN THE GAME NOW BELONGS TO IT. The sign-in form, table codes, battle chat, profile names, dice controls and the quartermaster's ledger all wore the browser's stock white boxes — the one thing on a dark table nobody had chosen. They now share one field: sunk into the panel, brass ring when focused, defined in a single place. The sign-in form is also a real form at last, so password managers and Enter-to-submit work, and the whole card sits in the middle of the page instead of the corner.
- Fix
THE BROWSER TAB HAS A FACE. The site shipped a link to a favicon that never existed — every page load logged a quiet 404 hunting for it. A fighter from the game's own pixel art now stands in the tab by default, until the roaming monster-of-the-page-load takes over as before.
- Fix
A RETURNING PLAYER IS RECOGNISED, NOT REFUSED. Coming back on a fresh session and typing the credentials of an account you'd already created used to answer with "that account is already linked to different progress" — technically true, entirely unhelpful. Typing an account's password is proof it's yours: the game now signs you straight into it, whichever button you pressed. A wrong password still fails, with the honest sentence. The same courtesy applies to Google sign-in, and switching between "sign in" and "create an account" no longer drags the previous refusal along.
- Fix
THE SIGN-IN PAGE NO LONGER TEARS ITSELF DOWN ON ARRIVAL. The server and the browser disagreed about whether accounts exist in this build — the server can never see the keys the browser holds — so the page was rendered twice, differently, and the seam showed as a console full of hydration errors. Availability is now resolved once, on the device, after the page stands; until then the page holds a steady blank instead of flashing "accounts aren't set up" at people whose accounts are set up fine.
- Feature
THE TABLE'S BEGIN NOW OPENS A REAL BOARD. When the host presses Begin, a shared battlefield is built from everyone's heroes — the characters you forged, with their own gear, spells and companions — and every player's room walks them straight to it. The same fight on every screen: your friend moves, and you watch it happen.
- Feature
A REFEREE STANDS BETWEEN THE PLAYERS. Nobody's browser is trusted with the truth of a shared fight. Your move is sent as a request; a server referee checks that it is your creature, your turn, and a legal play, applies it to the one canonical board, and then plays every monster and companion forward to the next player's turn. The dice are seeded and every ruling is replayable, so the referee can be audited — and a request that claims to be someone else gets a polite refusal, not a turn.
- Feature
ON THE SHARED BOARD: move, fight, and talk. Click a lit square to walk, a ringed foe to swing, spend your dash, dodge or disengage, and say something — table talk crosses the wire like everything else, because a table without it is a spreadsheet. Spellbooks, beam-splitting and reaction prompts stay single-player for now; the referee resolves reactions sensibly in the meantime, and the screen is honest about what's coming rather than pretending.
- Feature
THE REFEREE IS ITS OWN DEPLOYABLE THING. It ships as a separate serverless package (functions/, with its own README) that wakes only when someone actually takes a turn — no server humming for empty tables, and the game's rules are not copied into it but carried over whole, so the fight your friend's screen shows is decided by exactly the code this game's two-thousand-odd tests already prove.
- Feature
A TABLE TO SIT DOWN AT TOGETHER. There is a Play together screen now: open a table, and it hands you a six-letter code and an invite link. A friend types the code — or just follows the link — picks a hero from their own device, and appears in your roster the moment they sit down. Everyone marks themselves ready, the host presses Begin, and the table is set. The code is made of letters that can't be misread aloud, because it is going to be read aloud.
- Feature
THE ROSTER IS LIVE, AND THE RULES ARE THE HOUSE'S. Someone readying up on their side appears on yours without a refresh; a player who goes quiet is shown as away, and one who refreshes lands back in their own seat rather than being told the table is full. Every table action — joining, readying, starting, leaving — is decided by the server, so nobody can seat themselves at a table they weren't invited to, ready up on someone else's behalf, or list other people's games by guessing codes. If the host leaves, the table closes honestly instead of quietly changing owners.
- Feature
THE SHARED BOARD ITSELF IS THE NEXT UPDATE, AND THE ROOM SAYS SO. Begin closes the table to newcomers and fixes who is playing — which is precisely what the shared, server-refereed board will take as its seating chart. Until that board ships, the room says plainly that it's coming rather than pretending a game started. Tables nobody returns to simply expire on their own; nothing needs cleaning up.
- Feature
YOUR SAVE LIVES ON YOUR OWN MACHINE — AND NOW ALSO SOMEWHERE SAFE. Nothing about play has moved to the network: the game still reads every profile, hero and delve straight off this device, at the speed it always did, with the tab offline if need be. What is new is that writes are copied upward afterwards, quietly, so a lost laptop is no longer a lost campaign. Signing in has never been required and still is not — it only decides whether there is a copy.
- Feature
SAVES ARE SENT AT MOMENTS THAT MEAN SOMETHING, NOT CONSTANTLY. A long delve writes to disk hundreds of times; sending each of those upward would be slow and wasteful in equal measure. Instead only the newest version of each record is kept, and the whole lot goes at once when a floor is cleared, a run ends, or the tab is put away — so fifty saves of one expedition leave as one. Should the network be missing, the batch simply waits for the next attempt, and a later save is never overwritten by an older one catching up.
- Feature
TWO DEVICES, ONE STORY. When an account becomes known, both copies are compared record by record and the more recent of each wins — a stale hero can no longer drag a fresh profile backwards with it. Ties keep whatever is already in front of you, and reconciling never deletes anything locally: the worst it can do is hand you back something you already had. A profile deleted on one machine stays deleted, rather than rising again from the other.
- Feature
MID-RUN DUNGEON STATE STAYS ON THE MACHINE THAT IS PLAYING IT. Every floor you have walked keeps a full record of itself so a run can be resumed exactly where it paused, and that is far too heavy — and far too much a single-table thing — to ship back and forth. Only the durable half of a delve travels: its progress, its takings, its ending. Resuming still works on the device you left it on, and shared tables will be their own system rather than a side effect of syncing.
- Feature
ROLES, AND SOMEWHERE TO HAND THEM OUT. There is an administration page now: who has an account, when they last played, and what each of them is allowed to do. Permissions are the unit — a role is simply a named bundle of them — so a new kind of helper is a line of configuration rather than a code change. Four to begin with: administrator, moderator, support, and tester, that last one holding the paid tier without paying, so co-op can be exercised before anyone can buy it.
- Feature
PERMISSION IS DECIDED ON THE SERVER, NEVER IN A BROWSER. The panel hides controls you cannot use, but hiding is a courtesy and not a defence: every privileged request is re-checked against a verified sign-in token before anything happens, and a request that merely claims to be an administrator gets nowhere. Two smaller guards ride along — a role that does not exist cannot be granted by mistake, and you cannot strip away your own ability to grant roles, which is the likeliest way to lock every administrator out of a live game.
- Feature
THE FIRST ADMINISTRATOR COMES FROM OUTSIDE. Granting a role requires already holding the power to grant roles, so the first one can never be appointed from within. Naming an account in the server's own configuration marks it as an administrator regardless — a bar that requires access to the deployment itself, which is a higher one than any account can clear.
- Feature
A ROAD COSTS WHAT IT ACTUALLY COSTS, IN DAYS. Travel time used to be counted two different ways that quietly disagreed: the realm map's road label always said "1 day" no matter how far the road ran, while the journey you actually walked counted days by hops instead of distance. Both now read the same number, derived from the world atlas's real mileage at a normal day's march. The road from Aldermoor to Willowmere — one hop on the old map — is honestly 5 days; the road on to Highcrown is 7. Longer hauls now roll more encounter dice, the way a longer haul should.
- Feature
YOUR HEROES CAN NOW BELONG TO YOU, NOT TO A BROWSER. There is a sign-in page, and an account page that tells you plainly where your progress actually lives. Nothing is walled off: you are never asked to make an account to play, and you never were — the game quietly gives every new visitor an account of their own from the first minute, so that on the day you add a password there is something waiting to keep. Adding one does not start you over; the heroes, the gold and the record you already have come with you.
- Feature
AN ACCOUNT PAGE THAT SHOWS WHAT YOU HAVE DONE. Battles fought, won and lost, and a win rate that does not punish you for walking away from a fight you could not take. Heroes raised, still living, and fallen. Your highest level, your gold, the floors you have delved, the foes you have felled, and the class you keep coming back to. The battle-by-battle history is still a click away for anyone who wants the detail.
- Feature
SIGN IN WITH GOOGLE OR AN EMAIL AND PASSWORD, and be told what went wrong in a sentence rather than a code — a wrong password says so, an address already in use says so, a blocked pop-up says so. All of it in English and Ukrainian. If a build has no accounts configured at all, the game says that too and carries on exactly as before, saving to this device.
- Feature
THE COMPENDIUM IS NEARLY ALL PICTURES NOW. Two hundred and seventy-two of its entries carry a mark, up from eighty-nine — every spell, every potion and ring and scroll, every suit of armour, every language. Almost none of it was drawn one at a time. A spell's SHAPE comes from its school and its COLOUR from what it does to you, so a hundred and four spells are eight drawings: fire is orange and cold is blue, a necromancy spell wears a skull whatever it costs to cast, and a ward is always a shield. Items work the same way — the silhouette says potion or ring or scroll, and the colour says common or legendary, both read straight from what the item already is.
- Feature
ARMOUR YOU CAN TELL APART AT A GLANCE. Leather is brown and narrow, a breastplate is steel with shoulder caps, and full plate is steel and broad enough to notice — and a magical piece drops all that to shine in its rarity's colour instead. Languages get a rune each, shared by alphabet rather than invented per tongue, because Dwarvish and Giant genuinely are the same letters.
- Fix
A MISTYPED COLOUR CANNOT SHIP SILENTLY ANY MORE. Two colour values in the art data had been typed with characters that merely LOOK like digits — a Devanagari six, a full-width eight — which read as perfectly ordinary in an editor and turn into black when the game reads them. Every colour and every hand-drawn shape in the art files is now checked for being what it claims to be.
- Fix
A FROZEN MONSTER NO LONGER FREEZES THE FIGHT. Hold a creature in place with a spell and it would keep deciding to walk somewhere — the rules refused the step every time, so nothing moved, nothing was spent, and the same doomed decision came back the next turn and the next. One goblin in a measured run spent every one of nearly four thousand turns this way and the dungeon simply never ended. A held creature now does what a held creature can do: nothing, until it struggles free at the end of its turn. Your heroes already knew this; the monsters do now too.
- Fix
CHARM NO LONGER OFFERS A BLOW YOU CANNOT STRIKE. Charm someone and they cannot raise a hand against you — but the list of things they were allowed to do still showed the attack, so they would try it, be refused, and lose the whole turn standing there. Charm was quietly far stronger than it read: not merely 'they will not hit me' but 'they will do nothing at all'. The offer and the rule now agree, which means a charmed foe spends its turn on something else — expect them to be a good deal less harmless.
- Fix
A CRASH IS NO LONGER A DEAD END. When a page failed, it failed all the way: a bare line of framework text, no way back, nothing to click. Now a crash lands on a proper screen that says what happened, tells you plainly that your heroes and your progress are safe on this device, and gives you two doors out — try the page again, or step back to safety. There is a second, plainer version of that screen for the rare case where the app cannot even finish starting up, built to depend on nothing that might itself be broken.
- Fix
CRASH REPORTS SURVIVE A BAD SESSION. Errors were sent to us capped at the first five of a session — which a single stuck page exhausts in a moment, after which everything that goes wrong afterwards is silence. Reports are now counted per distinct fault, so a page failing over and over is heard once and anything NEW still reaches us. Each report also carries which screen it happened on, which it never used to.
- Fix
WE FIND OUT WHEN THE GAME MASTER GOES QUIET. The AI Game Master is built to fail gracefully: if the model is unreachable, overloaded, or simply too slow to answer in time, the ordinary tactical brain takes the turn and the battle carries on looking perfectly normal. That is the right behaviour and exactly why nobody could tell when the feature was down for everyone. A session where the Game Master had to step aside now says so — and says which of the four reasons it was — once per reason rather than once per turn, so a bad evening reads as one clear signal instead of four hundred.
- Fix
A CANCELLED REQUEST NO LONGER WAITS AROUND. If a turn moved on before its question reached the Game Master, the question was sent anyway and the game politely waited out the full twelve-second answer window for a reply nobody was listening for. It now notices immediately and gets on with the turn.
- Feature
EVERY CREATURE NOW HAS A FACE. Half the bestiary and most of the heroes were rendering as emoji or a pair of letters, and it was getting worse with every monster added — art was the one part of the game that could not be written down. So it is written down now: a sprite is a stack of tiny character grids in JSON, and a forge composes them into the same 16x16 pixel art the hand-drawn goblins were always made of. All 34 monsters have art. So does every playable species crossed with every class — 300 portrait pools where there were 66, including the four species and the one class that had none at all. What they hold comes from their own stat block: the sharpshooter carries the longbow it actually attacks with, the shaman its staff, and a monster that prepares spells puts on a hood. And because the whole thing is data, a cultist is a job rather than a bloodline: the goblin under the red hood this time may be an orc the next.
- Feature
HEROES AND MONSTERS FINALLY MATCH. Your adventurers were drawn at one size and in one style, the things trying to kill them at another, and they stood on the same board looking like they came from different games. Everyone is cut from the same cloth now. Large creatures still loom — the board has always drawn them bigger — but a dire wolf is no longer just a wolf scaled up: it has a heavier skull, a deeper barrel and thicker legs, because being enormous should be something you can see in the shape and not only in the size.
- Feature
THE COMPENDIUM GROWS PICTURES. Every entry in the compendium was a pair of grey initials or an emoji next to its name. The first eighty-nine of them are pictures now, and none of it is new art: a monster's icon is simply the token you meet on the board, a class is a hero of that class, a species is one of its own fighters, and a weapon is the very thing its wielders are drawn holding. Spells, feats, traits, armour and languages are still lettered — they need marks of their own rather than a creature, and that is the next piece of work.
- Fix
NOBODY GOES WITHOUT A PORTRAIT AGAIN. Adding a monster used to cost art that nothing ever asked for, so it simply stayed missing and fell back to an emoji forever. A test now fails the moment a creature, a species, a lineage or a class exists without a sprite to match, which is how orc — a playable species with no hero art whatsoever — was caught before shipping rather than after.
- Fix
TOKENS STAY INSIDE THEIR RING. A creature's picture is drawn on a round disc, and the picture was being drawn slightly too large for it — a wolf's tail, a dragon's wingtip and a goblin's raised blade all broke out over the edge. It went unnoticed for as long as it did because the old hand-drawn art politely left its corners empty; art that uses the whole frame does not. The picture is now sized so that a square always fits within a circle, whatever it happens to have in its corners.
- Fix
THE PARTY FOLLOWS YOU DOWN. Take the stairs to the next floor and your companions came no further — they turned around and wandered the level you had just left, forever. The doctrine that queues them onto the ladder was looking for a stairway flagged as DISCOVERED, a mark only ever put on a SECRET way down; the plain ladder every dungeon floor carries has no such mark, so the column read the floor as having no way onward. Now one shared rule answers "is there a way down here" for the AI, the action bar and the map alike — the stay-behinds file onto the ladder a few turns after you and walk out of the stairs beside you.
- Feature
THE MACE TAKES THE FIELD: Spiritual Weapon is no longer an invisible sidearm — the spectral mace MATERIALISES on a cell you choose, swings the moment it appears, and on every later turn a ⚔️ bonus action floats it up to 20 ft to swing again (1d8+WIS force, +1d8 per higher slot, spell attack with your focus bonuses). It hovers on the board, it goes where you send it, and it vanishes the moment concentration breaks.
- Feature
FLAMING SPHERE rolls in beside it: a ball of fire that fills a cell, burns whoever it touches for 2d6 (+1d6 per higher slot), and SHOVES up to 30 ft as a bonus action — the same sweep controls as the mace and the moonbeam, and the AI druid drives all three.
- Feature
THE BEAM ANSWERS THE HAND (2024): Moonbeam is no longer nailed to the cell it fell on — on your later turns, a 🌙 MOVE BEAM action appears while you concentrate: arm it, and sweep the silver column up to 60 ft across the board. Drag it onto the archer who thought range was safety — the column burns whoever it lands on, and the AI druid has learned the same trick.
- Fix
The edge of the world stopped being a corridor: the map's outermost ring was ground no generator ever painted — yet the rules counted it as open floor — so a one-cell walkable moat ran right around every battlefield, drawn as a bare untextured frame you could see in the corner. Road, forest and village arenas now close that rim with the same terrain their walls are made of, ragged rather than ruler-straight. Dungeons never had the fault (solid rock already), and the wilderness closed its rim last patch.
- Feature
THE WALK HOME BITES BACK: freeing the captive is no longer the end of the story. A pursuit lurks in the brush at the midpoint of the escort route — silent as you march in, SPRUNG the moment the rescue is noticed. “🏹 CRASHES from the brush!”
- Feature
NO TWO WILDERNESSES ALIKE: quest maps roll their own dimensions (90–130 a side, any aspect) and their own warband count (2 to 5 camps — a new five-camp WAR COUNCIL layout joins the template book), and four new camp themes take the field: the ORC WAR-CAMP, the CULT SHRINE, the LIZARDFOLK MOUND, and the HOBGOBLIN WARBAND — ten themes now, all pure data.
- Feature
THE OPEN FIELDS JOIN THE NEW WORLD: medium and large open battles now lay out through the noisy-Voronoi zone engine that built the quest wilderness — territory seams, meandering roads, rivers with bridges, a sealed horizon — instead of the old scattered-scenery yard. The pack musters in its own grounds across the field; small skirmish yards and forced scenes keep the classic builder.
- Fix
ONE VOICE PER BEAT: an ally no longer stacks an order bark AND a temperament line in the same breath — the canned word wins the moment, the LLM voice waits its turn. And “Done.” is HONEST now: an ally who obeyed but couldn't do the thing (Hide with no cover in reach) says so — “No way to do it from here.” — instead of claiming a deed that never happened, every turn, in the same words.
- Feature
THE FEAT BOOK CATCHES UP TO 2024: the −5/+10 power gamble is GONE — SHARPSHOOTER is now +1 DEX and pure marksmanship (no long-range penalty, no cover, a clean shot even with a blade at your throat), GREAT WEAPON MASTER is +1 STR whose two-handed hits simply land HEAVIER (+proficiency once a turn, and a crit or kill still earns the bonus swing). ALERT and LUCKY scale on proficiency now, HEAVY ARMOR MASTER shrugs proficiency off every blow, and DUAL WIELDER trades its old +1 AC for what it always should have been — the off-hand ANSWERS as a bonus attack.
- Feature
Three feats join the shelf: CRUSHER completes the crit trio (+1 CON, bludgeoning hits shove 5 ft, a crushing crit leaves them reeling — advantage on the next attack against them), SAVAGE ATTACKER rolls its weapon dice twice and keeps the crueler set, and HEALER makes the kit mend as it wakes (+1d6+proficiency on First Aid). Both origin feats join the background pool.
- Fix
WAR CASTER finally holds the spell it was hired to hold: ADVANTAGE on concentration saves. INSPIRING LEADER's speech grants TEMPORARY HP now (it was quietly inflating real max HP). MAGE SLAYER gains GUARDED MIND — the first failed INT/WIS/CHA save each battle simply doesn't fail. SKILLED grants three REAL proficiencies (Investigation, Survival, Medicine — kit included). MAGIC INITIATE learns two cantrips and pockets Magic Missile. And SPELL SNIPER no longer advertises a range doubling that never existed — what it does is real: cover ignored, melee no matter.
- Feature
THE CHARM TIER — six pocket-magics cheap enough for a first delve, none needing an attunement slot: the LUCKY COIN that lands face-up (+5% quest gold), the TRAVELER'S COMPASS that knows shortcuts no map shows (long roads run a day shorter — fewer camps, fewer ambush dice), the RING OF FOCUS that stills the casting mind (+1 to hold concentration), the EMBER CRYSTAL that never cools (fire spells burn +1 — Fire Bolt and Fireball alike), the HUNTER'S FEATHER (+1 initiative), and the LEATHER CHARM, a hedge-witch's knot that turns the first blow of every battle 2 points aside.
- Feature
ATTUNEMENT arrives: an artifact's magic now flows only while you're attuned to it — THREE at most, chosen on the hero sheet with a tap (the sheet shows ◈ 2/3 and the whole hand). Old heroes are grandfathered: their first three artifacts attune themselves, nobody loses a cloak to the rulebook.
- Feature
The pack splits honest: the battle inventory now reads WORN & WIELDED (the suit on your back, the shield on your arm, the rings that answer you) apart from the BACKPACK (potions, scrolls, gems, the spare suit that was never anything but weight).
- Feature
THIRTEEN new artifacts fill the arsenal's empty shelves — the archer's BRACERS OF ARCHERY (+2 on every arrow), rings of FIRE/COLD/LIGHTNING RESISTANCE, GOGGLES OF NIGHT that fight through magical darkness, the SENTINEL SHIELD whose eye never blinks (advantage on initiative), BOOTS OF SPEED, the STONE OF GOOD LUCK (+1 to every check and save), and the RING OF FREE ACTION no grapple, slow, or paralysis can touch.
- Feature
Spellcasters get their FOCUSES: the WAND OF THE WAR MAGE (+1/+2 to spell attacks) and the ROD OF THE PACT KEEPER (+1/+2 to spell attacks AND save DCs) — the caster's answer to the fighter's +1 blade.
- Feature
Two NAMED BLADES for the deep shelves: FLAME TONGUE, whose edge carries +2d6 fire into every hit, and FROST BRAND — +1d6 cold, and the frost shields its wielder from fire while drawn.
- Fix
ADAMANTINE armor finally keeps its promise: a critical hit against the wearer lands as an ordinary blow. The suits sold for that exact line, and until today the line was decoration.
- Feature
The ceiling LIFTS: the campaign now climbs to LEVEL 12. The XP ladder runs the full DMG track, full casters reach SIXTH-level slots at 11, and the martial peak arrives — the fighter's third attack, the paladin's RADIANT STRIKES on every melee blow, the barbarian's RELENTLESS RAGE that refuses the killing blow, the rogue's RELIABLE TALENT that never rolls below a 10 where it's trained.
- Feature
Eight SIXTH-level spells to spend those slots on: CHAIN LIGHTNING leaps through the clustered, DISINTEGRATE turns a bad save to dust, CIRCLE OF DEATH and FREEZING SPHERE swallow thirty feet at a stroke, SUNBEAM burns AND blinds down a 60-ft line, BLADE BARRIER rises as a wall of whirling steel, HARM speaks a plague, and HEAL knits ~70 HP whole at range.
- Feature
The wilderness grew EDGES and SECRETS: big water finally obeys the rule of three — a lake deeper than its shoreline melts into one still surface with a glinting sheen instead of a grid of blue squares. The map's rim now closes behind you — every border seals with its own zone's terrain, mountains walling the hills and thickets hemming the marsh, and the only gap in the treeline is the road the party walked in on (the doorway future journeys will leave through). And the deep wilds hide PRIZES: loot caches tucked far from every camp and road — a scroll, a potion, a treasure map for whoever bothers to look — so straying off the path is a habit worth keeping.
- Feature
Water learned its true names: the little blue stamps are PONDS now — open water cupped in a ring of reeds — and a real LAKE is a landmark, one great rounded body some forty cells across with a reedy shore, lobed like something the ice age left behind; where a road meets it, a bridge carries you over. The rescue objective's stone fortress BACKS ONTO THE MAP'S EDGE like a proper frontier fort instead of floating mid-field, and wilderness caches now nest against a copse or a rock spur rather than sitting on bare ground. One more thing about those caches: sometimes the chest has TEETH. A mimic waits disguised among the real prizes — reach for the loot and the 'chest' lunges, hungry, exactly as chests have always secretly wished to.
- Fix
The paladin answers to the new book: DIVINE SMITE is a BONUS-ACTION spell now — one smite per turn, competing with every other bonus action, never one per swing of Extra Attack. The nova is dead; the choice is alive.
- Fix
Allies found their VOICE again: the acknowledgment bark now lands the moment an order is given (a spoken word no longer needs to wait for its speaker's initiative), and a carried-out order is confirmed out loud — “In position — quietly.” — in the ally's own voice, alongside the refusal lines that already talked back.
- Fix
The wilds shed their ruler: the map's sealed rim now BREATHES — the treeline lobes one to three cells deep instead of framing the board in a straight strip — and one or two extra doorways open on the far sides, worn trails leading through them toward lands not yet visited. Roads and trails MEANDER like walked paths instead of cutting one dead-straight line to the horizon. Lakes finally merge for real — any pool past three cells becomes ONE body wall to wall, its shoreline a single soft outline (the old rule only ever flattened a lake's middle cell). And the hidden descent seeks a MOUNTAINSIDE now: the cave mouth nests in a pocket of rock away from the roads, not on flat grass beside the highway.
- Feature
DARKNESS falls — real magical darkness that swallows a 15-ft sphere: every blade and bolt through it falters… unless you SEE. The warlock's DEVIL'S SIGHT (level 2) turns their own gloom into a one-way hunting blind, and the new BLIND FIGHTING style lets a fighter read the air within reach. The drow's birthright is complete: Faerie Fire at 3 — outlining foes in light no shadow hides — and Darkness at 5.
- Feature
The warlock's dark arsenal: ARMS OF HADAR erupt from your body and steal reactions, HUNGER OF HADAR opens a lightless sphere of gnawing cold, ARMOR OF AGATHYS wraps you in ice that bites back at whoever dares a blade. And more steel for every list: SLEEP drops the unwary helpless (pain wakes them), BLINDNESS, MIRROR IMAGE's dancing duplicates that eat the blows meant for you, WEB, CLOUD OF DAGGERS, PHANTASMAL KILLER, INSECT PLAGUE, FIRE SHIELD, GREATER INVISIBILITY — a veil that survives your own attacks.
- Feature
The cleric's SPIRITUAL WEAPON floats to war — a spectral mace cast as a bonus action, swinging each turn off wisdom alone — and SPIRIT GUARDIANS wreathe you in a moving halo that scours whoever your steps carry it over.
- Feature
Four spells join the book: RAY OF SICKNESS (a sickly 2d8 beam — the Abyssal tiefling's birthright at level 3, exactly as the book writes it now), COMMAND (one word — GROVEL — and the proud eat dirt), SLOW (time thickens in a 20-ft zone; blades drag, steps falter), and MOONBEAM (a silver column that lingers and burns whoever stands in it — the druid's answer at last).
- Fix
The healer's hands caught up with 2024: CURE WOUNDS mends 2d8, HEALING WORD 2d4, MASS HEALING WORD 2d4 — all doubled as the new book demands. INFLICT WOUNDS is a CON save now (2d10 necrotic, half on success), not an attack roll; ICE STORM's hail corrected to 2d8 bludgeoning + 4d6 cold, RAW to the die.
- Feature
The arena learned to LISTEN to its playtesters: anonymous session telemetry (Microsoft Clarity, replays + heatmaps) now marks the journey's beats — a battle built, a battle finished and how it ended, the brave second battle, the descent underground — and the first few client errors phone home instead of dying silently in a stranger's console. Fully silent unless the deployment carries the project key: dev machines, CI and tests never report anything.
- Feature
The cantrip shelf is FULL — sixteen now, every 2024 cantrip the engine can truly cast: POISON SPRAY chokes at close range, PRODUCE FLAME and STARRY WISP arm the druid and bard, SHOCKING GRASP steals the reaction right out of a foe's hands, SORCEROUS BURST is raw magic barely shaped, SHILLELAGH swings a druid's cudgel by wisdom alone, ACID SPLASH bursts in a little sphere that spares no one, and MIND SLIVER drives a cold thought between the eyes.
- Feature
The BARD arrives — the twelfth and final 2024 class: a CHA-singer whose Bardic Inspiration rides an ally's next attack or save (+1d6), whose Vicious Mockery makes foes reel at their own swing, and who picks a college at 3 — LORE, whose cutting words shave the sting off blows meant for friends, or VALOR, who answers with armor and a second blade-stroke.
- Feature
WEAPON MASTERY lands for every martial class: in trained hands each weapon has a signature — the rapier VEXES a foe open, the longsword SAPS their next swing, the quarterstaff TOPPLES, the greataxe CLEAVES into a second neck, the dagger NICKS twice, the greatsword GRAZES even on a miss, the warclub PUSHES, and slings and bows SLOW the fleeing.
- Feature
The monk finds its FOCUS: a well of inner power fueling Flurry of Blows (two fists in a breath), Patient Defense, Step of the Wind — and from level 5, the STUNNING STRIKE that drops weapons from paralyzed hands. Rogues learn their trade in full too: Steady Aim, Uncanny Dodge, Evasion.
- Feature
SIXTEEN new subclasses: the Zealot's divine fury and the World Tree's sheltering bark, the Oath of Glory, the Psi Warrior and the Soulknife, the Abjurer's ward and the Diviner's omens, the Clockwork Soul that grinds away misfortune, Celestial and Archfey patrons, the monk Ways of Mercy and the Four Elements, the Gloom Stalker and the Fey Wanderer, and the bard colleges. Rangers now carry Hunter's Mark from their first day; the Totem Warrior answers to its 2024 name, Wild Heart.
- Feature
Zones GROW UNTIL THEY MEET now: a noisy Voronoi grows outward from each camp's site until two regions' real terrain runs into itself — forest against bare rock — with no dead neutral crust between them. The seam only opens where a gate stands flanked by real posts, and each zone thins from that seam toward its camp's clearing in cohesive clumps, not lone-cell speckle. Every map rolls its BIOME first — forest, mountain, marsh, plains — and that one roll colors the seam materials, the water, and which layouts are even eligible to appear.
- Feature
Big layouts can carry a LANDMARK now: one dominant ruin — a ruined fortress, a great cairn — and the hidden descent prefers to shelter inside it, so a skyline you can see from across the map is a real lead. A CAVE doesn't play coy: cave mouths and cairns show their stairs from the first frame, while a descent buried in a temple stays a secret to sniff out. The new FOUR-CORNERS layout posts a camp in every corner with the landmark ruling the crossroads. Worn TRAILS make roadless maps and pass crossings read at a glance, diagonal roads finally turn a corner instead of staircasing, and the party arrives walking in over a road or trail from the map's edge instead of popping up mid-field.
- Feature
Camps got BUILT UP: lairs raise their own outbuildings (the troll's sheds, a ruined lean-to at the wolf den), stockades fill in with interior huts, and the rescue objective's camp is a proper fortress now — one gate, doubled furnishings, its traps clustered at the door. The big map draws smoother and lighter too: deep forest, bog and rock interiors render as soft flat masses instead of a full sprite grid (edges still keep every detail), cutting canvas node count by up to 39%.
- Feature
The commander can order HIDE now — the radial gains a stealth call, and it matters: a party that slips out of sight can walk PAST a sleeping camp. Every member rolls their own Stealth against the garrison's sharpest passive Perception; whoever fails to vanish is the one the sentries see — the weakest link wakes the war band, and any attack still blows everyone's cover. The wild ground between camps filled in too: copses, knolls, ponds and bogs now dot the empties (each biome scatters its own mix), and while a split party plays, both boards write ONE story — the surface's lines land in your log marked ⬆ as the rounds interleave. And a sneaking party keeps AMBUSH DISCIPLINE: hidden allies hold their fire and shadow the leader in silence — the opening strike is the leader's to make (or the commander's to order), and only a member whose own cover is blown fights before the signal.
- Fix
The board REMEMBERS now: ground the party walked stays dim-remembered instead of falling back to black after a floor switch, a view toggle or a reload — explored memory reads from the engine's persistent record, not a forgetful view-side copy. Fast panning no longer punches holes in the fog (it rasterizes to one image that only redraws when someone actually moves), the terrain layer stopped redrawing on camera moves entirely, and the whole stage runs on four canvases instead of six — big-map scrolling is close to pure blitting.
- Fix
The ladder is a DOORWAY, not a teleporter: descending a wilderness cave takes only the companions who actually made it to the entrance — anyone lagging behind waits on the surface and rejoins when the party climbs out. And a pacing leader can't dither the watch forever: the shuttle-breaker now catches back-and-forth wandering even when each pass drifts a little sideways, planting its feet until the world gives a better reason to move.
- Feature
The roster is FULL — all ten 2024 species: DRAGONBORN pick their dragon (five ancestries, each an elemental hide and a true 15-ft breath cone that recharges like a wyrm's); GNOMES are small, sharp, and shrug mental magic with advantage; GOLIATHS carry a giant's boon — fire that erupts from their hits, frost that slows, a hill's tumble that bowls foes over, stone that shrugs damage — and at level 5 they GROW LARGE on the field, a true 2×2 presence; AASIMAR lay on healing hands and, from level 3, unveil their nature — spectral wings that fly, inner radiance that sears, or a necrotic shroud that makes the brave quail.
- Feature
The game speaks Ukrainian where it matters most: every species, lineage, background, and racial trait now translates — powered by data, not code. Content stays English in the registries; locales seed name/description keys on top, so a new language is a dictionary file away.
- Feature
The 2024 rules land: races are SPECIES now, and none of them carries your +2/+1 — your BACKGROUND does. Eight backgrounds (soldier, criminal, sage, acolyte…) each bring the ability bump, an Origin feat granted free, and two skills folded into your sheet. Every hero is a story before they're a statline.
- Feature
Species got their 2024 kits and LINEAGES: the three elves are one Elf with a chosen lineage — High Elf (Fire Bolt, Misty Step at 5), Wood Elf (35ft, melts into cover), Drow (120ft darkvision, no more sunlight woes). Tieflings pick a fiendish legacy — Infernal (fire, Hellish Rebuke), Abyssal (poison, Hold Person at 5), Chthonic (necrotic, Chill Touch). Dwarves merged their clans: speed 30, 120ft darkvision, stone-wise. Halflings walk 30 now. Half-orcs became true Orcs.
- Feature
New blood, new tricks — all wired into the fight: the orc's ADRENALINE RUSH is a bonus-action dash with temp HP that soaks hits first; the human's HEROIC INSPIRATION rerolls the battle's first failed attack or save; halfling Luck now rerolls natural 1s on saves too; dwarves shrug poison saves with advantage and read worked stone (Stonecunning) for traps.
- Fix
Old heroes are safe: saved builds and battle links speaking the 2014 names (hill-dwarf, high-elf, half-orc…) migrate onto their 2024 species and lineage automatically — same character, new bones.
- Feature
The wilderness is drawn from TEMPLATES now: the map is regions, and each camp rules its own zone behind a sealed ridge of its biome — joined to the rest only where a road gate, a bare mountain pass, or a river bridge lets you through. Some maps have no roads at all; find the passes. Camps come in two builds: the walled stockade you know, and LAIRS — a wolf den under the trees, a troll's hovel in the rocks — a small squat holding drowned in its own wilds.
- Feature
Dungeon mouths can hide in CAVES now: a rock-ringed hollow off the path with a dark opening in the back wall — as real a lead as a ruined temple, and more likely to be the one hiding the stairs down. Every layout, zone, and lair is data (map-templates.json): a new map shape is a JSON entry away, and the same schema is the save format the future map editor will write.
- Feature
The party fights to a PLAN: each round the squad brain assigns pin / focus / finish / guard / hold-the-blast jobs that stick until the situation breaks them — no more target flip-flopping.
- Feature
AI allies call their plays — 'The brute's mine!' when they take a job, and they call the kill when their mark goes down.
- Feature
The AI reads the board better: menu options warn about opportunity attacks, and a bunched-up party is told to SPREAD OUT while an enemy caster can still blast an area.
- Feature
The stairs are a doorway, not a teleport: each hero walks onto the ladder and steps through alone — allies file in behind the leader, the mouth of the delve works the same way, and nobody is yanked across the map. No safety-net teleport either: whoever stays behind, stays behind.
- Feature
The party leash: an AI hero no longer marches off alone through two doors into a waiting mob — moves that would leave every ally behind are held ("holds formation"), unless they join the party's own fight.
- Feature
The Journal is a bound parchment tome: chapters across pages you flip (corner arrows or ← →), the diary of things heard spilling onto further leaves, and larger, book-worthy type throughout.
- Feature
Casters aim like players now: area spells search for the clean cell BESIDE the cluster when a friend stands too close — so Spike Growth and the other battlefield-shaping spells finally show up on the menu, and shaping the ground is worth it on smaller packs than a fireball needs.
- Feature
Fully data-driven map generation: every choice the generators make — maze topologies and their weights, room-shape odds, spiral winds and branch forks, battlefield density, rampart gaps, the castle's dials, the scene-painter pool — now lives in commented JSON policy files. The code only rolls what the data offers, and shipped defaults reproduce every existing seed exactly.
- Feature
Town generation joined the doctrine: street widths, where the road out leaves, lamp spacing, and the crowd's faces and numbers are commented JSON policy too — and settlement content is organized by domain (places · voice · scene · economy) in both code and data, with golden ward fingerprints guarding that no town silently moves.
- Feature
Every authored town knob is real now: barrels and crates lean on the lane verges, a ward that authored woods gets its trees, houses counts are a floor under the density fill, big city lots keep an open courtyard at their heart — and the animals are HERE: authored chickens, cows and dogs wander the streets with the villagers, muttering the occasional Му-у.
- Feature
The floors coexist: the board the hero leaves no longer freezes — the allies still up there keep taking their own turns, walk to the stairs the hero took, and step out of the ladder onto your floor a few rounds behind you. No teleports, no one stuck outside forever: whoever is cut off or mid-fight genuinely stays until helped.
- Feature
Switch the view between the split party's boards: from inside the delve, a LIVE peek at the surface (green ● — time visibly runs, your allies act on their own); from the surface, a look at whoever went down ahead; and the floor strip's spectate windows go live too when the ticker is driving that floor.
- Feature
Captives sit in CAGES now: iron bars ring each hostage (you see them through the bars), the one way in is a locked cage door — smash it or pick the lock — and a bound captive can't be hurt at all: no stray fireball, fumble or lucky arrow ends the rescue by accident. The freed escort is as mortal as ever; the walk home is the real danger. And with the camps sleeping properly, an all-AI party now marches on the nearest camp instead of pacing the muster forever.
- Feature
The wilderness got civilised: a real ROAD now runs from the muster through every camp — bridging the rivers it crosses — each camp's rampart opens its GATES exactly where the road crosses (in and, for waypoint camps, out — nowhere else), camps are furnished with their theme's props (a hearth, crates, kegs), and landmark RUINS stand off the road: a crumbled temple, a watchtower, an old farmstead — broken walls, a centrepiece, rubble — and the hidden dungeon mouth now prefers to shelter INSIDE one of them, so a ruin on the horizon is a real lead. The random scatter calmed down too: fewer, bigger clumps — no more lone trees sprinkled like noise.
- Fix
A hero who slipped out through the escape zone no longer blocks the exit for the allies behind — the endless-Dash retreat softlock is gone.
- Fix
Enemy commanders no longer waste the fight wrestling their own hostage or chasing heroes who already fled — captives and the escaped are off every target list.
- Fix
Running delves left the notice board — the way back into one lives in the Journal, riding the work it belongs to.
- Fix
Bigger, friendlier text in town talk, dialogue, and the Journal — and the goodbye line finally speaks your language.
- Fix
A healthy hero standing face-to-face with a wounded foe is no longer offered Dodge or Disengage — the option to waste the turn bracing only appears once genuinely hurt.
- Fix
The AI no longer reads exact enemy health it never assessed — unexamined foes show only how wounded they LOOK, until a Medicine check reveals the numbers.
- Fix
The battle-results screen fits the window: the combatant table scrolls inside the modal, and the buttons stay put.
- Fix
Townsfolk remember the whole conversation now — asking several questions in one sitting no longer forgets all but the last, so a talked-out villager stays talked out.
- Fix
Dungeon maps fit their dungeon: the carved maze no longer huddles in one corner of a huge empty board — the map crops to the content, and everything that scales with map size gets faster for free.
- Fix
Map-generator content went data-driven: dungeon sizes, arena scenes and sizes, room furnishing themes, and the battlefield rampart biomes all live in JSON now — add content there, not in code — and the two generators finally agree on which scenery is solid.
- Fix
No more spells cast at empty air: an area burst re-aims at its target's current position the moment it's cast — and if the moment has passed, the caster keeps the slot and swings instead of blasting scenery.
- Fix
No more pacing forever: a creature caught walking A→B→A→B for four turns plants its feet for a beat (still swinging at anything in reach) instead of shuttling all night — the mechanical cure for the whole family of two-minds movement loops.
- Fix
Monsters carry real gold now: every enemy gets its purse the moment the battle exists — commanders and elites carry heavier ones — the sheet shows it, and searching the body pays out exactly what was carried instead of conjuring coins from nowhere.
- Fix
Rescue quests play as designed now: a bound captive is a civilian — it takes no turns, never wakes the camp holding it (no more map-wide round-0 fights), doesn't count for morale, and its death fails the QUEST, not the battle — the fight goes on and vengeance still wins the field. A lair-bound boss with a foe in reach is never offered the retreat it can't take.
- Fix
The purse pill shows the coin your party is CARRYING on a running expedition (+N on the run) — looted gold banks when the run clears, and now you can see it riding home instead of wondering where it went.
- Feature
DUNGEONS STOP READING LEFT TO RIGHT. Every delve used to be the same thing wearing different clothes: rooms on a rigid grid, always wider than tall, always entered from the top-left corner, with the master of the place always waiting in the bottom-right. You could find him by walking right. A dungeon now has a SHAPE of its own, rolled apart from its character — a spiral you wind inward with the boss holding the eye of it; a ring with an inner court, so there are two ways round to everything; a hub with arms, where the real question is which arm to spend your torches on; a branching warren that mostly dead-ends; a cave web with no axis to follow at all; and the old grid, which now lets you in from any edge. The way in moves, so the way on moves with it.
- Feature
TOWNSFOLK ASK YOU FOR HELP. Walk up to anyone and ask whether they need something doing. Most don't — but some will tell you about a brother who went to the steading and never came back, a ring taken when raiders came through, or whatever has been fouling the nets past the bend. Take it on and THEY owe you: their name goes in your journal, and you report back to them, in their ward, by name. Forty-eight of these, matched to the sort of place you're standing in.
- Feature
EVERYONE IN THE CROWD IS SOMEBODY NOW. Townsfolk used to be nameless — fine for muttering, useless for someone you have to find again. They have names and trades that suit their ward, the same person on the same corner every time you return, and none of it takes a byte of save data.
- Feature
THE QUEST BOOK BECOMES A JOURNAL. It kept your work in hand and nothing else — while the party had been quietly recording every answer any townsperson ever gave, and no page ever showed you one. It now holds what you were told and where you heard it, the work you have finished (which used to simply vanish when you were paid), the folk who asked for your help and are still waiting, and the wards you have come to know.
- Feature
YOUR DELVES ARE ON THE MAP. A dungeon you had opened existed nowhere in the world — it was a button that put you inside it. Each open delve now stands on the town map beside the ward whose notice board sent you there, one road further out, in that ward's colours; selecting it lights the way from where you stand, and you march back in from there. The person who pinned the notice now tells you two things: where to report when it's done, and roughly where the trouble is.
- Fix
THE CAMERA FINDS YOUR PARTY AGAIN. Entering or resuming a floor framed anything but the people in it. Three separate reasons, all hidden for as long as every dungeon was small and began in the same corner: picking a run back up looked at the middle of the map rather than the party; the view refused to show a sliver of empty space past the map's edge, so a party standing ON the boundary — which is exactly where the entrance tunnel puts them — could never reach the middle of the screen; and the opening zoom pulled back far enough to show the whole plan, leaving your heroes a speck in the corner with nothing to scroll. A floor now opens on your party, close enough to see the rooms around them, wherever in the dungeon they walked in. Small arenas are framed exactly as before.
- Fix
WATCH MODE STOPS ASKING YOU WHAT TO DO. Handing the party to the AI is supposed to mean nothing pauses for you — but the commander's request for orders was the one thing that never checked, and because watch mode releases the whole party it fired on EVERY companion's turn instead of none. You asked to watch a fight and it interrupted you at every step.
- Fix
MONSTERS STOP WAITING AT THE STAIRS FOR SOMEONE WHO LEFT. When a hero took a stairway, the creatures on that floor kept hunting them — and a hero who has gone keeps the last spot they stood on, which is the stairwell itself. So the pack walked to the stairs, found nothing it was permitted to attack, and stood there, round after round. Anyone who has changed floor, fled the field, or not yet arrived is no longer something the monsters will cross a dungeon to reach.
- Fix
A DUNGEON NO LONGER SHUTS THE DOORS BEHIND YOU. Take a stairway and everything you did afterwards stopped being recorded — doors forced, ground explored, foes felled. Come back to that floor and you got the dungeon as it was built: passages you had opened closed again, cleared corridors dark again. One guard, meant to hold for the moment a floor is changing, was never letting go.
- Fix
THE DICE ARE HONEST NOW. A battle's seed shaped the map, the monsters and the traps — and then the fight itself rolled on unseeded randomness, so no two runs of the same seed ever played the same and reloading re-rolled the dice. Play draws from the seed like everything else, and each floor keeps its own place in the sequence: refresh after a bad critical and the same critical is waiting for you.
- Feature
THE STREETS TALK BACK. A town used to know about a dozen things to say, shared between every soul in it, so a walk across the square was the same six sentences on a loop. The townsfolk now draw on hundreds of lines, and they are chosen to suit the ward you are standing in — the forge grumbles about ore and unnamed orders, the temple speaks of tithes and restless ground, the docks of night barges and a crane nobody will fix. Nobody repeats a line they have just said.
- Feature
AND THEY TALK TO EACH OTHER. Two neighbours standing close enough now hold a short conversation as you pass — one speaks, the other answers, and the first often has the last word. Seventy-odd of them, from a broken crane and a missing tax roll to a father who regrets telling his son what he thinks of adventuring.
- Feature
EVERY WORD OF IT IN YOUR LANGUAGE. The town's chatter, the questions you can put to a townsperson, and the answers they give are all translated — with the groundwork laid so a new language is a new file rather than a rewrite. A line nobody has translated yet quietly falls back to English on its own, so a half-finished language is still a language, never a blank speech bubble.
- Feature
THE PACK FINISHES THE FALLEN. While one hero is still on their feet, monsters press the standing fight and leave the bodies — dragging a downed friend clear is what death saves are for. But once nobody is upright, the fallen are all that is left, and the pack now turns on them. Before this a creature at zero hit points was invisible to both the attack rules and the enemy AI, so a party that all went down at once left the monsters with no target at all: two wolves paced an empty dungeon for forty rounds while three unconscious heroes lay there and the run could not end. No new killing rules were needed — a blow landed on someone at zero already breaks their stability and fails a death save.
- Fix
A speech bubble now grows to fit what is being said. It was pinned to the height of a single line, so anything longer simply spilled out of the box.
- Fix
REPORTING BACK TOO EARLY IS A CONVERSATION, NOT A CLOSED DOOR. Walking across town to the person who pinned your notice, with the work unfinished, used to produce one grey line in the log and nothing else. They now receive you properly — in their own words, and a reeve is brisker about it than a priest.
- Fix
The quest book no longer lists one job twice. A delve already under way showed up in its own section above the very notice that sent you into it; the way back in now sits on the work it belongs to.
- Fix
SPEND HALF YOUR MOVEMENT, WALK ON, AND THE TOKEN NO LONGER TELEPORTS BACK TO WHERE THE TURN BEGAN. An AI creature's turn is many steps committed as one board update, so the board joins them into a single glide — otherwise a monster appeared to blink most of the way and then stroll the last square. Your own turn is the opposite: every click is its own committed move, already animated as it landed. Joining those too replayed the whole route from the turn's first square, so continuing a half-spent move snapped the token back to the entry point and walked it all again. Human seats are no longer joined.
- Fix
A PARTY THAT DIES ON THE FIELD NO LONGER LEAVES THE RUN RUNNING FOREVER. On a two-level floor an unsettled delve below is allowed to hold the outcome open, so an empty field can't declare victory before anyone has gone down the stairs. That guard sat above the wipe check as well — so if every hero fell up top, the run stayed "active" with nobody alive to ever take those stairs and no defeat to end on. A wipe is not a pending outcome; it is the end, and it is now checked first.
- Fix
A BARBARIAN NO LONGER BURNS A RAGE ON EMPTY AIR. Rage is a bonus action that fizzles unless the turn actually attacks, but the AI's gate was satisfied by any legal attack at all — including a throwing axe at something across the room. So a hero would walk, fall short, rage anyway, walk on, swing at nothing, and lose the fury at the start of its next turn. It now checks its own melee reach (a glaive's ten feet still counts). Measured across seeded crawls: one wasted rage in six, now none, with no legitimate rage lost.
- Fix
THE AI STOPS BRACING WHILE SOMETHING IS BITING IT. Dash already warns the narrator that a foe is in reach and it should swing rather than chase; Dodge was offered as a plain upside, so a hero standing in a wolf's teeth would take the defensive stance and give up the turn's only attack. Dodge now carries the same warning — and unlike a wasted Dash it spends the action outright, so nothing downstream could recover the turn.
- Fix
THE BATTLE TALLY STOPPED TALKING TO ITSELF. Reopening a closed results panel used to take a four-step round trip: the board told the screen there was a tally, the screen bumped a counter, the board watched the counter and reset its own flag, which told the screen again. One click, four redraws, and a dependency hack in the settings drawer holding it together. The screen that owns the 📊 button now owns the flag outright and hands it down — the round trip, the counter and the hack are all gone, and the three sandbox battle screens didn't have to change at all.
- Fix
THE AURA OVER A TOWNSPERSON YOU'D ALREADY TALKED OUT. The village crowd read "has this one still got something to say?" through a ref during render — so the answer was frozen at whenever the crowd was last rebuilt, and the ✱ could stand over someone you had just finished talking to until the ward reloaded. It is now derived properly and the crowd rebuilds when the answer changes, not on every frame of a walk. The illegal render-time write that caused it (React Doctor's only error-level finding) is gone with it.
- Fix
The LLM talk panel walked its choice list three times per render to answer two questions; the town's terraced houses keyed their outline segments by position, so a neighbour going up shifted every segment behind it; the ward's poster lookup made a throwaway copy of every quest the party holds before filtering it. All three now do it in one pass.
- Fix
Dropped `clearLlmTranscript`, an exported "reset for a fresh battle" that nothing has ever called — the transcript ring has never been reset, and the doc comment said otherwise.
- Fix
TESTS THAT COULD NOT FAIL. A sweep of all 235 test files for assertions that never run found ten that guarded a feature and would have passed if that feature vanished completely: the elite-promotion test passed on a pack with no elites, the AI slot-choice test passed if the cleric stopped casting, the delve test passed if the menu came back empty, "rescue quests always place a hostage" passed if no rescue quest ever rolled. Each now pins its own premise — and the pins were proven by breaking the code underneath them: emptying the spell registry and disabling elite promotion both turn green suites red where they previously stayed green.
- Fix
THE NO-ESCAPE MENU RULE WAS NEVER ACTUALLY TESTED. The test that pins "when you can close but can't fight, the menu hides dodge/disengage/hide" built its scenario from a GOBLIN — which carries a shortbow, so it could always fight and the regime the test names never once occurred. Its assertion sat behind that unmet condition for its whole life. Rebuilt around a wolf (one bite, no bow): the rule holds, and now something checks it.
- Fix
Registry audits now fail loudly on an empty registry instead of passing over nothing (enemies, spells, monster-control kits, gear packs) — the same class of bug as the spell-VFX audit fixed in 0.98.0, hunted down everywhere it could hide.
- Fix
Audited every gameplay field authored in the content JSON for a reader on the other side — around thirty across weapons, monsters, items and spells. All of them are genuinely read: `vfx.element` (authored, ignored by the renderer for a whole release) was the exception, not the rule.
- Feature
THE SPELL'S OWN DATA IS WHAT YOU SEE. Last release gave all 58 spells a recipe — element, form, motion, count — and then the renderer went on ignoring it: every spell still resolved its look through the legacy animation NAME, and the authored `element` was read by nobody at all. Editing "element: cold" in the JSON changed precisely nothing on screen. It does now. Element, recipe and impact form are read first, everywhere, and the animation name is gone as a source of truth.
- Feature
ONE READER INSTEAD OF THREE. The board's cast branch, the board's cantrip branch and the compendium's preview each interpreted spell VFX independently — three copies that had already drifted (the board ignored the authored impact form, so a single force dart drew an explosion ring where the example showed a flash). All three now call one resolver, so what the game draws and what the compendium teaches cannot disagree. Cantrips stopped being a special case: Eldritch Blast and Ray of Frost read their recipes like every other spell.
- Fix
SPELLS THAT DREW NOTHING NOW DRAW SOMETHING. Fire Bolt, Chill Touch and Sacred Flame had no travel art whatsoever — the mote never flew, only the impact flashed. Hellish Rebuke was worse: it named an animation ("fire_bolt") that was never in the lookup table, so its projectile silently rendered nothing at all. All four have recipes now, and Shield of Faith and Haste — which declared themselves projectiles and then sent nothing — have their blessing mote.
- Fix
ENTANGLE STOPPED BEING A PURPLE LIGHTNING EXPLOSION. The terrain spells were never included in the recipe pass: Entangle and Plant Growth — vines and overgrowth — were authored as element "lightning" with a force-purple flash, an explosion sound and a camera shake. Spike Growth had no colour at all. They now read as what they are: deep green nature, settling over the ground rather than detonating on it.
- Fix
A TEST THAT CHECKED NOTHING. The spell-VFX audit looped over every registered spell asserting its animation mapped to something — but it never loaded the content registry, so the list was EMPTY and the loop ran zero times. It had been passing vacuously for as long as it existed, which is how Hellish Rebuke's unmapped name survived. Rewritten against the real contract (the element you declare is the element that renders, every travelling spell gets a projectile, only a real AoE bursts), with a first assertion that the registry actually loaded.
- Fix
Internal: the engine named Magic Missile by id in three places (does it gain from upcasting, how many darts, does Shield swallow it) — those are `upcastProjectiles` and `blockedByShield` fields on the spell now. The 38-entry animation-name table is deleted; only the impact RULE (support glows, everything else rings) survives, as a fallback. The board's FX vocabulary moved out of the React hook the whole renderer was importing it from.
- Feature
SPELL EFFECTS ARE DATA NOW. A spell's look used to be an opaque animation name ("fire_orb") that only a hand-written code table could interpret, so every new appearance meant editing the renderer. All 62 spells now carry a RECIPE — element, form (what it looks like), motion (how it travels), count (how many) — and the renderer reads it. The element supplies every default, so most spells say almost nothing: "element: cold" alone means a crisp blue shard. Adding a spell's appearance, or a whole new element, is a JSON edit; only a genuinely new SHAPE touches code. The three spells that rendered NOTHING at all (Shield, Counterspell, Mage Armor) finally have a look.
- Feature
ELEVEN ELEMENTS THAT ACTUALLY LOOK DIFFERENT. The element table moved out of code into data — and the move exposed four collisions: force and arcane shared the EXACT body colour, acid and poison were identical in form, particle, blur and flicker, and lightning shared cold's exact hex. Palettes pulled apart (force lavender, arcane indigo, necrotic violet off the green family, poison deep toxic, acid chartreuse, lightning electric blue-white). Thunder stopped being a recoloured lightning bolt and got its own body: concentric pressure rings, because thunder is shockwave, not electricity. And PARTICLES now render — the field every element carried and nothing ever drew, so eleven elements stopped being one sphere in different colours (embers, ice shards, sparks, wisps, bubbles, motes, and arcane's runes).
- Feature
MAGIC MISSILE IS THE SPELL IT SAYS IT IS. Its example was one dart on a straight line at a single foe. Now the compendium plays it like the game: the scene fields three foes, you CLICK A FOE TO SEND IT A MISSILE (stack several on one, or spread them — "⚡×2", "2/3 assigned"), each missile flies its own parabola, and EACH ROLLS SEPARATELY — three independent 1d4+1 results with a damage total floating over every creature that took one, instead of one lump over one target. The volley follows the slot tab you picked: three missiles at L1, six at L4.
- Fix
THE CARD STOPPED CONTRADICTING ITSELF. Magic Missile read "3d4 force" while the engine rolled 3d4+3 — the row builder dropped the flat bonus, under-reporting EVERY flat-bonus spell. And the description hard-coded "Three darts" on every slot tab while the damage beside it climbed to 6d4+6; the count is a slot-aware row now (Projectiles: 3 · 4 · 6), and the prose states only what never changes.
- Fix
ONLY A REAL BLAST BLASTS. Every damaging spell had been given an explosion ring by default, so 33 of 62 detonated — including a single force dart. Single-target hits are a small ray-flash now, heals keep their aura, and only the 8 genuine AoEs burst. A test forbids a non-AoE from ever claiming a blast again.
- Fix
THORN WHIP IS A WHIP. It rendered as a floating green bubble (it had inherited poison's glob body), then as a straight green laser — neither of which is a vine. It now has its own LASH body: a curved, tapering vine bristling with thorns, and it plays in two beats — it snaps out and BITES, then reels in while still attached, dragging its victim the full 10ft before the grip releases. The victim GLIDES with it rather than teleporting, and the flash and the damage number follow them to where they land instead of hanging over the ground they were pulled from.
- Fix
Volley polish: a projectile's trail used to interpolate the straight line while its dart bowed away on the arc, so the streak detached and read as a stray beam across the field — it now follows the same curve. And an even spread across the fan handed the middle dart a bow of exactly zero (it flew dead straight, the one thing "each on its own parabola" was meant to stop), so every member of a volley now gets a distinct, non-zero curve.
- Fix
Internal: the element→shape switch lived TWICE (orb at full size, dart at small), each a partial copy — which is exactly how a form goes missing: thunder's new wave shipped to one and not the other, so a thunder dart silently fell through to a plain pip. One body table now, parameterised by radius; orb dropped from 180 lines to 76. React's deprecated MutableRefObject is gone, and the changelog's own 2,170-line array became one JSON per release, so cutting a release is dropping a file.
- Feature
👀 WATCH MODE — put the reins down and watch the fight play itself. A new toggle in the ☰ drawer, under its own "This battle" heading: the tactical AI plays your whole party, your hero included, and NOTHING pauses for you — no commander asks, no reaction windows (a watcher still interrupted by a Shield call isn't watching). Useful for seeing how the tactics land, or letting a lost fight finish itself. THIS BATTLE ONLY, by design: it is never remembered, so there is no stored flag to leave you spectating tomorrow wondering why your hero won't move.
- Feature
THE ROAD REMEMBERS WHERE YOU ARE. A journey interrupted by an encounter always did resume — the cursor advances, the legs re-derive from the same seed, the next trouble is a LATER leg — but nothing on the map SHOWED it, so a resumed road looked like a fresh one. Now a 🧭 tag rides the road at the fraction already survived, the walked stretch brightened behind it, labelled "day 2 of 3 — Highcrown". It reads the same legs the dice do, so the map and the fight you're about to walk into can never disagree.
- Feature
DISTANCE READS AS DISTANCE on the realm map: a settlement's radius now scales with the DAYS its road costs, so a two-day haul is drawn about twice as far out instead of every road looking the same length. Clamped to stay on the canvas, and the existing relax pass still keeps the pucks from overlapping.
- Fix
BLESS IS AIMED NOW, NOT GUESSED. A multi-target blessing filled its list by PROXIMITY to the first target — the cleric blessed whoever happened to be standing closest and you had no say — while Magic Missile, with the identical shape (N independent picks), has had a marker UI for ages. Bless now arms that same UI and you place the blessings. Every name is validated by the engine (your side, alive, in range, not already blessed) and capped at what the slot allows, so a blessing can never be misdirected onto a foe; name nobody — an AI cast, an old save — and the proximity pick still fills it, so a slot is never half-spent. One shared count function means the markers you may place and the allies who actually get blessed are always the same number.
- Feature
LEVELS ARE TAKEN AT A LONG REST — and the level-up left the character sheet entirely. XP still banks the moment a floor pays, but the climb waits for a night: a paid bed at the tavern (🛏 walk up the stairs), a camp on the road, or the retreat's day at the gates. The night opens a REST SUMMARY — "the fire burns low, the watch changes twice" — that calls the climbed companions by name (their growth auto-chosen, it's theirs) and hosts YOUR picks where the sheet's panel used to be. The sheet now only says a level is waiting. One seam does it everywhere, so no rest site can forget.
- Feature
THE ROAD ROLLS ITS OWN DICE. A journey is no longer a fade to black: an N-day road is N day-marches with a camp between each pair, and EVERY leg throws independently — trouble on the march at 17+, an AMBUSH ON THE CAMP at 18+, with a dangerous land's modifier added to the night roll so the wilds ambush on 15+ while the king's road stays quiet. The camp posts a SENTRY: on an ambush their passive Perception contests the attackers' Stealth — win and the party stands armed, lose and the whole party starts SURPRISED (no first turn, and an assassin's blade rides it). Survive a leg and the road continues; every camp passed is a long rest. The whole journey is seeded, so a mid-road save resumes the same road with the same luck.
- Feature
A NOTICE IS A COMMISSION, NOT A VENDING MACHINE. Every board notice is now pinned by a named local — "📌 pinned by Bessa Hale, the reeve · The Commons" — drawn from the ward it was posted from (the reeve posts village trouble, the priest the restless dead, the smith recovery work). Taking it enters your journal against THEM; clearing the field only marks the work done. To be paid you find them: they wait by the very board they used, 📌 while the job's open, ❗ when they owe you. The journal names the place so it's never a hunt without a map. This also FIXES a silent hole — the advertised bounty was owed by nobody and credited by nobody: a notice promising 120 gp paid zero, and corpse loot was the only money a delve ever produced.
- Feature
THE BARKEEP WILL COLLECT — FOR A CUT. Can't face crossing town? He'll carry the word for a keep of 30% (pleased) to 70% (hostile), riding your standing with him: never worth more than walking there yourself, and cheaper the better he likes you. His OWN quests still pay in full, and the renown is yours either way — the work was yours whoever brought the news back.
- Feature
THE PURSE IS SPLIT, LIKE THE XP. A bounty landed entirely in the hero's purse while the XP for the same job was already shared out — one job, two economies. Quest coin now splits evenly, each share into that member's own purse. Two deliberate rules: the divisor counts the LIVING only (coin paid to a corpse is coin deleted, and every piece must land somewhere), and the odd coin goes to whoever did the talking.
- Feature
THE MAPS GET GROUND UNDER THEM. The travel graphs no longer float in a black void: the REALM view lies over rendered terrain — woodland, plain, downs and crag from a noise field — with a clearing under each settlement; the TOWN view lies over a plan of the settlement itself, ward footprints in their own palettes with streets drawn between the connected ones, and dark silhouettes where you've only heard a name. The shape of a town is legible before you've walked it.
- Fix
THE CHANGELOG IS DATA NOW — one JSON per release (144 of them) instead of a single 2,170-line TypeScript array that every release appended to. That file was a growth deadlock of exactly the kind the content rules forbid: merge-conflicting on every cut, impossible to touch without recompiling code. Cutting a release is now DROPPING A FILE — no index, no barrel, no registration — because the accessor reads the directory at build time. Semver ordering is explicit (a string sort put 0.9.1 above 0.94.0), and since the compiler no longer guards the shape, tests do: unique versions, ISO dates, valid change types, and every filename matching the version inside it.
- Feature
Every sword in the party EARNS: companions bank their own equal share of each floor's XP and climb on it — the veteran of ten delves is finally a different person from this morning's recruit. The hero's number doesn't move (the divisor was always the whole party), nobody demotes (an old companion's level is read as the XP it was worth), and each member's own bar now shows on the hero sheet. Level-ups auto-take their picks the moment a delve pays, so growth never sits unbanked.
- Feature
THE COMMANDER'S MARK — right-click a foe and the party converges: 🎯 over its head, the mark leads the TEAM briefing, outranks even 'kill the caster' in every party brain, and always keeps its options on the model's menu. Advisory like every command (the obedience dice stay the law), monsters never read it, and a dead mark is spent. Right-click again to lift it.
- Feature
The spoils of the delve: the results screen now reports the RUN — XP banked, coin carried, gear hauled, foes slain, floors walked, time delved — not just the last floor's numbers. Carried spoils count as a snapshot, never a re-sum, so a retreat that re-walks paid floors pays nothing twice.
- Feature
The barkeep's work-for-hire finds its voice: with the Narrator on, each quest card gets a title, the pitch in the giver's own words, what's actually known, the catch, and whom to ask — while the rolled kind, tier, level and pay stay untouchable underneath. Any answer the parser can't vouch for falls back to the canned line, so the board never waits on the model.
- Feature
The town shows where you can walk — a faint dot on every walkable cell, read from the same grid the walk itself uses, subtler than the battle board but always there. And 'Copy log' now bundles the node side's LLM transcript under the battle log, so a weird AI decision ships with the exact prompt and answer that produced it.
- Feature
The sell shelf tells the truth twice over: two daggers are two lines (selling one no longer sells — and silently DELETED — both for the price of one), and the gear a member is actually wearing is badged 🛡 worn / ⚔ wielded, so the suit off their back stops being an accident. A haggle won on one copy discounts that copy alone; the +1 working survives while any copy of the blade remains.
- Fix
The boss holds its lair: a lairAnchor leash (40ft, enforced in the apply layer AND the auto-advance) plus a BOSS INSTINCT prompt line that overrules the difficulty rung's 'quick to flee' — so the Worg that ran four rounds through its own traps stands its ground and dies where it lived. Siege attackers stay unleashed; they're the ones coming to you.
- Fix
AI movement stops looking hurried — it was never the animation, it was the INTERRUPTION: the next creature committed 420ms after the last and cut every longer walk off mid-stride. The turn loop now waits out the walk still playing (one shared timing module for the canvas and the runner), and a creature's consecutive steps chain into a single glide instead of a teleport with a stroll at the end.
- Fix
Three ways the AI stopped wasting turns: Rage only rides an attack it can actually make (no more raging down empty corridors until [0 left] — both brains, menu and heuristic, honour it); the model's target list ranks only foes the actor can SEE, so a cleric with a clean Guiding Bolt shot stops blessing itself while three unhittable casters hog the menu; and 'Drop concentration' appears only when a different focus spell is genuinely waiting behind it — the drop-Bless-recast-Bless slot burner is gone.
- Fix
Town movement runs smooth: the standing town (every tree, house and flagstone) moved into its own canvas layer, painted once per ward — a walk now repaints only the dozen things that move, not the whole district 60 times a second. And shortcut travel puts the party back on its marks even when two wards share the same muster cells, so the hero token stops vanishing under another district's buildings.
- Fix
React Doctor triage, round seven — the ledger moves into the code and the scan goes SILENT: 47 findings to zero, score 89 → 100. Every validated false positive now carries its verdict at the site itself: a one-line reason plus an inline suppression on the exact flagged line, so the next scan — and the next reader — sees WHY the index is the identity, why the reset must live in that effect, why a Set would go stale. No rule was disabled globally; each keeps guarding new code everywhere else. Two survivors taught the tool's newer anatomy (the derived-state check is a PAIR — one rule anchored at the effect, one at the setter — and both want their own line), and one fresh warning was the suppressions' own weight: the comments pushed VillageScene over the 300-line threshold, suppressed as comment-inflation with the split tracked as its own task. The ledger (docs/REACT-DOCTOR-LEDGER.md) stays the audit trail; the code is now the enforcement. Comments-only change — typecheck clean, 1413 tests green.
- Fix
React Doctor triage, round six — 51 findings down to 47 by giving the village's spoken words real identities. The NPC chat transcript, topic-talk answer lines, dialogue-node lines and the trader's negotiation log all keyed their rows by array position; one shared helper (withOccurrenceKeys) now keys each row by its content plus its occurrence number — stable as transcripts grow, safe when two lines say the same thing, and no wire types or engine code touched. The remaining 43 index-key-and-friends findings stay in the ledger (docs/REACT-DOCTOR-LEDGER.md) as validated false positives: positional lists where the index IS the identity, plus the ⚠ traps that would become real bugs if 'fixed'. 1413 tests green.
- Fix
React Doctor triage, round five — 61 findings down to 51, score 73 → 80 and ZERO errors, this time by dismantling the traps the ledger warned about instead of walking into them. The jailbreak screen folds three load states into one (the not-found redirect still fires — the ref swap the scanner suggested would have wedged the page on a blank screen forever). The sidebar's combatant selection keeps only the pin and derives the rest each render: turn-follow now has zero lag, released pins stay released, and the eslint-disable is gone. The warm-round pool keeps its 3-worker GPU guard as a recursive chain, the warmup helper moved to module scope, area-log entries carry real ids (the scanner then caught a StrictMode double-increment in the first attempt — fixed), spell-preview re-aim happens in render, class-feature rows key by tag, and every builder dropdown names itself to screen readers. The one error-severity survivor — the scanner misreading LivingVillager's correct bark-timer teardown — is now suppressed inline on that single line with the reason in the comment, so the rule keeps guarding everywhere else. The ledger (docs/REACT-DOCTOR-LEDGER.md) is re-verified at 51 entries. 1413 tests green.
- Fix
React Doctor triage, final round — 196 findings down to 61, and every survivor is now a WRITTEN false-positive ledger entry (docs/REACT-DOCTOR-LEDGER.md), not a backlog. The four god-components fell: ArenaBoard, TraderShopModal, ForgeHeroCard, and SpellSceneCanvas are thin orchestrators over 24 new focused pieces. Hot loops build their lookup Sets once (pathfinding's inner ring, the fight roster, spell menus), style factories and context values stopped being rebuilt every render, modals close from the keyboard, redirects fire in render instead of flashing a frame, the JSON-LD script escapes itself, and five dead files left. The one scanner ERROR proved to be the scanner misreading a correct teardown — documented, kept. Zero behavior changes: 1413 tests green throughout.
- Fix
React Doctor triage, round three — the Performance top three, 405 findings down to 196. Every chained .filter().map() walk over a list (120 of them — candidate builders, wall sets, shop catalogs, legal-action menus) now makes one pass via flatMap with early-return guards, and every relative barrel import (145 across the engine, AI, and content layers) names its module directly — geometry, state, effects and friends no longer drag their whole folder into each chunk. The two spots that genuinely needed the intermediate array kept it, honestly named. Zero behavior changes: 1413 tests green before and after.
- Fix
React Doctor triage, round two — the Bugs category, 310 findings down to 45. Every render-time ref write moved into effects (the turn runner, the intro, the prefetch, the battle clock — render is pure again, safe for React to replay). Every plain <button> now says type="button" (151 of them), so a future <form> can't turn a Dash click into a page reload. List keys got real identities in ~30 places. Reset-effects became derived state (offers, narration pages, beam drafts), the builder navigates from the click instead of an effect, the forge fonts are self-hosted via next/font, and a failed save or stats read no longer strands its spinner. What remains is a documented false-positive ledger, not a backlog.
- Fix
React Doctor triage, round one. The Firestore rules now speak in named predicates (isSignedIn / the existing isParticipant) — same access policy, but the intent is explicit and the security scanner's permissive-rule error is gone. Twenty-three dead exports (canned barks, back-compat facades, an unused Tabs/Collapsible/AddButton trio, the never-called adminAuth…) left the public surface, and empty-module.mjs — Turbopack's canvas stub, alive but invisible to the import graph — is declared as an entry so the dead-code sweep stops accusing it.
- Feature
ACTION SURGE JOINS THE AI'S ARSENAL. The surge's legality gate (action spent) was exactly the turn-fill loop's exit condition, so no AI fighter ever surged — the fill now offers the perk catalog one shot at RESTORING the action before giving up. Fighters attack, ⚡ surge, and attack again (and a Dash-opener can surge into a swing); the enemy-visible gate keeps it from being wasted on an empty room.
- Feature
THE FILL LOOP CONFESSES. Its silent exits (a rung proposing a non-accepted intent, a rejected pick, a no-op repeat) now tag WHY through AI_TRACE — and the mute rungs (perk/buff/control) tag their picks. The next second-wind-then-stand turn names its own culprit in the console instead of demanding archaeology; test-pinned, zero cost with tracing off.
- Feature
The commander ask went WIDE AND FLAT: one row — the proposal card horizontal (icon beside text, ↻ flip in the corner) next to a strip of compact order buttons (label over DC). Roughly a third of the old height, so the board stays readable while an ally waits for the word.
- Feature
Settings toggles explain themselves: an ⓘ beside AI Narrator / Commander asks / Strict opens a small modal with a real description (what the switch does, what it costs) — replacing the hover-only title tooltip that touch never saw.
- Fix
The village LOCATION BAR docks at the true bottom of the scene pane again. Its wrapper hugged the canvas, and since the pane vertically CENTERS a short map, `bottom: 10` landed mid-screen — the breadcrumb floated over the streets. The wrapper now fills the pane (canvas centered within it), so the bar rides the screen's foot regardless of map height.
- Feature
HARNESS HEALTH METRICS: the AI turn loop now measures itself. Watchdog force-ends are counted (the stuck rate — should read 0), a model call that errored/timed out records as llm-failed instead of masquerading as a by-design heuristic turn (a degrading gateway is now visible), A→B→A move shuttles are derived from the log as oscillations, and every LLM role tracks its WORST single call (maxMs) alongside the average — the 45s outlier the mean used to hide. All of it flows through the existing GameRecord → IndexedDB → /stats pipeline; old records read as zeroes, no migration. Bonus fix: decide-role latency was never being fed into totalMs (only voice passed it) — the avg-decision stat on /stats was silently 0-based until now.
- Fix
DEAD CODE SWEEP: 29 unused imports/locals removed across the repo (refactor leftovers — dead pickers in SlotEditor, orphaned engine imports, test destructures) and `noUnusedLocals` is ON in tsconfig, so the class can't accumulate again — an unused entity is now a build error.
- Fix
Beam dispatch (Eldritch Blast bursts) now folds each beam through the SAME submit-pipeline steps instead of hand-duplicating apply→heckle — the burst can never drift from the single-shot rules. The rest of use-encounter stays deliberate hook wiring: a pipeline models a journey, not a switchboard.
- Fix
THE SUBMIT FUNNEL IS A PIPELINE now (the api-proxy shape): one intent's journey — route-descent → stamp-note → apply-engine → taunt-hecklers → react-outcome — each step a pure Context→Context unit in its own file, folded by a generic lib/pipeline runner. The orchestrator only commits the outcome. No behavior change; the steps are unit-pinned (descent short-circuits, a rejection stops before commit, the note stamps above its action).
- Fix
use-encounter de-godded, round two: the narration feed (use-narration-feed), beam-split delivery (use-beam-dispatch), the auto-descend watcher (home in use-dungeon-descent), and the commander's answer paths (answerAskDo / answerShield, now inside use-commander via a submit ref) each moved to their own hook. The orchestrator is wiring again — 392 → 308 lines, no behavior change (full suite green).
- Fix
THE INVERTED SAVE BARK. Casting Hex/Bane/Hold floated "resisted" over the target even when the curse LANDED: the popup layer guessed a save from the event's shape (any damage-less cast with a target), and a landed buff/curse is exactly that shape. Save popups now float only on a structured `saved` flag stamped by the genuine shrug-off events — a landed Hex reads as landed.
- Feature
THE ASK IS TWO CARDS NOW. Card one is THE PROPOSAL — the ally's suggestions one at a time, ↻ flipping through them (their plan → attack the nearest → the best cast → dodge); their own top plan approves with no dice, any flipped alternative is your word through the obedience roll. Card two is YOUR ORDERS — press the attack, fall back, the 🔮 SPELL STRIP ("alternate the spell": one chip per castable spell, target pre-picked — wounded foe for damage, wounded ally for heals, lowest slot), 🗣 Insist, and 🎮 take control (this turn).
- Feature
THE ASK GOT CONCRETE. An ally's held-turn ask now offers the real choices a table argues about: their own plan, up to two CONCRETE alternatives ("Attack the Worg", "Cast Haste on Gregor" — the best value cast or support spell), and Fall back. Picking a concrete card is your WORD: the obedience dice decide — obeyed, that exact action executes and the turn plays on; refused, they do it their way.
- Feature
THE INSTINCT ROLL. Before asking, the ally rolls a d20 (deterministic per turn): under the data threshold they trust their gut and never raise the ask — the turn just plays, like a real table where not everyone looks to the commander every round. ⛓️ Strict commander always asks.
- Fix
SAVE-CANTRIP FREE FIRE. Sacred Flame is a cast, not a weapon — no rung ever fired level-0 casts, so a slotless cleric stood at range reading wounds. Both brains (party and enemy) now zap with the best free cantrip when no weapon shot exists, and the idle-action fill spends the action on it.
- Fix
HONEST COMMAND LINES. "Ignores your Rush order" no longer prints when the ally's own plan WAS an attack (the Eldritch-Blast-then-"ignores" nonsense — silent instead: you got what you asked for). Bravery +1 is EARNED now: a rush that attacked with a foe at their throat, or a retreat that truly broke contact — not a buff cast from 45ft of safety. And the Chromatic Orb's leap names its doubles ("splits on double 6s") — the RAW matching-dice rule was always there, now it's visible.
- Fix
THE PASSIVE ALLY, DISSECTED. Three stacked bugs made a commander-mode ally stand beside a foe doing nothing: the idle-action fill asked the GOBLIN brain for a party member (nothing usable came back — no swing, so rage lapsed every round and burned all four uses re-raging), the stall-guard then threw away any swing that DID land because the hero hadn't moved, and the follow-the-leader gate fired IN COMBAT, walking a sightless ally toward the hero instead of the fight. All three fixed: allies fill their action with their own brain (rage → reckless → assess → both Extra Attack swings), an acted turn is never "stalled", and the leader gate is crawl-only.
- Fix
Command-log polish: the every-third-override "chafes under command" line was silently dropped (a state reassignment inside its own entities.map); order refusals and loyalty changes now carry their round instead of printing as [R0].
- Feature
ALLIES HAVE A NATURE. Each class carries a disposition (obedience.json): the reckless barbarian charges cheap and balks at retreat, the protective cleric answers Shield calls eagerly, the prideful fighter chafes at overrides — data-driven DC tilts on specific asks, visible in the shown DC and named in refusals ("it goes against their nature").
- Feature
LOYALTY LIVES. An ally who follows a Rush or Retreat order and is still standing when it clears earns trust (+1 loyalty, logged); every third commander override chafes (−1, logged). Clamped tight by data — a relationship, not a second HP bar.
- Feature
🗣 INSIST — spend a command point (base + your hero's CHA mod per battle) to add +3 to one ally's obedience roll: on the order radial, the ask modal, and an ally's Shield/Counterspell calls. 🫡 ALL — give the same order to the whole party from the radial; each ally rolls their own dice.
- Feature
⛓️ STRICT COMMANDER (☰ drawer): every obedience roll auto-obeys — pure tactical control for players who want it, logged as "the commander's word is law". The dice-driven default stays the game's identity.
- Fix
use-encounter was growing into a god object — the whole commander concern (asks, predicates, insist, strict, strain) moved into its own use-commander hook. "Take control" is labeled for what it always was: this turn only.
- Feature
AN INFORMED REQUEST. Every command surface now shows the obedience INPUTS before you commit — the DC (situational bumps included) and the ally's loyalty — on the order radial, the commander-ask directive cards, and an ally's Shield/Counterspell calls. The inputs, never the roll: the dice stay sovereign.
- Feature
ALLIES SAY WHY THEY SAY NO. Refusals now carry a reason drawn from the same math that raised the DC (data-driven, obedience.json): "ignores your Rush order — too wounded to charge", "nothing here worth fleeing", "they won't spend the slot on this", "they trust their own read of the field".
- Fix
The three control predicates (seat / asks / player) were extracted pure (lib/battle-control/predicates.ts) and pinned by a full matrix test — the 0.86.1 class of conflation bug (commander mode inflating the seat) can no longer ship silently.
- Feature
ONE ASK PER TURN — THE COMMANDER SPEAKS ONCE. The per-intent confirm spam is gone: an AI ally's turn is HELD on a single one-row ask — their own plan (named now: "Cast Bless on Qhorin", not "cast a spell"), ⚔️ Press the attack, 🏃 Fall back. Approve and the whole turn plays out on its own; a directive stamps a one-shot ORDER the obedience dice may still refuse ("ignores your order and acts on their own"). "Take control" hand-drives just that turn. Shield/Counterspell calls keep their own asks as before.
- Fix
THORN WHIP PULLS AGAIN. The yank was implemented only on the spell-cast path — but the whip is wielded as a spell-weapon through the attack pipeline, which silently skipped it. A hit now drags the target up to 10ft toward the caster on both routes (Large or smaller), logged (🌿) — pull them through the Spike Growth like the druid intended.
- Fix
THE COMMANDER'S ASKS ACTUALLY APPEAR NOW. The ask modal never showed: commander mode stamped every ally control="human" in the engine, and the modal's gate (rightly) excludes human seats — the same pollution made succession see phantom fallen seats. The stamp is SPLIT: entity.control stays the seat's truth, a new reactionAsk stamp carries commander coverage for Shield/Counterspell windows. And the 🎯 button left the board: "Commander asks" lives in the ☰ drawer beside the Narrator switch, live-synced, story mode ON by default (a fresh preference key — the old board-button toggle can't suppress it).
- Feature
YOU ARE THE PARTY'S COMMANDER (ally-control c). In story mode an AI ally's turn asks for your word — a compact prompt (Counterspell-window style) with the ally's own plan and a couple of alternatives. Confirm their plan and they act; ORDER something else and they roll the obedience dice (d20 + loyalty vs a data DC) — a failed roll and they shrug the order off and do it their way. Their Shield and Counterspell reactions are calls too: an ally may refuse the call and keep the slot. Every verdict lands in the combat log with its roll ("🎲 Asclepius shrugs off the commander's call (7 vs DC 10) — they know better"). The 🎯 toggle turns it off; story mode starts ON, and your choice sticks.
- Feature
STORY MODE LAYS THE LOG ALONG THE BOTTOM. On an expedition floor the combat log is a bottom strip — initiative on the left, the log center, the dice tray on the right — so the dungeon keeps its full width; the board reserves the strip's height while it's open (📜 tab at the bottom-right edge). The sandbox keeps the classic right drawer, and the ☰ settings panel stays a right drawer everywhere.
- Fix
A long name no longer overruns its headstone card — the cemetery hover card grows with the wrapped name, and the class line and epitaph shift down under it.
- Fix
THE SEALED CHAPEL DEAD END. The delve-mouth compound could wall off its own doorway: when the approach path ran ALONG the wall ring, every crossing but one was bricked over and the surviving doorway opened onto a rock plug — the mouth was sealed, and the whole muster parked on its spawn cells forever. The builder now keeps EVERY ring cell the path crosses open (reachable by construction; pinned across a 21-seed sweep incl. the shipped board), and the doctrine no longer treats an unreachable mouth as "wait here" — it falls through to the barrier/frontier rungs.
- Fix
A LEADERLESS PARTY IS A COLUMN TOO. With no human hero on the floor (a true floor split, a spectated party) each ally marched at its OWN nearest unseen monster and the party opened two fronts inside three turns. The column now falls back to the party ANCHOR — the lowest-id living member leads, the rest keep station on it.
- Fix
THE 🎯 TACTICAL TOGGLE STICKS. It was per-battle state defaulting off, so the ally "what should I do?" suggestion prompts silently vanished on the next fight (and on every expedition floor change). The preference is device-local now, like the Narrator switch.
- Fix
THE COLUMN HOLDS UNDER THE NARRATOR TOO. With the AI Narrator on, ally turns run through the LLM menu — and its auto-advance fell back to the nearest UNSEEN monster anywhere on the map, so a "Dash — close in" still marched allies door-to-door away from the leader (the split came back). The auto-advance now obeys the column: a party member with no foe in sight spends leftover movement keeping station on the human leader — same 20ft walk-station, same rung, both brains.
- Feature
THE PARTY IS A COLUMN, NOT A SCATTER. On a crawl with nothing in sight, AI allies now FOLLOW THE LEADER — the hero you steer — keeping station within 20ft (walk distance, path-based) instead of marching on their own frontier goal the other way (the 3-versus-1 split that fed heroes to the worg den one at a time). A leader dragging the column far off the party's own objective must win ONE shared d20 (their CHA vs a data DC): convinced, the party follows with a log line; not, it BALKS together — "why this way?" — and holds until the leader relents or takes a new stand (moving re-rolls). One verdict for the whole column: they follow together or balk together, never 1/1/2.
- Feature
LEAVING A FIGHT IS FLEEING IT — FOR REAL NOW. Mid-fight, the drawer's "Fall back to the hub" no longer teleports (and no longer silently stays clickable through a stale drawer): it SOUNDS THE RETREAT. The horn is a party-wide call on anyone's initiative; the reins leave the player's hands and the whole party — hero included — runs for the way out under the rout doctrine, floor by floor to the surface.
- Feature
THE NARRATOR SPEAKS OVER THE GRAVE. A wiped run now carves an EPITAPH: the DM's closing word is saved onto the fallen hero (a plain carved line when the Narrator is off), the result screen's way home becomes "To the graveside", and the hero's sheet opens on the epitaph over their record.
- Feature
THE LOG LEARNED TO SORT ITS NOISE. The area log now has TABS — All · Events · Talks · Noise. Street barks and idle chatter file under Noise (dimmed); arrivals, travel, and happenings stay Events; and conversations leave a SUMMARY under Talks — what a townsperson actually told you, and how a round at the barkeep's counter went.
- Feature
EVERY TOWN POSTS ITS OWN NOTICE BOARD. The board's rotation is seeded by the settlement you stand in, and its size decides the work posted (board-work.json): a village's board is modest chores with no death notices; a city's board opens on blood money and posts no rat-cellars. The gentlest posted notice always comes quiet — a soft option everywhere.
- Feature
THE AI NARRATOR SWITCH MOVED TO THE MAIN ☰ DRAWER — one app-level toggle for hub and battle alike, live-synced everywhere (flipping it mid-run updates the running floor; the hub's quest-givers appear and vanish with it).
- Fix
NO MORE BRUTEFORCE, ANYWHERE. The barkeep's dialogue checks are now one attempt per place — reopening the conversation does not re-offer a failed Persuasion. And the trader's counter has a MEMORY: the flattery you already spent and the attempts that hardened the price persist across shop visits (a market day clears the slate).
- Fix
Hub polish after the drawer unification: the sidebar keeps the profile's name header above the stat pills, and the settings drawer reads the log mode it renders under.
- Feature
THE MARKET IS AN ECONOMY (rules2/rule3). Settlements carry MARKET TIERS (market-tiers.json): a buy limit and a till — a village fence caps what he'll pay for a ruby, a city jeweler doesn't. REGIONS (regions.json) tilt prices by item kind, the trader's till is finite per visit, and outpriced goods say where they'd sell best ("best sold in Highcrown").
- Feature
THE MAP IS AN EGO-GRAPH (map.md). Travel renders around WHERE YOU STAND: your ward at center, direct roads as ring one, through-wards hanging off their hop, unexplored places as ghost pucks with rumors. Real map thumbnails fill each puck, routes march a gold dash along the actual hops, and the whole graph fits-to-bounds with pan/zoom. The Realm view speaks the same language, with day-count roads.
- Fix
THE WALLS BETWEEN THE CONTEXTS HOLD (ADR 0003). A full graph audit of the import matrix: the appraisal crafts law and the Locale axis moved down into content as data; the AI turn loop (pure machine, runner, watchdog, turn economy) moved home to ai/turn-loop; delve transitions, battle stats, battle ids and the multi-projectile seam left the UI tree for their lib contexts; the NPC-talk pass-through dissolved into its route. No behavior changed — every arrow now points the right way, and the tests reach domain logic without touching a single component.
- Feature
CONVERSATIONS ARE TOPICS OVER A WORLD, NOT SCRIPTS (ADR 0004). A townsperson no longer runs a hand-built tree: they offer a seeded set of reusable TOPICS (rumors, directions, this ward, their street's own concerns), and every answer resolves through a KNOWLEDGE BASE that speaks the actual world — the same question about trade names the peddler's cart in a village, the square in a town, the ward's own goods in a city, with real names filled in ({The Sleeping Fox}, {Bessa Hale}). Once-topics leave the menu when asked; when a speaker has nothing left, their ring drops. Dialogue choices now fire TYPED actions (one action language for every voice) — the quest-chain seam done properly.
- Feature
THE NARRATOR SPEAKS FOR THE BARKEEP. With the AI Narrator on, the barkeep becomes a FREE conversation — type anything; they answer in character, grounded in a curated brief (who they are, where you are, what they know, what they REMEMBER about you from past talks). The model can only REQUEST allow-listed actions (open the hiring hall, lay out work) — the engine validates everything; prose can never smuggle a world change. Narrator off, or one failed reply: the classic dialogue takes over seamlessly. The game never depends on the model.
- Feature
Internal: the map is now the territory — a bounded-context audit (ADR 0003) straightened every crooked arrow: the battle-assembly domain (slots, builders, share codes) and the settlement-scene domain (scene derivation, decor, walk grid) moved out of the UI tree into lib/, the engine no longer reaches into storage for a type, and content no longer reaches into a component. Five contexts, one-way imports, the whole suite green through the move.
- Feature
SHOPS SELL THEIR OWN GOODS. Walk into the alchemist and the ledger holds philtres and herbs — no longsword rack. A specialist building (jeweler, woodcarver, alchemist…) trades exactly its own crafts; the general trader still carries the ward market's full range.
- Feature
TOWNSFOLK REMEMBER YOUR TALKS — AND SPEAK LIKE THEIR STREET. Walk a villager's conversation to its end and they've told you what they know: the talk ring drops and they go back to muttering. No more BRUTEFORCING the Persuasion/Insight questions either — one roll ever, pass or fail. And each ward now has its OWN voices in the pool: a soot-streaked forge worker, a nervous copyist under the towers, a deckhand who knows what moves at night, a lay sister, an off-duty guard — themed dialogue trees keyed to the ward's type, in data.
- Feature
THE AREA LOG MOVED INTO THE REAL DRAWER. The hub's log now lives in the same right-side drawer the combat log uses in battle — the ☰ swaps settings ⇄ log the same way (navigation stays visible in town). The floating popover is gone.
- Fix
THE TOWN CAMERA IS YOURS. Zoom anchors at the pointer and the pan is free — no more snapping back to the hero (that's the battle board's manner, not the town's). The Lyceum stopped being one big barrack too: halls render as COMPOUNDS — two wings, a corner tower, and an open courtyard.
- Fix
PROFILE ISN'T NAVIGATION. 'Switch profile' moved out of the drawer's navigation list into its own Profile section at the foot of the ☰ drawer.
- Fix
THE REALM STOPPED LYING ABOUT ROADS. A settlement two roads away read 'No known road' forever; the Realm view now walks the road graph and tells you the way — 'No direct road — travel through Aldermoor.'
- Fix
THE CAMP SPEAKS ONE LANGUAGE. The pasted emoji props (the hut, the backpack, the emoji treeline and fire) are gone — drawn conifers, a stone-ringed flame, stacked packs, a bedroll and a signpost home, all in the board's own top-down idiom.
- Feature
THE SIDEBAR HAS A SPINE. Labeled stat pills (gold on hand · artifacts) over a proper IDENTITY CARD — portrait, name, kin, and a real XP bar — then three clear groups: CAMP (go to the fire, the sheet, the bank line, hiring), KNOWN PLACES (shortcuts you earn by exploring — a service in another ward shows '→ The Commons' and takes you there), and the QUEST BOOK: every taken job with its state and every running delve a click from continuing. The sidebar's competing Travel button is gone — the breadcrumb owns movement.
- Feature
THE EYE HAS A PATH. Places you can ENTER wear a warm rim, a lit doorway spilling onto the threshold, and a flat hanging SIGN (drawn, not an emoji — ale round, anvil, coin diamond); everything that's only scenery cools and recedes under a shade. Townsfolk pins muted and their chatter halved; when zoomed in, the camera FOLLOWS your hero as they walk. Click yourself at the camp to open your character sheet.
- Feature
THE AREA LOG. A 📜 drawer on the streets keeps the session's local record — your arrivals, roads taken, talks, deals — and what the townsfolk actually said, newest first.
- Fix
HEROES HAVE NO 'HOME' — TOWNS HAVE NAMES. The starting settlement's id, name and file all say ALDERMOOR now; old saves that still say 'home' are read as the same town.
- Feature
TRAVEL IS A JOURNEY. Leaving a ward from the quick bar walks your hero to the road out, dips the screen dark — 'You cross Aldermoor…' — and fades the new ward in; the same dark beat carries you down the road between settlements. The quick bar itself now lists only where a road actually leads from here.
- Feature
MAPS ARE GRAPHS ROOTED AT YOU. The town plan lays its wards out node by node from where you stand — you, then the wards a road reaches, then the wards beyond — with the roads drawn as edges between them. The Realm view got the same shape: your settlement, the roads out, the places past them.
- Feature
WARDS LOOK LIKE WHAT THEY ARE. The Forgeworks raise the GREAT FORGE — twin stacks, drifting smoke, a furnace maw glowing at the wall — with a second anvil down the street; Arcanist's Row raises the Violet Spire and the Lyceum; Highcrown's Arcanum gets its Scrying Needle and an alchemist, the Foundry a jeweler, Willowmere a woodcarver's shed. Backdrop rooftops now wear each ward's THEME (soot greys in craft streets, violet slate in arcane ones), city wards open onto bigger ground (Market Cross), and the district scene ZOOMS like the battle board — wheel toward the pointer, drag to pan.
- Fix
Switch profile moved out of the town card into the main ☰ drawer, with the rest of the app-level navigation.
- Feature
WARDS CONNECT BY ROADS, NOT BY FIAT. A settlement's districts form a GRAPH now — authored in its data file, drawn on the town plan as actual edges between the wards (bright where a road leaves the one you stand in). Only neighbouring wards are a direct walk; the rest tell you the way: 'No direct road — go through The Commons.' In Aldermoor, Arcanist's Row hides behind The Commons; in Highcrown, the Quays open only through the Foundry and Potter's Field only past The Watch — a city you learn to cross. The tests guarantee a graph can gate but never orphan a ward.
- Feature
BARKS ARE NOT CONVERSATIONS. Everyone in the street mutters again — ambient one-liners belong to the whole crowd. But the talk AURA now marks something real: a DIALOG — a structured chain of replicas with choices, run by the same engine as the barkeep's. A share of the townsfolk hold one (gossip, directions, ward lore — three trees in data, seeded stably per person); step up and the conversation opens as a proper tree, Persuasion checks and all. The dialogue format also gained the quest-chain seam: a choice can point you to the one who continues the thread — ready for quests to use.
- Fix
NOT EVERYONE WANTS TO CHAT. Every townsperson wore the 'step up and speak' ring — the whole street glowed. Now only a SHARE of the crowd has something to say (a data knob, ~half); the rest are silent ambience: no ring, no click, no barks. Who's chatty is seeded per person and stays put — you learn which faces in a ward will talk to you.
- Feature
YOUR ALLIES HAVE A WILL OF THEIR OWN. An order to an AI companion is a REQUEST now, not a string to pull: at their turn they roll to obey — the dice decide, never the Narrator. Loyalty tips the roll: a companion bound to you by a debt on the party ledger follows more readily; a stranger might not. Risky asks are a harder sell (charging while badly wounded, retreating with no enemy near), and a refusal is called out in the log — they simply do what THEY think is best that turn. Every knob lives in data.
- Feature
STREETS, NOT A ROAD. Dense wards finally have a street NETWORK: a second street row and vertical connectors weave the town into BLOCKS, each ward's web laid out its own way. Backdrop houses now FRONT the streets — every house faces a lane instead of floating orphaned on the grass — and doors connect to the nearest street, not always the far main road. Hamlets like Willow Green keep their single honest lane.
- Feature
THE QUAYS GOT THEIR WATER. A docks ward can author a waterfront — the Quays now front a harbour band along their east edge: deep water, boats riding it, and no walking into the river. Data-driven like everything else (one line in the district's file).
- Fix
NO MORE WALKING THROUGH WALLS. The backdrop houses and market stalls were scenery only — heroes strolled straight through them. The crowd is SOLID now: the walk grid and the drawing read the same set, and the tests prove no house ever seals a door, a lane, or the muster ground.
- Fix
THE DEAD STAY BURIED IN ONE PLACE. Headstone plots were standing in every district — empty grave rows in the Forgeworks, on Market Square, everywhere. The cemetery's plots now exist only where the cemetery actually is (The Commons, Potter's Field, Willow Green).
- Fix
NO TWO STREETS ALIKE. Every ward used the exact same road skeleton — the same main street on the same row with the same bend out of town. The main street now sits on a slightly different row per district (its own name seeds it), and the way out follows it — so walking ward to ward no longer feels like the same map recolored.
- Feature
THE QUARTERMASTER IS A CAMPFIRE NOW. Dealing with your party is no longer a form — it's a PLACE. The Quartermaster button walks you out to the party camp: a fire in a forest clearing, tents pitched, and your companions standing around the flames, each wearing the 'step up and speak' ring. Walk your hero up beside someone and the bargaining opens with THEM — whom you deal with is chosen by your feet, not a tab row. Asking, offering, selling and settling debts all work as before, one face at a time.
- Feature
TOWNS HAVE SQUARES. A district's street plan finally follows its authored road style: Market Square (and Highcrown's Market Cross) now opens onto a grand COBBLED PLAZA — the well at its heart, the notice board on its edge, market stalls ringing the pavement, and the new TOWN HALL fronting it. Crossroads wards cut a second lane with a small square at the meeting. And the wards wear their wealth: Highgate's houses became MANORS, Potter's Field's became SHACKS — rich and poor quarters you can tell apart at a walk. Inner blocks now fill the once-empty middle ground too. All of it authored in each district's data file.
- Fix
YOU CAN SEE WHERE TO STAND NOW. The trader's ledger (and the barkeep's ear) used to open from ONE secret cell, while the aura ring floated over the counter and never touched the floor. The standing spot is now PAINTED on the ground — a row of gold-dashed footstep tiles along the counter front — and the whole stretch in front of the merchant works, not a single square.
- Fix
ONE SCALE FOR ALL SOULS. Townsfolk were drawn half the size of hero tokens — but a person is a person and fills the same 5-foot square. Villagers now wear the same token disc at the same size; your party still reads apart at a glance by its brighter ring, name plate, and gold selection glow. And the 'step up and speak' aura is honest now: only folk who actually have something to say wear it — a silent figure draws no ring and takes no click.
- Feature
THE STREETS ARE ALIVE. Townsfolk amble about the lanes instead of standing frozen, and they TALK — ambient lines rise over their heads (each ward has its own voice: forge-talk in the Forgeworks, grave-talk on the Commons), rumors included. Walk a hero up to anyone (every soul wears the 5ft 'step up and speak' ring) and click to chat.
- Feature
THE WORLD HAS A SHAPE: Realm → town plan → streets. A new REALM view lays every known settlement out as tiles — where you stand, where the roads lead, and the places you've only heard of. A location bar rides the foot of the streets (🌍 › Aldermoor › The Commons) with every district a click away, you-are-here lit gold.
- Feature
YOU LEARN A PLACE BY WALKING IT. Districts start as RUMORS — a hooded card and a line overheard ('Smoke over the rooftops day and night…'). Travel there and the town plan learns its face and services; talk to a local and it learns the market too. Settlements on the realm map keep their secrets the same way until you've been.
- Fix
THE TOWN FINALLY SHOWS UP. The dense backdrop the districts always generated was being drawn OFF the edge of the canvas — built, then clipped invisible. The skyline now frames the walkable square on all four sides, and each district's own authored dressing counts are realized at last: rows of houses, garden plots behind fences, striped market stalls by the well, lamp posts pacing the main lane.
- Feature
ALLIES HAVE A WILL OF THEIR OWN. An order to an AI companion (Rush, Retreat, Heal…) is now a REQUEST, not a command: at their turn they roll a die — d20 plus their LOYALTY — against how hard a sell the order is. Aggressive orders are harder; stupid ones (charging while bleeding out, retreating from nothing) harder still. Fail the roll and they IGNORE you and fight their own way — the log tells you so. Loyalty comes from your actual relationship: a companion tied to you by a Quartermaster debt follows more readily. The dice decide, not the narrator — the same order, same turn, always resolves the same way.
- Fix
NO SLIPPING AWAY MID-FIGHT. Falling back to the hub while swords are drawn IS fleeing the fight — so it's no longer a free instant escape that froze the fight to resume untouched later. While a fight is running the retreat is barred; break contact and run from the fight first (move out of reach so the fight dissolves), and only then can you slip back to the hub.
- Feature
THE ROAD LEADS OUT OF TOWN. Aldermoor is no longer the whole world. From the district map, a new 'The road leads to' strip lets you set out for other settlements — Willowmere, a poor forest hamlet of one muddy green, and Highcrown, a seven-ward city of temple, foundry, arcanum, watch and quays. Each is built entirely from a data file, walkable ward by ward, with its own market, look and townsfolk.
- Feature
THE WORLD IS DATA. Under the hood every settlement — village, town or city — now loads from JSON: its wards, the buildings in each (placed by type), the scenery, where you muster, and which places it connects to. Adding a whole new town is now a data drop, not a code change. Building shapes, creature factions, wilderness-camp themes, trap archetypes, dungeon layout profiles, class glyphs and condition badges all moved out of code into data too, and a guard now fails the build if an enemy is ever left unregistered — so the game can keep growing without touching the engine.
- Feature
DISTRICTS ARE DATA NOW. A settlement's every district is authored as pure DATA — its buildings placed by TYPE and position, its scenery given as counts, its landmark and where you muster all spelled out in JSON — instead of one hardcoded village standing in for them all. Aldermoor's four wards each describe their own streets (the Forgeworks its smithy and steelmonger, The Commons its tavern, Arcanist's Row its reliquary), and the game derives a walkable, drawable scene from that. This is the groundwork for whole new villages, towns and cities to be built entirely from a data file.
- Fix
THE TOWN IS BUILT, NOT PEOPLED. A district's density now comes from BUILDINGS — neat rows of houses framing the square on every side and bleeding off the edges — instead of a crowd of townsfolk scattered over the grass. A handful of people now stand on the LANES, where they belong.
- Fix
EVERY SHOPKEEP GETS THEIR AURA. The trader now wears the same 5-foot 'step up' ring as the barkeep, so it's clear where to stand to deal.
- Feature
ALDERMOOR FEELS LIKE A TOWN NOW. Every district is packed with a dense skyline of decorative buildings that bleed off all four edges — you're looking at ONE BLOCK of a much larger place, not the whole town. The crowd scales with the settlement's size (a village stays a handful of cottages, a town swells, a city teems), warm lights glow in the windows, and idle townsfolk fill the streets. Each district's crowd is its own and stays put between visits.
- Fix
THE 5-FOOT AURA SITS RIGHT. The 'step up to talk' ring now hugs an NPC's token as a tidy 5-foot aura — the same size as a reach ring in battle — instead of a giant circle floating off to one side.
- Feature
THE QUARTERMASTER BARGAINS NOW. Coin and gear no longer slide around the party for free. Step up to an ally and make your case: ASK them for coin or one of their items — a Persuasion check they can refuse — where a LOAN is easy to win but writes an IOU on the party ledger, and a GIFT is a harder sell but theirs to keep. Or OFFER one of your OWN items: give it outright, or sell it for their coin — they'll take only what they can carry and afford. Every debt settles back at the counter.
- Feature
KNOW WHO'S WORTH A WORD. Interactable folk in the tavern now glow with a step-up ring and wear a marker overhead: ❗ when the barkeep has work to give or turn in, ❓ for just a chat, and ➕ over a prospect you can invite to a cold seat.
- Feature
NO ONE GETS LEFT BEHIND. If the party moves down a floor and a living companion was stranded above, they now catch up on their OWN — pulled forward to rejoin the band the moment the fighting lulls, no spectating or fetching required.
- Fix
NO MORE STANDING ON THE BARKEEP. In the tavern, the townsfolk are solid now — you step up BESIDE a prospect or the barkeep to deal with them, instead of walking your token right through them.
- Feature
THE TAPROOM GETS ITS FLOORBOARDS SQUARED. The tavern now shows the same faint cell grid as the rest of the world, so you can read exactly where each step lands when you walk up to the barkeep or a prospect.
- Fix
FALLING BACK NO LONGER FIGHTS THE BROWSER. "Fall back to the hub" from a delve used to trip your browser's own "Leave site?" warning. Now it asks IN the game — a quick confirm card — then slips back to the hub cleanly, the delve still waiting on the notice board to resume exactly where you left it.
- Fix
A TOWN LOOKS MORE LIKE A TOWN. Buildings in a town or city now wear a stone-grey wash over their roofs (a village keeps its warm thatch) — the clearest at-a-glance tell of a settlement's size, layered on top of the taller, two-storey, spire-crowned shapes already in place.
- Feature
CALL THE SHOTS FOR THE WHOLE BAND. A new 🎯 Tactical toggle on the battle screen hands you every ally's turn — and to keep it swift, each paused ally opens a compact modal with the AI's OWN recommended move plus a couple of alternatives (a strike at the nearest foe, a defensive hold), one click each. Want the full action bar for someone? Hit "Take control." Flip it off any time to let the tactics engine run the team again. This completes the ally-control set: choose who you lead, the reins pass to a survivor when the hero falls, and now you can override any move the moment it matters.
- Feature
CHOOSE WHO YOU LEAD. On the hero's sheet, each living companion now carries a 🎮 You / 🤖 AI toggle — decide who you drive in battle and who the tactics engine runs. Tap to switch; the choice sticks, and the whole party marches out under your chosen roster. Steer just the front-liner and let the rest fight on their own, or take the reins of the entire band.
- Feature
THE REINS PASS TO A SURVIVOR. When your hero falls in a delve, the run no longer goes full-auto or freezes on the body — the sturdiest ally still on their feet takes command, and you keep playing with them. Should they fall too, the next survivor steps up. The band fights on as long as anyone draws breath. (Choosing who you steer from the outset, and vetoing an ally's move mid-fight, are coming next.)
- Feature
TAKE A LOOTED BLADE IN HAND. A weapon pulled off a fallen foe used to sit as dead weight in your bag until you got home. Now, on your turn, you can draw one straight from the pack and wield it — a free action, the same as drawing any weapon. Open the 🎒 inventory, tap ⚔ on a looted weapon, and it's in your hands ready to swing (a bow even comes strung with its ammo). The rest of the spoils still ride home to be equipped or sold.
- Feature
A TOWN LOOKS LIKE A TOWN. Buildings no longer wear the same little village-hut look everywhere you go. A settlement's SIZE now shapes its architecture: village cottages stand low with timber-warm eaves; a town's blocks rise taller, two storeys, stone-rimmed; a city's loom taller still, some crowned with a spire. Each district keeps its own palette and buildings — this is the scale and stonework that tells you at a glance whether you're standing in a hamlet or a capital. Driven by data per settlement kind, ready for the coming world map.
- Feature
CHESTS THAT FIT A LASTING STORY. Deep in a delve, a chest no longer bolts a permanent +1 stat or a free suit of armor straight onto your character — that was one-shot arena logic, and in a run you keep forever it was free, stacking power. Now a story chest holds real TREASURE: a piece of gear for your bag (carried home, then equipped or SOLD), a potion or scroll for the road, a purse of coin, or — rarely — a map of the dark. You earn power by hauling gear out and putting it on, not by cracking a lid. (The one-shot arena keeps its instant boons.)
- Fix
THE PARTY FINDS ITS OWN WAY DOWN. On any floor past the first, a party that had cleared the level would stand around beside the exit forever — the instinct to head for the stairs only ever worked on the surface approach. Now, with the level explored and the way down found, the party walks to the stairs and descends on its own. And it won't leave anyone breathing behind: a downed ally holds the whole party on the floor until they're back on their feet.
- Fix
THE CAMERA KEEPS UP WITH THE SURVIVORS. If your hero falls for good deep in a delve, the view no longer freezes on the body while the rest of the band walks on — it follows the survivors down the stairs, and the run continues while anyone still stands. (Handing the reins to a surviving companion comes next, with party control.)
- Feature
KNOW A FALLEN ALLY'S FATE. A member at 0 HP now shows their death saves right on the sheet AND the token — three success pips against three failure pips, filling as the rolls come in — or a plain STABILIZED / DEAD once it's settled. No more squinting at a downed friend wondering whether they're holding on or already gone.
- Fix
AC BONUSES NOW ADD UP. A magic item picked up mid-run (a +2 armor, a protective ring) raised your Armor Class but hid its own share — the total climbed while the breakdown still read the old sum ("20" shown as "16 + 2"). Granted gear now names its bonus in the AC popover, so the numbers reconcile: 16 + 2 + 2 = 20.
- Fix
GHOSTS ON THE STAIRS, BANISHED. A party member who takes the stairs no longer leaves a full-health phantom of themselves standing on the floor they left. Presence is now recomputed from the truth of who's where on EVERY load — saved floors included — so each ally appears on exactly one floor, at their real health, carrying their real loot. Phantoms are also kept out of the initiative order and off the aim reticle.
- Fix
YOUR LOOT IS SAFE (AGAIN). The empty purse-and-bag scare was a leftover of the old stairs loop, which kept overwriting a floor with fresh, loot-less copies of the party. With the loop and the phantoms gone, a member's coin and spoils now ride with them down every floor and through a reload, exactly as carried.
- Feature
EVERY ALLY HOLDS THEIR OWN PURSE. Gold is no longer one shared pile on the hero — each companion is born with their own leftover starter coin and keeps whatever THEY loot in the field (the coin a member pulls off a body lands in their purse, not a common pot). At the trader, each shops from their own purse, and the counter shows whose coin is being spent. The quest reward still goes to the hero who turns the work in.
- Feature
SHARE THE WEALTH. The Quartermaster now moves coin between ANY two purses — the shared bank, the hero, and every companion — so you can bankroll the party's shopper, pool for a big buy, or sweep it all into the bank. Each purse is shown; pick from, pick to, name the amount.
- Feature
DON'T LEAVE A FALLEN FRIEND'S COIN IN THE DARK. When a companion falls for good, a surviving hero can now search their body — right-click it, same as a foe — and recover the coin and gear they were carrying, so a partial loss isn't a total one. Only the truly dead, never the merely downed (them you still save).
- Feature
A PLACE IS SIZED BY ITS DISTRICTS: a village is one, a small town two or three, a town four to six, a city more — the rule that will shape the towns and cities of the world map to come. Aldermoor is a town of four.
- Feature
The Game Master reads the room BETWEEN floors differently than at the door. Descending the stairs used to get the same fresh-faced 'the party enters' cold open every level; now the deeper floors open on a weary band who've already come this far, the stairs behind them and a new dark ahead — not a grand entrance each time.
- Fix
The trader's mood tooltip is a proper card now, like the rest of the game — hover it for the whole scale laid out (pleased/fair/wary/hostile), your current standing marked, instead of a bare browser tooltip.
- Fix
The stairs no longer trap a lone member in an endless climb — and stop resurrecting the party. A hero taking a ladder used to LAND on the reciprocal ladder of the floor they arrived on, so the game spliced them straight back, climb and descend, forever (the run hung) — and each rebuild left the WHOLE party standing on the next floor at full health, the fallen included. Arrivals now step off the ladder to a spot beside it: the stairs are a way through, not a loop, so who descends is who descended, wounds and all.
- Fix
Reloading the hub keeps the travel map open. If you were looking at the town plan and the page reloaded, it used to dump you back on the streets; now the map reopens where you left it. (The tavern and shop still step back outside — they need a hero standing at the counter.)
- Feature
THE TRADER REMEMBERS HOW YOU LEFT HIM. His mood no longer resets to Fair every time you walk in — it PERSISTS between visits. Sour him with a bad haggle and he's still wary next time; win him over and he stays warm. It shifts only when you DO something at the counter: a completed deal mends it a step, a good word (or a bad one) moves it, and getting caught with your hand in the till shuts the shop. And cooling off after a theft is no clean slate — you come back to WARY, not Fair; the goodwill has to be earned again. Hover his mood to read the whole scale.
- Feature
YOUR HAGGLE HAS A VOICE. With the AI Narrator on, working the trader — talking them down, flattering, leaning on them — now SPEAKS: the character says their piece aloud, one short in-character line that fits how the roll went, shown at the counter. Cosmetic and unhurried — the model's line never holds up the deal, and with the Narrator off (or the model away) it simply stays quiet.
- Feature
EVERY DISTRICT ITS OWN PLACE. Travelling around town used to look identical wherever you went — now each district wears its own face. The Forgeworks is soot-grey with no trees and the smithy standing in it; Arcanist's Row runs to dusky violet; Market Square and The Commons keep their green. Each area shows only the buildings that belong there, on its own ground, so stepping between districts feels like moving through a real town — not the same field relabelled.
- Feature
THE TOWN PLAN, DRAWN. Each district on the travel map now shows a little picture of itself — its ground, its lane, its trees, the silhouettes of its buildings — so you can see where you're headed before you go. And the plan adapts to any settlement: two districts or nine, it lays them out and runs the lanes between them, ready for the towns and cities to come.
- Feature
WALLED QUARTERS. Districts can now be guarded — a rich quarter that turns away the unproven until your renown is high enough. Where a gate bars the way, the plan shows it locked (🔒) and names the reason, and you can't travel in until you're welcome. (Aldermoor's own districts stay open; the gates are for the grander places ahead.)
- Feature
EACH SHOP SELLS ITS OWN TRADE. The trader no longer offers the same shelves everywhere — a district stocks only what its market deals in. Market Square and the Forgeworks sell steel and armour (and only the Forgeworks, with its smithy, works your blade up to +1); Arcanist's Row keeps the scrolls, philtres and wondrous things. Shelves a district doesn't trade in simply don't show.
- Fix
Arriving in a district drops the party at its ENTRANCE — the start of the lane — instead of the middle of the square, and the lanes no longer run off to plots where nothing stands: a district's roads reach only its own buildings.
- Fix
Hover the trader's MOOD to read what it means — pleased pays you more and charges less, wary the reverse, hostile shuts the counter — with the whole scale laid out and your current standing marked.
- Fix
The travel map now draws each district's REAL layout in miniature — its actual buildings where they stand, the lanes that reach them, the graves — instead of a stand-in sketch. And a district's lanes are paved in its own material: dirt for the green wards, grey stone for the soot-black Forgeworks.
- Feature
BRING YOUR OWN FACE. Every hero (and companion) can now wear a portrait of your choosing — drop an image onto the forge's portrait frame, or click it to pick one, and it becomes their battle token. It's downscaled and saved with the hero, so it rides onto every floor. Don't like it? One ✕ and it's back to the drawn default.
- Feature
The forge's craft pick moved to the card's back, with the feats, fighting style and magic where the rest of your build choices live — the front stays your identity (name, race, class, subclass), the table holds what you learn.
- Fix
Once the dice have spoken, they're done. Rolling a hero's stats now hides the − / + steppers entirely — a rolled score is theirs for life (only feats and level-ups move it), so there's no more half-working manual nudge on numbers the dice already settled. Point-buy still tunes with the steppers as before.
- Fix
The battle sheet's 🎒 tab is now a proper INVENTORY, not just a loot bag: it lists a hero's own items alongside the spoils they've pulled off bodies, with the coin in their purse and the weight they're bearing.
- Feature
SEARCH THE BODY. Looting a fallen foe is a real search now, not a silent grab. Right-click a slain enemy your active hero stands beside and they ROLL an Investigation check over the corpse — the loose coin goes straight in the purse, but its CONCEALED valuables (a gem, a jewel) only turn up on a good roll, and a craftier or tougher foe hides its purse better. A panel then lays out what's on the body — every item with its weight — and you take what you want, one at a time, the weight rules leaving behind what your back can't bear. A poor search misses the hidden prize for good; the obvious spoils are always yours.
- Feature
THE INVENTORY TAB. A new 🎒 tab beside the sheet and magic holds everything a hero carries — the coin in their purse, the weight they're bearing, their own items, and, in its own section, the LOOT pulled off bodies. Spoils go into the bag, not into your hands: that looted greataxe won't clutter your attacks or tempt a mid-fight swap — it's hauled, not wielded, weighing on your carry limit like everything else. Only when the run banks home does loot become real kit: a blade onto your rack, a gem onto the trader's scales.
- Fix
Right-clicking a corpse actually loots it. A slain foe's right-click had stopped opening the loot menu and popped the browser's own 'Save Image As…' menu instead — the ally-command radial had quietly narrowed which tokens answered a right-click, and corpses fell through. The board now owns every right-click again (no stray browser menu anywhere on it), and a body answers with the search panel.
- Fix
Taking a looted weapon no longer crashes the run back to the hub. A blade pulled off a body was being filed with magic trinkets, and the inventory readers choke on a weapon there — so the page threw. Spoils now go into the loot bag instead, sorted into real kit (a blade to the rack, a gem to sell) only when the run banks home.
- Fix
The log shows what you do between fights. Looting, searching a body, and giving first aid to a downed ally out of combat were being filed under 'pre-battle' and hidden from the live log — so a search roll or a stabilize check seemed to vanish. Those lines now appear where they happen.
- Feature
THE MARKET DEPENDS ON WHERE YOU STAND. Your home is no longer one flat square but a TOWN of districts — and a new 🧭 Travel map lets you click from one to the next. The Market Square trades in plain steel and bread; the FORGEWORKS is where the smithy stands and where a jeweller, smith and leatherworker will price and buy your haul; ARCANIST'S ROW deals in scrolls, philtres and wondrous things; THE COMMONS holds the tavern, the cells and the graves. Each place only offers what belongs there — the smithy forges in the Forgeworks, the tavern hires in the Commons — so getting around means travelling.
- Feature
A VILLAGE HAS NO JEWELLER. Because a market only knows the goods it regularly trades, you can now only SELL a thing where a merchant can value its kind. Your own jeweller still tells you the ruby is worth 500 gp — but the Market Square store won't touch it: 'no market here — take it to the Forgeworks.' Carry your gems to the district that deals in them. And when nobody — party or counter — can price a find, a trained eye now gives an ESTIMATE band ('180–320 gp') instead of a bare shrug, wider the rarer the thing. (Design: ADR 0017, following rules.md's Merchant Interaction & Estimating Value.)
- Feature
YOU ONLY KNOW WHAT YOU CAN PRICE. A ruby is 'clearly valuable' to anyone — but only a jeweller knows it's 500 gp. Every hero now picks a CRAFT at the forge (Jeweler's Tools, Smith's, Leatherworker's, a Herbalism Kit, Alchemist's Supplies, Arcana), and it decides what your party can appraise: gems by the jeweller, steel by the smith, potions by the herbalist, scrolls and wondrous magic by Arcana. At the trader's counter, an item your party can price shows its exact worth; one nobody can read shows only an impression — 'a trinket', 'valuable', 'a fortune' — and selling it is a gamble on whether the offer's fair. The appraiser just became a member worth having. (Design: ADR 0016.)
- Feature
RICHER SPOILS. The magic-item pool deepens with a whole spread of new finds across the rarities — silent Boots of Elvenkind, a Cloak of Displacement, giant-strength belts up the ladder, an Amulet of Health, Elven Chain, a warden's Mantle — topped now by a LEGENDARY tier: the Aegis of the Warden, the Ring of the Ancients, a Belt of Storm Giant Strength, found only in the deepest dark and never sold in a village. And foes now carry TREASURE: gems and jewelry — garnets, amethysts, a black pearl, emeralds, a diamond, a jewelled circlet — that you loot off the body, haul home, and sell. Pure spoils, weightless in the purse, worth stooping for.
- Feature
QUESTS WITH GIVERS. With the AI Narrator on, the barkeep has work: ask what's going and they lay a few jobs on the table — slay a warband, recover what was stolen, bring captives home, burn out a nest — each with its danger and its pay in coin AND renown. Take one and it enters your journal (on the hero sheet). The notice board then pins it as its own quest notice; march it, clear the wilderness that holds it, and the objective's done. Carry it back to the barkeep — 'it's done, I've come to collect' — and the coin lands in the purse, the renown on your name (a standing that'll matter later). Retreating never fails a quest; only the turn-in closes it. With the Narrator off, the village is as before — board delves only.
- Feature
The tavern's hires are a luck of the draw now. A prospect used to be the class your party lacked, in a fixed kit — now it's a RANDOM face: any class, its own kin, whatever gear that class fields at your level. Take them or leave them, it's your call. And the crowd turns over: a fresh set of faces gathers after every cleared run, so who's looking for work is never the same twice.
- Feature
THE BUILDINGS COME ALIVE. The tavern now has tables with regulars nursing their drinks — and when a companion has fallen, PROSPECTS gather by the fire: a living face for every cold seat. Walk your hero up to one and you're offered the chance to take them on (name, class, kit, and the fee), right there, instead of only through the barkeep. One prospect per empty chair, so a wiped-out party can rebuild in one visit. And the trader's shop is dressed for market — awninged stalls strewn with wares, crates, and the counter laid out — so it reads as a place of business, not an empty room.
- Feature
The trader has a shop you walk into. Marching a hero to the shop no longer pops a ledger at the door — it opens the SHOP itself: a room with a counter, the wares laid out, and a merchant behind it. Step up to the counter and the ledger opens; walk to the door to leave. Just like the tavern, you enter the place and approach the person, rather than the menu appearing on the threshold.
- Fix
Internal: the walkable village scene was split too — the static scenery (houses, well, notice board), the cemetery (headstones + hover card), and the shared cursor helper each moved to their own file. No behaviour change; the scene file shrank by nearly half.
- Fix
Internal: the battle screen's god component was split into focused pieces — the selection/pin logic, the left sheet+action sidebar, the reactive offer bar, and the end-of-battle overlays each moved to their own file. No behaviour change; the shell shrank by 40%.
- Feature
NOT EVERY JOB IS A DUNGEON. The notice board now mixes wilderness CAMPS in with the delves: a goblin nest behind a wood palisade, a spider-haunted thicket, a bandit stockade, a beast den — a single field of themed camps to clear under the open sky, no floors to descend. Camps read differently on the board (⛺ 'A warband is nesting' beside ⚔ 'Something worse below'), still carry a tier and skulls, and pay the same. Which notices are camps and which are crawls is its own roll, so the board is never all one shape.
- Fix
The party investigates the dark more carefully instead of feeding heroes into it one at a time. The crawl's formation leash is tightened, so the front-runner holds tighter to the group while pushing the frontier — the party arrives at a room together and wakes it together, rather than a lone scout blundering in ahead. (In testing the delves also resolved faster for it — a grouped party ends fights quicker.)
- Feature
Hover a headstone in the cemetery and a card rises telling who lies there — their name, who they were (level, race, class), and how far they got before the dark took them.
- Feature
A DELVE IS NO LONGER A ONE-WAY TRIP. Move freely up and down the stairs between the floors you've opened: the way down goes deeper, the way UP climbs back to the floor above — carrying your wounds with you. Running from a fight is a real option now, not a surrender: you retreat a floor, the fight dissolves behind you, and the run lives on. Only walking out through floor 1's surface mouth truly ends a delve. And the whole thing happens IN PLACE — no more full page reload that rebuilt the party every time you took the stairs.
- Fix
A trap that goes off always stings. Saving against a trap or a trapped door halves its damage — but a low roll could halve to zero, so a flame jet or frost sigil would 'deal 0 damage'. The halved hit now floors at 1; only a natural-20 dodge escapes a sprung trap clean.
- Fix
There's always an easy job on the board now. The gentle notice used to be able to roll skulls of its own — a 'Rats in the cellar' that had noticed you coming, and suddenly no soft option anywhere. The easy tier now always comes quiet, so a green or battered party can always find honest, low-stakes work.
- Fix
A dead hero's delve no longer haunts the notice board. A run left open by a hero who fell used to still show "Continue" — a quest you couldn't play or continue. The board now skips the fallen entirely: the village pays no wages to the dead, and it offers them no work either.
- Fix
The magic picker no longer promises a spell slot you can't fill. A level-1 wizard's counter used to read 2/3 — the prepared formula's number — while the two first-level slots meant only two spells could ever be known, so the third slot sat forever locked. The counter now shows the ACHIEVABLE cap (2/2 there), matching what the forge validates and what the battle actually casts.
- Fix
The six rolls now show in the order they were thrown instead of pre-sorted high→low — a throw is a sequence, and you're placing them yourself anyway. (Auto still finds the best fit regardless of order.)
- Feature
Hover a hero's tab in the forge and their story unfolds: every named hero is a book character, so the card tells you their race and class, the background baked into the name, their signature trait, and the tale it's drawn from. Name a hero yourself and it says so — no borrowed lore. The same trait/bio the battle resolves later, shown before you commit.
- Fix
Hovering a blocked Forge button now spells out the full unfinished picture instead of a vague "finish this hero's choices first" — every member who still has gaps, named, with exactly what each one still needs to pick.
- Fix
The throw breakdown now shows all four dice on every row with the lowest crossed out — even for a roll cast before the dice were recorded, which now shows a faithful reconstruction (its three kept dice still sum to the total) instead of just the bare result.
- Feature
The forge won't let a half-made hero march. Unmade choices — a caster's cantrips and spells, a fighting style, a human's origin feat — are now checked, and the Forge button names exactly what's still to pick. Because those choices live on the card's back, hitting Forge with gaps flips you straight to the table (which now wears a count), so nothing's ever hidden. The whole team is held to it: any companion with unfinished business gets a ⚠ on its tab. And to keep it painless, new casters are born battle-ready — recommended cantrips and spells filled to cap, a human's feat pre-picked — so a fresh build passes on its own and only nags if you strip something out.
- Feature
The roll modal now THROWS the dice: on open the six values tumble and settle one by one, left to right, before you can place them. And it shows the full throw — each of the six 4d6 rolls laid out with its four dice and the lowest struck through, so you can see exactly where every score came from instead of just the total.
- Fix
Forge header polish: the hero name field no longer jumps around when you switch between characters — the name/identity column is a fixed width now, and the tab pills take the rest and wrap. The − / + steppers on the ability chips center their glyphs properly instead of sitting a hair off.
- Fix
A subclass can only be chosen once its level is reached. The forge (and the sandbox editor) used to let a level-1 rogue pick Assassin or Thief on the spot — every subclass here unlocks at level 3, so the picker now stays hidden until the character is old enough to earn it, and the level-up screen surfaces the choice the moment it comes due.
- Feature
PLACE THE DICE YOURSELF. Rolling stats in the Hero Forge no longer drops each number silently onto its ability — now the six 4d6-drop-lowest rolls land on the table and YOU assign them. Tap a die, tap an ability; every socket previews the final score and modifier with the race bonus already folded in, so you arrange with the real numbers in view. There's an Auto (best for class) if you'd rather not fuss. And the dice truly speak once: the whole forge draft — team, gear, and the cast dice — now survives a page reload, so you can't reload your way to a better roll. Only forging the hero (or changing a class, a wholly new person) clears the slate.
- Feature
THE BARKEEP SPEAKS. Walk a hero up to the tavern counter and they talk back. Ask for the word around town — coax it out with Persuasion or read what they're not saying with Insight, and a good roll turns up a real rumor (the skull-marked delves are giving up more than coin lately) where a bad one gets you the weather and the miller's daughter. A cold seat at your table? The barkeep knows someone by the fire. Every line and every choice is data, and the dice that decide a conversation are the same ones that decide a haggle — so the quest-givers to come will speak the very same language.
- Fix
LEVELLING UP no longer makes the world harder. The difficulty curve was measured across levels and had a cruel twist: because the enemy budget grew far faster than a party's real power, a delve tier you'd cleared at level 1 could beat you at level 5. The high-level bands are re-tuned so every tier stays about as hard as it says it is, whatever your level — easy trivial, medium comfortable, hard tense, deadly a real gamble. Now the danger you sign up for is the danger you get.
- Feature
HEROES GROW. Every kill you've banked finally counts: the 5e XP table decides when a level is owed, and a gold star on the village panel says the road has taught your hero something. Their sheet shows how far along they are and opens the LEVEL-UP — choose your path when a subclass comes due, a way of fighting when the class learns one, two ability points or a feat at the milestones, and whatever new magic the progression allows.
- Feature
Levelling only ever ADDS. What you rolled at the forge stands forever, your subclass is yours once taken, your spells stay learned — a level opens new doors, it never reopens old ones. And your living companions climb with you: they share the danger, they share the growth. The dead stay where they fell.
- Feature
DEATH IS FOR KEEPS. A wipe ends a hero — for good — and buries every companion who was down there with them; their purse and their loot stay in the dark. Only someone standing on another floor walks away. The BANK survives: profile gold and artifacts are the estate your next hero inherits.
- Feature
THE CEMETERY. A fenced plot up the north-east lane, and a headstone for every hero who didn't come home — their name cut in the stone and the floors they managed beneath it. The village remembers its dead in the order they were buried.
- Feature
A WORD WITH THE BARKEEP. When a companion falls, their seat stays cold — until you ask around the tavern. One prospect at a time by the fire, built to cover what your party now lacks, at your level, for coin. Take them on and they slide into the empty chair; ask about someone else and another face turns up.
- Feature
Profiles can be erased — one click arms it, a second means it: the profile, its heroes and every run beneath them, gone together.
- Feature
THE BOARD TELLS THE TRUTH. Four delves pinned at once, from 'Rats in the cellar' to 'Nobody came back' — every tier offered, and it's YOUR call which one you're good for. Each notice says what it pays and what odds it gives on something uncommon, so you choose with open eyes.
- Feature
💀 SKULLS — the second axis. On top of its tier, a delve carries up to three skulls: they know you're coming. Each skull swells the garrison waiting below AND the purse promised for it. Hard work rarely comes quiet; deadly work never does. Whatever the board advertised is written onto the run when you take it — the deal you took is the deal you're owed, even after the board rotates.
- Feature
SEARCH THE BODY. Right-click a fallen foe within reach and take what it carried — its coin, its blade, whatever it held. Your back sets the limit: a heavy haul leaves what won't fit for a stronger arm (or a Bag of Holding). Clear the delve and it all comes home — coin into the purse, gear onto whoever hauled it — ready to wield, hand off at the quartermaster, or sell at the trader. A wipe leaves it all in the dark with you.
- Fix
ANYONE can save a dying friend. First Aid was locked to characters carrying a Healer's Kit — which only clerics, paladins, rangers and druids ever got — so a fighter could only watch an ally bleed out. Now any hero can kneel and STABILIZE a downed comrade with a bare-hands Medicine check; a Healer's Kit still makes the difference, letting a trained medic snap them back to their feet. (Nobody gets a free perpetual-revive: bare hands only stop the dying, never return someone to the fight.)
- Feature
THE QUARTERMASTER. Share the party's wealth: slide coin between the profile's bank and a hero's purse, and hand any item from one party member to another. Weight is honest about it — you can't pass the plate to the STR-8 wizard who'd buckle under it — and who a character IS never travels with the gear, only what they carry.
- Feature
THE VILLAGE REMEMBERS. Every party member can stand at the counter now — each with their own Persuasion, Intimidation and Sleight of Hand — and each gets ONE try per item. Lean on the trader for a better price and they'll resent you for it. Pocket something and the whole village grows warier: every attempt makes the next one harder, forever. Get caught three times and that member goes behind bars — no shopping, no marching — until someone pays their bail.
- Feature
THE TRADER BUYS. A Sell tab: hand over anything you carry — starting kit, delve salvage, the axe that's too heavy — and the trader offers what a trader offers, which is a third of worth. Every verb works on that number too: haggle the OFFER up, or lean on them for it. The mood cuts both ways (a pleased trader pays more, a wary one less), and selling is never profit — only recovery.
- Feature
SPELLS AT THE COUNTER. Charm Person warms the room — your next word lands with advantage, though when it fades they know exactly what you did. Fear puts steel behind a threat. The whole conversation system is now DATA (skill, DC, spell hooks, once-per rules), so the barkeep and the quest-givers will speak the same language when their doors open.
- Feature
THE CELLS HAVE TWO DOORS. A jailed party member can be bought out — bail from purse or bank — or SPRUNG: storm the village green against its militia, cut down the captain, and your people walk free. But the gate comes off its hinges, and the village closes behind you: no trade, no tavern, guards cold at the door, until you pay reparations for the blood on the square.
- Fix
The dice speak ONCE: rolling a character's stats now spends the throw for good — those scores are theirs for life, and only feats and level-ups will move them.
- Feature
WEIGHT MATTERS. Every piece of gear now weighs what the book says — a longsword's 3 pounds, chain mail's 55 — and every party member carries at most STR × 15 lb. Load bars on the hero sheet show who's near the line (green, gold, red), and the trader refuses a haul you can't carry home. The BAG OF HOLDING arrives on the uncommon shelf: 15 lb no matter what goes in, and 250 lb of the delve swallowed whole. Coins stay weightless — for now.
- Feature
THE TRADER'S LEDGER. The shop became a negotiation: browse by category, build your haul, and watch the TRADER'S MOOD — haggle with Persuasion (each item argued once past a rising DC; a silver tongue takes up to 40% off, an insult sours the room and the prices), or POCKET IT with Sleight of Hand and walk out with it free… unless you're caught, and the shop slams shut until you leave and cool off. Every roll lands in the ledger's log.
- Feature
VILLAGE LAW on prices: magic gear now costs what the RULES say — DMG-band pricing by rarity (a Cloak of Protection is 500 gp, not pocket change; the +1 working on your blade the same) — and a village shelf stocks NOTHING above uncommon. The rare wonders are found in the dark, not bought over a counter. Mundane steel keeps its honest PHB cost, and the sandbox economy is untouched.
- Feature
THE WARRIOR'S CODEX. The forge got its v2 — a hand-illustrated codex look in Cinzel and EB Garamond over deep navy and gold: your hero's name in display capitals with race, class and subclass plaques beneath, the party tabs at its shoulder; a portrait frame over the vitals LEDGER (hit points under a red rule, armor class under gold, speed, darkvision) and the saving-throw seals; abilities as three-across chips with glowing save-dots; skills in two gilded columns grouped by their governing ability — and the whole skills page FLIPS, a real half-turn, to the table of feats, fighting style and ✨ magic. One gold button seals it: FORGE THE HERO.
- Feature
THE HERO CARD. The forge reads like a character card now: the six abilities across the top (modifier over score, table-style), the 18-skill drawer down the left with live modifiers, and vitals on the right — HP, AC, speed, vision, saves, resists — computed by the battle's own math, never a lookalike formula. The middle IS a card: it loads on the PORTRAIT cover (name banner, class portrait, race and class plaques, the level hex) and FLIPS — a real half-turn — to the table of feats, style and features, and flips again to ✨ magic. Keep flipping; it never runs out of card. The forge fills the whole window — the card stretches with your screen.
- Fix
Rolled stats stopped arguing with the point-buy accountant: dice outside the 8–15 band now show a 🎲 rolled badge instead of 'Points −98/27', and the +/− buttons spend ASI points only (the dice said what the dice said).
- Feature
THE TRADER OPENS SHOP. A new roof in the village — walk any hero to the 🛒 door (or take the panel's shortcut) and spend their OWN purse on weapons, +1 upgrades, armor and potions. Trade-ins at full price: small village, honest scales. The forge stopped selling entirely — it builds WHO you are; the trader sells what you carry.
- Feature
THE LOCK, made law: once forged, a hero's stats, feats, spells and features never change — the trader deals in gear only, structurally. Levels (coming next) will be the one sanctioned way a hero grows.
- Feature
THE TRUE SPLIT. The party can be on different floors at once: the stairs move exactly who stands on them — send the rogue down alone, hold the line above. Every opened floor is a live board the expedition remembers; a floor whose party has all gone below simply waits, mid-breath, exactly as left. Whoever arrives below steps off the ladder wounds-and-all, joining a frozen fight's initiative if one waits there. (Built coop-shaped: one floor per player is the plan.)
- Feature
THE LAYER SWITCHER. A floor strip above the board shows every opened layer and who stands where — click one to peek: the frozen floor opens read-only, pan and zoom, time holding its breath. See what happened down there before you follow.
- Fix
Story mode's memory moved fully into the expedition record: no more resume dialog, no restart-a-floor — the dungeon remembers, full stop. (Old runs migrate on first open.)
- Feature
THE STAIRS ARE THE EXIT. An expedition floor no longer ends with a popup: kill everything and the crawl simply continues — 'the way DOWN lies open' — and the party moves on by WALKING ONTO THE STAIRS beside the fallen champion. Floors below the first are true underground now (no sky, no field); only the last floor ends by battle, and only the RUN'S end shows a screen: your outcome over a floor-by-floor map of the delve, and the road home.
- Feature
XP FLOWS. Every kill banks its 5e XP; taking the stairs (or clearing the run) pays the hero their party share. The sheet counts it — levels cash it in next.
- Feature
Story-mode comforts: the ☰ menu grew an AI NARRATOR toggle (no setup screen needed), and every character card on the hero page now opens — click for the full rules text of their class, race and feat features, straight from the forge's own panel.
- Feature
The village gets a COMMAND PANEL — the battle screen's own layout comes home: your selected hero on the left (name, level, purse, their running delves) with every action a click away — sheet, march, continue, the notice board, the smithy, the profile door. Click a token in the village and the panel follows.
- Feature
Creation is profile-level now: a fresh profile walks STRAIGHT into the Hero Forge — the hub belongs to the created. No empty village, no hint cards; your first sight of home is with a hero standing in it.
- Feature
STORY MODE has its own address: an expedition lives at /expedition/<id> — one URL for the whole run, every floor rebuilt from the record, never from the link. The ☰ menu knows which game you're playing now: in the sandbox it offers reroll and setup; on an expedition floor it shows the delve's name and ONE way out — fall back to the hub, with the fight saved exactly where you left it and the delve still pinned to the board.
- Feature
Village hands-on: DRAG a hero token and drop them anywhere walkable — dropping on a door knocks, same as walking there. The ground shows its cell grid like the battle board, and the roads finally go where roads go: a lane spur runs from the main road to every single door.
- Fix
The village reads TOP-DOWN like the battlefield: buildings are roofs seen from above — ridge, chimney, a lit slope and a shaded one — in the board's own raised-block style, with a door mat where the walk arrives. No more storefront facades. And the page under the canvas no longer scrolls; the village is the page.
- Fix
The forge, the hero sheet and the profile picker hold their width now — the page used to breathe wider and narrower as you switched tabs, sized by whatever content was open instead of the screen.
- Feature
THE LIVING VILLAGE. The hub is a place now, not a page: the village fills your window, and your heroes STAND IN IT — every living hero a token on the lane. Click the ground and they walk it, easing around corners; right-click a token for their affairs — character sheet, march out, continue a delve. The roster lists are gone: the village is the roster.
- Feature
DOORS OPEN. Walk a hero to the tavern door and step inside — plank floor, the long bar, a crackling hearth, and the barkeep who says nothing yet (they're working up to it). The smithy is the Hero Forge: walk in to build a new hero. Cottage doors are barred — villagers value their privacy.
- Fix
The notice board reads like a notice board: notes pinned in two ragged columns, each tilted where the pin caught. Quests stopped naming heroes — work is work, and WHO takes it is chosen on the notice. Running delves are told apart by name now (The Fallow Barrow, The Whispering Vaults…), and the sandbox no longer masquerades as village work.
- Feature
THE HERO FORGE. Hero creation is a real character build now: its own screen with the full editor — point-buy or 🎲 ROLL your stats (4d6 drop lowest), pick feats, fighting style, subclass, spells and cantrips, and spend your starting purse in the shops before you ever march. Your three companions get the same treatment: pre-picked to cover what your class lacks, every one of them editable down to their spell list. What you forge is what fights — every choice persists and walks onto every expedition floor.
- Feature
THE VILLAGE. The hub's board became a home: a painted village — cottages up the lane, the tavern under its swinging sign, woodland at your back — with the NOTICE BOARD standing by the tavern door. Read it and the parchment unrolls: delves wanting clearing, unfinished journeys, the open arena — every notice pinned to the board. The tavern door opens in a later chapter.
- Feature
THE HERO PAGE. Click any hero on the roster for their full sheet: rolled abilities, feats and spells, gear, each companion's own card, the record of expeditions, floors and kills — and every journey they've walked, running or done.
- Feature
EXPEDITIONS. The board is open: march a hero out on a 3-floor delve. Each floor is its own dungeon under its own patch of wilderness, and what the party carries down is what it has — wounds, spent spell slots and the fallen all ride the stairs with you; nothing heals between floors. Clear the last floor's champion and the run is done; fall, and the run is wiped; sound the retreat and the run is abandoned. Close the tab whenever — a running expedition waits on the board, exactly on the floor you left.
- Feature
THE TEAM. A new hero no longer marches alone: creation now rolls three companions chosen to cover what the hero's class lacks — a fighter gets a healer, a skirmisher and a caster at their back, each with their own name, gear and starting kit. The team is THE team: no swapping while everyone lives.
- Feature
Every expedition floor is reproducible forever from its record — same run, same floor, same dungeon, down to the last torch. Concurrent journeys are legal: every living hero can have their own delve running at once.
- Feature
PROFILES. Tactforge now remembers you: create a profile on your device, and it keeps its own heroes, bank and (soon) running expeditions. No password, no account — pick who's playing and go. Built Firebase-shaped from day one, so cloud sync later is a swap, not a rewrite.
- Feature
THE HUB. Every profile gets a home base: your hero roster, your bank (the gold and artifacts that survive anything), and the board. Roll a hero — name, class, race — and they're born at level 1 with their class's gear and a PHB-style starting purse: a fighter marches out with 125 gp, a monk with 12 and their fists. The board offers the open arena for now; expeditions are what it's being built for.
- Feature
The test bench grew a browser: UI screens and the profile store are now tested the way players actually touch them, including a real end-to-end run — create a profile, enter the hub, roll a hero, reload, still there.
- Fix
Movement flows. Tokens now EASE through their walk — leaning into the first step, settling into the last — and corners round into little arcs instead of snapping square to square. Slow going through water and up hills still reads as slow going.
- Fix
Shoves fly. A repelling blast, a hurl from a thunderous burst, a thorn whip's yank — the victim used to teleport to the landing square. The engine now records every square of the forced flight, and the token is launched hard and decelerates into the landing, twice as fast as a walk (nobody wades carefully while airborne).
- Feature
The dungeon goes UNDERGROUND — the first double-level map. Choosing a dungeon starts the party on a forest field above it: a road runs from your muster to the entrance, and the entrance is a real BUILDING — a ruined tower over cut-stone halls, a chapel over a hub, a hollow hill over a warren, a rock-mouthed cave over a cavern, an earthen barrow over a gauntlet — walls and all, with a doorway where the road arrives and the descending stairs inside. Step onto the stairs and the whole party goes down; your AI companions gather at the entrance on their own.
- Feature
The dungeon REMEMBERS. Climb the entrance ladder any time: the whole party returns to daylight, the battle carries on, and the mouth stays open. Go back down and the dungeon is exactly as you left it — dead monsters stay dead, opened doors stay open. Victory is sealed only when the boss falls below and you stand on the surface again. Inside a dungeon the ladder IS the retreat; the horn is reserved for true no-way-back escapes to come.
- Feature
The stairwell reads as a hole going down: a stone kerb matching the paving, five treads narrowing and darkening into a black throat, torchlight at the rim — perspective instead of an icon.
- Fix
One scuffle no longer summons the whole dungeon. Battle noise used to relay from guard to guard — each woken monster's footsteps 'woke' the next room as it marched, until the entire garrison converged on the party in one pile. Noise is the BATTLE now: a sleeper wakes only when the fighting itself is close enough to hear (walls and closed doors still muffle everything). The crawl is room by room again.
- Feature
The dungeon is UNDER the world now — the first double-level map. Choosing a dungeon starts your party on an open field above it: walk to the dungeon mouth, descend, and the crawl begins below; climb the entrance ladder any time to return to daylight — the whole party comes up together, the battle carries on, and the mouth stays open. A half-cleared dungeon STAYS half-cleared: go back down and the dead are still dead. Victory is only sealed when the boss falls below and you stand on the surface again. (Inside a dungeon the ladder IS the retreat now — the horn is reserved for true no-way-back escapes to come.)
- Feature
Dungeon passages follow the book: corridors are 10ft wide as standard — the old 5ft warren squeezes are gone, which also means a Large creature can finally walk every hallway. Every crawl now begins OUTSIDE the dungeon. A 10ft entry tunnel leads in from the surface; the party musters at its mouth beside a proper 10ft ladder — two cells wide, redrawn as a carved stone flight in the board's 2.5D style, hard against the tunnel's dead end — and the first move of every delve is the walk into the first room. The ladder is the way back out, and the retreat's escape zone.
- Feature
The party can RUN — where there is somewhere to run to. In a dungeon, sound the retreat (a free horn on any hero's turn, once per battle) and the way out is the entrance ladder; an open one-off battle offers no horn — there is nothing behind you but the field's edge, and that is not an escape. Fleeing is not an exit button: the fight rages on while you run, leaving melee still provokes, and every hero who reaches the way out slips off the board alive while whoever is left behind is left behind. When the last runner makes it out the battle ends in a new outcome — FLED: not a victory, not a wipe. The AI party drops everything and routs when the horn sounds; monsters chase what they can see, as they always did. The horn lives on the BACK of the actions card: flip the card over (☠️ Desperate measures) to reach it, then click twice to confirm — a battle-ending call can never fire from a stray tap.
- Feature
Initiative only exists while swords are out. A dungeon used to roll one initiative for the whole map — sleepers included — and 'rounds' ticked while you walked empty corridors. Now the crawl has two moods: EXPLORATION (no initiative, no round counter, the panel shows a compass) and FIGHTS — when a room wakes, the participants roll fresh initiative; when the last awake foe falls, the fight dissolves and you explore on. A floor is a series of fights, not one forty-round battle.
- Feature
Fights own their magic. Bless, Blur and every minute-scale spell now expires with the fight it was cast in — and between fights you can only cast healing and long-lasting magic (Mage Armor, Shield of Faith), so no more arming Bless at a closed door. Hour-scale spells (Hex, Invisibility, Stoneskin) persist across fights, as they should. New enemies waking mid-fight roll INTO the running order — a fight grows, it never splits.
- Fix
The 'battle that never ends' is structurally impossible now. When only sleepers remained, the game used to force-wake the nearest few so victory could ever fire — a workaround, now deleted: the fight simply ends and the party walks to the next room. Killing the last awake foe also hands the rest of that hero's turn back for looting or advancing.
- Fix
A medic kneeling diagonally beside a fallen comrade can actually give first aid. The menu offered it (diagonal = 5ft) but the engine measured the diagonal as 7ft and refused — the rescuer tried and failed forever. One adjacency rule everywhere now.
- Fix
A hero revived between fights rejoins the marching order — they used to be left out of the rotation and the party waited on their 'straggler' for the rest of the crawl.
- Feature
The battle ends with the Game Master's word. The closing tale now headlines the result screen the moment the fight is decided — and it starts being written while you read the banner, so it's usually there when you look. It used to hide behind the Statistics button, where the fetch only began after you clicked and you watched a loading line instead. The stats table is still there, one tap away, as always.
- Feature
Every dungeon now has a way out: a ladder stands in the entrance room, on a clear spot near its middle. For now it anchors where you came in — soon it's how a routed party escapes with their lives, and how deeper floors connect. Inside a sub-dungeon it still climbs back to the surface as before; a top-level ladder no longer dangles an ascend button with nowhere to go.
- Feature
Monster spellcasters cast their spells. The enemy brain had no rung for a single-target spell at all — only area bursts — so every leveled spell on a monster's sheet was unreachable: a Cult Fanatic with Inflict Wounds walked up and poked you with a dagger instead. Monsters now weigh a slot the same way your companions do (spend the cheapest one that secures a kill or lands on a real threat, never a reflexive max-upcast), and the casters who had no ranged option at all — the Cult Fanatic and the Lizardfolk Shaman — carry an at-will attack cantrip, so they fight from range instead of Dashing across the map to stab.
- Fix
Chromatic Orb no longer splits off a roll it never made. The chain looks for two matching damage dice, but it read the last damage in the log rather than the attack in front of it — so when a leap MISSED, the previous hit's dice were still sitting there and the orb happily leapt again. A miss now ends the chain, as it should.
- Fix
The log says what the orb is doing: “Chromatic Orb splits — the orb leaps to Elite Gnoll (1/2)”, with the chain position, and it reads properly in Ukrainian (the old line was half-translated English).
- Fix
The ⓘ on a combatant in the initiative list opens a proper card — health, action economy, background and per-round turn times — instead of the raw browser tooltip that sprawled across the panel and covered the fighters underneath it.
- Fix
The turn clock stops when the battle does. A won or lost board still has a creature “up”, so the timer kept counting the victory screen as that creature's turn.
- Fix
Renewing a group blessing covers the group again. Ending your old casting to start a new one is the rule — but the new one picked its targets BEFORE the old lapsed, so everyone still under it was passed over as “already covered”, then lost it a heartbeat later. A Bless on three heroes came back covering one. Targets are now chosen after the old casting ends, so a renewal blankets the party exactly like the first one did. Same for Bane.
- Fix
AI casters no longer renew a buff that is still running. Re-casting means dropping the blessing you are already sustaining to start it over — pure loss while it is up and unbroken. The AI's own doctrine has always forbidden it, but the option still appeared on the menu the narrator AI picks from, so it took it: three heroes lost Bless so the caster could bless itself. Both brains now follow the one rule.
- Fix
Blur, Bless and other buffs that need concentration wait until the fight is actually in front of you. A caster would burn one in round 2 while the party was still hacking at a closed door, and it ran out before a single blow landed. Cheap, long-lasting buffs (Mage Armor) are still cast during the walk-up.
- Fix
Archers and battle-casters stopped jogging back and forth instead of fighting. A ranged hero would close for a shot, then retreat toward its “ideal range” — losing sight of the enemy — then march back in next turn, forever. Retreating now has to actually escape the enemy: against a foe as fast as you are, stand and shoot. Measured across seeded dungeon crawls, wasted back-and-forth turns fell from 5% to 1.3%, fights end several rounds sooner, and the party wins crawls it used to lose.
- Feature
Encounters are sized by how strong your party actually is, not just how many heads it has. Four heroes are four turns a round, focus fire and a healer; one hero is none of that — but the old budget priced them the same per head, so a full party breezed through deadly fights while a lone hero lost easy ones. Small parties now face proportionate packs, and how well you geared up in the shop counts too.
- Feature
The party arrives at a fight together. Closing on an enemy was deliberately exempt from the group's cohesion rule — everyone ran at the foe flat out — so the fastest hero reached it first and fought alone until the others trickled in one at a time. Heroes now advance at the group's pace and hit the enemy line as a unit. Measured across seeded dungeons: crawls the party used to lose outright are now winnable, and skirmishes at three heroes went from losing most hard fights to winning them.
- Feature
Dungeon crawls give you room to breathe. A crawl spends most of an adventuring day's worth of fighting, but the party got exactly one short rest for the whole thing — and could almost never take it, because a garrison ASLEEP two rooms away counted as "enemies nearby" through solid stone. Longer crawls now grant more breathers (a lair 1, a citadel 3), sleeping monsters no longer block one, and AI companions actually stop to catch their breath between rooms instead of walking into the next fight at 40% health.
- Feature
New balance doc and a repeatable probe that plays out seeded battles and reports win rate by party size, level, difficulty and gear — so difficulty claims can be measured instead of guessed. Honest headline: a solo run is still hard mode, and no amount of shrinking the enemy pack fixes that.
- Fix
Dungeon crawls now respect the difficulty you picked. Every crawl was built as a chain of deadly-grade rooms whatever band you chose — on the theory that you would rest between rooms, which you cannot: the rest is once per encounter. A level-3 solo hero's "easy" dungeon fielded twelve monsters including an ogre; a four-hero party's fielded seventeen including two trolls. Easy now means easy, and hard and deadly are no longer the same fight.
- Fix
AI companions drink their healing potions. They bought them in the shop, carried them into the dungeon, and died with them unused — across six test crawls the party drank exactly zero. They now quaff one when badly hurt, and will hand one to a fallen comrade beside them to get them back on their feet (a potion is a bonus action, so it costs them nothing they meant to do with their turn).
- Fix
Trolls and ogre magi no longer ambush low-level parties. A regenerating CR-5 troll was legal from level 1 — a level-3 party's "easy" dungeon could field two of them. Trolls now need level 4, ogre magi level 3.
- Fix
The enemy XP budget shown in setup now matches the pack actually built — it reads the same party-strength adjustment the generator does.
- Feature
Monsters named after a class now fight like one: the Goblin Berserker rages, attacks recklessly and gets a frenzy strike; the Goblin Warlock's Eldritch Blast carries its full damage; the Goblin Stalker slips away with Cunning Action; the Ogre Chain Brute swings wild. Expect these to hit noticeably harder.
- Feature
New developer doc mapping every AI decision rung and what each reason code in the battle log means, plus a repeatable probe that measures how many turns the AI wastes. Wasted turns are down from 12.7% to 3.8%.
- Fix
A turn is no longer over after one action. A fighter who catches Second Wind, a barbarian who rages, a healer who whispers a Healing Word, or anyone who takes a moment to size up an enemy now goes on to actually fight — those all cost a bonus action or nothing at all, but they used to end the turn on the spot. This was the single biggest cause of creatures standing around doing nothing.
- Fix
Multiattack works. Creatures with two or three attacks — Hobgoblin Captains, Trolls, Veterans, Orc War Chiefs, Goblin Berserkers — were only ever swinging once per turn. They now use every swing they have, so heavy hitters hit like their stat block says.
- Fix
Monsters sealed off behind a barred door used to march at the nearest door on the map — usually the one on YOUR side of the seal, which they could never reach — then give up and Dodge for the rest of the battle. They now head for the nearest door they can actually get to, and smash their way through.
- Fix
Archers and rogues stopped pacing. A skirmisher with no shot would back off toward its ideal range while another rule pulled it forward to close the distance, so it shuffled between the same two squares for rounds on end.
- Feature
New Statistics screen: every battle you finish is recorded in your browser and rolled up — win rate, how the AI decided its turns, which spells you actually use, and what the AI Narrator costs to run. Copy the whole summary to your clipboard with one button. Nothing is uploaded.
- Feature
Party roster: clear any slot with the × on its tab, or hit Solo run to strip the party down to a single hero. A one-hero party is now a legitimate way to play.
- Feature
Enemies commit to a target instead of drifting: a creature now remembers who it has been fighting and finishes what it started, rather than picking a fresh victim every turn — while still switching when a healer or a wide-open caster is the better call.
- Feature
The AI Narrator can finally see high ground: monsters know when a hero holds the rampart above them (and when they hold it themselves), so they fight the terrain instead of ignoring it.
- Feature
Every creature now hunts according to its own nature. A mindless zombie simply mauls whoever is closest; a pack piles onto the quarry it is already biting; an assassin slips past the tank to reach your healer; a commander plays the board and goes for whoever is holding a spell together. Temperament is read from each stat block, so every monster has one.
- Fix
The AI Narrator works again. Enemy turns had silently fallen back to the basic AI on every single decision — the model was being cut off mid-answer and returned nothing at all.
- Fix
Bless can be cast on three allies again (four at 2nd level, five at 3rd, and so on). It had been stuck at a single target, and upcasting it was refused outright even with slots to spare.
- Fix
Monsters walled out of the fight now batter down the gate between you. One watching the party through a locked door would stand there and dodge instead of breaking through.
- Fix
AI heroes no longer strand themselves: one told to close on an enemy it couldn't reach — behind a wall, across a locked door — used to Dash in place every round while an ally fought alone. It now falls back to breaking the barrier or regrouping with the party.
- Fix
A knocked-down fighter gets up before it swings. AI creatures were attacking from the floor — at disadvantage, and handing every adjacent foe advantage in return — instead of spending the movement to stand first.
- Fix
Combat log reads in the right order: the blow that fells a creature now prints above the “is down!” line, and an AI's stated intent prints above the action it took, not after it.
- Fix
Sleeping monsters no longer wake the whole dungeon at once: a shout now has to travel through open space to be heard, rather than passing straight through solid stone.
- Fix
The Dungeon Master no longer comments on every single thing you do — the jabs now land occasionally, while the big moments (a critical hit, a kill, a hero going down) always get their line.
- Fix
Ukrainian narration stays in Ukrainian instead of slipping into Russian or English.
- Fix
Humans follow the 2024 rules: an extra feat instead of the old +1-to-everything-AND-a-feat, which no official option ever granted. Existing human heroes are a little weaker as a result.
- Fix
Paladins can now take Blessed Warrior as their Fighting Style, learning Cleric cantrips that use Charisma.
- Fix
Fighting Styles arrive when they should: paladins and rangers pick one at level 2 (fighters still at level 1), instead of getting one immediately.
- Fix
Enemies assaulting a fortified position no longer freeze: an attacker at the foot of a rampart now climbs to reach a defender standing above it, instead of swinging at thin air from below.
- Fix
Besiegers that start far from a castle gate now march to it and batter it down, instead of bracing in place for the whole battle.
- Feature
Spell effects now carry a distinct per-element look — fire orbs flicker, cold reads as angular ice shards, lightning forks and crackles, necrotic pulses as dark wisps, radiant as bright stars — driven by each spell's described nature, not just a colour tint.
- Feature
The compendium spell EXAMPLE is now interactive: aim the spell over a fixed foe and click (or ▶ Cast) to fire it, watch the damage dice roll (both packets for dual-type spells like Ice Storm), and see lingering aftermaths — Ice Storm's difficult-terrain ice patch, Witch Bolt's crackling lightning tether.
- Feature
Compendium spells now have filters (by role: damage/buff/debuff/utility, and by damage element) plus grouping by spell level.
- Feature
Thorn Whip now pulls a Large-or-smaller target 10ft toward you on a hit.
- Feature
Warlocks gain the Repelling Blast invocation: an Eldritch Blast hit shoves a Large-or-smaller foe 10ft straight back (each beam pushes).
- Feature
Chromatic Orb: the caster now picks the damage type (acid/cold/fire/lightning/poison/thunder), and the orb leaps to another foe within 30ft when two or more of its damage dice match — chaining on upcast.
- Feature
Witch Bolt is now a sustained arc: the initial hit tethers the target, then each turn you re-zap it for 1d12 (no slot) while you concentrate and it stays in range — shown as a live crackling lightning link between caster and target.
- Feature
Character setup: cantrips and spells are picked in one ✨ Magic list (each with its own limit), the level filter is single-select, and you can no longer pick more spells of a level than you have slots for it (e.g. a level-6 sorcerer: 4 first-level, 3 second, 3 third) — with the total spells-known cap enforced on build too.
- Fix
Ice Storm now deals its full 2d10 bludgeoning + 4d6 cold, renders as a 20ft blast, and leaves difficult terrain (double movement) for a round.
- Fix
Flame Strike now deals 4d6 fire + 4d6 radiant (was a single damage type).
- Fix
Ray of Frost slows the target 10ft on a hit and renders as a frost beam; Chill Touch is 1d10 necrotic and stops the target regaining HP for a round.
- Fix
Spike Growth renders as a spiked-ground patch (not a blast); Lightning Bolt renders as a crackling lightning beam, and all lightning effects are now electric blue-white for a consistent look.
- Fix
Mage Armor's +3 now shows on the character sheet's AC while the spell is up (e.g. AC 16 = 10 + 2 gear + 3 mage armor), matching what the combat resolver already applied.
- Fix
Spells that gain nothing from a higher slot (Mage Armor, Blur, Shield of Faith, Hold Person…) no longer show a meaningless slot-level upcast picker. Spells that do scale (heals, Aid, Scorching Ray, Magic Missile) still offer it.
- Fix
The spell info popover now includes the spell's description, and long text wraps cleanly instead of overflowing the modal.
- Fix
Cleric Divine Order aligned with 2024 rules: the base cleric trains in Light + Medium armor and shields; the Protector order grants Heavy armor and Martial weapons (instead of a flat +1 AC), and Thaumaturge keeps Thaumaturgy. A cleric who isn't a Protector can no longer wear heavy armor.
- Feature
Multi-projectile spells now have a player-facing aiming UI: with Scorching Ray, Magic Missile, or Eldritch Blast armed, click foes to place projectile markers (⚡×N over each target — stack them on one foe or spread across several), with a live "2 / 3 placed" tally and undo. The volley auto-fires once every shot is assigned.
- Fix
Mage Armor is now a spell you cast (1 action, touch) on yourself or a willing ally, not a free bonus baked onto every wizard/sorcerer sheet. Unarmoured casters start at 10 + Dex and gain the +3 (to 13 + Dex) only after the spell lands — and it does nothing for anyone already wearing armor.
- Fix
Ally-targeted spells (Mage Armor, buffs, heals) light up the friendly ring so you pick which ally to bolster, instead of the foe ring.
- Feature
Multi-projectile spells (Scorching Ray, Eldritch Blast, Magic Missile) now split their rays/beams/darts across targets — the AI spreads a volley across foes (finishing weak ones first) instead of dumping every shot on one, and the projectile count scales correctly on upcast.
- Fix
Creature traits like Undead Fortitude, Pack Tactics, Regeneration, Cunning Action, and Brave now show a description instead of a raw feature id.
- Fix
Lingering hazards (Spike Growth, Wall of Fire, …) show a rounds-left badge on the board, so you can see how long they last.
- Feature
The battle log now shows each AI creature's chosen action (a 🧠 line), so you can see what the enemy AI decided — handy for spotting a monster that's standing idle.
- Fix
Enemy spellcasters no longer stand idle: they now advance until the party is within casting range (with line of sight) and cast, instead of only wanting melee range and doing nothing for the whole fight.
- Fix
The area-spell aim preview now counts hits with the same logic that applies damage (cover and Large creatures included), so the '· N hit' number matches what actually gets hit.
- Fix
Spike Growth now covers its full RAW area (was too small).
- Fix
Info popovers (spell/stat details) no longer clip off the bottom of the screen — they flip and scroll to stay readable.
- Fix
Internal: split the LLM action-menu builder into per-section files for maintainability (no gameplay change).
- Feature
Added a Changelog link to the site footer.
- Feature
The battle-setup screen now health-checks the AI Game Master: the 'LLM master' option is greyed out when the LLM backend is offline (and reverts to the built-in AI director), so you can't start a game on an unreachable model.
- Fix
You can now attack a hidden enemy — you strike at its square with disadvantage (RAW) instead of the Attack option being unavailable.
- Fix
AI spellcasters stop wasting leveled spell slots: a Fireball/area spell needs a real 3+ cluster, and a single-target slot is reserved for bosses/elites or beefier foes rather than a lone weak goblin a cantrip handles.
- Feature
Timed effects (buffs, spells like Shield of Faith / Hold Person) now show the rounds remaining on their status chip and in the hover tooltip — a live countdown.
- Feature
Enemy target priority now weights healers and concentration-holders over raw low-HP, and accounts for reachability — no more swarming an unreachable mage.
- Feature
Party cohesion: an isolated hero regroups toward its allies instead of charging a distant foe alone.
- Feature
Party-wide short rest: one rest heals the whole group (half max HP + class recharges), once per encounter.
- Fix
Rogues now stab an adjacent foe instead of fleeing to a bow stand-off.
- Fix
Large (2×2) creatures can be attacked from any of their cells — the Attack button no longer greys out when adjacent to their far edge.
- Fix
Opportunity attacks measure reach from a Large creature's full footprint.
- Fix
Movement AIs Disengage instead of walking into free opportunity attacks.
- Fix
Concentration spells respect their real durations (e.g. Wall of Fire 1 minute) instead of lasting forever.
- Fix
The active-hero card is force-selected on its turn so you can act immediately.
- Fix
The per-turn timer now counts from turn start, including the AI's thinking time.
- Fix
Reduced Game Master narration spam.