Changelog
Every change and fix, newest first.
- Feature
TRAPS YOU CAN SEE AND DEAL WITH. A trap is a pressure plate and the device it sets off, each on its own square and drawn as itself in every view — flat, tilted and isometric. What it catches depends on where it was laid: a corridor trap fills the passage, a room trap a stretch of the floor. A spotted trap answers to a right-click: disarm it from beside it with Sleight of Hand or another fitting skill against the rules' DC, or spring it from a safe distance with a ranged attack.
- Feature
THE PASSIVE EYE. Walking the board, every hero's passive Perception — or Survival out of doors — is tested against everything hidden: traps, secret doors, a creature lying in wait. A hero who notices is told so in the log and under their tag, with the dice shown. A hidden creature that is noticed is simply revealed; a mimic keeps its surprise. And now and then the Game Master asks a hero to roll a check of their own — sometimes because there is something there, sometimes because there is not.
- Feature
DUNGEONS LOOK LIKE THEIR OWN KIND. A delve's stone is tied to what it is — a crypt's, a mine's, a temple's — so no two kinds share one grey. Dead ends end in heaps of rubble that cannot be crossed, and a tunnel that has partly fallen in is strewn with debris that slows whoever wades through it. Halls are furnished: fallen columns, sarcophagi, bookshelves, weapon racks, banners, old bones.
- Feature
DOORS READ AT A GLANCE. A plain door shows its planks, a locked one its iron bands and lock plate, and a gate its bars — the same in the flat view and standing up.
- Feature
EVERY WAY DOWN LOOKS LIKE WHAT IT IS. Each kind of entrance — a crypt's open iron door, a chapel's pointed arch, a barrow, a ruin, a tower's hatch, a burrow, a well, a hollow tree, a sinkhole — stands up as itself on a tilted or isometric board, with a dark opening and steps going down so the way in is never in doubt. A cave now opens in the face of its rock, toward you, instead of at the bottom of a pit the rock hid.
- Feature
WHO YOU SEE STANDS ON GROUND YOU SEE. In the fog of war, a creature in sight lights the squares around it, so it no longer stands on black.
- Fix
The seen-from-above board looks as good as the tilted one: rounded ground, wet ground and roads drawn the same way, trees as canopies, rocks without seams.
- Fix
Land's Aid shows itself: the land's burst is drawn where it lands, and the log says so when it finds nobody to help or hurt.
- Feature
THE NARRATOR'S MODEL IS YOURS TO CHOOSE. Settings has a Models tab: every model installed on your machine is listed with what it is good at and what it is not, and picking one swaps the Narrator over to it without leaving the battle. The model you choose is remembered, and a player who brings their own model is never metered.
- Feature
THE CHEST IS A CHEST NOW. No card of rewards to choose from — a hero opens a chest as an action and takes what is inside: one to five things and, more often than not, a handful of coin. Small things go straight to the pockets, the rest into the bag, and a dungeon map unfurls the moment it is found. A chest too full to empty in one go stays open with the rest still in it. A mimic waits until someone tries the lid before it springs. And a chest can be attacked rather than opened — the lid gives way, but some of what was inside gives way with it, and broken goods are worth carrying only as far as the trader.
- Feature
ANY WALL CAN COME DOWN. A wall is something to attack now. A thin partition takes thirty points of punishment before it breaks; living rock takes ninety, and blows of less than three do nothing at all — a dagger will not open a mountain. What lies beyond is whatever is beyond: sometimes the corridor you were looking for, sometimes more stone. Secret doors break like the masonry they hide in.
- Feature
THE HIDDEN DOOR LEAVES A TRACE. A hero walking past a secret door may catch something out of place without looking for it — rare and earned, about what a practised cleric or wizard manages — and the party is told that something here is not right. From there it is a search like any other, and looking still finds more than walking past.
- Feature
WASD MOVES THE MAP. The four keys pan the board while you hold them, smoothly and in any direction at once. Q and E still turn the view a quarter at a time — but exactly one quarter per press: holding Q used to spin the map through a dozen turns in stutter-steps.
- Feature
THE MEASUREMENTS PAGE. A page of its own for the numbers behind the Narrator: how often each model picks what the engine would, how far apart their preferences sit, what the disagreements are about, and what the fights actually ended in — as tables and as charts, with the plain engine standing alongside as a control.
- Feature
WHERE EVERY PICK COMES FROM, ON THE PICK ITSELF. Choosing a feat, a spell or an item shows its origin as a chip beside its name — SRD 5.2.1 or TactForge — the same mark the compendium wears, so the two agree and you never have to leave the shelf to find out whose rule you are taking.
- Feature
FORTES ARE FEATS. The game's own feats went by Forte in English, which was a word for a thing that already had one. They are Feats now, everywhere in English; saved heroes keep every pick.
- Fix
A Ukrainian table no longer hears its own commanders shout in English. Every prompt whose words reach the table — the spoken line, the commander's call, the round's chronicle, the recap — now carries the table's language, and carries it firmly enough that a small model stops drifting into English or Russian part-way through.
- Fix
A hero is called what she is. The Narrator was left to guess at everyone's pronouns and guessed "he" for the whole party; every hero's name now reaches the model with her own.
- Fix
Nobody speaks three times running. A hero who has just spoken stands aside for the next line, whether it is a plan, a command or an answer in a conversation.
- Fix
Spoken lines no longer arrive wearing the model's own quotation marks inside the table's, or trailing a stray brace where its answer ended.
- Fix
No more caltrops scattered at an empty room. Ground kit is laid against foes that are actually in play — awake, alive, on the board and seen — instead of against a sleeper two rooms off.
- Fix
A fight in the dark runs smoothly again. The fog was being redrawn from scratch on every blow struck, every word spoken and every step taken, whether or not anyone's sight had moved; it is now redrawn only when the party actually sees something new. Turning the view with Q or E no longer redraws it at all until the turn is finished, so the board turns with the animation it always had — in the isometric view it had been arriving in one jump.
- Fix
A weapon the smith has improved is still a weapon the hero is drawn holding. An upgraded sword, bow or axe left the figure empty-handed, and no change of weapon brought it back.
- Feature
THE MONSTERS FIGHT FROM THEIR STAT BLOCKS. Every creature fights from its stat block — the System Reference Document 5.2.1's, or this game's own: its hit points, armour, creature type and size, its own attacks at their to-hit and damage, and its traits. A goblin hits harder with the advantage and slips away as a bonus action; a hobgoblin captain's Aura of Authority steadies the soldiers round it; a bandit captain and a veteran Parry the blow that would land; a kobold squints in sunlight; a ghast's stench sickens whoever starts beside it, and its claw can paralyse; a bugbear grabs, a dire wolf knocks you flat, a mimic holds on. Goblins, hobgoblins, bugbears and worgs are Fey now, so Charm Person and Hold Person no longer touch them; the kobold is a Dragon, the gnoll a Fiend.
- Feature
THE TROLL AND THE ONI. A troll rends three times a turn and heals 15 at the start of each — fire or acid stops that for its next turn only. The Ogre Mage is gone; in its place stands the Oni, a fiend that heals 10 a turn, rakes with necrotic claws and fills a mind with its Nightmare Ray.
- Feature
UNDEAD FORTITUDE AS WRITTEN. A zombie brought to 0 makes a Constitution save against 5 plus the damage every time; on a success it stands at 1. Radiant damage and a critical hit still put it down for good. Skeletons break under bludgeoning.
- Feature
THE HOUSE MONSTERS GROW FROM THEIR PARENTS. Every creature of this game's own — the goblin berserker, stalker and shaman, the cult's guards, the orcs, the ogre shacklehand — now starts from its parent stat block (the Goblin Boss, the Cultist, the Tough, the Ogre…) and carries only its twist; the goblin variants lost the proficiency bonus their challenge never gave them. The Bandit Leader is the Bandit Captain.
- Feature
THE CLASSES KEEP THE 2024 TABLES. Every caster prepares from its class's own table — a cleric, druid, wizard or bard 4 at first level and 16 by eleventh, a sorcerer 2 rising to 16, a paladin or ranger 2 to 10, a warlock 2 to 11 — instead of level plus modifier; a cleric knows three cantrips, four at 4, five at 10. Heroes take the 2024 skill counts: two for most, three for a bard or a ranger, four for a rogue.
- Feature
THE LEVELS WHERE THE BOOK PUTS THEM. A rogue takes a feat at 10; a ranger's second Expertise comes at 9; a fighter's Second Wind has four uses from 10; a paladin's Channel Divinity three from 11; a sorcerer picks four Metamagic options at 10; a druid takes CR ½ forms from 4; a monk runs +15 ft from 6 and +20 from 10. A bard fights with simple weapons and starts with a dagger, a druid wears light armour, and a monk and a rogue take the martial Light weapons. Arcane Recovery never brings back a slot of 6th level or higher.
- Feature
THE INVOCATIONS AS WRITTEN. Eldritch Spear stretches the blast 30 ft per warlock level, Lifedrinker drinks 1d6 necrotic once a turn, Fiendish Vigor walks in with 12 temporary hit points, and the Pact of the Tome hands out three cantrips.
- Feature
TWO WEAPONS, THE NEW WAY. Anyone who swings a Light weapon in the Attack action may strike with a different Light weapon in the other hand as a bonus action — without the ability modifier, unless they took the Two-Weapon Fighting style — and a Nick weapon's off-hand strike rides the Attack action, leaving the bonus action free.
- Feature
WEAPONS HAVE THEIR PROPERTIES. A longsword, quarterstaff or spear held with no shield rolls its bigger Versatile die; a greatsword, greataxe or longbow is Heavy and swings at disadvantage below Strength (or, for the bow, Dexterity) 13; a crossbow is Loading — one bolt per action. Heavy armor worn below its Strength costs 10 ft of speed, and heavy armor and half plate clank: Stealth at disadvantage.
- Feature
THE BIG WEAPONS AND THE FURY. Great Weapon Fighting counts a 1 or 2 as a 3. A rage is kept by attacking, grappling or spending a bonus action — no longer by being hit — and its bonus rides every Strength attack, a thrown javelin included, never a Dexterity one. The Berserker's Frenzy is extra damage when raging and reckless, not an extra swing.
- Feature
MONKS, PALADINS, FIGHTERS AND CASTERS. A monk fights with Dexterity and the Martial Arts die with any simple melee weapon or martial Light one, and may throw the bonus unarmed strike without attacking first. Divine Smite adds a d8 against fiends and undead, and from level 2 Paladin's Smite casts it once each battle without a slot. Indomitable adds the fighter's level to the reroll. A countered spell keeps its slot — only the action is lost. Cleave carries only into a foe beside the first; Vex lasts to the end of your next turn, Sap to its start.
- Feature
SUMMONS. Find Familiar, Find Steed, Summon Dragon and the game's own summonings — Wake the Mossbones, Beckon the Lostling, Pay the Taker, Raise Standing Ground and Keep the Vigil — call their creature to a free space you can see. It fights on your side and takes its turn right after yours, hits with your spell attack, and grows with the slot you spend: more armour, more hit points, more attacks. It vanishes at 0 HP or when your concentration breaks, and a fresh casting replaces it. A paladin's Faithful Steed calls the steed once each battle without a slot; a druid's Wild Companion spends a Wild Shape to call a familiar.
- Feature
THE COMPENDIUM READS THE STAT BLOCKS. A monster's page prints every attack as the stat block does — to-hit, damage and its rider — with its saves, darkvision, condition immunities and regeneration, and names Parry, Stench, Aura of Authority and Sunlight Sensitivity; a class page shows its weapons, skills and prepared-spells table.
- Feature
CHOOSE THE SHAPE YOU SUMMON. A summoning with more than one shape asks which one answers, and the party's own casters pick the shape that suits the fight.
- Feature
THE SPIRITS KEEP THEIR TRAITS. A summoned creature fights with its stat block's whole kit — the dragon's breath of its element, with its resistance shared with you, among them. The steed shares its life with its rider, and a familiar carries your touch spells and can Help an ally.
- Feature
THE CONJURE SPELLS. Conjure Animals, Woodland Beings, Elemental, Fey and Minor Elementals call spirits, not creatures: a pack that savages foes around it (your allies are spared), nature spirits that let you Disengage as a bonus action, an elemental of the element you pick that seizes one foe and grinds it each turn it fails to break free, a fey spirit that strikes and frightens then teleports to strike again, and elemental motes that add 2d8 to your hits inside them.
- Feature
A ZONE GIVES ITS SAVE. Spirit Guardians, Guardian of Faith and the Conjure spells now roll the spell's saving throw against the caster's DC each time they bite — half on a success, or nothing for the spells that say so — and spare the caster's side.
- Feature
CREDITS, AND WHERE THE RULES COME FROM. Settings has a Credits / Legal tab: the rules' source credited in the official words of the System Reference Document 5.2.1, the voices, the fonts and the open-source software the game runs on. The same credit, word for word, stands on the home page, in the compendium and on the terms page.
- Feature
THREE NEW BARBARIANS. The Chainbreaker seizes a foe with its blow, drags it where it wants and hurls it into the enemy's ranks, knocking them down; the Emberheart leaves embers in everything it hits and sets them all alight with a roar — and the one that falls with three of them bursts into flame; the Kinwall steps into the blows meant for its friends, makes the ground at its side hard to leave and roars fear away. They replace the barbarian paths the game could not keep; a hero on one of those is now the archetype that plays its part.
- Feature
EVERY RULE IS THE SRD'S OR OUR OWN. The rules come from the System Reference Document 5.2.1; everything else in the game is its own design. Every spell, creature, item, feat, species and background carries its origin — the compendium labels each one SRD 5.2.1 or TactForge — and the build refuses content that doesn't declare one.
- Feature
TWENTY-EIGHT MORE ARCHETYPES. Every class's other paths are new designs with their own features: the bard's Counterpoint; the cleric's Stillwinter, Turnabout and Thresher; the druid's Wildhusk and Rotbloom; the fighter's Tanglehook, Glyphblade and Skyiron; the monk's Ashwake, Breathgiver and Blindside; the paladin's Holdfast, Colorbearer and Reckoner; the ranger's Packbound, Lurecaller and Deadfall; the rogue's Luckcutter, Hushblade and Tetherblade; the sorcerer's Spirewright and Brimheart; the warlock's Doorsworn, Tithesworn and Rumorbound; the wizard's Glasswright and Presage. Some raise walls, spires and husks on the board, some lay traps and ground only foes feel, some move friends and enemies about, some mark a foe and spend the marks. A hero on a retired path is now the archetype that plays its part.
- Feature
FORTES. The feats beyond the System Reference Document's are Fortes now, each its own rule — Close Call, Hard to Fell, Bonesetter, Harness Drill, Ironclad, Turn the Blade, Give Ground, Unbowed, Full Weight, Killing Craft, Paired Steel, Long Draw, Backstep, Glancing Spell, Spellgrip, Spellchaser, Bar the Way, Words Under Fire, Fieldcraft, Clamber, Moving Target and Onrush — with three new fighting styles, Lone Blade, Shared Shield and Torchfighter. A saved hero's old feats become the Fortes that took their place and lose no ability-score increase.
- Feature
FIVE NAMES OF OUR OWN. Five names the game gave its own things turned out to be someone else's, so they changed: the ogre with the spiked morningstar is the Ogre Shacklehand, the fighting style that shares a shield is Shared Shield, and the new barbarian, rogue and warlock archetypes that take the blow, cut a mark's luck and bank a tithe are the Kinwall (with its Kinring), the Luckcutter and the Tithesworn. Only the names changed: a saved hero, battle or link carries on under the new ones.
- Feature
NEW SPELLS. Twenty spells of the game's own take the places the old ones left: the cantrips Haul, Snagroot, Startle and Turn the Key; Clinging Spark, Slipskin, Thicketseed and Unwinding Coil; Razor Ribbons; Gathering Thunder, Hoofstorm, Lent Light and Watching Ground; Tidereach; Hawkfall — and the five summonings. A spell a hero had prepared under an old name is now its replacement.
- Feature
EVERY SPELL SAYS HOW IT IS CAST. A spell's card — on the sheet, in the forge's spell book and in the compendium — gives its casting time, range, components and duration in one line, under a description written for this game.
- Feature
NEW PEOPLE, NEW FOES. The Lanternborn carry light under the skin: they warm a wound shut, glare a foe open and at level 3 burn it all at once. The Woodward, the Drover, the Fosterling and the Crier are new backgrounds beside the Acolyte, the Criminal, the Sage and the Soldier. The Slatejaw, the Lizardfolk Nestwarden and Moundkeeper, the Cult Lector and the Orc Blood-Captain take the field, and a warlock's Handfast Cord takes the place of its old rod.
- Feature
THE SOLDIER STRIKES SAVAGE. The Soldier's Origin feat is Savage Attacker, as the System Reference Document writes it, instead of a feat from outside it: once a turn, a weapon's damage dice that came up low are rolled again and the better roll stands.
- Feature
EVERY RING OF A HILL COSTS TWICE THE ONE BELOW. A step up a hill costs 10 ft onto its first ring, 20 onto the second, 40 onto the third and 80 onto the fourth — twice the ring below, every turn — so the crown of a tall hill is out of reach on foot, Dash or no Dash. A ring is five feet of height: a hand-built 15-ft terrace is the third. A creature with a climbing speed walks up at the ground's own price — the Giant Wolf Spider, a druid in its shape, and a ranger from Roving, which now grants one — and a flyer still soars over; stepping down or along a hill, stairs, ladders and walls cost what they did. The reach you see, the route, the ruler and the move itself agree, and the monsters plan the same way: a foe on a peak they can't climb is shot at or waited out, never paced toward.
- Feature
SRD ONLY, AT THE FLIP OF ONE SWITCH. Settings → Game has an SRD only switch: every new battle, story fight, expedition and co-op table is then built from the System Reference Document 5.2.1 alone — its monsters, bosses and camps, the loot in chests and pockets, the shop and the trader, the hires in the tavern, and every new pick in the forge and at level-up. Gems, the dungeon map, keys, the siege ladder, the bestiary tomes and the traps stay, since they carry no rules of their own. The switch is stamped into each level as it is made: an expedition keeps the set it was taken under, a battle code rebuilds its own set on any device, and a table plays the host's. A hero already built with this game's own content keeps every pick, marked TactForge, and the battle reads SRD · mixed party. Until more of the SRD's feats arrive, an SRD hero's ability score level is the +2 or an Origin feat.
- Feature
THE SRD'S OWN NAMES, AND A LIZARDFOLK OF OUR OWN. What the System Reference Document 5.2.1 renamed now wears its name: the Goblin, Hobgoblin, Bugbear, Gnoll and Kobold Warriors, the Warrior Veteran and the Cultist Fanatic; the sorcerer's Draconic Sorcery, the wizard's Evoker, the warlock's Fiend Patron and the monk's Warrior of the Open Hand; the tiefling's Fiendish Legacy. Nothing else about them changes, and saved heroes, battles and bestiaries carry over — a hero who knew goblins still knows them. The lizardfolk now grow from a Lizardfolk of this game's own, a marsh skirmisher: a fishing spear that pulls a foe standing in mud or reeds off its feet, a sling, and the family's Mire Stride; the Nestwarden keeps its shell shield and the Moundkeeper its slow old bones. With that, every rule is the System Reference Document 5.2.1's or this game's, and the credit names the 5.2.1 alone.
- Feature
FIFTY SRD CREATURES TAKE THE FIELD, AND THIRTEEN SPELLS. The System Reference Document 5.2.1's people-at-arms and hired knives — the Bandit, Scout, Spy, Guard, Warrior Infantry, Berserker, Gladiator, Knight, Guard Captain and Assassin, the Tough, the Tough Boss and the Bandit Captain, the name the Bandit Leader goes by now — march with its casters, the Priest Acolyte, the Priest, the Druid and the Mage, who cast the spells the SRD gives them and no others. The Bugbear Stalker and the Goblin Minion join the goblinoids; the Lion, Tiger, Giant Hyena, Saber-Toothed Tiger, Giant Crocodile, Mammoth, Giant Ape, Owlbear, Death Dog and Giant Scorpion join the beasts, and the Black, Brown and Polar Bears and the Giant Boar take the field with the very stat blocks a druid's Wild Shape now wears; the Giant Spider, Phase Spider, Ettercap and Drider join the spiders, the Minotaur of Baphomet, the Ettin and the Hill Giant the giants, and the Ghoul, the Mummy, the Ogre Zombie and the Minotaur and Warhorse Skeletons the dead. The Wight, the Vampire Spawn, the Shadow, the Specter and the Wraith drain: what their touch takes off a hero's hit point maximum — or, for a Shadow, off its Strength — stays gone until a long rest or a Greater Restoration, and a maximum or a score drained to nothing kills. This game's own Lizardfolk takes the field beside its Nestwarden and Moundkeeper. The camps have leaders to match: a Bandit Captain holds the stockade, a Priest the cult shrine and a Mage from level 5, a Mummy the barrow, a Drider the spider thicket, an Owlbear the beast den, and a Tough Boss the orc war-camp until the Blood-Captain comes; and a camp fields only what the party's level can meet. The new spells are True Strike, Guidance, Longstrider, Expeditious Retreat, Ray of Enfeeblement, Flame Blade, Gust of Wind, Enhance Ability, Remove Curse, Faithful Hound, Giant Insect, Tree Stride and Greater Restoration, and from level 4 a hero may take the Grappler feat: a punch that grabs, the upper hand on whoever you hold, and a drag that costs no extra movement. The figures have new bodies: the Drider stands on a taur's four legs, the Giant Insect's centipede and wasp on their own, and serpents, great two-legged beasts and walking objects wait for the creatures that will wear them.
- Feature
CASTLE DEFENSE RESTS FOR NOW. The battle builder no longer offers the Castle defense map, and a random map — the 🎲 choice or a random battle link — never lands on it. A battle link or a save that already holds a castle still loads and plays as it did.
- Feature
THE MONSTERS USE WHAT THEIR STAT BLOCKS GIVE THEM. A Giant Spider or an Ettercap throws its web and waits for it to recharge before the next; a Mummy fixes a foe with its Dreadful Glare and still strikes twice; a Phase Spider slips out of the world to reach a foe its legs can't; a Drider webs or outlines a crowd; and a caster among the monsters opens with its Hold Person, Bane or Charm Person, as the party's casters do. A Multiattack swings the attacks its stat block names — a Giant Scorpion's two claws and a sting, a Ghoul's two bites, an Ettin's axe and morningstar. A charge belongs to the attack now: a Giant Boar, a Mammoth, a Minotaur or a skeletal warhorse that hits at the end of a straight run lands its extra damage and throws the foe down, with no save, and a Minotaur's gore needs a breather before it comes again. A Lion trades a rend for a roar that frightens, a Mammoth tramples whoever lies at its feet, a Giant Boar fights harder once bloodied, and a Gnoll or a Giant Hyena that wounds a bloodied foe rampages on to bite again. The Web spell holds: whoever wades in or starts a turn tangled there makes a Dexterity save or sticks fast until an action tears it loose, and fire burns the silk away. A Giant Ape no longer throws its boulder where it would hit itself; bears and crocodiles swim; a Large or Huge creature keeps its grip, and lays on its touch, from any side of its body; and a barbarian left lying when a fight ends gets up and lets its rage go.
- Feature
WINGS, A LIFT AND AN UNRAVELLING. Fly gives a willing creature wings for ten minutes: it flies at 60 ft over rough ground, water and walls, and each slot above 3rd gives wings to one more. Levitate hoists a foe 20 ft into the air on a failed Constitution save: it can't walk, and no blade on the ground reaches it, nor it them, unless one of the two flies. Dispel Magic unravels every spell on a creature — friend or foe — and every lingering spell on the ground it stands in: up to the slot outright, a stronger one on a check. The Constrictor Snake, the Giant Constrictor Snake and the Couatl constrict as the stat block does: a Strength save, not an attack roll, and a failure is held in the coils.
- Feature
DRAGONS, SNAKES, SMALL BEASTS, ELEMENTALS AND THE DINOSAURS. Fifty-four more creatures of the System Reference Document 5.2.1 join the bestiary, and forty-nine of them take the field. Ten dragon wyrmlings, black to white, each breathe their colour's breath, and the metallic ones a second breath that puts a hero to sleep, pushes, slows, weakens or paralyses; the Pseudodragon and the Wyvern, standing on its two hind legs, fly with them, and a fire-blooded Half-Dragon leads them. The Boar, Elk, Giant Goat and Warhorse charge, the Ape throws rocks, the Crocodile and the Giant Crab hold on, and the Giant Badger, Centipede, Fire Beetle, Lizard, Rat, Weasel and Wasp, the Mastiff, Panther, Hyena and Jackal round out the dens. The Constrictor Snakes coil, the venomous snakes bite, the Flying Snake has feathered wings, and the Grick and the Spirit Naga hunt; the Guardian Naga and the Couatl are in the bestiary but never come as foes. The Air, Fire and Water Elementals, the Invisible Stalker and the Salamander fight; the Earth Elemental, the Djinni and the Efreeti wait until the elementals have smaller kin to follow them. The Centaur Trooper thrusts its pike from ten feet, the Lamia's touch charms, the Allosaurus pounces and the Tyrannosaurus Rex bites and holds; an Animated Flying Sword and a Rug that smothers stand guard at the cult shrine, and from level 7 the Tyrannosaurus rules the beast den. The Priest can unravel a spell with Dispel Magic and the Mage can take wing with Fly. The Roc is drawn as a great bird now, and the Mossbone that answers as an owl like one. A bestiary page lists a creature's own actions beside its attacks, each breath, web, touch and thrown boulder with its save and damage, and the spells it casts. A creature hung in the air by Levitate hovers on the board.
- Fix
A creature holding another in a grapple now drags it along when it moves — at double the movement cost unless the held one is much smaller — instead of simply letting go, and the dragged creature can't take a swing at its captor for leaving.
- Fix
A pack led by a beast no longer brings bandits and goblins to the same fight: everyone in a pack must be willing to camp with everyone else, not only with its leader.
- Fix
A rogue with more than one Cunning Strike armed no longer flips between them for its whole turn: it arms one and fights.
- Fix
The compendium no longer lists a summoned creature's attacks, a Hollow Kin's or a tethered blade's as weapons of their own.
- Feature
THE BOARD CAN BE SEEN FROM AN ANGLE. Three buttons at the board's corner switch how it is seen, at any moment of a fight: from straight above as always, tilted three-quarter with the rows drawn shallower, or isometric — the grid turned 45° and halved in height — and turn the view a quarter either way, as Q and E do (Dodge and Disengage moved to V and X; a binding of your own still wins). The camera glides to the new view over a third of a second, the short way round, rather than jumping. The rules never turn: the map keeps its squares, only the picture moves. Every body stands upright on its own square, painted nearest-last as the view sees it, and faces where it faces on the map turned with the view. A click, a hover, the ruler and a dragged token all read back through the view to the square under the cursor, and switching keeps the same ground in the middle of the screen. What is read stands up too: the ruler's reading, the aim badge, popups and the walk's caption. The same choice sits in Settings beside the token view, kept per player, and the home page's showcase moves between the views.
- Feature
WHAT STANDS, STANDS. In the angled views the world stands up on its squares. Walls are laid in stone courses, each block its own shade, seen through a little; a wall against a cave is its rough rock; the rock between a dungeon's rooms is dark bedrock, a lone wall in a hall a column, and a wall's foot shades the floor before it. Doors stand in their gaps — shut, barred, swung open against the jamb — and a secret door is wall until found. Sconces burn on the walls and their light falls on the stone that faces them; torchlight carried by a body lights the walls it passes. Trees stand each as a pine or a broadleaf of its own, barrels, crates, tables, beds, hearths, wells and statues stand as themselves, a stamped pool sinks into its basin, an entrance keeps its doorway. A body behind a wall is hidden by it as a wall hides, and seen through a window round it.
- Feature
THE GROUND HAS THE HEIGHTS THE RULES GIVE IT. A hill rises five feet a ring from its foot to its crown and a rock formation ten, drawn as one sun-lit surface that swells from foot to crown — not a staircase of blocks; a road runs on over a hill it crosses. Ramparts stand at their ten feet with their defenders on them, a wall stands a parapet above its wall-walk, a stair to the walk is a flight of steps, and a raised siege ladder leans against the wall it scales. Everything that marks the ground lies on it: the reach squares, a painted wall, the route, the ruler, spell areas, effects and replay routes follow the slope, and a click finds the hilltop.
- Feature
WATER, BOG AND ROAD WITHOUT STAIRS. In the angled views a lake, a river and a flooded square lie in one body with a rounded shore, sunk a little below their bank so the earth shows down to the water; a body in the water wades, seen only above the waterline, with the water ringing round it. A swamp is a rounded patch of bog, pocked with pools, reeds in it; a road bends round its corners and meets its bridges square; dirt, sand, moss and meadow meet in curves, not the grid's staircase. The fog lies flat with a soft edge, and nothing on ground the party has never seen stands up out of it.
- Feature
A GRAVEYARD, BUILT. Graves are mounds of earth with a cross at the head, headstones are slabs with arched tops, and a crypt is a small house of stone under a pitched roof whose ridge runs along the building, gabled at its ends. A cage stands as bars round its prisoner, and a chest stands on its square.
- Feature
THE WEAPON IN HAND. A body holds the weapon it last struck with, and a player's armed choice shows at once: switch from the bow to the sword and the fighter's hands change.
- Feature
SETTINGS IN TABS. Settings split into Game (narrator, commander, watch, free dice, speed), Sound (effects, table voice) and Display (scale, token view, board view, camera).
- Feature
THE FIGURES ARE DRAWN AS SOLIDS. Every body on the plate is drawn by the shapes renderer now: the same rig and the same clips, but each part a solid — a skull an ellipse, a limb a capsule, a blade a rounded box — lit from a distance field, with a dark line wherever one part lies over another, as the pixel parts outline theirs. It covers every rig the board has, from the fighter to the dragon, the spider and the mimic, in all four facings, and the side view is a true profile rather than the front view turned. A shapes picture costs ten stamps of the old one, so each body's is drawn on a clock of its own, twenty pictures a second, and every one is kept: a loop is drawn once round and then only read, while the body's step, fade and swing trail still move every frame. NEXT_PUBLIC_FIGURE_RENDERER=parts brings the pixel parts back. The Figure Lab opens on Shapes too.
- Feature
FIVE OF A KIND ARE FIVE INDIVIDUALS. The board spawns every creature as one of five variants, but forty-two of forty-eight creatures stood as five identical copies breathing in lockstep. Each variant is its own now: a lighter or darker skin or hide and cloth of another hue (a dragon's wings only shade, a red dragon with teal wings is a different creature), a head of hair of its own, a build a little stockier, leaner, taller or shorter, and an idle of its own — its own tempo, its own place in the breath, and a stance: weight on the back leg, the weapon arm up on guard, the head never still, or chest out and chin up. Variant 0 is the creature as drawn; the mimic alone stays identical in all five, because it must pass for the loot chest.
- Feature
A WOMAN IS DRAWN AS A WOMAN. Measured row by row her outline had been a man's: the waist pinched behind arms that hung beside it, the hips no wider than the chest, the hair two narrow falls tucked inside the skull, the lips a wizard's teal because they took the class accent. Now her shoulders sit in and her arms are slimmer, her body is an hourglass — a narrower chest, the belt cinching the waist, the hips flaring past the chest to a hem — her lips are rose in either renderer, her eyes carry lashes, her jaw rounds to a soft chin, and her hair stands out beside the face. The five of a kind wear five cuts: flowing, a ponytail, a bun, a bob and a braid over the shoulder. A helm stops at the brow for everyone, so a face is a face and not a mask tapering to a point.
- Feature
THE DEAD DRAG THEIR STEEL. A skeleton with a great blade held it up in both hands at a soldier's guard, which no mindless thing does: it hauls it one-handed from a hanging arm now, the point scraping the ground behind, trailing in the walk and hanging down past the hip facing the viewer, and still swings it up to cut. The skeleton itself is bones in either light: a squared skull over a narrower jaw with two sockets and a row of teeth, no ears, a hollow ribcage crossed by light ribs, thin bone limbs all in the colour of bone.
- Fix
THE BEASTS ARE THEIR DRAWINGS. The shapes spider was a round blob on fat stumps and stands on stilts again, its knees above its back; the dragon in profile was a squat lump under a solid fan and is long and low with a gold belly, a horned head with its jaws open, legs of a thigh and a shin and a boned wing scalloped between its fingers; seen from behind a dragon shows spikes down its spine and a tail running out along the ground to its spade, where it had shown its belly and no tail; the remorhaz was a bare column and has its crest of fins, its rings, its spine of heat and its rows of legs. And a remorhaz no longer walks bolt upright: its reared trunk rides a hinge where it leaves the ground, so it crawls with the trunk lowered, sways it at rest and throws it forward to bite — in the pixel parts as well.
- Fix
HANDS, WEAPONS AND SHIELDS. A spear is longer than the one who holds it and taken in both hands when the other is free, and a javelin is held by its middle, point forward and up, ready to throw. A bow is a curved stave with a string, and larger. Facing the viewer a low blade hangs out past the hip instead of across the legs. In profile a shield is held forward before the belly — it had hung at the small of the back as a dark smear across the hip — and facing left it rides the near arm, round and in front. A monk's guard read as a T-pose facing the viewer, both arms straight out: a reach toward the viewer now comes in across the body, the fists before the chest, and one reaching away hides behind it. A lean seen head-on is a lean, not a sideways tilt, so an idle is no longer a zombie's. The lizardfolk's head is wide and low instead of an egg.
- Fix
NO MORE MAGENTA. The chibi's lit lower iris and the light along its hair were painted with colour keys the tones never named, so every chibi face on the board carried the missing colour, magenta, at the eyes. Both have their colours, and a test now paints every part of every hero, in both schools and both sexes, and every monster, and fails on any key without one.
- Feature
THE WEAPON STAYS IN THE RIGHT HAND. Every figure is drawn once, facing right with the weapon in the near hand, and facing left was that drawing mirrored — so a fighter walking left carried his sword in his left hand and his shield in his right. Now a body facing left changes hands: the weapon moves to the far fist, behind the body, and the shield to the near arm — the shield side is what you see of a fighter walking left, as of a real one — and facing right the shield hides behind the torso, showing over the shoulder only when that arm raises it. A great blade takes both hands: in the side view the far arm reaches the grip and swings with the near, facing the viewer both hands meet on the grip before the body and the blade leans over the right shoulder, and the swing lifts the grip and sweeps the blade across the body instead of chopping on the side view's arc. A bow is the exception: the left hand holds the stave out before the chest, curved, the string toward the archer, and the right draws it — a longbow half again the height of a shortbow, knee to over the head. A staff runs from the ground to over the head and is taken in both hands when the other is free, in one beside a shield. Two hands on a weapon leave none for a shield, whatever the class hands out.
- Feature
THE GIANTS ARE NOT ALL OGRES. Every giant had been the ogre recoloured: the same tusked dome, the same club. Each has its own head now — the fire giant's crest and beard of flame, the frost giant's braided beard under a horned helm, the stone giant's bald dome, the storm giant's long hair under a crown, the ogre mage's horns and topknot, the troll's long nose under lank hair — and carries the weapon its stat block swings at a giant's scale: the fire and storm giants a slab of a greatsword (black iron and gold-edged), the frost giant a bearded greataxe, the stone giant and the ogre a knotted club, the chain brute a morningstar, the ogre mage a staff, because a mage carries a staff whatever it hits with. And each is dressed its own way: plate with pauldrons on the fire giant, a fur mantle on the frost giant, bare stone, a long coat clasped in gold, a robe and sash, chains, rags. The skeleton is bones and not a body — a ribcage narrower than the shirt was, a spine, a pelvis, leg bones two wide. The remorhaz is an ice worm and no longer a spider: a segmented trunk along the ground reared up under a crest of fins, a spine of heat down its back, rows of short legs, mandibles.
- Feature
THE MIMIC IS THE CHEST. At rest the mimic gives nothing away — its lid is plain wood over a maw whose teeth show only when it lifts, its pseudopods are tucked up into the box, and its idle is dead still; the tell, the lid cracking on a sliver of teeth, plays only once it is in the fight and picked. Every loot chest on the board and in the terrain legend is now that very picture, so nobody can tell the two apart by looking, and an unsprung mimic wears no tag, plate or bar because until a hero reaches for its loot it is a chest and nothing else. Nearly half the chests bite back: every builder that lays chests — the wilderness caches, a crawl's finds and its secret vault, the sub-dungeon's reward — rolls each one a mimic at 45%, where the wilderness alone had rolled a fifth. Never the quest relic.
- Feature
THE TALLY KNOWS ITS FLOORS. A field with a lair below is one battle on two boards, and the results screen tallied only the board the party ended on — a lair won in two rounds showed one Cult Guard and nothing of the goblins fought upstairs ("we should have multilayer statistics"). Such a battle now opens on Both floors and offers each floor on its own: the roster, the sheets and the trace read whichever is picked, and a line folded up from the lair remembers the floor it happened on so the two can be told apart again after the climb. A single-floor battle reads exactly as before.
- Feature
THE NARRATION LOG IS A DRAWER. Expanding the Narrator's feed threw a modal into the middle of the screen, then a panel over the board behind a veil; it now slides open in the flow under the strip's header, the board giving up the room beneath it and the controls staying where they are, and Escape or the close shuts it with the same motion.
- Feature
THE NARRATOR'S CREATURES SEE THE ROOM. A monster deciding its turn was told "cover/walls present — line of sight matters" and "…plus 4 more elsewhere", and nothing of the scene: it planned shots through walls, never stepped behind one, never knew a flank was closing, and answered a taunt with a choice that ignored it. Each turn's prompt now carries a SIGHT line — which foes it cannot see, who has eyes on it, and the nearest square this turn's steps reach that would put a wall between it and the archer watching — the far foes by direction and distance ("3 to the south-east, 45–60ft") instead of a count, the ground within reach (difficult footing, a height it could take and the way there), and a SCENE line with the last lines said in its hearing, so the character is in the decision and not only in the mouth.
- Feature
THE TURN REMEMBERS THE LAST ONE. A creature deciding its turn was told "RECENT: attacked, moved" — verbs with no target and no outcome, a grapple not even among them — so a hero grappled the same wolf three turns running with every attempt shrugged off and nothing told it. The prompt now opens with what happened since its last turn: its own deeds and how they went, who struck whom around it, who closed to its elbow, who fell. The same few facts ride every voiced line as "You just saw", so a bark answers the round as it went and not the moment alone.
- Feature
EVERY CREATURE HAS A CALLSIGN. The prompt named creatures by their display names and matched a plan back by that name exactly, so "Elite Ogre Chain Brute Ram" twice over was a dozen tokens to reproduce without a slip, two goblins were told apart only by a suffix, and a slip was dropped in silence. Every creature in the prompt now carries a short stable sign — H1, H2 for the heroes, M1, M2 for the monsters — on the roster, the menu, the team plan, the sight line, the scene and the commander's orders alike, and a plan names its targets by callsign; a name or the engine's own id still resolves.
- Feature
THE NARRATOR TELLS WHAT HAPPENED, AND THE TABLE TALKS TO EACH OTHER. The Narrator was handed raw log lines with dice and damage numbers, half of them in English at a Ukrainian table, plus the creatures' dialogue as "the story so far", and was told to be absurd — so it riffed on an insult three lines running instead of on the fight. It now gets clean facts in the table's language, continues only its own thread with the dialogue handed apart to narrate around, is told to chronicle first and wink once, and is never woken for a death save or a concentration check. A creature answering another is told what the two just did to each other and asked to end on something the other must answer; every monster kind carries a voice card, so an orc war chief and a goblin no longer sound like the same taunt; and whoever spoke last on the board waits for an answer before speaking again. The Narrator now tells each ROUND as it ends: the round is collected as facts — every blow and whether it landed, every fall, every spell, who closed on whom, in order, with the field last — and the Narrator writes one chronicle of two to four sentences from it, on its own allowance so it neither starves the dialogue nor is starved by it. The scatter of one-line beats on single events (a kill, a crit, a step, a wild surge) is gone with it; the cold open and the slain monster's own send-off stay, and the creatures' dialogue runs as before. An ally answering an ally is told never to insult or threaten them.
- Feature
THE NARRATOR HAS VOICES. One manner, Pratchett's, was written into the Narrator; the builder now offers eight — wry, Homeric epic, sword-and-sorcery, high and elegiac, cynical, gothic, Kotliarevsky's burlesque and Gogol's folk grotesque — each a card of rules and original example sentences in both languages, since a small model imitates a manner it is shown, not a name it is told. The cold open, each round's chronicle and the scene beats take the chosen voice; the creatures keep their own. "Let the ground choose" tells a field or a rampart as an epic, a dungeon as dread (Gogol's cellar at a Ukrainian table), the rest wryly.
- Feature
THE TABLE HAS A VOICE. A switch in the settings drawer reads the fight aloud: the Narrator's cold open and each round's chronicle, or everyone's lines, each in a voice for its role. The voices are Piper's neural voices, run in the browser itself through WebAssembly: nothing to install, no server to keep alive, a model per language downloaded once (about 70 MB, the settings row shows the download) and kept by the browser. The voice follows the table's language; in Ukrainian mykyta narrates, lada is the heroes and tetiana the monsters. A line is prepared for the ear before it is read: emoji, quotation marks and callsigns go, a dash becomes a pause, and a name left in Latin inside a Ukrainian line is transliterated so it is pronounced, not spelled. The browser's own voices remain behind it for a language without a Piper voice, or the whole engine by NEXT_PUBLIC_VOICE_ENGINE=browser. Off by default. With the voice on, the fight keeps the voice's pace: the next AI action waits until the queue has been read out (capped, so a stuck voice never stalls a fight), and the Narrator's closing tale on the results screen is read as well. A line is read as prose tags its speech: "Sandor Clegane says:" before the words or "says Sandor Clegane." after them, in the Narrator's voice (present tense in Ukrainian, so no gender is needed), the words in the creature's own voice, a sentence at a time with a beat between; each role has its manner — the Narrator unhurried, a hero brisk, a monster slow and rough — and every named creature keeps a small pace of its own. The player moving on cuts the voice: starting the battle cuts the cold open, the next battle cuts the closing tale. The whole table is one event loop: no voice line is asked for while the voice is still reading, so a chronicle holds the dialogue behind it and the dialogue holds the next chronicle. The next sentence is synthesised while the current one plays, and the beats between sentences are short. The Narrator reads at a natural pace with the liveliest delivery of the three. English is read by Kokoro, a small neural voice far above Piper's — a British storyteller narrates, a hero speaks as their sex, a monster in the low rough throat — in the browser through WebGPU where it has one and WebAssembly otherwise, downloaded once; Ukrainian stays with Piper. One neural player, an engine per language. A dialogue tag is spoken as prose spends it: when a new voice takes the floor, never for the back-and-forth of two. With the voice on, an AI creature acts only once the table is quiet — no line still being written and nothing still being read — so a fall never lands under the last beat's words. A creature's speech bubble stands while its line is queued, read and for a beat after, instead of fading on a timer under the voice. The voices run in a Web Worker: synthesis used to freeze the board for the time each sentence took; now only finished audio crosses to the page (measured: five long frames and a 79 ms stall per paragraph on the main thread, none in the worker).
- Feature
CHECKS AND SAVES IN THE STORY. A saving throw against a spell, a grip on concentration held or lost, the sneak-in's stealth, a rally, a lore glance — the log had them with their numbers and the Narrator's digest carried none, so the chronicle never mentioned a spell shrugged off or a sneak that went unnoticed. Each roll is now a fact in words in the round's digest and in a creature's "since your last turn", and the chronicle may spend a word on it.
- Feature
HOW A CREATURE SPEAKS IS ON ITS SHEET. The voice prompt now carries a manner of speech read off the scores: the register by INT on the A1 to C2 scale (an ogre in broken three-word bursts, a sage in exact, turning sentences), the shape from the pair of scores that stand out (grunts and threats, proverbs in broken speech, precise but pedantic, charming and simple, quick wit), and the idiom of the best talking or lore proficiency (Intimidation menaces, Persuasion smooths, Religion borrows scripture, Nature speaks in weather). Ordinary scores say nothing.
- Feature
THE OPENING HAS SOMETHING TO HOLD, AND A SKIP. The cold open's facts now name what is on the ground — a road, a stream, headstones, a ruin — and what the party came for; six more angles join the catalogue (the wager, the notice read aloud, the omen misread, the map that lied, the thing not to touch, the one who has been here before); and the Narrator is held to the facts — two of them named as they are, a joke from them and never from a pantry, an ending that points into the fight. A quiet Skip sits under the scroll while the opening is still typing.
- Feature
THE WHOLE RANGE OF A FIGHT'S TALK. A line was a taunt or a wisecrack and little else, and companions were held to politeness. Now a creature may blame whoever missed, joke at an ally's expense, SHOUT an order or a warning, bargain or plead when the fight turns, and scream in rage, pain or fear when it hurts — the character and the moment decide, and a wounded creature sounds wounded. Companions never wish each other harm.
- Feature
THE BATTLE IS CACHED, NOT JUST THE PRIMER. A decide prompt opened with the acting creature's wounds and position, so the model's prefix cache stopped at the primer and the whole body was evaluated on every call. Now a BATTLE BRIEF comes first — the roster's cards, natures, spells and features, the place, the difficulty, the same text on every call of the fight for every actor of a side — and only the TURN block after it varies; the voice prompt likewise opens with the fight's transcript, listener-neutral and growing by one line per reply, and names the speaker after it. The token badge shows the cached share of prompt tokens instead of a call count, and the transcript logs it per call.
- Feature
FOUR MORE VOICES FOR THE NARRATOR, from the canons the heroes come from: Martin's grim court chronicle (close third person, weather and heraldry as fact, a blow that costs what a blow costs), Rowling's school-story wonder (warm and quick, the magical detail treated as furniture, courage noticed quietly), Abercrombie's gallows realism (the fight from inside one skull, ugly and clumsy and tiring, a hard laugh at the wrong moment) and the saga voice of the Eddas and Beowulf (terse past tense, deeds before feelings, fate said as weather). Each with its rules and original examples in both languages, in the picker beside the eight.
- Feature
NARRATOR FIGHTS, SOLD BY THE FIGHT. A pack of Narrator fights (forty for ten dollars, a hundred for twenty — data, in tiers.json) lands in the account's bank and never expires: a fight is paid from the plan's own allowance first — the free fights, or a subscriber's month — and from the bank after, never from both, and a refresh or a resume finds it already paid wherever it was paid from. The admin panel grants a pack by hand and shows the bank until a checkout exists; the builder counts banked fights among the ones left.
- Feature
ENGINE VS NARRATOR, SIDE BY SIDE. The statistics page splits the recorded games by who played the monsters — the built-in AI or the model — and sets the two columns against each other with the difference beside them: rounds and minutes per battle, seconds per round (where the Narrator's think time shows), damage dealt and taken per hero, heroes down, the action mix as shares, reactions, target switches, shuttles and idle turns. The copied stats carry the same sheet. The playtest telemetry now tags the finished battle and the second battle with whether the Narrator played, so a session can be filtered by it when the question is who comes back.
- Feature
THE LOCAL MODEL IS QWEN 3.5 9B. Baked against the 8B on the game's own prompts: the same JSON discipline on decisions, livelier dialogue and chronicle in both languages, about a fifth of a second more per decision, and a smaller footprint on the card — 5.6 GB resident at 8k context. It is the Ollama default now; any Ollama tag still works through LLM_MODEL, and the bring-your-own-model rule (ADR 0030) stands.
- Feature
THE NARRATOR, MEASURED IN THE REAL GAME. A browser harness plays every board of a set twice from the same link — the built-in AI, then the Narrator — with the intro, the turn loop and the model routes exactly as a player has them, presses the opening's Begin on the Narrator's side, ends a fight only when the app saves its record, and pulls that record out of the browser; a fixed party of four with the same gear on every board, so nothing changes but the field and who plays; a third arm plays the model on the monsters only; a stalled fight leaves its screenshot, its screen and its console beside the results; a progress bar (npm run dm-compare:progress) shows each set's score, pace and finish. The comparison gained the measures of how varied the play was — distinct kinds of action, spells and features, healing, crits, saves forced, and the close wins — beside rounds, damage and the action mix. Two hundred deadly fights later: the model's monsters play like the engine's, and the model playing the heroes is what costs fights.
- Feature
THE NARRATOR COMMANDS, THE ENGINE FIGHTS. Measured over two hundred deadly fights, the model picking one creature's turn from a menu played like the built-in AI on the monsters and worse on the heroes, at a hundred and twenty calls a fight — the unit of thought was wrong, since a game master thinks in rounds and sides. Now, with the round plan on (ai-tuning llm.roundPlan, NEXT_PUBLIC_LLM_PLAN), one call per side per round asks the model for an order per fighter — focus that hero, pin the brute, finish the dying one, guard the healer, heal, buff, hold, rush, retreat, regroup, hide — from a brief that prices every fighter's odds against every foe the way the rules would roll them, and the engine's own order strategies carry the orders out: a hero's order rides where a commander's does, obeyed without a roll and consumed in silence, a monster's where an elite's squad order does, on every monster. A bad order drops that creature to its own judgment, a late plan drops the side, and a plan goes stale — and is asked again — when the round wraps, the fight changes, or anyone falls or arrives, so the player's own moves are always in it. Each side plans from its own view of the board and never sees the other's orders; the commander's shouted call reaches the feed and the voice. The per-creature decide calls go quiet under it: about two calls a round instead of one per creature. And the comparison can now judge how a side FOUGHT, from the log alone, party and monsters apart: focus fire, target spread, timely heals, withdrawals, opportunity attacks suffered, kills secured. The design is docs/PLAN-narrator-commander-2026-09.md.
- Feature
THE NARRATOR MEASURED DECISION BY DECISION. Beside the fight-level arms, a headless probe plays seeded fights under the engine and at every AI turn with a real choice has the model rank the same legal menu on the identical state: how often the engine's pick is the model's first choice, how often it is in its top three, how far down it sits, and what kind of disagreement it is — the same foe from a better angle, a spell over a swing, a walk over a javelin. An engine walk that ends within reach of a foe the menu offers a charge at is read as that charge. With rollouts on, the engine's turn and the model's first choice are each played to the fight's end under the engine with the same dice, so a different decision is asked whether it made a different result. Every sample carries the model and the prompt version, so two models are compared on one file.
- Feature
THE EXPERT YARDSTICK, THE LOOKAHEAD, THE SCORED BRIEF. What an experienced player would do is now a number: for every line of a menu the engine plays it and the next few rounds a few times with different dice, the best line is the expert's, and any player’s pick — the engine’s own turn, a model’s first choice — is graded by how often it is that line and how much it leaves on the table. A probe run is graded from its samples alone, the fights being deterministic on their seeds. With LLM_LOOKAHEAD=1 the same rollouts are written on the menu the model ranks, every line told where it leads. And the commander’s brief carries a FOCUS TABLE (what the whole side would land on each foe this round and whether that drops it) and the THREAT ORDER.
- Feature
FREE DICE, ON A DIAL. A battle's dice are a stream rooted in the encounter's seed, so the same arena code replays the same fight and two players can be compared on one board. Some tables want the opposite: the settings drawer's Free dice switch opens every new battle on a stream nobody could replay; a resumed fight keeps the stream it had. The comparison harness takes the same dial (DMCOMPARE_DICE=random) and stamps each row with it.
- Feature
THE ACCOUNT SAYS ONE THING. A user's document carried a paid bit beside a lifecycle of “none”, roles mirrored from elsewhere, and a fight count that stopped the day the account was paid. Now every document carries a narrator block — plan, paid, status, fights used in all and this period, the ceiling in force, the bank, the roles — derived by one function from the record and stamped by the server on every change; a console edit is re-stamped by the roles-sync trigger. A paid bit with no lifecycle reads as a grant, unpaid is never active, the tier’s roles ride on the paid bit, and every Narrator fight is counted whether or not a ceiling gates it. The server gate, the client hook and the trigger read the same block, and a one-off run (MIGRATE_NARRATOR=1 npm run migrate:narrator, with MIGRATE_NARRATOR_DRY=1 first) stamps the accounts that exist.
- Feature
THE BOOKKEEPING LEAVES THE ROOT. The subscription record with its provider and customer ids, the Narrator ledgers and every purchase, grant and pack now live under users/{uid}/billing/ — server-only, with an append-only history — and the root document keeps the narrator block, the account's state at a glance and the only thing the owner's client reads. The account page shows the block; the admin panel reads it; a console edit under billing/ re-stamps the root through a Cloud Function; the migration moves what is still on the root and, when told, clears it.
- Feature
THE USER CARRIES THE USER INFO ONLY. The narrator block leaves the root too: it lives in users/{uid}/narrator/account — the owner reads it, the server alone writes it, a hand edit there is re-derived by a Cloud Function — and the root document is identity, roles mirror, consent and the last visit, nothing more. The same subcollection will carry a user's own model choice and a reference to their key when they bring their own Narrator. Every account is born with its books and its block; the migration moves a block still on the root and, when told, clears it with the legacy billing fields.
- Feature
BRING YOUR OWN NARRATOR. The account page's new Narrator view shows what the AI Game Master may run on this account and lets a player bring a model of their own — Claude, any OpenAI-compatible host, or an Ollama — on their own key. The key is never stored: it lives in that browser and rides each Narrator call as a header, the route builds the provider for that one call and forgets it, and the account keeps only the model's name and the key's fingerprint (users/{uid}/narrator/llm). Fights on your own model are not counted against the allowance; the health probe asks your endpoint; a hosted backend without a key is refused so nobody's request spends the house key. Forget clears the browser and the reference together.
- Feature
THE ROOT COLLECTIONS ON RECORD. The console lists a collection only once it holds a document, so a fresh project showed users alone and nothing of the five collections the code reaches for. Every root collection is now named in one list and opened with an _about marker — what it holds, when the books were opened — by npm run firestore:seed; the marker carries none of the fields a rule or a query gates on, so no client sees it.
- Feature
THE FINISHED BATTLE IN THE CLOUD. A signed-in account's games are kept in Firestore as well as on the device: every finished fight is filed as games/{gameId} — the full record the statistics read, with who fought it, the story it belongs to and the code that rebuilds it — and users/{uid}/games holds the account's pointers, so the history and the statistics follow the account to a new device. The device's own copy stays as it was and a guest's games stay on the device. A story several players share has its own document with its participants, and every game in it names it.
- Feature
NOBODY LEAVES THE FIELD — THE AI FIGHTS THE GROUND. In a deadly delve the Narrator had four heroes against eighteen and ordered focus fire until all four were down; the first answer, a flee order with a floor that sounded it, routed a party that was winning an open field in round 3 and left everyone dashing at a sealed border for thirty rounds. The AI never sounds the retreat now — only a human does — and a side the field is against uses the ground: the brief prices the trade both ways on real numbers (a foe's sheet at the fraction seen, only bodies within a move and a dash counted) and says when the field is against you; the plan has a kite order for both sides (strike and step out of reach); a shooter or caster with the pack closing climbs the hill or the old wall within its move, where no grounded biter reaches; caltrops go down at sixty feet on a losing field; control spells come before damage. The human's retreat runs to an OPEN border cell (the carved exits, never the sealed rim), a runner with no way out fights on, and a bloodied runner still drinks before running. A pack ordered onto a body on high ground no longer idles at its foot: a hill is out of a grounded blade's reach, so the pack takes another target, and a plan is asked again after a round in which the side landed nothing.
- Feature
ONE GAME, ANY SEAT. The filed record now says who played whom: each account's chair (a hero, or the Game Master's) and the hero rows carry the player's id, merged as every browser at a table files the same game. A signed-in account's solo fight is snapshotted to the cloud as it goes — once per turn, the log trimmed — so the Solo tab lists it on any device with a ☁ and resumes it from the fresher of the device's copy and the cloud's; a guest's fights stay on the device. And a solo fight can be opened to friends mid-fight: the ☰ drawer's Play together hands the board as it stands to the referee under the game's own id, shows a six-character code, and a friend who types it on the Play together page takes a free hero and lands straight on the shared board — the host keeps their own hero, a fallen hero is not on offer, and with no hero free the table is full.
- Feature
THE RECORD KEEPS THE SHEETS, NOT JUST THE NUMBERS. A filed game said a level-2 party dealt 121 damage and could not say whether that was a fighter in plate or a wizard with two slots. Every game now carries the party as it stood at the last round: each body's class and subclass, level, hit points and armour, who drove it and whether they walked away, the weapons and the gear still in the pack, the attuned artefacts, the spells known, every slot with how many survived the fight, the hit dice left for a short rest, and the features on the sheet. Companions and summons are in it; a wave that never arrived is not.
- Feature
THE RECORD KEEPS THE BILL. A game said what was done — casts per spell, damage, heals, potions drunk per side — and what remained on the sheets, but never what the fight SPENT: a won battle that emptied the party read like one that cost a cantrip. Every game now carries the bill, the opening board minus the closing one: slots spent by level, hit dice burned on a breather, the limited-use pools drawn down (rage, channel divinity, bardic inspiration, focus, sorcery points, second wind, maneuver and psionic dice, wild shape, luck) and the once-per-fight cards played, the consumables that left the pack by name with what is still carried, and the arrows loosed — for the monsters as well as the party, with each side's totals for a glance. A shared fight carries its own opening on the board it is played on, so a friend who joins halfway is not costed for the half they missed; a body that arrived with a later wave, and a fight whose opening is not at hand, are left out rather than guessed.
- Fix
BOTH ARMS, FROM EVERY SIDE. Facing the viewer, a raised shield arm turned in behind the torso and the figure stood one-armed; the hulk's guard did the same; a cast threw one arm up across the body and behind the head; a strike crossing the chest vanished under it. An audit of every two-legged body and every giant through every clip in all four facings found the causes, and the rules are three: the arm the viewer sees on the left turns the other way, an arm raised above the shoulder goes up on its own side, and facing the viewer both arms paint over the chest. The dragon's wings flap as a pair now too. Facing left, a giant keeps its weapon in the body's right hand like everyone else, and every hulk's profile face sits forward against a nose, so a head is seen to look where the body goes and not back over its shoulder.
- Fix
HEADS AND BOOKKEEPING. Heads are ovals with a neck, eyes with a lid and an iris, a nose's shadow, ears, and a helm with a rim, cheek guards and a nasal instead of a filled triangle. The Figure Lab arms a creature as its stat block does when you switch to it, and its shield, helm and hood boxes take the gear off as well as put it on. The chibi rig — committed with its parts and test but no rig, builder or type entry, so the typecheck had failed since — is wired: the humanoid's joints under a head half the figure's height, chosen by the lab's Chibi school, on no board yet. The painted and Blender-rendered sprite experiments are removed from the game tree: the modular sheets multiplied races by classes by weapons by armours by moves and were never going to be maintainable; the figure is generated from code, and only from code.
- Fix
THE NARRATOR SAYS WHY IT IS OFF. A guest plays two narrated fights on the house through the anonymous account the app takes for every visitor — and with the Anonymous sign-in provider off in Firebase no visitor got one, so every Narrator call was refused for want of a session and the fight fell back to the instant AI in silence, while the builder kept promising two free fights. The provider is on again, and the builder no longer lies: a browser with no session at all — not even a guest's — reads "no session — sign in to use the Narrator" and the card is off, instead of a Narrator gated until you log in with nothing saying so.
- Fix
THE UKRAINIAN LOG READS UKRAINIAN. A guest's adrenaline rush printed "surges на adrenaline … [1 le фт]" — the feet rule fired inside "left" — and a spell's condition, the muster's "steel is drawn", the roll's "[disadvantage: long range]" tag and its reasons all stayed English. Each is translated now; a condition laid by a spell takes its name from the same vocabulary the tooltip shows, so "Чудова is faith-shielded" reads "Чудова: Щит віри". The board's zoom steps a shade gentler, by wheel and by button.
- Fix
A LINE NOBODY HEARD COSTS NOTHING. A voiced line was charged against the battle's ceiling and the speaker's cooldown the moment it was sent, and a call the model never answered — a timeout, a gateway 500, an empty reply — still returned nothing. On a slow gateway that spent the fifteen lines a battle gets on silence, and the table went quiet after the opening ("almost not have the speaks"). A line that never lands now gives its charge back: the count comes down and the speaker may try again.
- Fix
THE LAIR BELOW IS PRICED LIKE ANY OTHER DUNGEON. The sub-dungeon a field hides was garrisoned against the party as it came down — and the pricer reads hit points, so a party that arrived bloodied from the fight upstairs found one weak goblin in the whole lair. It is priced against the party at full strength now, by the same rule as every other dungeon; what you spent upstairs is yours to carry down, not a discount on what waits there.
- Fix
THE BUILDER ASKS THE MODEL, NOT THE DOORMAN. "LLM master" was offered whenever the backend LISTED its models — three processes answering proves the models are installed and nothing else, and a gateway stuck two minutes on a hung generation kept the card green the whole time ("llm currently not respond but we allow to select it"). The card now lights only once a warm-up generation has actually come back, the same warm-up the first turn wants anyway, and the builder keeps checking while it is open: a backend that dies after you arrive reads "model not answering", and one that comes back is woken again.
- Fix
THE MENU SAYS WHAT A PICK COSTS AND WHAT IT BUYS. The Narrator's creatures choose by the label on each option, and the labels misled: "IN REACH — hit it NOW" was stamped on a foe 95 feet away because a javelin could reach it, Rage sat beside the swings as if it spent the attack, a grapple read "pin them in place" with no odds next to swings priced at 70%, a save spell said what it does and never how likely the target shrugs it, the plan's "PIN" read as grapple, two hints named two targets in one breath, and a torch was offered under the open sky. Now melee reach is the loud tag and a bow's range a quiet one, [bonus] and [free] options say they keep the attack, a grapple carries its chance to hold and remembers a foe that already twisted free, a spell its chance to be resisted, a swing what an average hit leaves of a foe whose wounds are known, the plan says "stay on, keep hitting", one target leads each turn with the other named as what comes after, the last-turn block keeps the save that beat the DC, and a budget line reads the round against a typical fight's length.
- Fix
THE NARRATOR TALKS TO OLLAMA DIRECTLY. The Flask gateway between the game and the GPU box is retired: it forced the model to answer in JSON prose instead of a tool call, ran one model for decisions and another for voice so one GPU swapped weights before every bark (the swap alone blew the voice deadline), and added a third timeout to the chain. The game now reaches Ollama through the tunnel itself, one Qwen3 8B model for both roles, thinking off, and the reachability probe sends the same address and credentials the decisions do, so a tunnel locked with basic auth no longer greys the Narrator out. The token tally on the strip reads Ollama's own counts, so it did not go blank with the gateway. The context window is pinned at 8k on every call: left to its default, Ollama loaded the model with a 40k window whose cache outweighed the weights and spilled part of the model onto the CPU.
- Fix
NOBODY PARROTS. A creature handed the exchange and told to answer its last line answered by copying it — an orc, a hero and a goblin all said the same sentence in one fight, each copy landing in the log to be copied by the next, and the Narrator fed those lines as its story reused its own simile twice. The prompt now asks for the answer in the speaker's own words and forbids lifting a phrase or a picture; the model's own sampling is told to penalise repeating what it was shown; and a deterministic guard catches a copy anyway — a line sharing four words in a row, or most of its words, with anything it was shown is asked again with the copy named, and a second copy is silence.
- Fix
THE COLD OPEN IS A COLD OPEN. Every voice prompt ended with "give one short line", the opening's included, and the model obeyed that over the primer's three to five sentences, so every battle opened on one sentence — and at the quip's sampling heat that one Ukrainian sentence came apart into a stutter. The opening and the scene beat now close with the length they are allowed and run on cooler prose sampling; the one-liners keep their heat. Every voice call now carries an output ceiling a little above what its line can keep — a dialogue line had none and ran several times longer than a decision — and a line the ceiling cuts is salvaged rather than lost.
- Fix
THE BUILDER'S PICKERS ARE THE PAGE'S OWN. A native select opens the platform's popup, not the page's: on Windows it came up white with the page's light text on it, and the Narrator's voices were unreadable. The arena, size, scene, crawl-length and Narrator-voice pickers now open a list of the page's own beneath the same field — dark, with a hint line per voice — with the arrow keys, Enter and Escape doing what they should.
- Fix
CONCENTRATION IS THE CASTER'S, AND IT IS NAMED. A creature deciding its turn read "concentrating" on whoever wore a concentration spell — the fighter under the cleric's Shield of Faith — while the cleric holding it read nothing, and the word never said on what. The caster is now tagged "concentrating on Shield of Faith", the wearer only wears the buff, and the line that drops concentration names the spell it would end.
- Fix
THE CHRONICLE WAITS ITS OWN WHILE. The cold open and the round's chronicle shared the chatter's deadline, and on a slow model a chronicle that took a moment longer was a round the Narrator never told. The prose beats now have their own budget, never shorter than the chatter's and inside the platform's ceiling.
- Fix
THE CANNED BARKS LEAVE THE DIALOGUE. A squad callout ("On Gnoll! Together!", "Elite Dire Wolf Maw is down!"), a turn-start growl, an order's acknowledgment or refusal and a heckle are the engine's flavour, not the characters' words — yet they were read as speech: the model answered them, the table voice read them aloud and the feed showed them between the real lines. They are stamped canned on the log; the exchange the model answers, the table voice and (with the Narrator on) the feed leave them out, and the combat log keeps them.
- Fix
A HERO KNOWS ONLY WHAT THE PARTY KNOWS. A foe still "a Beast" on its card was called "Elite Dire Wolf Bristle" by the heroes' callouts and listed by its true name in the heroes' own prompts. From a hero's side the board is now the party's view: an unplaced monster wears the name the party may say, on its entity, in the log's recent lines, in the callouts and in a hero's voiced line; a plan may name it either way. Monsters and the Narrator keep the true names. The feed's speaker column and the spoken dialogue tag name a foe as the party knows it too — "Cultist", as on its card — and a hero's exchange hears the same; the monsters and the Narrator keep the truth.
- Fix
THE AI-LED JOURNEY GOES DOWN. On a wilderness camp field the way down is a hidden mouth a human searches for and descends with a button; an AI-led party had neither, marched the frontier of a huge field forever and the field held its victory — the rounds never ended. Once a floor is cleared the party heads for the way down whatever the frontier says: a secret mouth is walked toward until a step finds it, a found way is walked onto by the leader while allies hold beside it, and an AI-driven leader on the mouth goes through as the button would. A downed ally still holds the party.
- Fix
THE NARRATOR ON A SHARED LINK. A battle opened from a link, a reload or a harness took the Narrator from the builder's store, whose default is off — so the ☰ toggle said on and the fight played without it. With nothing staged, the saved preference decides, as the expedition screen already does; the builder's own choice still wins when it staged the fight.
- Fix
THE FIRST CALL WAITS FOR THE GUEST. A fresh browser asks for the intro's warm-up and opening on the same mount that starts the anonymous sign-in, so those calls went out unsigned and were refused: a first-time player's opening was always the stock line. A model call now waits a few seconds for the session to land before going unsigned.
- Fix
THREE WAYS AN AI-LED PARTY STOOD STILL FOREVER. The column contested a leader far from its goal even when the leader walked straight at it, and an AI leader, leashed to its balking followers, shuttled between two cells for a thousand turns — a leader is contested only when they stand farther from the goal than the ally asking. On a won field that hides a way down, with a comrade stabilized at 0 HP and nobody left to raise them, the party idled rather than abandon him — it now leaves the field and takes its win, and while a comrade is still dying the medic comes first. And on the zoned field the march at a sleeping camp never fired — it was written for the quest wilderness and held back by any leader, even an AI one — so a party that had cleared one camp ended its turns at the field's edge while the other slept on; the march covers both fields and only a human leader holds it back.
- Fix
THE COMMANDER IS ASKED AGAIN WHEN THE FIGHT CHANGES SHAPE, NOT EVERY ROUND. A round plan remembers the front it was given for — who is down, who is bloodied, who stands within a blade's reach of whom — and a new round with the same front restates the last orders unasked; someone falling, arriving, bloodied or closing in brings the commander back. A thinking commander is asked to think briefly. Ollama is given ONE context window per process (LLM_NUM_CTX): a thinking call at 16k beside a voice call at 8k made it reload the model on every other request, and a night of plans timed out.
- Fix
THE FLOOR UNDER THE COMMANDER. On the one open board the engine wins and every Narrator arm loses, the plan log showed the commander ordering an unhurt archer to retreat eleven times, healing the one hero at full HP while two were bloodied, and re-planning three times a round. The validator now holds the line a table would: a retreat on a hale fighter is dropped, a heal aimed at a hale comrade while another is bloodied goes to the most wounded, a bloodied comrade with an idle healer or a critical one with nobody told to heal gets the healer, and a side is planned once a round. Every plan is kept on the encounter in order, and the browser harness can keep the fight's last save (DMCOMPARE_SAVE=1) for a round-by-round reading of a lost board.
- Fix
THE TABLE AFTER THE LAST BLOW, AND WHO SHOUTS. The fight ended in silence: the Narrator spoke on eleven kinds of moment and the end was none of them, and the per-battle ceiling was spent by then anyway. Now a closing beat fires once when the fight resolves, past the ceiling: how it ended and what it cost, then the winning side's own word. The commander's call was shouted by whoever's turn the plan landed on, so a dire wolf cried “Focus the mages!”; it now goes to a member who can speak, the commander first, and a pack of beasts leaves it to the Narrator. And a table says a full name once: the feed, the voice and the call say Hector, not Hector of Troy, and the bugbear, not the Elite Bugbear.
- Fix
THE MEDIC IN MELEE. A paladin with Cure Wounds and Lay On Hands fought seventeen rounds beside three fallen comrades and healed nobody: the rescue doctrine kept a healer with a foe at arm's length from kneeling, to spare the side a heal-loop, and Lay On Hands was never counted as a heal at all. Now a bonus-action heal goes to the downed whatever stands beside the healer, because it costs no swing; a commander's heal order with the comrade out of reach walks the healer toward them instead of dropping; the floor sends the healer to a comrade on the ground before any wound, and the brief names the DOWN; and the call names nobody by callsign.
- Fix
THE SIDE FIGHTS AS ONE BODY. The Narrator's round plan had sent one hero at the nearest foe with a bare rush — the sleeping pack in the far corner — and kept him on that wolf for eleven rounds while the other three fought the cultists 150 ft away, nobody able to heal him. Now a targetless rush joins the side's focus target, and an order aimed at a foe more than 60 ft from the body's centre joins that target too while the body has a foe within reach; a scout's hold and a dying fighter's retreat stand, and when every foe is far the whole side travels. The same rule commands the monsters. The primer says it in one line, and the round tells the commander who is out of the body and how far.
- Fix
THE SETTINGS RESPECT HOW THE BATTLE WAS BUILT. A fight set up with the AI playing the whole party showed Watch mode OFF in the drawer while nobody was at the reins, and a fight built with the Narrator showed the Narrator OFF because the drawer read the saved switch, not the battle. Now the watch flag starts as the battle was built, switching it off hands the sturdiest hero to the player, the drawer's Narrator toggle shows the running fight's Narrator and is locked until it ends, the builder's Narrator choice becomes the saved switch, and a fresh builder opens on it.
- Fix
THE CONSOLE IS THE SOURCE OF TRUTH FOR THE NARRATOR'S FIGHTS. The narrator block's limit, period count, lifetime count and bank were a stamp the server kept true — an admin who raised a limit or topped up a bank in the console saw it written back within the minute. They are the account's numbers now: a stored block on the same plan and period keeps them through every derivation, the gate and the consume route charge against them, and no trigger overwrites them; the plan, the paid bit and the status still come from the billing record. Two more fixes: the builder's Game Master picker could not leave a locked Narrator card (a setter minted every render re-seeded the saved choice on every change), and a signed-in account's games never reached the cloud — the route capped the game id at 128 characters while the arena's battle code runs to 200, and the refusal was swallowed; it is raised, and said aloud in the console.
- Fix
A SHARED FIGHT IS RECORDED LIKE A SOLO ONE. A table's game was filed by the referee as a thin row — the outcome, the rounds, who was there — while the numbers and the sheets stayed on the boards that played it: a fight played together had no tally, no roster and no per-hero stats. Every participant's browser now files the full record over that row under the same game id, each with its own chair, and the sheets and the tally rows both name the account that drove each hero. Whoever closes their tab first loses nothing: the others file the same record.
- Fix
A YOUNG RED DRAGON IS NOT A LEVEL-6 FIGHT. The brawl builder admits monsters by the Round-power they are worth against the party, and a party of six halves every share: at level 6 the dragon (a level-8 monster by its own block), the roc and the fire giant slid into a Deadly brawl the party could not win, and Deadly promoted the dragon to Elite on top. The pricer sees averages and a breath weapon is a nova it cannot see; a monster's authored floor is the one thing that knows better, and it holds again — a level-6 party sees nothing above its floor at any band, and the dragon is back on the roster at 8.
- Fix
HORDES AT HEIGHT. Above level 9 the roster's small end is three kinds the role caps stop short of the Band, and the band's two or three elites priced the rank and file out — so the horde roll fielded two giants and a remorhaz, the same fight as any other, and nobody had seen a horde in weeks. A horde is a leader's mob now: any leader worth fielding, then only rank and file after him — the small end of the window, or his own kin from below the floor, up to ten of them — and it promotes the leader alone. A level-12 Deadly horde reads storm giant, troll, three ogre chain brutes, two orc war chiefs and two ogres, priced inside the Band like any pack.
- Fix
THE SCREEN FITS A LAPTOP. Below the 2K desktop the builder and the battle screen scrolled everywhere: the builder's vertical rhythm — header, tabs, steps, cards, Start — now breathes with the screen's height (full at 2K, tighter on a laptop, never below a floor that still reads), a card whose content runs past its row scrolls inside its border instead of cutting the party roster off, the stat block is a third shorter with its −/+ side by side, and Play together rides on the same line as the New battle and Solo tabs. On the battle screen the combat log and the settings drawer thin out on a narrower window and the board keeps exactly their width beside it, the six how-to lines under the turn bar fold behind one line that remembers whether you opened it, the action bar's buttons are a third shorter with their shelves' headings tight to their rows, and End Turn is pinned under a rule at the foot — a primary control, never beside a Dash where a hasty click lands.
- Feature
THE TOKENS LIVE. Every hero and monster on the board is now a pixel figure composed at draw time from a rig of parts — head, arms, legs, torso, weapon, shield, tail — each turning at its own joint, the head and the arms riding on the chest, the weapon in the hand and the shield on the forearm, so a breath lifts everything that hangs on it and no seam opens at the shoulder. A figure has a side, a front and a back: seen from behind it shows its shield and not a sword through its spine, and the helm and the hood are domes, not slabs. Every pose is drawn on a grid with a margin round the figure, so a swung blade, a raised staff or a fallen body is never cut off at the cell's edge, and every part keeps a one-cell margin of its own so the outline closes round a helm's crest, an axe head or a dragon's snout instead of stopping dead against the ground. Turns are drawn in five-degree steps and shifts in whole cells — the pixel-art way — which ended the weave and the glint that used to crawl across a standing figure; and every loop is a schedule of single beats, one part, one field, one frame at a time, so an idle breathes in three beats and out in three, a guard flexes the blade between its breaths, and no loop stands dead still while its bar runs. Each body starts its loops at its own phase, so a pack of wolves no longer breathes in step.
- Feature
EVERY CREATURE MOVES IN ITS OWN MANNER. The walking dead SHAMBLE — a lurch, both arms out, the head lolling. A skeleton RATTLES: a step that snaps and holds, single-bone arms with a gap at the elbow swinging late, a skull on a spine, a chop wound and held then snapped, and a death that drops it into a heap of bones that stays a heap. Goblins SCURRY, kobolds SKITTER with a hop and a lashing tail, hobgoblins and veterans MARCH with no bob, orcs and bugbears and gnolls are BRUTES that heave and swing wound high, the troll LOPES, ogres and giants STOMP, lizardfolk PROWL, and the wolf pack puts its nose to the ground at rest. The beasts got carcasses of their own: a DRAKE for the dragon and the roc — a long body on four legs that trot on diagonal pairs, a raised neck, a head in profile with open jaws on two rows of teeth and horns swept back, membrane wings, a spade tail sweeping out behind the rump — that rears on its hind legs with its wings thrown up before it bites; an ARACHNID for the spider and the remorhaz with two legs on every limb; and the mimic's CHEST, whose lid is its head, nearly still but for one tell a loop before it throws the lid up to snap. The wolf is a wolf in profile now: a low back humped at the shoulders, a lowered head with a muzzle and two ears, slim legs from a haunch under a tucked belly, a bushy tail carried out behind.
- Feature
THE PARTY IS MEN AND WOMEN. A hero's sex is read off its name — the registry marks its women among the book characters, and a name it does not know fixes its own coin — and a rolled party deals a name of a coin-flipped sex, so the four who walk in are men and women alike. A woman is drawn with hair flowing to the shoulders whatever her people wear, a chin that tapers, red lips and a waist a column narrower above the belt, in every view. The Figure Lab has a man/woman toggle. Known gap: the painted portrait sprites do not change with the sex, and the warriors' registry has only two women.
- Feature
THE STEEL SWINGS ITS OWN WAY, AND IS CARRIED ITS OWN WAY. A figure's attack is picked from the weapon it holds: an edge SLASHES in a wide arc, a point THRUSTS — a short gather, then the whole body behind the blade with the tip level and forward — a head SMASHES with the overhead chop, and a bow DRAWS the string hand back past the cheek and looses. A shortsword and a rapier thrust though drawn on blade parts, a monk still boxes, a zombie still lunges, and a hobgoblin handed a spear thrusts. At rest a one-handed blade is held at the low ready, the point forward and down beside the leg, while a spear, a staff, a bow, a great blade and a mace stand upright in the fist; the attack, the guard and the cast are converted to the carry, so a low blade rises to its wind-up and strikes where the clip says. The shortsword is a straight stabbing blade now, not the longsword's diagonal cut short.
- Feature
FLIGHT. A body the engine calls airborne — the flying feature a dragon or a roc is born with, a heaven-touched hero's revealed wings, or a flying condition a spell may grant — hovers where it would stand and flies where it would walk: the drake rides four cells off its shadow on a swell, wings beating through a full stroke, hind legs tucked, tail streaming; anyone else lifts three cells off the shadow with the legs dangling and the arms out for balance. The shadow stays on the ground. Beside a foe a flyer still guards, on the ground, wings up; a downed flyer does not hover.
- Feature
GEAR IS PAINTED ON THE SHEET. The character sheet, the hub card, the setup summary and the weapon shop show a painted mark for the weapon a hero wields and the armour, shield, helm, coif or hood they wear, in place of a word. Known gap: the handaxe has no painting yet and shows an empty fist.
- Feature
A WON FIELD'S HIDDEN WAY DOWN CAN BE SEARCHED FOR. When the last foe falls on a field that secretes a way down, a passed Search within reach uncovers the stairs, and a search that finds nothing whispers which way the ground sounds hollow; stepping onto the mouth still reveals it. The party of the home page's all-AI show, which has nobody to answer the held field's question, answers it by leaving — before this it passed the turn from hero to hero forever, which was the intermittent auto-battle timeout.
- Fix
MAGIC MISSILE'S DARTS FLY. The board draws a cast off the log event that names the spell and the target, and the volley's event named neither — so the darts never existed on screen, in either token view, though the sheet counted their damage. The volley, the single auto-hit lump and the single-target save spells all name themselves now. Two board guards came out of the same trace: a spell leaves the caster's raised hands in whichever token view the player chose, not the build's default, and the pixel-figure driver survives one bad figure instead of freezing every animation on the page.
- Fix
A LAID ZONE'S TICKS COUNT FOR ITS SPELL. The after-action sheet credited a spell only with the damage on its cast event, and a zone spell deals nothing at the cast — a cloud of conjured blades and Spike Growth bleed their victims round after round, one hazard tick at a time. Those ticks are filed under the spell now, so the row shows what the zone did instead of a dash.
- Fix
A SAVE SPELL'S BADGE SAYS SAVE. Hovering a foe with Sacred Flame armed quoted its odds under the caption 'hit', as if it were an attack roll against armour — the math beneath was the target's real save against the caster's DC, but the words lied, and the damage span hid that a made save deals nothing. The badge now reads the save and its DC, the chance the target FAILS it, and what a made save still takes: half, or none. Attack rolls keep 'hit'.
- Fix
THE CRIT NAMES ITS DICE. A rogue's critical hit read in the tray as '3 +4 = 7 Base / 6 Crit / 6d6 … = 15 Sneak Attack', and it looked like a crit bonus of six and a Sneak Attack counted twice. Both were the book's rule — a critical hit rolls all of the attack's damage dice twice — and both read as a mistake. The crit's own line now names its die, '1d6 6 Crit', so the six is plainly a thrown die and not a bonus; and a source the crit rolled twice is written as its own handful, twice — '3d6 ×2', not '6d6' — for Sneak Attack and for every rider the crit doubles alike. The sums are what they were.
- Fix
ONE SPELL A TURN. A spell cast with a bonus action is the turn's only spell but for a cantrip with a casting time of an action — the book's rule, 2014 and 2024 alike — and the engine only asked whether the action was still free, so a cleric cast Bless and Healing Word in one turn, a ranger Hunter's Mark and Animal Friendship, and Shield of Faith went out beside Blindness. The guard enforces it, the legal list closes the gate by name so neither the bar nor the AI offers the second spell, and the sheet says why. A free Hunter's Mark re-mark is not a cast.
- Fix
THE DRUID STOPS RE-LAYING THE TREES. An AI Circle of the Land druid did the same two things every round of a fight and nothing else: bought a Wild Shape use back with a spell slot, then spent it and her action on Nature's Sanctuary — around the trees she was already standing in. The sanctuary stands for a minute; a second one is neither legal nor accepted while the first stands under her.
- Fix
A LEFT-FACING FIGURE TURNS ON ITS JOINTS. Facing left mirrored every pivot as a cell, not as a point, so each joint sat one column off its mirror and every left-facing turn swung about the wrong spot — a shoulder that lifted the arm a cell wide of the body, a hip that stepped the leg past the foot. The mirror is a point now, and the two facings turn on the same joints.
- Fix
STANDING UP AND FALLING DOWN ARE TURNS, NOT SNAPS. A body knocked prone lay across its plate the instant the state said so, and stood the same way. A knockdown now drops the figure onto the plate in a quarter of a second, and a rise brings it back up in half of one.
- Fix
THE ZOOM STAYS UNDER THE POINTER. Zooming out lurched the map by up to thirty cells at the scale where the whole map began to fit the view, and once more on the first notch back in — with the camera follow off. The camera clamp had two rules, some cell under the screen's centre while the map outgrew the view and the map dead centre once it fit, and a wheel step across that threshold swapped rules and threw away the pointer anchor. One rule at every scale now; a small map is centred when a floor opens and when you press Fit, and a trackpad's stacked wheel events no longer collapse into one step. And your own hand stands the follow down for the rest of that walk: a zoom-out used to stand it down for a single frame, because the bigger window held the walker again at once, and the view resumed chasing the moment you pulled back to look around. And the follow no longer shivers at 3×: each step used to be computed from the camera as the render saw it and landed a frame later, and at 3× the walker's render and the camera's render interleave, so every step was taken from a camera two steps stale and two eases chased the same target in alternation — a zigzag of a few pixels each frame. A step is now taken from the camera as it is when its frame lands, so the view glides after the walker in one clean decay.
- Fix
The turn bar scrolls without a scrollbar line under its chips, and keeps its height.
- Feature
NOBODY KNOWS THE GIANT UNTIL SOMEBODY DOES. A monster walked onto the board wearing its stat-block name from the first round — Elite Stone Giant before anyone had drawn a sword. Now a foe is a GIANT, a beast, a humanoid — its kind and nothing more — until the party puts a name to it, and knowledge has three doors, all rules the table already plays. On SIGHT, the moment the party first lays eyes on a creature, the best hero's passive lore — Nature for beasts, Religion for the dead, History for giants and folk, Arcana for the strange — meets an identify DC that rides the monster's proficiency bonus, so a goblin is a glance and a giant wants a scholar; the log records who knew it, or that nobody could place it. INVESTIGATE learns the name by an active check, as before. And an ELITE hides in plain sight: it wears its base kind's name and no crown until someone's passive Perception marks the richer gear and the scars, or a close read — Investigate at tier two, a successful Assess — shows them. The turn bar, the token chips, the hidden-enemy card, the walk pill and every reaction prompt say what the party knows; the combat log and its copy are masked the same way, and un-mask the old lines the moment a name is learned — so THAT is what it was. The Game Master's view sees everything, and the Narrator keeps the true names: the rule is about the player's knowledge.
- Feature
THE PARTY REMEMBERS THE GIANT, AND KNOWS A GOBLIN WHEN IT SEES ONE. A kind placed once is placed for good: every hero now carries a BESTIARY — creature kind to lore tier — seeded into every story battle before the first look, carried down the stairs from every floor the run has opened, written home on a cleared run, a retreat, a road fight or a jailbreak, and gone with the hero: a new hero places every giant again. And knowing is a TREE. The content's families are its branches — the Goblin Mage, the Berserker, the Boss and the Hobgoblin all hang off the Goblin, the cult's sorts off the Cultist — so the glance on sight has two rungs: the FAMILY at the goblin's own DC, which shows every sort in view as a Goblin, name only and secrets kept, and the SORT two above it at its own stat block's DC, which names it. Lore learned on a sort covers its family fully, since a specialist is its base kind, and only recognises its siblings. Three doors climb the tiers — the passive glance, Investigate and Assess in the fight, and the corpse: any kind the party killed is known by name at the least — and at the top of the tree, the third tier, you know a kind well enough to pick out its elites at a glance. The hero sheet draws it as the tree it is, family rows with tier pips and their sorts beneath. Quick arena battles without a hero have no memory to read or write.
- Feature
THE VILLAGE TEACHES, AND SO DO BOOKS. Two more doors into the bestiary. Townsfolk now hold lore behind a check — anyone may be asked what folk know of the goblin tribes (History 12), the temple ward what walks the barrows at night (Religion 13), the arcane ward what the tower's books say of giants (History 14) — and a PASSED roll places those families in the listening hero's bestiary, the base kind and every sort of it, because a rumour speaks of the kind and not of one body; a failed roll gets a shrug and teaches nothing. And five TOMES join the wares: Goblinkind, Robes and Knives, The Restless Dead, The Giant-Kin, Teeth of the Wild — sold wherever the arcane trade is kept, found in story chests beside the rings and cloaks, and read from the hero sheet at the hub, where the book is consumed and its families are known to their toughness.
- Feature
EVERY ROAD LEADS SOMEWHERE. A field's roads run between the zones its template drew, and a road used to end on bare grass whenever the zone at its far end had nothing to hold it — a camp zone no war-party came to, because the pack had fewer parties than the template had camps, or a structure zone whose rolled ruin was too big for it ('this roads lead to nowhere, should be forest/cave/village/graveyard'). Three things changed. A war-party's camp zone is now a CAMP, drawn by the quest maps' own renderer in the theme the party's creatures belong to — a goblin nest, an undead barrow with its graves, a beast den, a cultists' lair, a stockade for anyone else — with its gates on the roads that reach it and the party seated inside. A camp zone with no party rolls a WAYSIDE: a hamlet, a graveyard, a cave with its way down shown, a ruin, a copse, a pond in reeds, or a cold campsite. And a structure zone raises the largest ruin that fits it rather than nothing. Stray war-parties beyond the template's camps stand on a wayside's doorstep, never inside a ruin's ring, and the field now names every place it built.
- Feature
THREE QUESTIONS FOR A STRANGER. The one Investigate roll, graded by its total, is three questions on the hidden-enemy card, each a free action and its own check: WHO IS THIS, through the creature's own lore lens — History for folk and giants, Nature for beasts, Religion for the dead, Arcana for the strange — against its sort's DC, which names it; WHAT CAN IT DO, Arcana for a caster, three above that, which shows its toughness and its resistances; READ IT LIKE A BOOK, Investigation, six above, which opens the whole sheet. Hover a question and the card says the lens, your modifier, the DC and the odds. And a bad miss is no longer silence: five or more short of the mark, the party learns a LIE and is sure of it — a decoy name from the same kind of creature, a resistance it does not have, a toughness it lacks — shown on the card and said in the log exactly as the truth would be, until a later success on that kind clears it. The bestiary never hears a lie; a natural 1 still shakes the asker.
- Feature
YOU WON — BUT THE GROUND HID A WAY DOWN. At odds an open field now secretes a delve mouth somewhere on it: a stairs-down hidden in a notch of rock, off every spawn, found the way a quest map's is — by walking close, with the Game Master's hint from further off. When the last foe falls on such a field the fight does not end: the board asks, once — the field is yours, yet this ground hides something; search it, descend, or leave — and the win waits on the answer. A found mouth asks you to go down, the delve below is built when you do, and a delve cleared spends the mouth on the climb out. LEAVE THE FIELD ends it as the win it already was, the results screen says what you walked away from, and the Narrator's closing word is handed the same fact to needle you with.
- Feature
THE GIFT LIST SEARCHES EVERYTHING. The Game Master's give-item control on a foe's inventory was a native select over a handful of kinds. It is a search now: type a few letters and every item and every real weapon in the game filters down, in your own language with the English name as a keyword, keyboard through the list, Enter to pick — and a blade goes into a pocket as readily as a potion.
- Feature
THE RIVER RUNS THROUGH. The field's river was a sine wave drawn straight across the map with every clearing cell skipped, so wherever it met a camp or the muster it BROKE, and a river that stops at a clearing's edge and starts again on the far side read as a row of ponds. Now it is ROUTED: the cheapest way from one map edge to the opposite one over ground where the clearings are dear, open country is cheap and the bank beside a camp is cheaper still — so the water bends around the camps and flows past them, the way camps are pitched by water, and a plank crossing is laid from any camp it runs past to the far bank. The water goes down BEFORE the seam ridges now, so a treeline stops at the river instead of the river stopping at the treeline, and the channel carves through a lake's reed shore to join it as one body.
- Feature
THE LAND LIES IN BANDS. A field's interior clumps rolled their kind block by block — a pond beside a knoll beside a copse — and read as noise. The kind now follows the LIE of the land: a smooth low-frequency field read against the biome's pool in elevation order, so water sits in the low ground, trees run in a belt, and hills gather into a ridge. A forest field may raise no knoll at all, and a plains field may run a whole ridgeline; both are landscapes.
- Feature
CAMPS THAT LOOK LIKE CAMPS. A war-party spawned as a solid block — three ogres asleep shoulder to shoulder on a 2×2 tile. A camp now seats its band SPREAD about its heart, a square of ground between bodies, nearest the fire first; a wild stand too small for that keeps the huddle.
- Feature
THE FIELD FITS WHAT STANDS ON IT. Auto sizing counted heads, so three trolls got a yard built for three goblins and a single ogre had a vast field to itself. The open field is now sized by the ground the pack COVERS — a Large body counts four cells — so a knot of giants gets room to stand and a scatter of small folk keeps the skirmish yard; the field's catalog names the tiers.
- Feature
THE CROSSROAD TURNS. Six layouts laid the same road fan from the same muster slot, and every field opened on the same crossroad. Each template now rolls one of eight ORIENTATIONS — mirrored, flipped, transposed — before its zones resolve, so the muster sits on any edge and the roads fan a different way. Same day: the hamlet a village scene raises is clipped to the map on every side, so a muster by the far edge still gets its homes, and one-cell slices of lake or pond left beyond a bridge or a seam turn to reeds instead of drawing as blue postage stamps.
- Feature
THE LOADING BAR KEEPS MOVING. Between two honest milestones the chase stood still — at fifty percent, waiting on the Narrator, the runner froze mid-stride. The shown progress now creeps toward the next milestone while the real one is on its way, easing off so it never arrives early, and snaps to the truth the moment the milestone lands; the runner and its chaser glide with it.
- Feature
THE LAND IS GEOGRAPHY. An open field's ground was a Voronoi of zone ownership, ridged at the seams and speckled with clumps inside — regions of scattered tiles with walls between them ('still not see better landscape and logical part'). It is decided as a whole now, in layers that each read the ones before. A seeded HEIGHTMAP and a moisture field, bent into basins by the template's lake zones and flattened dry under every clearing. DRAINAGE: the low ground floods into lakes and ponds, the river rises on the highest ground and runs downhill, steepest descent, to the map's edge or a lake, and the banks turn to marsh. FORMATIONS: hills where the land rises, cliff lines on the steep slopes, rock on the plateau tops, never a boulder on its own. WOODS where it is wet and low and the biome leans that way, thinning at their margins over a gradient and eroded into bodies with ragged edges. And a CLEANUP that dissolves every patch under three cells — once on the grid, and once more on the map as it will be seen, after the roads have bridged through a bank and the rim has closed. The ground is decided after the camps, waysides and structures stand and flows up to them, so a camp's ring is never clipped by a wood that came first; the rim seals with what the ground inside it is made of, in runs, never a speckle of two; a spider thicket and a copse are one wood, not a sprinkling; a pond's shore holds together. Every dial is a fraction of the map's side or a height in geography.json, with per-biome shifts, so one set serves every size; the painter draws nothing from the rng; and a suite holds ten seeds to the rules — no fragments, rock and hills above the woods, water below the land, no lone tree, one river running downhill to its mouth. The seam painter, the routed river and the elevation-sorted clumps are gone with their dials.
- Feature
THE GROUND WEARS ITS COVER. Three things from the reference generator's biome read ('the biomes look more or less normal'), in our own tiles. The LEVELS are shares of the map: a tenth of the country floods and a quarter rises into hills on every seed, read off that map's own heightmap, where fixed heights had drowned one seed's field and dried the next; the biome shifts the shares. The MOISTURE knows where the water is: it rises toward every lake, pond and river over nine cells, so the woods and the marsh hug the water instead of ignoring it. And the ground itself wears a COVER: every dry cell is classed from its moisture — dirt where the country is dry, with sand in it here and there, moss where it is wet, the forest floor and the marsh by the water, meadow between — smoothed by two majority passes with every region under seven cells absorbed into its neighbour, so the field reads as a few coherent countries where a four-by-four hash used to scatter patches of dirt and sand at random. The cover is painted as country, never as a built floor, mushrooms grow on the moss where flowers grew on the meadow, a hut's or a ruin's floor still wins its own cells, and the rules never read it. A suite holds ten seeds to it: no cover region under the minimum, the woods on the wet ground far more than the dry, the bank beside the water wet, and the water share inside its band.
- Feature
EVERY MAP IS GEOGRAPHY. The 30-by-20 yard, the small and medium fields and the surface above a delve still came from the old fill — filler patches of hill, tree and rock grown to a coverage target, scattered groves and outcrops, a sine river and square ponds painted as centrepieces ('so this is new?' — it was not). The yard now runs the same landscape painter the wilderness does, gameplay first: the road network is planned, the centrepiece and the props stand, the rampart rings a big map's zone, and then the ground is decided around all of it — heightmap, drainage, hills and cliffs, woods, ground cover — with the spawn columns and the battle plazas kept clear, the road lanes spared by everything but water, a river at the dial's odds, and the roads paved over the ground last, bridging what water they meet; the rim seals with the country inside it. A hamlet's homes stay inside their box now, where before a house could stand in the spawn rows and the party, mustering on its dirt path, sat down in the parlour with no room for an ogre beside it. The old fill, its coverage dial, its filler list and the terrain centrepieces are gone; the yard keeps its buildings, ruins, broken walls, roads and hamlets. The castle's field is the same country: the keep, its glacis and the Site's moat or lake stand first, the geography is decided around them, the roads cut through it and bridge what they meet, and the waves still muster on the open edges.
- Feature
A STRAY PARTY STANDS WHERE IT BELONGS. A war-party the template had no camp for — every camp zone inside the muster's wake radius on a small field, or more parties than camps — was seated at whatever landmark was left, which put two giants and an orc chief at a graveyard ('here more logical undeads than 2 ogres'). The empty zone a stray party stands at is now rolled to fit its kind: the undead at a graveyard or a ruin, the beasts and the spiders in a copse or a cave, the goblins, bandits and hobgoblins at a hamlet or a cold campsite, the orcs at a cave or a ruin, the cultists at a ruin or a graveyard, the lizardfolk by a pond — the nearest empty zone that keeps the muster's distance, taken one party apiece; the other empty zones roll as they did.
- Feature
A PACK CAN BE A HORDE. The pack builder drew from every kind worth fielding against the party, and its first big pick filled the Band in two or three bodies — a frost giant and a fire giant, every time — so a horde only ever came from the multiplier ('it could be a horde, not just 2-3 big'). About one pack in three is now a HORDE at ×1: drawn only from the small end of the window, the kinds it takes five or more of to reach the Band, so the same fight fields a war-party of goblins, wolves or skeletons instead of two giants. Priced exactly as before, since a side's strength is quadratic in its heads, so the Band keeps its promise; the setup screen's hint says so.
- Feature
THE LOWLAND IS A BOG. The only marsh the field painter made was the banks of its water — a ring one or two cells deep — so a marsh map was lakes on grass ('do we build swamp?'). Low, wet ground away from the water is now a fen: every cell within the bog band above the flood level and wetter than the bog moisture turns to swamp, so a marsh map holds real marshland between its lakes, a forest map's wet hollow holds a bog, and a mountain map holds next to none; the biome widens or narrows the band, the cleanup takes any fen under the minimum, and no swamp stands on the hills.
- Feature
THE LANDMARK IS THE LAIR. A war-party the template had no camp for took the nearest empty zone that fit it, and on a 50×40 field that left the ruined ring at the map's heart standing empty while the monsters sat at a small ruin beside the party ('the logical place to position the monsters in the middle?'). The structures now stand before the waysides are rolled, and a stray party's first stand is the map's set-piece — the great cairn, the ruined fortress — whatever its kind, then a structure that fits its kind (a cave for the beasts, a farmstead for the goblins), then a wayside rolled to fit it, then any structure left before the wild; every stand is taken once, at the structure's doorstep, beyond the muster's wake radius.
- Feature
THE TALLY WAITS A BEAT, AND COMES BACK. The end-of-battle result snapped over the board the instant the last blow landed, on top of the death animation; and once closed in a sandbox battle it was gone for good, since only an expedition floor's drawer carried the row that reopens it ('statistic should appear with delay and smoothly', 'if we close statistic we should be able to open it again'). The result now rises a beat after the fight ends — the veil fades in, the card fades up, reduced motion honoured — and at once when the fight was already over as the screen opened; the sandbox drawer carries 'Show the battle tally' while the results are closed; and the 📊 button inside is a toggle, so the table folds away and returns without leaving the screen.
- Feature
THE HOME PAGE FOLLOWS THE GAME. 'Procedurally fresh' is 'Geography, not tiles' now: every fight decides its own land, raises its camps, waysides and ruins, and deals its pack into war-parties or a horde; 'Solo or share' mentions the field sized to the fight and the tally you can always bring back; and the roadmap's 'Story & world' card leads with what comes next — roads that follow the ground, and life in the camps.
- Fix
A MULTIATTACK DRAWS EVERY SWING. All swings of an AI multiattack land in one state update, so their slash arcs and their 'miss' and 'crit' floats were born on the same instant on the same cell and drew as one ('creature use multi attack but in animations it's only once'). Each further swing by the same attacker in a batch now waits a beat, so the roc's two beak hits and the troll's three read as three.
- Fix
THE THIRD TROLL FINDS ANOTHER THROAT. A rusher whose chosen target had no ground left beside it — two brothers already at the cleric's sides, or a one-wide gap a Large body cannot squeeze through — stood with a full action and thirty feet of movement, turn after turn ('troll stay and not attacked'). Its march-to-engage rung now looks for a stand on any living foe, not only the one it had picked, and when the whole fight is out of reach it Dodges rather than standing flat-footed.
- Fix
A LOW RISE DOES NOT WALL THE SKY. A one-ring hill blocked sight across the whole field, and on the open map the hills were not even drawn — the field's dressing zones clipped the scenery as though the ground outside them were dungeon bedrock. A standing eye is five feet up: a hill blocks sight only when it rises above the watcher's eye height by more than that, and the open field draws every rise, ruin and copse it laid; only a dungeon has bedrock outside its rooms.
- Fix
THE PILL NAMES THE REACH. A stone giant two squares off still threatens the square you leave — its club reaches ten feet — and the walk pill naming it with nothing adjacent read as a wrong trigger. The rule is right: an opportunity attack when you leave a hostile's reach. The pill now prints the reach that makes it so — Stone Giant (reach 10 ft) — and a five-foot blade is named plainly, as before.
- Fix
THREE TROLLS MARCH. A single war-party on an open field went to sleep under the scattered-warband rule — a rule written so that only the party the heroes REACH spends its turns, which with one party meant nobody moved at all. A lone war-party is awake from the first round; several still sleep until met.
- Fix
THE TURN BAR IS ONE ROW. With enough heads the initiative bar wrapped to a second line and the board beneath it shifted every time a chip came or went. It is one row now, scrolling sideways when it must, so nothing below it moves — and the hint strip under the board holds to two lines at most.
- Fix
THE ROCK IS SOLID. A dungeon is halls cut from bedrock, but the rules knew only the walls: the black past the wall shell was bare ground to them, so a Large body dealt a seat too narrow for it was nudged out through the wall and stood asleep in the void, and a shove or a step could follow it ('outside of the dungeon's walls is forbidden to draw something. it should be monolithic stone'). The generator now marks the map underground, its floor zones are the whole of the walkable world, and every cell beyond them is STONE — it blocks movement and the eye like a wall, so no seat, step, push, teleport or sightline ever reaches it. The board draws that stone as one dark mass with a coarse grain, no grid across it, and the halls read as sunk into it; an older save's void is painted the same. A suite builds delves across seeds, sizes and swollen packs and holds every body to the floor, every reach to the floor, and the stone to full cover.
- Fix
THE GROUND IS NOT BARE. A 50-by-40 field spared a camp's whole clearing at every one of its template's zones, party or no party, and half the map was a flattened disc with nothing on it but the trails ('now part of the map looks empty'). An empty zone now spares only what its wayside stands on — a hamlet its homes, a cave or a ruin its ring, a graveyard its heart, a copse or a pond nothing at all, since they are terrain — and every field has a COVER FLOOR: where the open ground stands under a quarter in trees, rock and hills, the woods are painted again a step lower on the forest threshold, up to three times, so a plains map grows its copses in its wettest ground instead of nothing. The ground cover is legible now too, the dry country warm and a shade lighter, the wet country cooler and greener, so a plain reads as country and not as a black.
- Fix
THE ROCK IS AN OUTCROP. The formations layer painted rock on every steep cell and on six plateau cells in ten at random, and on a 30×20 yard that came out as single grey blocks in dotted lines — stone dropped at random, not a formation ('not sure what this is'). Rock now gathers into outcrops: the cliff band and the summits (the top of the ground, a share of it) are marked, the marks are gathered by the same cellular pass the woods use, and any outcrop under the minimum is hill. A cliff is a wall of rock two cells thick or none, a plateau top one outcrop or bare hill, and nothing is a lone stone; the mountain biome is rockier than a forest and still a field to fight on.
- Fix
THE RIVER FILLS ITS BASIN. The river walked downhill and, in a pit, carved up to its lowest unvisited neighbour and went on — so in a flat basin it swept every cell before it found the way out, and a river came out thirteen cells wide, drawn with the channel's wave marks ('what happened with water?'). A pit now floods to its sill: the basin is a pond, or a lake at a lake's size, and the channel runs on from the outlet one or two cells wide; a pool the water rises back into is one basin with it, a pit under a pond's size is channel, and a sill that spills back onto the river's own course is a confluence. The source is where the longest course rises among the highest inner ground, so a river is the rule where the highest cell alone often ran off the map in a dozen steps.
- Fix
A RUIN HAS A TEN-FOOT DOOR. A structure's ring — a temple's walls, a cairn's rock — was opened only by random crumbling, one cell at a time, so every way in was 5ft wide; and with a stray war-party standing at the ruin's doorstep now, an ogre seated inside the cairn stood there for the whole battle ('he large 10ft size but the exit is 5ft'). Every ring now carries a doorway two cells wide in its south wall, at the doorstep, with the ground behind it kept clear of rubble, so a Large body walks in and out; the crumbles stay as the extra breaches they were. Camp rings already opened three cells wide at their gates.
- Fix
A HANDFUL OF GIANTS STAYS ON THE MEDIUM FIELD. The auto field size counts the ground the pack stands on, and five ogres — twenty cells — were past the medium cap of fourteen, so they unrolled the 75×75 field: nine bodies on 5,625 cells, the nearest fight 150 ft from the muster ('the map a bit big?'). The medium cap is 24 cells now — six Large bodies, or a horde of two dozen — so a handful of giants or a horde at ×1 fights on the 50×40 field, and only a real horde, the ×2 and ×3 packs, needs the world. The explicit large and huge sizes are untouched.
- Fix
THE ACTION BAR'S EXTRA BUTTONS ARE KEYED. The sheet's zone, wild-shape and grapple buttons are rendered as a list beside the transmute toggle, and only the toggle carried a key, so any creature that could grapple logged React's missing-key warning on every render. All four carry stable keys now.
- Fix
THE ROUND TIMINGS ARE AN INFO POPOVER. The result screen's ⓘ beside the battle time showed the per-round timings in a browser tooltip, in English, while every other ⓘ in the game opens the info popover ('this in tooltip but should be as everywhere in info popover'). It is the popover now, one row a round, in your language.
- Fix
THE INITIATIVE BAR KEEPS ITS HEIGHT. When the turn chips outgrew the bar's width, its thin scrollbar appeared and pushed the whole board down by its own height ('when scroll appear — the layout shift happens'). The bar keeps its scroll track now — transparent in this theme, the thumb alone showing when there is something to scroll — so it is the same height whether or not it overflows.
- Fix
THE CAMERA FOLLOW LANDS FROM A FRAME. The view's follow ran inside a React effect on every animation frame and, while the camera glided after a walker, set the camera from that effect every frame — and React's loop detector counts consecutive effect flushes that schedule an update, so fifty frames of a followed walk logged 'Maximum update depth exceeded' in the console, blamed on the walk animation as the next update in line; the home page's self-playing fight logged it too. The step is handed to a frame callback now: the camera still glides once a frame, a frame behind the walker, and the console is quiet.
- Feature
THE SHOP CAN SHOW ONLY WHAT THE PURSE CAN REACH. A long magic-item catalogue on a thin purse is mostly rows you cannot buy, and the affordable two are somewhere down the list; the shop already knew which was which — every unreachable row is drawn disabled — so that knowledge is now a filter chip beside the section ones.
- Feature
THE SETTINGS GET A ROOM OF THEIR OWN. They lived in a 330px drawer that was never wide enough for them: every row is a full-width switch carrying its own explanation, and the interface-size row wears five chips beside its label, so in that column the text was squeezed to one word per line and the drawer's navigation had to be scrolled past to reach any of it. A button opens them in a wide modal now, and the drawer keeps what a drawer is good at — navigation, the party, the terrain guide, the log. The rows themselves became a panel that is handed its values, so it no longer knows where a preference is stored; the double-write each toggle was making — once through the preference hook and once directly — went with the move.
- Feature
A HEAVY ENOUGH BLAST OPENS THE WALL. Walls were the one thing the destruction table spared outright — levelling a castle with a cantrip is a different game — but a wall nothing can touch is scenery of another kind, and a party that has just landed a thunderclap fit to shatter cut stone should be looking at a hole. A wall is not immune now, it has a threshold: only a concussion opens it, thunder or force, because fire does not break stone however hot it burns, and only when one blast lands at least thirty of it. Shatter at its own level leaves the stone standing; upcast far enough, it comes through. The breach is clone-on-write like every other map edit, so the states already in the log keep their wall.
- Feature
THE BOSS SAYS IT ALOUD. The horn — the moment the master of the floor calls every blade in the hold to him — was a line in the log and nothing on the board, the loudest beat of a delve passing in text while the player watched an unchanged room. He speaks it now, in his own bubble, a beat before the dungeon answers.
- Feature
THE WAY DOWN LOOKS LIKE THE WAY DOWN. A generated dungeon mouth drew strictly inside its one cell, which made the entrance to a whole delve a small dark square among a field of other small squares — findable only if you already knew where it was. It stands on a threshold now: a shadow seating it on the ground, an apron of worked stone spilling past the square, a lit top-left edge in the board's own light, and brighter fire at the jambs. The art that says HOW you go down — a well's kerb, a trapdoor, a ladder shaft, an iron door — is untouched; it simply arrives on a doorstep worth seeing across the field.
- Feature
EVERY WAY DOWN IS ITS OWN PLACE NOW. A generated dungeon mouth drew inside one cell, so the entrance to a whole delve was a small dark square among a field of small dark squares — and two of the ten kinds were literally the same picture, the barrow drawing the chapel's stairwell character for character. Each kind now declares a footprint and is drawn at it, up to three and a half cells across, in the board's own 2.5D: a lit top face over a front face standing toward you, a shadowed side, a lintel over the opening, fire at both jambs and dust standing in the throat. What is BUILT gets that worked-stone threshold; a cave, a sinkhole, a burrow, a hollow tree and a barrow do not, because nobody laid a course of stone for any of them — and a hole in the ground casts no shadow, so it no longer sits on one. The cave became a slab of hillside with an arch bitten out of it, teeth of rock hanging from the lintel and boulders fallen either side; the sinkhole a torn opening with a warm lit rim and a plank somebody laid across and thought better of; the barrow a turfed mound with a trilithon framing the passage in; the crypt's iron door now stands OPEN on the steps behind it, because a way down has to show the down; and the hollow tree is a split trunk with roots gripping the ground rather than a bush with a cupboard fitted to it.
- Feature
AND EVERY ENTRANCE IS CUT FROM ITS OWN GROUND. One fixed grey served all of them, so a barrow standing in a meadow and a stair cut through a flagstone hall were built of identical stone, and the turf on a mound stayed summer-green a hundred feet underground. Each mouth now reads the floor it stands on — the board already knows it, the same lookup that decides whether a wall renders as mortared masonry or as jagged cave rock — and takes three tones from it: the worked stone of its threshold, the living turf on its back, and the bare soil a hole opens through. Field stone is warm and brown; a hall's flagstone is cooler and greyer; cave rock is darker and grows nothing. What a kind is otherwise MADE of — iron, timber, rope, the black of the throat — is its own material and never the landscape's.
- Feature
THE FORGE'S CHOICE ROWS LINE UP. Spells, invocations, feats and fighting styles were each a wrapping row, so a shelf of nine broke into ragged lines of four, four and one, every chip a different width, and the shape changed with every pick. They share one grid now — four even columns, each chip filling its cell — and a shelf's name sits above its options rather than beside them, so every row starts at the same edge instead of wherever the label happened to end.
- Feature
THE PICKER IS AN OPEN BOOK. A spell shelf is a grimoire and a magic shop is a ledger, and both were one narrow column you scrolled a hundred entries through. The modal is a SPREAD now: wide enough for two pages, bound in a darker cover with its ground warmed off the panel grey toward vellum, the title set in the display face, and the entries flowing down the left page and on to the right the way a book's do — with the spine as the rule between them, and no entry ever torn across it.
- Feature
AND THE BOOK TURNS ITS PAGES. A fixed-height two-column box does not stop at two columns — it lays every further one off to the right and grows a horizontal scrollbar, which is the one gesture a book does not have. The columns were right; what was missing was somewhere to put the ones past the spread. The pages are clipped now and move a spread at a time, turned by their own DOG-EARED CORNERS: a folded triangle lying over the page's bottom edge, showing the pale back of the leaf where the light strikes it, appearing only when there is a page that way and lifting under the pointer the way paper does when you take hold of it. No arrows, no page count — a book is turned by its corner. The pages also fill top to bottom before starting the next, the way a book is set, rather than balancing six entries thinly across both.
- Feature
THE FILTERS ARE BOOKMARKS. They were chips floating above a list; a filter on a book is a ribbon left in it. They sit on the top edge of the pages now — square where they meet the paper, rounded where they stand proud — and the one you have marked is lifted, warmer, and joined to the page below by having no bottom edge at all. Moving one settles the entries onto the page with a short fade instead of snapping them into place under the reader's eye.
- Feature
A HIDDEN SPELL PUFFS OUT OF THE BOOK. Moving a bookmark used to make nine spells cease to exist between two frames, because React unmounts a filtered-out entry the instant it stops matching — and a thing cannot be animated leaving once it is already gone. A departed entry is now held in the list a moment longer, IN THE SLOT IT ALREADY HAD, and puffs: up and slightly wide, blurring as it fades, the way something disperses rather than shrinks to a point. Holding the slot is the half that matters — a list that closed the gap first would have the survivors jump before the departure was over, which reads as a glitch rather than as something vanishing. The page settles only once the puff is done.
- Feature
AND THE PAGE TURNS LIKE A PAGE. Moving to the next spread jumped there. A shaded leaf now sweeps across the book while the pages glide beneath it — the dark band is the paper's own shadow as it lifts, the warm one the light catching its face — and it leans with the arrow that asked for it, left to right going forward and the other way coming back. Both this and the puff are off entirely for a viewer who asked for less motion; they get the plain list and an instant turn.
- Feature
EVERY PICKER IN THE FORGE OPENS THE SAME BOOK. There were three modals at three sizes — the magic book at 880, the class list at 480, the name roll at 520 — so choosing a class, a name and a spell in sequence made the panel jump twice, and only one of the three looked like anything. They are all the same act. The covers, the scrim and the running head now live in one place and every picker uses them, so the class list and the name roll arrive on the same paper, at the same size, under the same doubled rule, in two columns like the spell book beside them.
- Feature
THE BUILDER ASKS ITS QUESTIONS IN FOUR STEPS — the map, the party, the shop, and a summary to march from. It asked all of them on one page: the encounter's terms, four heroes' worth of class, scores, feats and styles, everyone's shopping, and the Start button, so a first-time player met the whole thing at once and a returning one scrolled past three quarters of it to reach the shop. NOTHING IS GATED: every step is reachable at any time and Start battle stays live on all of them, so the quick path — Random party, then Start — is still two clicks. The party and shop steps are the same hero editor opened to one side or the other rather than two components that would drift, and the summary is deliberately read-only: an editable one would be a fifth copy of editors that already exist, and the copy that goes stale.
- Fix
THE RANK AND FILE GET BYNAMES, NOT NUMBERS. Three goblins arrived as Goblin 1, Goblin 2 and Goblin 3 — inventory, not a fight, and the narrator choked on it, because no Game Master has ever said "Goblin 2 lunges" aloud. Heroes facing bodies they cannot tell apart do what soldiers do and coin a byname by eye, and the pool it comes from is chosen by how the creature fights: the skirmishing goblins are Dart, Whisper and Hare, an archer earns Notch or Sling, wolves are Paw, Maw and Fang, an ogre is Trunk or Bonebreaker. Every byname is a noun that stands on its own rather than an adjective its kind would decline, so Ukrainian reads as Ukrainian — Гоблін Дротик, Вовк Ікло. Coined from the entity id, so a replay names the same body the same way, and no two of a kind ever answer to the same one.
- Fix
TEMPORARY HIT POINTS ARE VISIBLE, AND THEY DO NOT LOOK LIKE HIT POINTS. The engine had modelled them correctly from the start — damage spends them first, healing never restores them, a second grant replaces rather than adds — and nothing anywhere DREW them. A fighter who spent a bonus action on Adrenaline Rush watched 'HP 58 / 58' sit there unchanged, with no way to tell the buffer existed or how much of it was left; the same was true of Rage, False Life, a warlock's armor of ice, a leader's rallying speech and every other source. The shell now takes its own blue run on the bar, laid after the health rather than hidden inside it — so a body wearing one is visibly carrying more than its own maximum, which is the truth of it — and reads as '58 / 58 +3' on the sheet, under the token and in the initiative hover. The health colours still answer to the body's own health, so a dying fighter under a large shell shows red, not green.
- Fix
STANDING UP IS NOT A TALENT. The results sheet tallies every intent that is not the fight itself, which is the right default — a class feature shipping tomorrow is counted the day it lands, with nobody remembering to register it — but all of it went under one heading, so a hero who got off the floor and backed out of reach was credited with the features 'Stand' and 'Disengage' beside Action Surge. The standard actions are a closed list written in the 2024 rules and can therefore be named: they now have their own ledger, Actions taken, alongside the board's own furniture — doors, locks, ladders, loot. Features used holds what this hero actually brought to the table. An id nobody has named is still a feature, so the open set stays the default and the new heading needs no maintenance.
- Fix
SPIKE GROWTH COMES UP THROUGH FLAGSTONES. Cast in a dungeon it laid nothing at all — the engine wrote the hazard, the log announced that the ground bristles, and the board drew bare stone — because it was filtered by the rule written for Plant Growth: the floor must hold roots. They are not the same spell. Plant Growth thickens 'all normal plants' in its sphere and genuinely needs plants; Spike Growth twists the GROUND ITSELF into hard spikes and thorns and asks for no vegetation, so it works on a delve's flagstones exactly as it works in a meadow. What both still owe the map are its physical exclusions, now their own rule: no ground effect inside a wall, across a doorway or over open water.
- Fix
THE STAND BUTTON IS THERE WHILE YOU ARE DOWN. Standing costs half your speed, so a ranger with 40ft who had already walked 25 could not rise — correct by the 2024 rules, and the action bar answered by hiding the button outright, leaving a hero on the floor with no button, no explanation and every reason to think the game had lost the action. It is now offered greyed while prone, wearing the cost it wants, so the turn you cannot afford reads as a price rather than an absence.
- Fix
THE SHEET'S CHOICE ROWS STOP TOUCHING. Feats and fighting styles, the class's own choices and the magic picker were stacked as bare siblings, so they sat flush against one another with nothing to say where one row ended and the next began. They are a column with a gap now — and a row that renders nothing, which most heroes have, still costs no space.
- Fix
THE SCROLLBAR STOPS TOUCHING WHAT IT SCROLLS. A stats column ended exactly where the thumb began, numbers against the bar. The track is wider by four pixels and every one of them is spent on the thumb's transparent border, so the visible pill is as slim as it ever was and now has room around it. The sign-in modal, which had grown cramped as the text grew, is wider too.
- Fix
NOTHING GROWS IN THE BEDROCK. A dressed map is solid rock outside its rooms and corridors, and the ground has always known it — it clips itself to the floor zones. Scenery did not, so a tree or a boulder the generator scattered into the rock between two rooms painted itself on the black past the floor's edge and read as decor floating loose outside the board. Both now ask the same question. Open country has no zones to consult and loses nothing.
- Fix
A CANTRIP EXPLAINS ITSELF LIKE EVERY OTHER SPELL. The picker's cantrip rows were built from the WEAPON — a cantrip is a weapon on this board — and a weapon carries no rules text, so Eldritch Blast, Chill Touch and Poison Spray sat in the book as bare names while every spell beside them said what it did. Their spell entries had the wording all along; nothing was asking for it.
- Fix
THE BOOK HOLDS ITS SHAPE, AND EVERY ENTRY IS THE SAME SIZE. Narrowing to one school collapsed the modal to the height of three entries and grew it back on the next click, so the page jumped under the cursor every time the shelf was narrowed — the covers are a fixed height now and only the pages inside empty out. And rules text that ran from one line to five made each page a ragged stack of blocks with nothing for the eye to travel down: every entry is one height, its text clamped to three lines, with the full wording a hover away.
- Fix
THE LUCK FEAT GOES TO THE CLASSES THAT SWING. This engine's luck feat rerolls a MISSED ATTACK and nothing else — it cannot touch a failed enemy save — so recommending it to the sorcerer and the bard, whose whole output is save-based spells, pointed two casters at a feat that could not help their main action. Its star moves to the fighter and the ranger, who make the most attack rolls a turn and had no luck-shaped pick of their own; the rogue and the monk keep theirs. Availability is unchanged and always was correct: it is an Origin feat, open to every class through a background, and the recommendation is only advice about where it shines.
- Fix
THE BOOK IS MADE OF PAPER, NOT SHADOW. Its first pass was so dark it read as a hole cut in the page behind it rather than an object lying on top of one — a book in a dim room still catches light. The binding lifts off near-black, the leaf becomes a warm tan a reader would recognise as aged paper, and the ink warms with it: the interface's cool grey went thin and faintly blue against that ground, so the rules text, the prices and the rules between entries are all a warmer, stronger tone now.
- Fix
A FIGHTING STYLE'S TWO LINES ARE TWO LINES. The features list keyed each line by its source TAG, and one tag can grant several — a fighting style writes a line per benefit — so two lines from the same style arrived as one child and React warned that either could be duplicated or dropped. A line's identity is its place in the list; the tag alone was never unique.
- Fix
THE FEAT AND NAME PICKERS ARE THE SAME BOOK AS THE REST. They had been given the shared covers but kept their old insides — dark boxed rows on no paper at all — so opening one after the spell book was the same size and a different object. Worse, both had been handed two columns without the clipping that goes with them, and CSS multi-column under a fixed height lays its overflow off to the RIGHT: each grew a horizontal scrollbar. The leaf, the ink and the entry styling now live with the covers and all three pickers use them; and where the spell book answers its overflow by turning pages, a single-choice list has no business paginating, so those two run row by row down two columns and scroll the way a list should.
- Fix
A BOOK HAS NO SCROLLBARS. The spell book turned its pages while the class, feat and name pickers scrolled — one of them sideways, the others down — so three modals that had just been made to look alike still behaved like three different things. The page-turning itself is now shared machinery: every picker in the forge lays its options on the same leaf, clipped on both axes, filled column by column and turned by its own dog-eared corners. A one-choice list paginating seemed wrong when this started, which is why they scrolled; a scrollbar in a book is worse.
- Fix
THE BOOK IS PARCHMENT, AND ITS INK IS DARK. Three passes at this page were called washed out, and the last two were treating the symptom: it went from near-black, to a mid-brown that was the worst of both — pale ink on a middling ground is the lowest-contrast thing a screen can show. A book in a dim room is the LIT object in it, so the leaf is tea-stained parchment and the writing on it is dark. The cause of the wash was not the paper at all: the spell book still carried a private copy of the entry styling from before that module existed, so when the page turned it went on writing in near-white. And two colours were still drawn for a dark ground — a trait line at 1.2:1, invisible, and a 'deep' amber at 2.8:1 that looked fine by eye. Every ink on the page was then MEASURED against it rather than judged: heading 5.8:1, body 4.8:1, nothing under 4.5.
- Fix
FEATS AND FIGHTING STYLES ARE TWO SHELVES. They were dealt into one grid, so 'Choose feat' sat in a row beside Archery and Defense as though they were the same kind of choice. They are not: one is a slot you spend, the other a style you fight in, and a hero has both. The styles get their own labelled shelf, the way the class's own choices below already announce themselves.
- Feature
PLANT GROWTH CAN BE CARVED, AND ESCAPE MEANS STAND DOWN. The 2024 Overgrowth lets you "exclude one or more areas of any size within the spell's area", and we had been ignoring that sentence — so a third-level slot carpeted a hundred-foot sphere at four feet per foot and the party that cast it waded through its own spell. Click to plant the centre, click inside to cut holes, click the centre again to cast what is left; the preview pins to the centre while you carve and draws the cuts as holes. The clause is Plant Growth's alone — Spike Growth and Entangle have no such text and still cast on the first click. Separately, arming anything is now reversible the way every aiming UI has taught people to expect: Escape or a right-click stands it down. The board was already swallowing the right-click and offering nothing in its place.
- Feature
THE GROUND STOPS LOOKING LIKE WALLPAPER, AND THE HUNGRY DARK STOPS LOOKING LIKE DARKNESS. One tile stamped at the same angle into every square of a zone reads as a grid the moment the zone gets big, and Plant Growth's hundred-foot sphere covered most of a battlefield in the same clump. Ground cover with no natural up — thorns, grass, vines, webs, slicks — now spins and mirrors each tile by its own coordinates, eight orientations for free, so a field looks grown rather than tiled. Fire opts out, because flame rises. The two plant spells were also a scatter of pale specks a shade apart in colour, indistinguishable on the board: Spike Growth is a dense bed of hard angular barbs in bramble brown now, Plant Growth a thicket that runs past its own edges so neighbouring squares interlock. And the warlock's hungry dark, which had been sharing Darkness's ground kind and was therefore pixel-identical to it, has its own well of black threaded with violet limbs groping out of it.
- Feature
THE KEYBOARD, AND A PLACE TO SET IT. Actions bind BY NAME, because Dash is Dash on every hero you will ever roll — D dashes, E dodges, Q disengages, H hides, Space still ends the turn. Weapons and spells bind BY POSITION, because their contents are per-character and binding a key to Fireball leaves it idle on every hero that never learns it: 1 through 0 walk the weapon shelf, cantrips included, and the shifted digits walk the spells. Actions fire; weapons and spells arm and wait for a target, exactly as clicking their button does. Every button wears its key on a small chip, and a new Controls screen in your profile rebinds any of them — click, press a key, done; Escape cancels, Backspace clears, and a key already spoken for is taken from whoever held it rather than stored twice. The chips can be turned off if you would rather have the width.
- Feature
THE WOOD NOTICES THE SPELL. Plant Growth thickens "all normal plants" in its sphere, and the board drew that as a carpet laid over scenery that had not changed — the trees inside a hundred-foot overgrowth looked exactly like the trees outside it. The wood, the hillside grass and the bog reeds standing in it now render ranker, each blended toward the deep green of choked growth rather than repainted, so a marsh still reads browner than a forest. Thorns and weeds keep their own tile and leave the standing wood alone.
- Feature
A BURST RUINS WHAT IT LANDS ON. 5e's own object rule — "a nonmagical object that isn't being worn or carried also takes the damage if it's in the spell's area" — was not on the board at all: a fireball in a wood left the wood standing, a Shatter in a storeroom left every crate intact, and the map was scenery the fight happened in FRONT of rather than terrain it happened to. Now each thing answers to what actually harms it. Wood burns, splinters and dissolves; cut stone cracks under thunder and force and shrugs off flame; living plants wither under necrotic and poison as readily as they burn, and lightning fells a tree outright; a spun web goes up or dissolves. Cold, radiant and psychic ruin nothing. The conjured ground goes the same way — a druid's thicket is answerable by fire rather than merely waited out — and where flame or a bolt swept, the earth itself is left black: the road, the bare ground, the hillside, the bog, the ash where a tree stood, thinning at the rim so a burn ends in soot rather than on a grid line. Open water puts it out. The consequence is the point rather than a flourish: cover stops being permanent and a sightline opens where the blast passed, so a blast that catches nobody still takes the scenery and the line that always read "hits nothing but scenery" finally means something. What is NEVER ruined is the map's own structure — walls, keeps, crypts, ramparts and cage bars, because levelling a castle with a cantrip is a different game; rock formations, which are landform and not furniture; and a hearth, which is built to hold fire.
- Feature
A GATE OFFERS ITS OWN WAYS THROUGH. Getting past a locked barrier was one gesture — a left-click battered it — which made the loudest, slowest option the default and hid every other way past. Right-click a gate now and it answers with its own menu: turn a key you are carrying, pick the lock, put a shoulder to it, or break it down. A left-click no longer touches the timber at all; real damage still comes from the action bar and the spell shelf, where damage belongs. THE SHOVE is new and deliberately not an ability check: a flat d20, 18 or better and the frame gives. It is the option that is always there — for the wizard with no tools, no bludgeon and no key — and pricing it on Strength would have made it the barbarian's button rather than everyone's last resort. It costs your action whether it works or not, and it throws the WHOLE gate open, because half a portcullis is a wall. A barred gate, which has no keyway at all, still offers only the axe.
- Feature
THE INTERFACE FITS THE SCREEN IT IS ON. Every size in this app is a fixed pixel — 765 font sizes of them — so the same layout was cramped on a small laptop and postage-stamp small on a 32-inch 4K panel, where the design's pixels stop meaning what they meant. It scales itself now: a little tighter below 992px, and growing in steps from full HD upward — 1920, 2560, 3200 and 3840 each get their own size. On top of that automatic fit, Settings carries a dial from 85% to 150% for players who want more or less than the screen suggested; the two multiply. It scales the LAYOUT rather than painting over it, so the page genuinely reflows and nothing overlaps or clips — measured at every step with no horizontal overflow at any of them. Like the language, the dial rides a cookie the server reads before it renders anything, so a scaled-up interface never arrives small and jumps. Rewriting every measurement in scalable units remains the thorough answer; this helps today and does not stand in that answer's way.
- Fix
BEING SHOVED THROUGH A THORN FIELD COSTS WHAT WALKING THROUGH IT COSTS. A Repelling Blast could drive an orc clean across Spike Growth for nothing: the walk loop billed a hazard on every step, but a shove wrote the body's new square straight to the board and skipped the ground entirely. Forced movement now pays the same tolls a walk does, cell by cell — Repelling Blast and Thunderwave's push, the thorned lash's drag on both the spell and the weapon route, and the Push mastery and the bludgeoning feat's shove, which needed a log channel of their own to say so. The 2024 text has no exemption for a creature that was moved rather than one that chose to walk, and neither do we. A caller with nowhere to record the burn deals no damage at all rather than damage nobody can see.
- Fix
A ZONE ACTS FOR THE CASTER WHO LAID IT. A druid's Spike Growth chewed through an entire enemy line for eight rounds and its card read "×3 —", with no damage and no kills, while a warlock's sphere of hungry dark did the same. The tally reads a line's actor as the dealer, and a hazard's burn named the VICTIM — so the creature standing in the thorns was credited with hurting itself, nobody was recorded as taking it, and the caster got nothing. Every burn now names its owner, targets the body in it, and files the tick under the spell that laid the field. Which also means a hazard kill credits the caster, and your own party wading through your own thorns is billed as friendly fire, honestly, where you can see it.
- Fix
AND THE PARTY STOPS PARKING IN IT. The walk field knew what a thorn field costs to CROSS and nothing about what it costs to STAND IN, so allies strolled into their own druid's Spike Growth and stayed there, paying twice a round for six rounds while the druid re-cast it in front of them. Damaging ground now carries a couple of squares of detour in every positioning move — advance, kite and strafe alike. It is a preference and not a wall: a body that must cross a thorn bed to reach the fight still crosses it, and a body already standing in one reads stepping out as the improvement it is.
- Fix
NO BREATHER WITH STEEL STILL DRAWN. Short Rest offered itself in the middle of a live battle, because "the room is clear" was measured as "no enemy within 60 feet" — a proxy that held only while a fight stayed compact, and a big map lets one spread well past it. Any awake foe now blocks the rest wherever it stands. Sleepers still do not: a garrison dozing two rooms away never was a reason to keep walking.
- Fix
THE SPELLBOOK STOPS BLAMING THE SLOTS. A level-6 druid with a full Action pip and three third-level slots could not cast Plant Growth, and the button said it had neither. Two faults, both fixed. The between-fights rule asked whether a spell lasted more than ten minutes — which waved Call Lightning and Conjure Animals through as "long-scale magic" while refusing Plant Growth, whose overgrowth is part of the floor from then on, because an Instantaneous spell stores a duration of zero. It now asks the honest question: mending magic, ground you change for good, and standing magic that outlives the walk may be cast out here; anything shaped around a foe may not, however long it would have lasted. And when a spell IS refused, the engine says which gate closed and the sheet prints that — no slot, no action, spent, not in a fight, or a spellbook gone dark in beast shape — instead of the same wrong sentence every time.
- Fix
HEX IS A CURSE, NOT A LEASH — AND IT IS PURPLE AGAIN. A hexed creature stood under a green column running back to its caster. Two faults behind one picture. Hex and Hunter's Mark were both authored with a TETHER beat, the sustained-link strip that belongs to the lightning tether's arc; neither spell describes a beam in 2024, so the mark is worn now and nothing is drawn between the two of you. And both spells grant the same `hexed` condition in different colours — a warlock's purple and a ranger's green — while the look was harvested by CONDITION NAME, so whichever spell the registry read last won and every hex in the game came out in the ranger's green. A condition now looks like the spell that actually applied it, which the effect registry has always remembered.
- Fix
THE PAGE STOPS JUMPING WHEN THE SCROLLBAR LEAVES. Opening a modal shifted everything behind it sideways: the overlay locks the body, the scrollbar's ten pixels go with it, and a centred layout re-centres into the gap — measured at five pixels on the setup screen, which is exactly half the track. The same jump happened any time the content stopped being tall enough to scroll. The bar's seat is reserved now, so it can come and go without moving the page under your pointer.
- Fix
THE CACTUS GRID IS GONE, AND THE GROUND DECIDES WHAT GROWS. Every square of a conjured field also drew a 🌵 or a 🌱 on top of its own baked art — a stand-in from before the art existed, kept for zones whose look had not been drawn yet, and never stood down for the ones whose had. At a hundred-foot radius that is a thousand icons laid over the thicket. The emoji now yields wherever a real sheet exists, and stays only where none does. And a growing spell needs something to grow out of: Plant Growth, Spike Growth and Entangle skip walls, worked stone, furniture, bridges and open water, so a thicket no longer carpets the river and the flagstones. A TREE is deliberately kept — it is the most plant-rich square on the map. Trimming the footprint also cuts what the board has to animate: an unlucky cast used to paint twelve hundred living nodes, and a permanent one never gave them back.
- Fix
YOU CAN SEE OVER THE TREETOPS FROM THE WALL. Every tall thing on the map lets an eye at or above its crest see past it — a rampart, a hill, a mountain. The tree was the one exception, blocking sight outright whatever height you stood at, so an archer on the wall-walk could not see the wood beneath him and an area spell aimed past it was refused for want of line of sight. A canopy stands ten feet, level with a standard parapet: from the ground the wood screens everything behind it, from the wall above it you shoot over the tops, and a hand-authored old-growth tree can still tower over both.
- Fix
RIGHT-CLICK STANDS DOWN INSTEAD OF CASTING. The board raised its ordinary click for every mouse button, so right-clicking with a spell armed CAST it — and the cancel that same gesture is meant to trigger arrived a beat too late, because a click always lands before a context menu. Only the primary button acts on the board now. A carvable field also shows where to finish: the planted centre wears a ring and a ✓, since "click the centre again to cast" was a button nobody could see.
- Fix
THE PAGE ARRIVES IN YOUR OWN LANGUAGE. The chosen locale lived in browser storage, which a server cannot read — so every page was rendered in English and the Ukrainian appeared a frame after the browser had already drawn it. A visible flash of the wrong language on every single load, and because the two languages set text to different widths, a full reflow of the layout behind it. The locale now rides a cookie the server reads before it renders a single tag, so the first paint is already right and the page never moves. Anyone who picked their language in an older build keeps it: their choice is carried over to the cookie the next time they visit, once, and every load after that is served correctly from the first byte. The document's own lang attribute follows too, which screen readers and the browser's translate prompt both read.
- Fix
NOTHING DROPS IN LATE AND SHOVES THE PAGE. Two panels appeared a beat after the rest of the screen and pushed everything under them down as they landed: the co-op card, which waited for the sign-in check before rendering anything at all, and the aiming bar for a volley of missiles, which mounted when you armed one and vanished when it resolved — the aim HUD shoving the very thing you were aiming at. Both hold their seat now. The co-op card keeps its heading up immediately and fills a space already reserved for whichever answer comes back, and the volley bar stays put and simply goes quiet between casts.
- Fix
THE CO-OP CARD AND THE GAME-MASTER ROW SPEAK UKRAINIAN. Both were written straight into the markup in English and never went through the dictionary at all, so "Play together", "Host multiplayer", "Join a game", the sign-in prompt, the table-code field and the Human game-master button all stayed English on a fully Ukrainian screen. Twenty-one strings, both languages.
- Fix
A BUTTON'S NAME STOPS CHANGING WIDTH WHILE YOU READ IT. The Narrator's button carried its own status inside its label — " …" while the model was probed, then " · offline" or " · 2 free fights left" once the account answered — so it resized twice on every load and dragged the row with it. The status now sits beside the control, last in its row, where nothing stands to its right to be pushed. The co-op card had the same shape of fault from the other end: it asked the LIVE auth state whether accounts exist, and that answer is false until an effect runs, so the whole panel dropped in a frame late and shoved the page down. Whether a build ships accounts is configuration, knowable before a single tag is rendered, and it is asked that way now.
- Fix
TWO CONDITIONS OF THE SAME COLOUR ARE TWO RINGS AGAIN. A token's aura rings were keyed by their colour alone, so any pair of conditions declaring the same tint arrived as one child with one key — React warned that the two could be duplicated or dropped outright, and it was right to. The ring's identity was never its colour: its radius and its pulse are both read off its slot in the stack. The domes over a shielded body had the same fault and the same cure.
- Fix
THE TOKEN GLIDE CANNOT FEED ITSELF. The move animation writes from a layout effect, and it opened every walk by handing React a newly built object holding the square the walk starts on — the same square every time it ran. React can only take a new object at its word, so a re-run wrote again, and enough of those in a row ended the board with "Maximum update depth exceeded". An unchanged position now returns the object already held, which React recognises and stops on, so a repeat costs nothing and the cycle dies on its first lap. A frame that actually moved the token is a new position exactly as it always was.
- Feature
THE LOADING SCREEN BECOMES A CHASE, AND THE OPENING ARRIVES ON A SCROLL. The Game Master's card sets the scene over a thin glowing bar along which a pixel runner — a goblin, a spider or a kobold, rolled fresh each fight — flees at the REAL loading percentage, chased by one fireball, arrow or lightning bolt trailing just behind. The four honest milestones still drive it (battlefield surveyed, foes counted, Narrator awake, opening written), now as one breathing step label and a percentage. At 100% the chaser catches up: the runner scorches with a boom, topples with the arrow in, or strobes under the bolt — Scorched! Pinned! Zapped! — and after a held beat the card gives way to a scroll that unrolls and types the Narrator's opening in front of you, Begin the battle arriving with its last character. A slow Narrator still never holds the player: a quiet Begin waits under the bar the moment the board is ready. Reduced-motion viewers get a still scene and the whole line at once.
- Feature
THE CREDIT WHERE IT IS DUE, AND CLICKABLE. The Creative Commons attribution this game owes now names BOTH open rulesets it draws on — the System Reference Document 5.2 the rules follow, and the SRD 5.1 a few stat blocks still come from — and it LINKS all three documents: each SRD and the CC BY 4.0 licence itself. One notice, written once and rendered from one place, now sits on the landing footer, on all three levels of the compendium and on the terms page, in both languages — so a reader looking at a spell or a monster can reach the ruleset it came from in a click.
- Feature
THIRTEEN SPELLS JOIN THE BOOK, AND EVERY CLASS LIST IS THE 2024 ONE. The shelf gains Dissonant Whispers, Color Spray, Hideous Laughter, Suggestion, Mind Spike, Spirit Guardians, Wind Wall, Black Tentacles, Vitriolic Sphere, Dominate Beast, Cloudkill, Dominate Person and Wall of Ice — each with its own cast, impact and lingering look, and each speaking Ukrainian from the day it lands. The guardians wheel in an aura that MOVES WITH THE CLERIC, the tentacles turn their square to clutching ground, and the killing cloud settles and keeps biting. And the class lists are now the ruleset's own: bards get Command, Aid, Mirror Image, Slow, Greater Invisibility, Phantasmal Killer and Hold Monster; druids get Aid, Fire Shield and Cone of Cold; rangers and druids get Revivify; sorcerers get Flaming Sphere and Freezing Sphere; clerics and wizards get Sunbeam — sixteen rows re-listed in all, three of them narrowing where we had been too generous.
- Feature
TWENTY-TWO MORE SPELLS, AND NOTHING CASTS IN SILENCE. The book gains Ice Knife, Animal Friendship, Heat Metal, Phantasmal Force, Protection from Poison, Stinking Cloud, Bestow Curse, Conjure Animals, Banishment, Charm Monster, Compulsion, Conjure Woodland Beings, Contagion, Telekinesis, Arcane Hand, Conjure Elemental, Eyebite, Flesh to Stone, Irresistible Dance, Mass Suggestion, Wall of Thorns and Conjure Fey — every one to the 2024 text, and every one speaking Ukrainian the day it lands. Eyebite drops a foe into the same true sleep the Sleep spell does; Banishment puts one out of the fight entirely and is a CLERIC and PALADIN answer to the thing they could not handle; the woodland spirits ride an aura that moves with the druid, and the conjured pack runs where it is sent. Seven spells also turned out to cast in complete silence — Web, Grease, Entangle, Spike Growth, Plant Growth, Fog Cloud and Guardian of Faith laid their ground and showed nothing at the caster — so each now has its own baked flourish, and Bless, Sleep, Hypnotic Pattern and Speak with Animals leave a shimmer on whoever they hold.
- Fix
A FALLEN DRUID IS A DRUID. Wild Shape ends the moment you are Incapacitated (2024), and 0 HP is Unconscious — so a shaped druid who drops now lies there in their own body, not as a wolf. The fall itself is unchanged: you keep your own hit points plus the temp HP the shape granted, you are down at 0 and rolling death saves; only the beast's overlay falls away, its features and natural weapons with it.
- Fix
SLEEP IS SLEEP, NOT HOLD PERSON — AND IT COMES IN TWO STAGES. A sleeping creature wore Hold Person's chip, its 🧊 badge and its Paralyzed tooltip, and rolled Hold Person's break-free save every turn, because the spell simply borrowed that condition. It has its own pair now, to the 2024 rule: a failed WIS save leaves a creature 😪 INCAPACITATED — no action, bonus action or reaction and its concentration shattered, though it can still stagger — until the end of its next turn, when it saves again. Succeed and the spell is thrown off; fail and it falls 💤 ASLEEP for the rest of the minute, helpless (attackers at advantage, point-blank hits crit, STR/DEX saves failing unasked). Either stage ends the moment it takes damage, or a comrade within 5 ft spends an action to SHAKE IT OUT of the spell — a new button on the bar, a rung on the AI's rescue doctrine, and an option on the Narrator's menu. The spell is now Concentration up to a minute, so breaking the caster wakes the room; its sphere is 5 ft and grows 5 ft a slot above 1st, and the aim ring, the hit count and the compendium all measure the circle the slot actually buys. It catches only creatures of the caster's choosing — never their own side — and elves, who do not sleep, shrug it off automatically.
- Fix
THE SPELLBOOK IS READ AGAINST THE 2024 RULES, LINE BY LINE. Every authored spell was diffed against the System Reference Document 5.2, and twenty-four rows were wrong. COUNTERSPELL was still playing by the old edition — a slot that matched the incoming level simply won, and anything higher simply beat it; now the CASTER makes a Constitution save against your spell DC, and the level of either slot buys nothing. WEB was filed as a 1st-level spell and is 2nd. HYPNOTIC PATTERN handed out full paralysis, auto-failing its victims' saves and auto-critting every hit in reach, where the pattern only leaves them charmed and unable to act. Heal restores a flat 70 again, Disintegrate 10d6+40, Circle of Death 8d8 across a sixty-foot ball, Flame Strike and Ice Storm their true dice, and Vicious Mockery its d6. Chill Touch is a MELEE spell attack now, so the cult fanatic who leaned on it carries a poison spray instead. Shillelagh, Produce Flame and Lesser Restoration are bonus actions; a dozen durations that ended after a minute now run their true ten minutes or hour. And the class lists are the ruleset's own — sixteen re-listed, bards and druids gaining most.
- Feature
ANIMATION V2, WHOLE: THE BAKED-BEATS ENGINE ARRIVES WITH ITS ART. Spells now author their own look as data — per-beat baked sheets, cast flourishes blooming where the magic lands, travel strips tiling any distance, auras riding the token itself, tethers binding caster to target — all runtime-tinted through the same palette as sconces and explosions, all preloaded per fight, all falling back to the procedural effect the moment a sheet is missing. And the art came with it: EVERY spell the animation audit flagged — 88 of 103 — now looks like its own words. Teleports vanish where you actually stood, and a psychic blink's blade flies ahead of it. Fourteen buffs and curses that last finally LOOK like they last, from Shield of Faith's gold to Bane's dark mark, both Hold spells' rigid pale shimmer, and the armed glow of Divine Favor and Magic Weapon. Five NEW baked sheets join the shelf: Fog Cloud's rolling mist, a conjured cloud of spinning steel, a spectral Guardian of Faith standing alone at its zone's heart, the lightning tether's crackling arc finally CONNECTING caster and victim, and Burning Hands fanning real flame. The sky opens for Ice Storm and Sleet Storm; Fireball's bead streaks before the bloom; Magic Missile flies as darts; rays lance as beams; walls, storms, spirit weapons and locust swarms burn, brood, hover and buzz over their cells. The TRIGGERED MOMENT becomes visible: Death Ward wears its ward and flashes when it saves a life, all four smite riders show armed and fire on the hit, Haste's lethargy crash finally lands. Every improved spell carries its own hand-set pixel icon — 88 unique pieces where shared placeholders stood.
- Feature
THE LIVE QA ROUND: PLAYED, FLAGGED, FIXED — THIRTY-THREE TIMES. A hands-on pass over the living compendium finished what the campaign started. The cantrip and ancestry-breath registries join the art: sixteen cantrips crackle with element-tinted sparks, five dragonborn breaths and the renamed Dragonfire Breath pour a true baked flame-cone at their target — apex, tongues, and nothing square about it — and Lightning Bolt, Chain Lightning and the lightning tether all ride a new jagged bolt-strip. Heals rain little pluses; failed saves float Zzz over the sleeping; Mirror Image finally STANDS its illusory duplicates beside the caster; Shield domes OVER the figure; smites, wards and hastes show their triggered moments. Zone spells preview as their zones — gray fog lingering its full ten rounds, never a violet blast dome. One shared arrival clock means no impact ever beats its own projectile (and a beam strikes the instant it touches); the old rigid trail-rod became a tapering comet streak and the ornamented orb a clean burning ball. The spell page names every subclass that smuggles a spell in — The Fiend has always had fireball — and a speed control (1×, ½×, ¼×, pause) lets a reader freeze any cast for the screenshot they came for. Every description across all three registries now tells the truth of its own numbers.
- Fix
PHASE 0 HYGIENE, AND THE GATES THAT KEEP IT. The audit surfaced 16 spells with mis-authored data — area spells stuck as sparks, heals without their glow, smite riders wearing fire they never dealt, three pillar forms that threw at render — all repaired. An authored form the renderer cannot draw now FAILS THE BUILD, every atlas name any spell authors is swept against the shelf, and the dart volley's timing law survived its new look: every missile still born in the same instant, each on its own bow, splitting across foes exactly as the spell's words demand. The effects shelf converts to WebP — 58% smaller — and fights preload only the sheets their battle can use.
- Feature
THE EFFECTS GROW REAL FIRE. The Arcada Effector editor now lives in the repo at tools/effector — it bakes procedural particle effects into greyscale atlases, drawing real sheets where spells land: a fireball blooms as orange-bright explosion clouds, lightning becomes white sparks that scatter and fade, thunder cracks with grey shockwaves, and necrotic or poison strikes drown the target in pitch-black smoke. Hazard zones burn with looping sheets too — Flaming Sphere trails its fire in a bright loop, Moonbeam and Spiritual Weapon burn with the spirit's cold glow, void zones black out in the shadow, and swarms of insects cloud their feeding ground. Every wall sconce now flickers with a desynced flame, rendered live outside the terrain cache so the fire breathes independent of every torch around it. A grey dust poof marks any creature dropping to zero, the last breath made visible. All effects tint at runtime through the eleven-element palette — a single multiply-and-bake pass per atlas and color preloaded at battle mount — and every procedural effect stays wired as the fallback, so the edge cases and the wild spells still move like they live.
- Feature
THE EFFECTOR COMES HOME. The particle effect editor that ships these atlases is now in the repo at tools/effector, ready to expand the library — `npm run fx:editor` opens the canvas where new effects are authored, tested, and baked. The pipeline is airtight: import a sprite, paint trajectories and collision shapes, dial in timing and variance, watch it in real-time, and bake when it's right. Every effect is data: a JSON config describing every particle's birth, death, physics, and render — and the engine's fallback-first design means new effects roll out with zero risk if the atlas fails to load.
- Feature
MONSTERS DIE AT 0 HP. By the book, death saves are a hero's privilege — a monster that drops is slain outright, and the log now says so. No more battlefield limbo where a downed foe lay neither dead nor stable: enemies no longer abandon a live fight to march across the map and kneel over a body (the runaway-medic report), because there is no body left to stabilize. The last-stand ladder is untouched — Undead Fortitude, Relentless Endurance and Death Ward still catch the blow before the reaper does — and the dark below keeps its due: foes the delve resurrects after a retreat rise clean, walking and killable.
- Fix
ONE MEDIC GOES, THE REST HOLD THE LINE. When a comrade falls, the whole free party used to break formation and converge on the body. Now the party elects a single medic — the nearest standing ally who isn't locked in melee — and only they cross the field; everyone else keeps fighting. A player's own hero is never volunteered by the AI, and anyone already kneeling beside the fallen still renders aid.
- Feature
THE MUNDANE KIT FIGHTS TOO. Four tactical consumables join the shop, the loot and the pockets of the dead: CALTROPS gouge a 5-ft square that slows and bites (1d4 on entry), BALL BEARINGS spill a patch where a crosser saves or goes down where it stands, ALCHEMIST'S FIRE clings and burns at the victim's next two turn starts, and HOLY WATER sears the undead and fiends — and splashes harmlessly off everything else. Nothing here is new machinery: the bags ride the same ground-hazard rails as Spike Growth and Grease, and the flasks fly through the real attack pipeline — cover, reactions, resistances — the way a scroll borrows the cast pipeline. Both sides know the kit: a bandit with caltrops seeds the party's path while the fight is still coming, a hero out of arrows throws the flask (deliberately stingy triggers — one-shot kit burned on a scratch is kit missing at the boss), and the LLM's menu hands it aimed options the same way it aims a scroll. For the player: arm the bag and click a square, arm the flask and click a foe — the board rings what's legal, the Compendium card tells the numbers, and every line of it speaks Ukrainian.
- Feature
EVERY WORD ON ONE SHELF, AND THE SHELF SPEAKS UKRAINIAN. Half the interface kept its English inside the components — around four hundred and fifty strings that a Ukrainian player saw in English because no dictionary ever knew they existed — and the dictionaries themselves were a heap with no order. Every inline fallback moved into the English dictionary, every chrome key took a proper group name (battle, forge, sheet, offer, commander, layer…), both files are written in one canonical grouped order by `npm run i18n:fmt`, and four new gates fail the build when a key misses its translation, drops a {placeholder}, drifts out of order, or would leak a raw key onto the screen. Behind that gate, five hundred and fifty-one Ukrainian strings were written: the whole Compendium chrome, the landing page, the shared tables, the trader's counter, the account pages, the Hero Forge, the commander's asks — every surface the game owns. Thirty dead keys left with the sweep.
- Feature
ONE BOUNDARY, ONE FILE. Each language is now a folder of small dictionaries — battle.json, forge.json, trader.json, one per surface, plus a vocabulary file for the words the engine itself speaks — merged by a generated index into the same flat lookup as before, so not a single key changed its name. `npm run i18n:fmt` deals every key into the file its name says (a key hand-added to the wrong file simply gets moved), and the shape gate fails the build on a misfiled key, an unsorted file, a duplicate across files, or a stale index.
- Feature
THE LOCALE IS NAMED ua. The Ukrainian locale id and every per-locale content file renamed uk → ua — dictionaries, hero bios, settlement voices, dialogue, favours, name pools — with a saved preference migrating on read, and the Brama sync translating their ISO 'uk' at the boundary. Street animals now keep their voices in a per-locale pool too: an English ward clucks in English, an ukrainian one — по-нашому.
- Feature
BLESS AIMS LIKE MAGIC MISSILE. The engine has taken named picks for multi-target blessings since July — but an ally click never reached the marker draft, so one click cast at once and proximity chose the rest. With Bless (or Bane) armed, clicks now place markers on your chosen targets exactly as the missile's darts do, the last pick casting the whole blessing.
- Fix
A monster carrying an enchanted weapon showed the literal text 'compendium.row.gear' as a row label in its Compendium card — the key existed in no dictionary and the card renders labels straight from the lookup. The key now lives on the shelf with everything else, and the new no-leak gate makes the whole class of bug a failing test.
- Fix
THE WARBAND SLEPT — EXCEPT WHEN IT SPAWNED ON YOUR DOORSTEP. On an open field, a war-party's camp could land a few steps from the party's muster, inside the sixty-foot radius at which a camp wakes on sight — so the whole 'sleeping warband' throttle died before the first step, and one battle in ten opened as a surprise melee. Camps now keep their entire spawn spread beyond the wake radius of every muster seat, two war-parties can no longer drift into one blob (the distance promise is checked on the placed bodies, not the map's plan), and a forty-battle probe test guards the invariant the old flaky test only sampled.
- Fix
The Compendium's fallback icons matched creatures by their DISPLAY NAME — with a hand-kept Ukrainian copy of every name inside the art table, one translation tweak away from a broken icon. Art now binds to the stable content id first (locale-proof by construction); the name regex remains only for battle tokens, whose engine names are English, and the Ukrainian copies left the table.
- Fix
THE SNAKE KEEPS ITS HEAD. The bone hoard's snake skeleton drew an oversized skull with the spine's wave launching at full swing beside it — the first stroke was already a crest floating in the air, and the skull read as a separate find. The skull is snake-sized now, the spine roots at the back of it, and the coils ramp in from a straight neck — one animal, head to tail-tip.
- Fix
DARKVISION YOU CAN ACTUALLY SEE. The engine always let darkvision reveal the dark — the fog knew — but the 'night' wash painted over seen-but-unlit ground was so heavy on the dungeon's already-dark floors that a hero's sixty feet of darkvision looked like the ten-foot grope. The wash is a true dim now: what your eyes reveal in the black reads on the board, still clearly darker than lit ground and clearly apart from remembered terrain. Walls still block sight — darkvision opens the dark, not the corners.
- Fix
THE WHOLE THROW, AT ONCE. One action can land several rolls — the longsword's d20, its slashing dice, the smite's radiant burst — and the dice tray showed only the last of them. The engine echo now stacks the last actor's whole volley: every attack and damage roll of the turn's action, ending where the previous creature's rolls begin.
- Fix
THE LIVING STAND ON THE DEAD. A monster parked on a fallen body could lose the click to the corpse under it — the attack tap searched the wrong thing. Corpses now draw beneath the living, so the blade finds the wolf, not the body it stands on; the body stays clickable on its exposed edge.
- Fix
JAVELINS COME BACK TO HAND. Thrown weapons you already carry counted as 'in hand' even at ×0 — so the three javelins in the loot bag showed no Wield and could never be thrown. Drawing a counted weapon now gathers the whole looted bundle into the hand's count (one looted javelin is ONE javelin — the old path handed out a full starting kit), while ordinary steel keeps the one-in-hand rule.
- Feature
EVERY NAME ON ONE SHELF. Classes, subclasses, monsters, weapons and gear kept their Ukrainian names inside two hardcoded lists that only the battle log could read — so the Compendium showed a Ukrainian player English bestiary and gear cards, and a third language had nowhere to go. Around two hundred names moved onto the same translation shelf the spells and feats already use: the Compendium, the pickers, the sheet and the battle log now read one source, a coverage gate fails the build when a new creature or item ships without its translation, and the last two names hiding in the data files moved out with the shelf's own rules.
- Fix
THE SHELF GETS AN HONEST LABEL. The translated names of spells, feats, species and traits were filed under a 'compendium.…' prefix, though they feed every surface — the pickers, the character sheet, the battle log and the Compendium alike. The namespace is now content.name / content.desc; only the Compendium's own interface labels keep the old word. No player-visible change.
- Feature
EVERY SPELL SPEAKS EVERY TONGUE THE SAME WAY. Spell names lived inside the data rows as a single hard-wired Ukrainian field that only the battle log could read — the Compendium showed English cards to Ukrainian players, and a third language had nowhere to go. The names now live in the translations, the same shelf feats and species already use: the Compendium, the pickers and the battle log all read one source, and the Brama sync writes whatever languages the pack carries into generated dictionaries that authored translations always outrank — Ukrainian fills its gaps today, Polish and Czech sit ready for the day the language menu grows. The credits now name SRD 5.2.1 beside SRD 5.1.
- Feature
THE ARCHIVE HAS A DOOR. TactForge can now read the shared spell database (Brama — 359 spells on SRD 5.2.1, named in four languages) through an adapter that takes identity and text and nothing else: each of our spells learns its canonical name in the shared catalogue and the ruleset its text was written to, a missing translation is filled, and every mechanic — dice, saves, deliveries, zones, hazards — stays exactly as authored here. Spells the database has and we do not appear in the Compendium as archive cards ('not yet castable'), never in a spellbook. The pack is pulled by a build step (`npm run spells:sync`) and committed like any content; with none synced, the game is exactly its own data. Decision record: ADR 0029.
- Fix
THE SPELL DATA HAS A SCHEMA. The spell catalogue was read on trust: nothing checked a row against the contract, so the data had drifted — Moonbeam, Blade Barrier and Call Lightning were 'wall' deliveries the contract did not name, six gaze spells and Sunbeam's line likewise, and Shield and Counterspell said 'action' with no reaction flag, kept off the turn menu only by their effect. A validator now holds every authored row to the contract (a test runs it), the contract admits every delivery the board renders, reaction spells say so in their data, and a manifest names the schema version and the ruleset the rows were written to.
- Feature
THE BOSS HUNTS. The lair leash kept a boss within forty feet of its post in EVERY direction — so an archer who shot from the doorway and stepped back was never followed: hit and hide from outside the leash beat every boss on every floor. The leash now binds retreats only. A move that leaves the lair to close on a foe is a chase and it passes — the auto-advance follows whoever backs off, the Narrator's boss may choose the same, and its standing order says so: a foe who strikes and runs is hunted down; the only direction it never takes is away from the fight.
- Feature
THE DICE DECIDE. Every class template started its prime score at 16 — plus the background's +2, plus the first ability improvement — so a level-4 warrior walked in at 20 and identical to every other. Now the table's own throw decides: 4d6 drop lowest, six times, the best die to the class's first stat. It is the default for every character nobody hand-built — the builder's own slots on every class pick, the 🎲 random party, the tavern's hirelings (fixed by the visit's seed) and a forge hero whose scores were never touched. Point-buy stays for anyone who takes the steppers; a shared link carries the throw, and a Reroll keeps the party's dice — same heroes, fresh field.
- Fix
ONE ASK PER FIGHT. The scene-setting intro asked the Narrator for its opening from inside the overlay's own lifetime — tear that down with the answer still on its way (a board remount) and the line was thrown away unread: the log showed two warm-up pings, one opening, and the stock line on stage. The opening and the warm-up now belong to the FIGHT: a remount attaches to the same requests, a line that already landed is on stage at once, the thirty-second cap counts from the first ask, and the stock line can no longer overwrite a real one that arrived before it.
- Feature
POCKETS OF THE DEAD. A slain foe used to carry its purse and, one in six, a hidden gem. Its belt can hold more now: a potion (a rat's healing draught, a champion's greater one), a scroll, a vial of poison — odds by rank, on the belt where a search finds them at once — and, on a floor with a locked door, ONE iron key on the commander or the toughest of them. Beasts and the dead carry nothing; a wolf has no belt.
- Feature
A KEY OPENS A LOCK. The floor's iron key turns in any locked door — no check, no splinters, the key spent. Picking the lock and battering the door stay as they were; a barred gate has no keyway.
- Feature
POCKETS, NOT THE BAG. A looted potion, scroll, poison or key goes into your pockets — drinkable, readable, usable next turn — instead of the loot bag that only opens at home. Gems and gear still ride the bag.
- Feature
THE GAME MASTER'S GIFT. At the game master's seat, a foe's Inventory tab gains a Give item picker: a potion, a scroll, a gem, the key or the map slipped into its pockets for the party to find. Foes only — the game master never edits a hero's sheet.
- Fix
THE TALE KEEPS NO CLOCK. The after-battle recap opened on the round count ('after the decisive twenty-six rounds…') — the number the screen already prints beneath it. The Narrator is no longer handed the count and is told not to speak it.
- Feature
THE CULT HAS RANKS. The bandit roster held only the cultist (a dagger, nine hit points) and the Cult Fanatic two whole tiers above, so a level-4 party's budget bought a crowd of cultists who could not scratch chain mail. Four new bodies stand between them on one cultist archetype: the CULT GUARD (spear and shield, holds the door), the CULT ZEALOT (two mace blows a turn), a robed CULT CASTER (Fire Bolt, Magic Missile, Burning Hands, Shield) and the CULT WARLOCK (Eldritch Blast, Hex, a lightning tether, Armor of Shadows). The cultist itself carries its stat block's scimitar and Dark Devotion now, and retires at party level 3; the guards arrive at 2, the rest at 3, the Fanatic leads from 5.
- Feature
THEY ANSWER EACH OTHER. A creature's line is a reply now: it gets the last few spoken lines — its own side's and the party's — and picks up the thread, taunts back or answers, instead of opening a fresh non sequitur every time.
- Fix
A WOLF HAS NO WORDS. The Narrator's model voiced every creature, so a wolf traded sarcasm across the field. A beast now reaches the model only while someone in the party has cast the new SPEAK WITH ANIMALS (bard, druid, ranger; a nature oath knows it) — and then it talks as an animal, not a person; a skeleton never does. Growls and rattles stay as they were.
- Fix
THE INTRO KEEPS THE DELVE'S SECRETS. The warm-up milestones listed every room the floor had dressed and every kind of foe on it before a torch was lit. They say how much they found now — 10 rooms, 8 kinds of foe — never what.
- Fix
THE SHEET FOLLOWS THE ONE WHO ACTS. Using or arming anything from the actions bar while inspecting another creature's card brings the sheet back to your hero.
- Feature
WORN GEAR AS CHIPS. Chain mail, shield, torch: one chip row under the weapons, the rules text on hover; the Inventory tab's Worn section now carries that text in full. The pack — potions, scrolls, poisons, valuables — keeps its rows with their Drink / Give / Use buttons.
- Feature
A SCROLL CUE. When the sheet holds more than it shows, its foot fades into a small 'more below' — a cut row can no longer pass for an overlay.
- Fix
ATTACK ABOVE THE FOLD. On a narrow column the sheet's header wrapped and the stat grid pushed the weapons under the fold, where the clipped Attack button looked like the actions card sitting on top of it. The weapons now sit right after the turn's pips — before the ability grid — so the strike is on screen at every width; the AC badge keeps its arithmetic, with the parts by name on hover.
- Fix
THE ACTIONS CARD IS PINNED TO THE FOOT of the sidebar. A short panel above it — the Inventory tab, a bare enemy card — used to let the bar float up under the panel with dead space below; it now sits at the bottom whatever is shown above.
- Feature
EVERY FEATURE SPEAKS UKRAINIAN. The action cards, the sheet's Features list, the forge's feature and feat pickers and the compendium read every class feature, feat and trait — all 256 — in the chosen language: names and rules text both, with English as the fallback the way spells and species already worked. The hard-coded cards of the universal kit (Dash, Dodge, Hide, Search, the torch, the beam sweep, the grapple, Wild Shape, the retreat…) went the same way.
- Feature
WILD SHAPE BESIDE THE SLOTS. A druid's uses now sit in the Magic section next to the spell-slot pips — 🐾 ●●○ — spent pips hollow, the way a slot's do; no more digging the count out of a tooltip.
- Fix
LAND'S AID reads as the rules write it — vitality-giving flowers and life-draining thorns — not spores; spores belong to another circle.
- 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, Ensnaring Strike, Freedom of Movement, Hypnotic Pattern, 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), a barbarian path's Bear/Eagle/Wolf, the Draconic ancestry, the Champion's second Fighting Style, a fighter'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; a shapeshifters' circle's bigger beasts and spellcasting in fur), Wild Resurgence at 5, the Land's Nature's Ward and Nature's Sanctuary, every tier of the other circles — 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 tier of the Hunter and its sibling paths; Magical Cunning, Mystic Arcanum, the full invocation list and every patron; 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 and every other domain's tiers — dawn light, a warding flare, a trickster's double, a war god's guided blow — with each domain's spells. Aura of Courage at 10; Devotion's Aura of Devotion and every other oath's tiers — vines that RESTRAIN, a quickening aura, an avenger who pursues — with each oath's spells.
- Feature
BARBARIAN, BARD, ROGUE. Berserker's Retaliation, and the other paths' tiers — a level-sized well of vitality, life-giving force, a pull on the branches and battering roots, a zealot's focus and presence. A bardic die that grows, Expertise at 2 and 9, Font of Inspiration, Countercharm, Magical Secrets, Lore's Magical Discoveries and the other college's inspiration in combat. The rogue's CUNNING STRIKE — Poison, Trip, Withdraw, armed like a smite — with Improved Cunning Strike's Daze and Knock Out, Supreme Sneak, and the other archetypes' tiers — psionic blades, and a killer's opening strike and poisoned steel.
- 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, and the other origins' surges of chaos, bent luck and bastions of law. The Champion's Heroic Warrior; maneuver dice that ride a hit to trip, menace or disarm, rescue a narrow miss, riposte or rally; a spell-knight's strike; a psionic warrior's thrust and guarded mind. A warding wizard's projected ward and spell-breaking; 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, Flurry of Blows, Patient Defense, Step of the Wind, Large Form, Adrenaline Rush, a monk's healing touch and a heritage's revelation 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 game master, 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 — the archer's feat is now +1 DEX and pure marksmanship (no long-range penalty, no cover, a clean shot even with a blade at your throat), the heavy-weapon feat 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 the luck feat scale on proficiency now, the heavy-armor feat shrugs proficiency off every blow, and the two-weapon feat 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: a bludgeoning feat 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 a medic's feat makes the kit mend as it wakes (+1d6+proficiency on First Aid). Both origin feats join the background pool.
- Fix
The battle-caster's feat finally holds the spell it was hired to hold: ADVANTAGE on concentration saves. The leader's feat's speech grants TEMPORARY HP now (it was quietly inflating real max HP). The caster-hunter's feat gains a 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 the long-range spell feat 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 a warlock's PACT FOCUS (+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 standard 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 a new 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: TENDRILS erupt from your body and steal reactions, a HUNGRY DARK opens a lightless sphere of gnawing cold, an ARMOR OF ICE wraps you and 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, a whirl of conjured BLADES, 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 a PSYCHIC SPLINTER 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 a college of arms that 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: a barbarian's divine fury and another's sheltering bark, a paladin oath of renown, a psionic fighter and a psionic rogue, a wizard's ward and a wizard's omens, a sorcerer who grinds away misfortune, two new warlock patrons, two new monk traditions, two new ranger paths, and the bard colleges. Rangers now carry Hunter's Mark from their first day; the barbarian's animal path answers to its new name.
- 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; the HEAVEN-TOUCHED 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
THE THORNED LASH 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
THE THORNED LASH PULLS AGAIN. The yank was implemented only on the spell-cast path — but the lash 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 Narrator'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 a subclass 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 — rarity-band pricing (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 list 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 by-the-rules 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 thorned lash'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's 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 Narrator 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, the 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
The thorned lash cantrip 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
The lightning tether spell 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.