Changelog
Every change and fix, newest first.
- Fix
THE PARTY FOLLOWS YOU DOWN. Take the stairs to the next floor and your companions came no further — they turned around and wandered the level you had just left, forever. The doctrine that queues them onto the ladder was looking for a stairway flagged as DISCOVERED, a mark only ever put on a SECRET way down; the plain ladder every dungeon floor carries has no such mark, so the column read the floor as having no way onward. Now one shared rule answers "is there a way down here" for the AI, the action bar and the map alike — the stay-behinds file onto the ladder a few turns after you and walk out of the stairs beside you.
- Feature
THE MACE TAKES THE FIELD: Spiritual Weapon is no longer an invisible sidearm — the spectral mace MATERIALISES on a cell you choose, swings the moment it appears, and on every later turn a ⚔️ bonus action floats it up to 20 ft to swing again (1d8+WIS force, +1d8 per higher slot, spell attack with your focus bonuses). It hovers on the board, it goes where you send it, and it vanishes the moment concentration breaks.
- Feature
FLAMING SPHERE rolls in beside it: a ball of fire that fills a cell, burns whoever it touches for 2d6 (+1d6 per higher slot), and SHOVES up to 30 ft as a bonus action — the same sweep controls as the mace and the moonbeam, and the AI druid drives all three.
- Feature
THE BEAM ANSWERS THE HAND (2024): Moonbeam is no longer nailed to the cell it fell on — on your later turns, a 🌙 MOVE BEAM action appears while you concentrate: arm it, and sweep the silver column up to 60 ft across the board. Drag it onto the archer who thought range was safety — the column burns whoever it lands on, and the AI druid has learned the same trick.
- Fix
The edge of the world stopped being a corridor: the map's outermost ring was ground no generator ever painted — yet the rules counted it as open floor — so a one-cell walkable moat ran right around every battlefield, drawn as a bare untextured frame you could see in the corner. Road, forest and village arenas now close that rim with the same terrain their walls are made of, ragged rather than ruler-straight. Dungeons never had the fault (solid rock already), and the wilderness closed its rim last patch.
- Feature
THE WALK HOME BITES BACK: freeing the captive is no longer the end of the story. A pursuit lurks in the brush at the midpoint of the escort route — silent as you march in, SPRUNG the moment the rescue is noticed. “🏹 CRASHES from the brush!”
- Feature
NO TWO WILDERNESSES ALIKE: quest maps roll their own dimensions (90–130 a side, any aspect) and their own warband count (2 to 5 camps — a new five-camp WAR COUNCIL layout joins the template book), and four new camp themes take the field: the ORC WAR-CAMP, the CULT SHRINE, the LIZARDFOLK MOUND, and the HOBGOBLIN WARBAND — ten themes now, all pure data.
- Feature
THE OPEN FIELDS JOIN THE NEW WORLD: medium and large open battles now lay out through the noisy-Voronoi zone engine that built the quest wilderness — territory seams, meandering roads, rivers with bridges, a sealed horizon — instead of the old scattered-scenery yard. The pack musters in its own grounds across the field; small skirmish yards and forced scenes keep the classic builder.
- Fix
ONE VOICE PER BEAT: an ally no longer stacks an order bark AND a temperament line in the same breath — the canned word wins the moment, the LLM voice waits its turn. And “Done.” is HONEST now: an ally who obeyed but couldn't do the thing (Hide with no cover in reach) says so — “No way to do it from here.” — instead of claiming a deed that never happened, every turn, in the same words.
- Feature
THE FEAT BOOK CATCHES UP TO 2024: the −5/+10 power gamble is GONE — SHARPSHOOTER is now +1 DEX and pure marksmanship (no long-range penalty, no cover, a clean shot even with a blade at your throat), GREAT WEAPON MASTER is +1 STR whose two-handed hits simply land HEAVIER (+proficiency once a turn, and a crit or kill still earns the bonus swing). ALERT and LUCKY scale on proficiency now, HEAVY ARMOR MASTER shrugs proficiency off every blow, and DUAL WIELDER trades its old +1 AC for what it always should have been — the off-hand ANSWERS as a bonus attack.
- Feature
Three feats join the shelf: CRUSHER completes the crit trio (+1 CON, bludgeoning hits shove 5 ft, a crushing crit leaves them reeling — advantage on the next attack against them), SAVAGE ATTACKER rolls its weapon dice twice and keeps the crueler set, and HEALER makes the kit mend as it wakes (+1d6+proficiency on First Aid). Both origin feats join the background pool.
- Fix
WAR CASTER finally holds the spell it was hired to hold: ADVANTAGE on concentration saves. INSPIRING LEADER's speech grants TEMPORARY HP now (it was quietly inflating real max HP). MAGE SLAYER gains GUARDED MIND — the first failed INT/WIS/CHA save each battle simply doesn't fail. SKILLED grants three REAL proficiencies (Investigation, Survival, Medicine — kit included). MAGIC INITIATE learns two cantrips and pockets Magic Missile. And SPELL SNIPER no longer advertises a range doubling that never existed — what it does is real: cover ignored, melee no matter.
- Feature
THE CHARM TIER — six pocket-magics cheap enough for a first delve, none needing an attunement slot: the LUCKY COIN that lands face-up (+5% quest gold), the TRAVELER'S COMPASS that knows shortcuts no map shows (long roads run a day shorter — fewer camps, fewer ambush dice), the RING OF FOCUS that stills the casting mind (+1 to hold concentration), the EMBER CRYSTAL that never cools (fire spells burn +1 — Fire Bolt and Fireball alike), the HUNTER'S FEATHER (+1 initiative), and the LEATHER CHARM, a hedge-witch's knot that turns the first blow of every battle 2 points aside.
- Feature
ATTUNEMENT arrives: an artifact's magic now flows only while you're attuned to it — THREE at most, chosen on the hero sheet with a tap (the sheet shows ◈ 2/3 and the whole hand). Old heroes are grandfathered: their first three artifacts attune themselves, nobody loses a cloak to the rulebook.
- Feature
The pack splits honest: the battle inventory now reads WORN & WIELDED (the suit on your back, the shield on your arm, the rings that answer you) apart from the BACKPACK (potions, scrolls, gems, the spare suit that was never anything but weight).
- Feature
THIRTEEN new artifacts fill the arsenal's empty shelves — the archer's BRACERS OF ARCHERY (+2 on every arrow), rings of FIRE/COLD/LIGHTNING RESISTANCE, GOGGLES OF NIGHT that fight through magical darkness, the SENTINEL SHIELD whose eye never blinks (advantage on initiative), BOOTS OF SPEED, the STONE OF GOOD LUCK (+1 to every check and save), and the RING OF FREE ACTION no grapple, slow, or paralysis can touch.
- Feature
Spellcasters get their FOCUSES: the WAND OF THE WAR MAGE (+1/+2 to spell attacks) and the ROD OF THE PACT KEEPER (+1/+2 to spell attacks AND save DCs) — the caster's answer to the fighter's +1 blade.
- Feature
Two NAMED BLADES for the deep shelves: FLAME TONGUE, whose edge carries +2d6 fire into every hit, and FROST BRAND — +1d6 cold, and the frost shields its wielder from fire while drawn.
- Fix
ADAMANTINE armor finally keeps its promise: a critical hit against the wearer lands as an ordinary blow. The suits sold for that exact line, and until today the line was decoration.
- Feature
The ceiling LIFTS: the campaign now climbs to LEVEL 12. The XP ladder runs the full DMG track, full casters reach SIXTH-level slots at 11, and the martial peak arrives — the fighter's third attack, the paladin's RADIANT STRIKES on every melee blow, the barbarian's RELENTLESS RAGE that refuses the killing blow, the rogue's RELIABLE TALENT that never rolls below a 10 where it's trained.
- Feature
Eight SIXTH-level spells to spend those slots on: CHAIN LIGHTNING leaps through the clustered, DISINTEGRATE turns a bad save to dust, CIRCLE OF DEATH and FREEZING SPHERE swallow thirty feet at a stroke, SUNBEAM burns AND blinds down a 60-ft line, BLADE BARRIER rises as a wall of whirling steel, HARM speaks a plague, and HEAL knits ~70 HP whole at range.
- Feature
The wilderness grew EDGES and SECRETS: big water finally obeys the rule of three — a lake deeper than its shoreline melts into one still surface with a glinting sheen instead of a grid of blue squares. The map's rim now closes behind you — every border seals with its own zone's terrain, mountains walling the hills and thickets hemming the marsh, and the only gap in the treeline is the road the party walked in on (the doorway future journeys will leave through). And the deep wilds hide PRIZES: loot caches tucked far from every camp and road — a scroll, a potion, a treasure map for whoever bothers to look — so straying off the path is a habit worth keeping.
- Feature
Water learned its true names: the little blue stamps are PONDS now — open water cupped in a ring of reeds — and a real LAKE is a landmark, one great rounded body some forty cells across with a reedy shore, lobed like something the ice age left behind; where a road meets it, a bridge carries you over. The rescue objective's stone fortress BACKS ONTO THE MAP'S EDGE like a proper frontier fort instead of floating mid-field, and wilderness caches now nest against a copse or a rock spur rather than sitting on bare ground. One more thing about those caches: sometimes the chest has TEETH. A mimic waits disguised among the real prizes — reach for the loot and the 'chest' lunges, hungry, exactly as chests have always secretly wished to.
- Fix
The paladin answers to the new book: DIVINE SMITE is a BONUS-ACTION spell now — one smite per turn, competing with every other bonus action, never one per swing of Extra Attack. The nova is dead; the choice is alive.
- Fix
Allies found their VOICE again: the acknowledgment bark now lands the moment an order is given (a spoken word no longer needs to wait for its speaker's initiative), and a carried-out order is confirmed out loud — “In position — quietly.” — in the ally's own voice, alongside the refusal lines that already talked back.
- Fix
The wilds shed their ruler: the map's sealed rim now BREATHES — the treeline lobes one to three cells deep instead of framing the board in a straight strip — and one or two extra doorways open on the far sides, worn trails leading through them toward lands not yet visited. Roads and trails MEANDER like walked paths instead of cutting one dead-straight line to the horizon. Lakes finally merge for real — any pool past three cells becomes ONE body wall to wall, its shoreline a single soft outline (the old rule only ever flattened a lake's middle cell). And the hidden descent seeks a MOUNTAINSIDE now: the cave mouth nests in a pocket of rock away from the roads, not on flat grass beside the highway.
- Feature
DARKNESS falls — real magical darkness that swallows a 15-ft sphere: every blade and bolt through it falters… unless you SEE. The warlock's DEVIL'S SIGHT (level 2) turns their own gloom into a one-way hunting blind, and the new BLIND FIGHTING style lets a fighter read the air within reach. The drow's birthright is complete: Faerie Fire at 3 — outlining foes in light no shadow hides — and Darkness at 5.
- Feature
The warlock's dark arsenal: ARMS OF HADAR erupt from your body and steal reactions, HUNGER OF HADAR opens a lightless sphere of gnawing cold, ARMOR OF AGATHYS wraps you in ice that bites back at whoever dares a blade. And more steel for every list: SLEEP drops the unwary helpless (pain wakes them), BLINDNESS, MIRROR IMAGE's dancing duplicates that eat the blows meant for you, WEB, CLOUD OF DAGGERS, PHANTASMAL KILLER, INSECT PLAGUE, FIRE SHIELD, GREATER INVISIBILITY — a veil that survives your own attacks.
- Feature
The cleric's SPIRITUAL WEAPON floats to war — a spectral mace cast as a bonus action, swinging each turn off wisdom alone — and SPIRIT GUARDIANS wreathe you in a moving halo that scours whoever your steps carry it over.
- Feature
Four spells join the book: RAY OF SICKNESS (a sickly 2d8 beam — the Abyssal tiefling's birthright at level 3, exactly as the book writes it now), COMMAND (one word — GROVEL — and the proud eat dirt), SLOW (time thickens in a 20-ft zone; blades drag, steps falter), and MOONBEAM (a silver column that lingers and burns whoever stands in it — the druid's answer at last).
- Fix
The healer's hands caught up with 2024: CURE WOUNDS mends 2d8, HEALING WORD 2d4, MASS HEALING WORD 2d4 — all doubled as the new book demands. INFLICT WOUNDS is a CON save now (2d10 necrotic, half on success), not an attack roll; ICE STORM's hail corrected to 2d8 bludgeoning + 4d6 cold, RAW to the die.
- Feature
The arena learned to LISTEN to its playtesters: anonymous session telemetry (Microsoft Clarity, replays + heatmaps) now marks the journey's beats — a battle built, a battle finished and how it ended, the brave second battle, the descent underground — and the first few client errors phone home instead of dying silently in a stranger's console. Fully silent unless the deployment carries the project key: dev machines, CI and tests never report anything.
- Feature
The cantrip shelf is FULL — sixteen now, every 2024 cantrip the engine can truly cast: POISON SPRAY chokes at close range, PRODUCE FLAME and STARRY WISP arm the druid and bard, SHOCKING GRASP steals the reaction right out of a foe's hands, SORCEROUS BURST is raw magic barely shaped, SHILLELAGH swings a druid's cudgel by wisdom alone, ACID SPLASH bursts in a little sphere that spares no one, and MIND SLIVER drives a cold thought between the eyes.
- Feature
The BARD arrives — the twelfth and final 2024 class: a CHA-singer whose Bardic Inspiration rides an ally's next attack or save (+1d6), whose Vicious Mockery makes foes reel at their own swing, and who picks a college at 3 — LORE, whose cutting words shave the sting off blows meant for friends, or VALOR, who answers with armor and a second blade-stroke.
- Feature
WEAPON MASTERY lands for every martial class: in trained hands each weapon has a signature — the rapier VEXES a foe open, the longsword SAPS their next swing, the quarterstaff TOPPLES, the greataxe CLEAVES into a second neck, the dagger NICKS twice, the greatsword GRAZES even on a miss, the warclub PUSHES, and slings and bows SLOW the fleeing.
- Feature
The monk finds its FOCUS: a well of inner power fueling Flurry of Blows (two fists in a breath), Patient Defense, Step of the Wind — and from level 5, the STUNNING STRIKE that drops weapons from paralyzed hands. Rogues learn their trade in full too: Steady Aim, Uncanny Dodge, Evasion.
- Feature
SIXTEEN new subclasses: the Zealot's divine fury and the World Tree's sheltering bark, the Oath of Glory, the Psi Warrior and the Soulknife, the Abjurer's ward and the Diviner's omens, the Clockwork Soul that grinds away misfortune, Celestial and Archfey patrons, the monk Ways of Mercy and the Four Elements, the Gloom Stalker and the Fey Wanderer, and the bard colleges. Rangers now carry Hunter's Mark from their first day; the Totem Warrior answers to its 2024 name, Wild Heart.
- Feature
Zones GROW UNTIL THEY MEET now: a noisy Voronoi grows outward from each camp's site until two regions' real terrain runs into itself — forest against bare rock — with no dead neutral crust between them. The seam only opens where a gate stands flanked by real posts, and each zone thins from that seam toward its camp's clearing in cohesive clumps, not lone-cell speckle. Every map rolls its BIOME first — forest, mountain, marsh, plains — and that one roll colors the seam materials, the water, and which layouts are even eligible to appear.
- Feature
Big layouts can carry a LANDMARK now: one dominant ruin — a ruined fortress, a great cairn — and the hidden descent prefers to shelter inside it, so a skyline you can see from across the map is a real lead. A CAVE doesn't play coy: cave mouths and cairns show their stairs from the first frame, while a descent buried in a temple stays a secret to sniff out. The new FOUR-CORNERS layout posts a camp in every corner with the landmark ruling the crossroads. Worn TRAILS make roadless maps and pass crossings read at a glance, diagonal roads finally turn a corner instead of staircasing, and the party arrives walking in over a road or trail from the map's edge instead of popping up mid-field.
- Feature
Camps got BUILT UP: lairs raise their own outbuildings (the troll's sheds, a ruined lean-to at the wolf den), stockades fill in with interior huts, and the rescue objective's camp is a proper fortress now — one gate, doubled furnishings, its traps clustered at the door. The big map draws smoother and lighter too: deep forest, bog and rock interiors render as soft flat masses instead of a full sprite grid (edges still keep every detail), cutting canvas node count by up to 39%.
- Feature
The commander can order HIDE now — the radial gains a stealth call, and it matters: a party that slips out of sight can walk PAST a sleeping camp. Every member rolls their own Stealth against the garrison's sharpest passive Perception; whoever fails to vanish is the one the sentries see — the weakest link wakes the war band, and any attack still blows everyone's cover. The wild ground between camps filled in too: copses, knolls, ponds and bogs now dot the empties (each biome scatters its own mix), and while a split party plays, both boards write ONE story — the surface's lines land in your log marked ⬆ as the rounds interleave. And a sneaking party keeps AMBUSH DISCIPLINE: hidden allies hold their fire and shadow the leader in silence — the opening strike is the leader's to make (or the commander's to order), and only a member whose own cover is blown fights before the signal.
- Fix
The board REMEMBERS now: ground the party walked stays dim-remembered instead of falling back to black after a floor switch, a view toggle or a reload — explored memory reads from the engine's persistent record, not a forgetful view-side copy. Fast panning no longer punches holes in the fog (it rasterizes to one image that only redraws when someone actually moves), the terrain layer stopped redrawing on camera moves entirely, and the whole stage runs on four canvases instead of six — big-map scrolling is close to pure blitting.
- Fix
The ladder is a DOORWAY, not a teleporter: descending a wilderness cave takes only the companions who actually made it to the entrance — anyone lagging behind waits on the surface and rejoins when the party climbs out. And a pacing leader can't dither the watch forever: the shuttle-breaker now catches back-and-forth wandering even when each pass drifts a little sideways, planting its feet until the world gives a better reason to move.
- Feature
The roster is FULL — all ten 2024 species: DRAGONBORN pick their dragon (five ancestries, each an elemental hide and a true 15-ft breath cone that recharges like a wyrm's); GNOMES are small, sharp, and shrug mental magic with advantage; GOLIATHS carry a giant's boon — fire that erupts from their hits, frost that slows, a hill's tumble that bowls foes over, stone that shrugs damage — and at level 5 they GROW LARGE on the field, a true 2×2 presence; AASIMAR lay on healing hands and, from level 3, unveil their nature — spectral wings that fly, inner radiance that sears, or a necrotic shroud that makes the brave quail.
- Feature
The game speaks Ukrainian where it matters most: every species, lineage, background, and racial trait now translates — powered by data, not code. Content stays English in the registries; locales seed name/description keys on top, so a new language is a dictionary file away.
- Feature
The 2024 rules land: races are SPECIES now, and none of them carries your +2/+1 — your BACKGROUND does. Eight backgrounds (soldier, criminal, sage, acolyte…) each bring the ability bump, an Origin feat granted free, and two skills folded into your sheet. Every hero is a story before they're a statline.
- Feature
Species got their 2024 kits and LINEAGES: the three elves are one Elf with a chosen lineage — High Elf (Fire Bolt, Misty Step at 5), Wood Elf (35ft, melts into cover), Drow (120ft darkvision, no more sunlight woes). Tieflings pick a fiendish legacy — Infernal (fire, Hellish Rebuke), Abyssal (poison, Hold Person at 5), Chthonic (necrotic, Chill Touch). Dwarves merged their clans: speed 30, 120ft darkvision, stone-wise. Halflings walk 30 now. Half-orcs became true Orcs.
- Feature
New blood, new tricks — all wired into the fight: the orc's ADRENALINE RUSH is a bonus-action dash with temp HP that soaks hits first; the human's HEROIC INSPIRATION rerolls the battle's first failed attack or save; halfling Luck now rerolls natural 1s on saves too; dwarves shrug poison saves with advantage and read worked stone (Stonecunning) for traps.
- Fix
Old heroes are safe: saved builds and battle links speaking the 2014 names (hill-dwarf, high-elf, half-orc…) migrate onto their 2024 species and lineage automatically — same character, new bones.
- Feature
The wilderness is drawn from TEMPLATES now: the map is regions, and each camp rules its own zone behind a sealed ridge of its biome — joined to the rest only where a road gate, a bare mountain pass, or a river bridge lets you through. Some maps have no roads at all; find the passes. Camps come in two builds: the walled stockade you know, and LAIRS — a wolf den under the trees, a troll's hovel in the rocks — a small squat holding drowned in its own wilds.
- Feature
Dungeon mouths can hide in CAVES now: a rock-ringed hollow off the path with a dark opening in the back wall — as real a lead as a ruined temple, and more likely to be the one hiding the stairs down. Every layout, zone, and lair is data (map-templates.json): a new map shape is a JSON entry away, and the same schema is the save format the future map editor will write.
- Feature
The party fights to a PLAN: each round the squad brain assigns pin / focus / finish / guard / hold-the-blast jobs that stick until the situation breaks them — no more target flip-flopping.
- Feature
AI allies call their plays — 'The brute's mine!' when they take a job, and they call the kill when their mark goes down.
- Feature
The AI reads the board better: menu options warn about opportunity attacks, and a bunched-up party is told to SPREAD OUT while an enemy caster can still blast an area.
- Feature
The stairs are a doorway, not a teleport: each hero walks onto the ladder and steps through alone — allies file in behind the leader, the mouth of the delve works the same way, and nobody is yanked across the map. No safety-net teleport either: whoever stays behind, stays behind.
- Feature
The party leash: an AI hero no longer marches off alone through two doors into a waiting mob — moves that would leave every ally behind are held ("holds formation"), unless they join the party's own fight.
- Feature
The Journal is a bound parchment tome: chapters across pages you flip (corner arrows or ← →), the diary of things heard spilling onto further leaves, and larger, book-worthy type throughout.
- Feature
Casters aim like players now: area spells search for the clean cell BESIDE the cluster when a friend stands too close — so Spike Growth and the other battlefield-shaping spells finally show up on the menu, and shaping the ground is worth it on smaller packs than a fireball needs.
- Feature
Fully data-driven map generation: every choice the generators make — maze topologies and their weights, room-shape odds, spiral winds and branch forks, battlefield density, rampart gaps, the castle's dials, the scene-painter pool — now lives in commented JSON policy files. The code only rolls what the data offers, and shipped defaults reproduce every existing seed exactly.
- Feature
Town generation joined the doctrine: street widths, where the road out leaves, lamp spacing, and the crowd's faces and numbers are commented JSON policy too — and settlement content is organized by domain (places · voice · scene · economy) in both code and data, with golden ward fingerprints guarding that no town silently moves.
- Feature
Every authored town knob is real now: barrels and crates lean on the lane verges, a ward that authored woods gets its trees, houses counts are a floor under the density fill, big city lots keep an open courtyard at their heart — and the animals are HERE: authored chickens, cows and dogs wander the streets with the villagers, muttering the occasional Му-у.
- Feature
The floors coexist: the board the hero leaves no longer freezes — the allies still up there keep taking their own turns, walk to the stairs the hero took, and step out of the ladder onto your floor a few rounds behind you. No teleports, no one stuck outside forever: whoever is cut off or mid-fight genuinely stays until helped.
- Feature
Switch the view between the split party's boards: from inside the delve, a LIVE peek at the surface (green ● — time visibly runs, your allies act on their own); from the surface, a look at whoever went down ahead; and the floor strip's spectate windows go live too when the ticker is driving that floor.
- Feature
Captives sit in CAGES now: iron bars ring each hostage (you see them through the bars), the one way in is a locked cage door — smash it or pick the lock — and a bound captive can't be hurt at all: no stray fireball, fumble or lucky arrow ends the rescue by accident. The freed escort is as mortal as ever; the walk home is the real danger. And with the camps sleeping properly, an all-AI party now marches on the nearest camp instead of pacing the muster forever.
- Feature
The wilderness got civilised: a real ROAD now runs from the muster through every camp — bridging the rivers it crosses — each camp's rampart opens its GATES exactly where the road crosses (in and, for waypoint camps, out — nowhere else), camps are furnished with their theme's props (a hearth, crates, kegs), and landmark RUINS stand off the road: a crumbled temple, a watchtower, an old farmstead — broken walls, a centrepiece, rubble — and the hidden dungeon mouth now prefers to shelter INSIDE one of them, so a ruin on the horizon is a real lead. The random scatter calmed down too: fewer, bigger clumps — no more lone trees sprinkled like noise.
- Fix
A hero who slipped out through the escape zone no longer blocks the exit for the allies behind — the endless-Dash retreat softlock is gone.
- Fix
Enemy commanders no longer waste the fight wrestling their own hostage or chasing heroes who already fled — captives and the escaped are off every target list.
- Fix
Running delves left the notice board — the way back into one lives in the Journal, riding the work it belongs to.
- Fix
Bigger, friendlier text in town talk, dialogue, and the Journal — and the goodbye line finally speaks your language.
- Fix
A healthy hero standing face-to-face with a wounded foe is no longer offered Dodge or Disengage — the option to waste the turn bracing only appears once genuinely hurt.
- Fix
The AI no longer reads exact enemy health it never assessed — unexamined foes show only how wounded they LOOK, until a Medicine check reveals the numbers.
- Fix
The battle-results screen fits the window: the combatant table scrolls inside the modal, and the buttons stay put.
- Fix
Townsfolk remember the whole conversation now — asking several questions in one sitting no longer forgets all but the last, so a talked-out villager stays talked out.
- Fix
Dungeon maps fit their dungeon: the carved maze no longer huddles in one corner of a huge empty board — the map crops to the content, and everything that scales with map size gets faster for free.
- Fix
Map-generator content went data-driven: dungeon sizes, arena scenes and sizes, room furnishing themes, and the battlefield rampart biomes all live in JSON now — add content there, not in code — and the two generators finally agree on which scenery is solid.
- Fix
No more spells cast at empty air: an area burst re-aims at its target's current position the moment it's cast — and if the moment has passed, the caster keeps the slot and swings instead of blasting scenery.
- Fix
No more pacing forever: a creature caught walking A→B→A→B for four turns plants its feet for a beat (still swinging at anything in reach) instead of shuttling all night — the mechanical cure for the whole family of two-minds movement loops.
- Fix
Monsters carry real gold now: every enemy gets its purse the moment the battle exists — commanders and elites carry heavier ones — the sheet shows it, and searching the body pays out exactly what was carried instead of conjuring coins from nowhere.
- Fix
Rescue quests play as designed now: a bound captive is a civilian — it takes no turns, never wakes the camp holding it (no more map-wide round-0 fights), doesn't count for morale, and its death fails the QUEST, not the battle — the fight goes on and vengeance still wins the field. A lair-bound boss with a foe in reach is never offered the retreat it can't take.
- Fix
The purse pill shows the coin your party is CARRYING on a running expedition (+N on the run) — looted gold banks when the run clears, and now you can see it riding home instead of wondering where it went.
- Feature
DUNGEONS STOP READING LEFT TO RIGHT. Every delve used to be the same thing wearing different clothes: rooms on a rigid grid, always wider than tall, always entered from the top-left corner, with the master of the place always waiting in the bottom-right. You could find him by walking right. A dungeon now has a SHAPE of its own, rolled apart from its character — a spiral you wind inward with the boss holding the eye of it; a ring with an inner court, so there are two ways round to everything; a hub with arms, where the real question is which arm to spend your torches on; a branching warren that mostly dead-ends; a cave web with no axis to follow at all; and the old grid, which now lets you in from any edge. The way in moves, so the way on moves with it.
- Feature
TOWNSFOLK ASK YOU FOR HELP. Walk up to anyone and ask whether they need something doing. Most don't — but some will tell you about a brother who went to the steading and never came back, a ring taken when raiders came through, or whatever has been fouling the nets past the bend. Take it on and THEY owe you: their name goes in your journal, and you report back to them, in their ward, by name. Forty-eight of these, matched to the sort of place you're standing in.
- Feature
EVERYONE IN THE CROWD IS SOMEBODY NOW. Townsfolk used to be nameless — fine for muttering, useless for someone you have to find again. They have names and trades that suit their ward, the same person on the same corner every time you return, and none of it takes a byte of save data.
- Feature
THE QUEST BOOK BECOMES A JOURNAL. It kept your work in hand and nothing else — while the party had been quietly recording every answer any townsperson ever gave, and no page ever showed you one. It now holds what you were told and where you heard it, the work you have finished (which used to simply vanish when you were paid), the folk who asked for your help and are still waiting, and the wards you have come to know.
- Feature
YOUR DELVES ARE ON THE MAP. A dungeon you had opened existed nowhere in the world — it was a button that put you inside it. Each open delve now stands on the town map beside the ward whose notice board sent you there, one road further out, in that ward's colours; selecting it lights the way from where you stand, and you march back in from there. The person who pinned the notice now tells you two things: where to report when it's done, and roughly where the trouble is.
- Fix
THE CAMERA FINDS YOUR PARTY AGAIN. Entering or resuming a floor framed anything but the people in it. Three separate reasons, all hidden for as long as every dungeon was small and began in the same corner: picking a run back up looked at the middle of the map rather than the party; the view refused to show a sliver of empty space past the map's edge, so a party standing ON the boundary — which is exactly where the entrance tunnel puts them — could never reach the middle of the screen; and the opening zoom pulled back far enough to show the whole plan, leaving your heroes a speck in the corner with nothing to scroll. A floor now opens on your party, close enough to see the rooms around them, wherever in the dungeon they walked in. Small arenas are framed exactly as before.
- Fix
WATCH MODE STOPS ASKING YOU WHAT TO DO. Handing the party to the AI is supposed to mean nothing pauses for you — but the commander's request for orders was the one thing that never checked, and because watch mode releases the whole party it fired on EVERY companion's turn instead of none. You asked to watch a fight and it interrupted you at every step.
- Fix
MONSTERS STOP WAITING AT THE STAIRS FOR SOMEONE WHO LEFT. When a hero took a stairway, the creatures on that floor kept hunting them — and a hero who has gone keeps the last spot they stood on, which is the stairwell itself. So the pack walked to the stairs, found nothing it was permitted to attack, and stood there, round after round. Anyone who has changed floor, fled the field, or not yet arrived is no longer something the monsters will cross a dungeon to reach.
- Fix
A DUNGEON NO LONGER SHUTS THE DOORS BEHIND YOU. Take a stairway and everything you did afterwards stopped being recorded — doors forced, ground explored, foes felled. Come back to that floor and you got the dungeon as it was built: passages you had opened closed again, cleared corridors dark again. One guard, meant to hold for the moment a floor is changing, was never letting go.
- Fix
THE DICE ARE HONEST NOW. A battle's seed shaped the map, the monsters and the traps — and then the fight itself rolled on unseeded randomness, so no two runs of the same seed ever played the same and reloading re-rolled the dice. Play draws from the seed like everything else, and each floor keeps its own place in the sequence: refresh after a bad critical and the same critical is waiting for you.
- Feature
THE STREETS TALK BACK. A town used to know about a dozen things to say, shared between every soul in it, so a walk across the square was the same six sentences on a loop. The townsfolk now draw on hundreds of lines, and they are chosen to suit the ward you are standing in — the forge grumbles about ore and unnamed orders, the temple speaks of tithes and restless ground, the docks of night barges and a crane nobody will fix. Nobody repeats a line they have just said.
- Feature
AND THEY TALK TO EACH OTHER. Two neighbours standing close enough now hold a short conversation as you pass — one speaks, the other answers, and the first often has the last word. Seventy-odd of them, from a broken crane and a missing tax roll to a father who regrets telling his son what he thinks of adventuring.
- Feature
EVERY WORD OF IT IN YOUR LANGUAGE. The town's chatter, the questions you can put to a townsperson, and the answers they give are all translated — with the groundwork laid so a new language is a new file rather than a rewrite. A line nobody has translated yet quietly falls back to English on its own, so a half-finished language is still a language, never a blank speech bubble.
- Feature
THE PACK FINISHES THE FALLEN. While one hero is still on their feet, monsters press the standing fight and leave the bodies — dragging a downed friend clear is what death saves are for. But once nobody is upright, the fallen are all that is left, and the pack now turns on them. Before this a creature at zero hit points was invisible to both the attack rules and the enemy AI, so a party that all went down at once left the monsters with no target at all: two wolves paced an empty dungeon for forty rounds while three unconscious heroes lay there and the run could not end. No new killing rules were needed — a blow landed on someone at zero already breaks their stability and fails a death save.
- Fix
A speech bubble now grows to fit what is being said. It was pinned to the height of a single line, so anything longer simply spilled out of the box.
- Fix
REPORTING BACK TOO EARLY IS A CONVERSATION, NOT A CLOSED DOOR. Walking across town to the person who pinned your notice, with the work unfinished, used to produce one grey line in the log and nothing else. They now receive you properly — in their own words, and a reeve is brisker about it than a priest.
- Fix
The quest book no longer lists one job twice. A delve already under way showed up in its own section above the very notice that sent you into it; the way back in now sits on the work it belongs to.
- Fix
SPEND HALF YOUR MOVEMENT, WALK ON, AND THE TOKEN NO LONGER TELEPORTS BACK TO WHERE THE TURN BEGAN. An AI creature's turn is many steps committed as one board update, so the board joins them into a single glide — otherwise a monster appeared to blink most of the way and then stroll the last square. Your own turn is the opposite: every click is its own committed move, already animated as it landed. Joining those too replayed the whole route from the turn's first square, so continuing a half-spent move snapped the token back to the entry point and walked it all again. Human seats are no longer joined.
- Fix
A PARTY THAT DIES ON THE FIELD NO LONGER LEAVES THE RUN RUNNING FOREVER. On a two-level floor an unsettled delve below is allowed to hold the outcome open, so an empty field can't declare victory before anyone has gone down the stairs. That guard sat above the wipe check as well — so if every hero fell up top, the run stayed "active" with nobody alive to ever take those stairs and no defeat to end on. A wipe is not a pending outcome; it is the end, and it is now checked first.
- Fix
A BARBARIAN NO LONGER BURNS A RAGE ON EMPTY AIR. Rage is a bonus action that fizzles unless the turn actually attacks, but the AI's gate was satisfied by any legal attack at all — including a throwing axe at something across the room. So a hero would walk, fall short, rage anyway, walk on, swing at nothing, and lose the fury at the start of its next turn. It now checks its own melee reach (a glaive's ten feet still counts). Measured across seeded crawls: one wasted rage in six, now none, with no legitimate rage lost.
- Fix
THE AI STOPS BRACING WHILE SOMETHING IS BITING IT. Dash already warns the narrator that a foe is in reach and it should swing rather than chase; Dodge was offered as a plain upside, so a hero standing in a wolf's teeth would take the defensive stance and give up the turn's only attack. Dodge now carries the same warning — and unlike a wasted Dash it spends the action outright, so nothing downstream could recover the turn.
- Fix
THE BATTLE TALLY STOPPED TALKING TO ITSELF. Reopening a closed results panel used to take a four-step round trip: the board told the screen there was a tally, the screen bumped a counter, the board watched the counter and reset its own flag, which told the screen again. One click, four redraws, and a dependency hack in the settings drawer holding it together. The screen that owns the 📊 button now owns the flag outright and hands it down — the round trip, the counter and the hack are all gone, and the three sandbox battle screens didn't have to change at all.
- Fix
THE AURA OVER A TOWNSPERSON YOU'D ALREADY TALKED OUT. The village crowd read "has this one still got something to say?" through a ref during render — so the answer was frozen at whenever the crowd was last rebuilt, and the ✱ could stand over someone you had just finished talking to until the ward reloaded. It is now derived properly and the crowd rebuilds when the answer changes, not on every frame of a walk. The illegal render-time write that caused it (React Doctor's only error-level finding) is gone with it.
- Fix
The LLM talk panel walked its choice list three times per render to answer two questions; the town's terraced houses keyed their outline segments by position, so a neighbour going up shifted every segment behind it; the ward's poster lookup made a throwaway copy of every quest the party holds before filtering it. All three now do it in one pass.
- Fix
Dropped `clearLlmTranscript`, an exported "reset for a fresh battle" that nothing has ever called — the transcript ring has never been reset, and the doc comment said otherwise.
- Fix
TESTS THAT COULD NOT FAIL. A sweep of all 235 test files for assertions that never run found ten that guarded a feature and would have passed if that feature vanished completely: the elite-promotion test passed on a pack with no elites, the AI slot-choice test passed if the cleric stopped casting, the delve test passed if the menu came back empty, "rescue quests always place a hostage" passed if no rescue quest ever rolled. Each now pins its own premise — and the pins were proven by breaking the code underneath them: emptying the spell registry and disabling elite promotion both turn green suites red where they previously stayed green.
- Fix
THE NO-ESCAPE MENU RULE WAS NEVER ACTUALLY TESTED. The test that pins "when you can close but can't fight, the menu hides dodge/disengage/hide" built its scenario from a GOBLIN — which carries a shortbow, so it could always fight and the regime the test names never once occurred. Its assertion sat behind that unmet condition for its whole life. Rebuilt around a wolf (one bite, no bow): the rule holds, and now something checks it.
- Fix
Registry audits now fail loudly on an empty registry instead of passing over nothing (enemies, spells, monster-control kits, gear packs) — the same class of bug as the spell-VFX audit fixed in 0.98.0, hunted down everywhere it could hide.
- Fix
Audited every gameplay field authored in the content JSON for a reader on the other side — around thirty across weapons, monsters, items and spells. All of them are genuinely read: `vfx.element` (authored, ignored by the renderer for a whole release) was the exception, not the rule.
- Feature
THE SPELL'S OWN DATA IS WHAT YOU SEE. Last release gave all 58 spells a recipe — element, form, motion, count — and then the renderer went on ignoring it: every spell still resolved its look through the legacy animation NAME, and the authored `element` was read by nobody at all. Editing "element: cold" in the JSON changed precisely nothing on screen. It does now. Element, recipe and impact form are read first, everywhere, and the animation name is gone as a source of truth.
- Feature
ONE READER INSTEAD OF THREE. The board's cast branch, the board's cantrip branch and the compendium's preview each interpreted spell VFX independently — three copies that had already drifted (the board ignored the authored impact form, so a single force dart drew an explosion ring where the example showed a flash). All three now call one resolver, so what the game draws and what the compendium teaches cannot disagree. Cantrips stopped being a special case: Eldritch Blast and Ray of Frost read their recipes like every other spell.
- Fix
SPELLS THAT DREW NOTHING NOW DRAW SOMETHING. Fire Bolt, Chill Touch and Sacred Flame had no travel art whatsoever — the mote never flew, only the impact flashed. Hellish Rebuke was worse: it named an animation ("fire_bolt") that was never in the lookup table, so its projectile silently rendered nothing at all. All four have recipes now, and Shield of Faith and Haste — which declared themselves projectiles and then sent nothing — have their blessing mote.
- Fix
ENTANGLE STOPPED BEING A PURPLE LIGHTNING EXPLOSION. The terrain spells were never included in the recipe pass: Entangle and Plant Growth — vines and overgrowth — were authored as element "lightning" with a force-purple flash, an explosion sound and a camera shake. Spike Growth had no colour at all. They now read as what they are: deep green nature, settling over the ground rather than detonating on it.
- Fix
A TEST THAT CHECKED NOTHING. The spell-VFX audit looped over every registered spell asserting its animation mapped to something — but it never loaded the content registry, so the list was EMPTY and the loop ran zero times. It had been passing vacuously for as long as it existed, which is how Hellish Rebuke's unmapped name survived. Rewritten against the real contract (the element you declare is the element that renders, every travelling spell gets a projectile, only a real AoE bursts), with a first assertion that the registry actually loaded.
- Fix
Internal: the engine named Magic Missile by id in three places (does it gain from upcasting, how many darts, does Shield swallow it) — those are `upcastProjectiles` and `blockedByShield` fields on the spell now. The 38-entry animation-name table is deleted; only the impact RULE (support glows, everything else rings) survives, as a fallback. The board's FX vocabulary moved out of the React hook the whole renderer was importing it from.
- Feature
SPELL EFFECTS ARE DATA NOW. A spell's look used to be an opaque animation name ("fire_orb") that only a hand-written code table could interpret, so every new appearance meant editing the renderer. All 62 spells now carry a RECIPE — element, form (what it looks like), motion (how it travels), count (how many) — and the renderer reads it. The element supplies every default, so most spells say almost nothing: "element: cold" alone means a crisp blue shard. Adding a spell's appearance, or a whole new element, is a JSON edit; only a genuinely new SHAPE touches code. The three spells that rendered NOTHING at all (Shield, Counterspell, Mage Armor) finally have a look.
- Feature
ELEVEN ELEMENTS THAT ACTUALLY LOOK DIFFERENT. The element table moved out of code into data — and the move exposed four collisions: force and arcane shared the EXACT body colour, acid and poison were identical in form, particle, blur and flicker, and lightning shared cold's exact hex. Palettes pulled apart (force lavender, arcane indigo, necrotic violet off the green family, poison deep toxic, acid chartreuse, lightning electric blue-white). Thunder stopped being a recoloured lightning bolt and got its own body: concentric pressure rings, because thunder is shockwave, not electricity. And PARTICLES now render — the field every element carried and nothing ever drew, so eleven elements stopped being one sphere in different colours (embers, ice shards, sparks, wisps, bubbles, motes, and arcane's runes).
- Feature
MAGIC MISSILE IS THE SPELL IT SAYS IT IS. Its example was one dart on a straight line at a single foe. Now the compendium plays it like the game: the scene fields three foes, you CLICK A FOE TO SEND IT A MISSILE (stack several on one, or spread them — "⚡×2", "2/3 assigned"), each missile flies its own parabola, and EACH ROLLS SEPARATELY — three independent 1d4+1 results with a damage total floating over every creature that took one, instead of one lump over one target. The volley follows the slot tab you picked: three missiles at L1, six at L4.
- Fix
THE CARD STOPPED CONTRADICTING ITSELF. Magic Missile read "3d4 force" while the engine rolled 3d4+3 — the row builder dropped the flat bonus, under-reporting EVERY flat-bonus spell. And the description hard-coded "Three darts" on every slot tab while the damage beside it climbed to 6d4+6; the count is a slot-aware row now (Projectiles: 3 · 4 · 6), and the prose states only what never changes.
- Fix
ONLY A REAL BLAST BLASTS. Every damaging spell had been given an explosion ring by default, so 33 of 62 detonated — including a single force dart. Single-target hits are a small ray-flash now, heals keep their aura, and only the 8 genuine AoEs burst. A test forbids a non-AoE from ever claiming a blast again.
- Fix
THORN WHIP IS A WHIP. It rendered as a floating green bubble (it had inherited poison's glob body), then as a straight green laser — neither of which is a vine. It now has its own LASH body: a curved, tapering vine bristling with thorns, and it plays in two beats — it snaps out and BITES, then reels in while still attached, dragging its victim the full 10ft before the grip releases. The victim GLIDES with it rather than teleporting, and the flash and the damage number follow them to where they land instead of hanging over the ground they were pulled from.
- Fix
Volley polish: a projectile's trail used to interpolate the straight line while its dart bowed away on the arc, so the streak detached and read as a stray beam across the field — it now follows the same curve. And an even spread across the fan handed the middle dart a bow of exactly zero (it flew dead straight, the one thing "each on its own parabola" was meant to stop), so every member of a volley now gets a distinct, non-zero curve.
- Fix
Internal: the element→shape switch lived TWICE (orb at full size, dart at small), each a partial copy — which is exactly how a form goes missing: thunder's new wave shipped to one and not the other, so a thunder dart silently fell through to a plain pip. One body table now, parameterised by radius; orb dropped from 180 lines to 76. React's deprecated MutableRefObject is gone, and the changelog's own 2,170-line array became one JSON per release, so cutting a release is dropping a file.
- Feature
👀 WATCH MODE — put the reins down and watch the fight play itself. A new toggle in the ☰ drawer, under its own "This battle" heading: the tactical AI plays your whole party, your hero included, and NOTHING pauses for you — no commander asks, no reaction windows (a watcher still interrupted by a Shield call isn't watching). Useful for seeing how the tactics land, or letting a lost fight finish itself. THIS BATTLE ONLY, by design: it is never remembered, so there is no stored flag to leave you spectating tomorrow wondering why your hero won't move.
- Feature
THE ROAD REMEMBERS WHERE YOU ARE. A journey interrupted by an encounter always did resume — the cursor advances, the legs re-derive from the same seed, the next trouble is a LATER leg — but nothing on the map SHOWED it, so a resumed road looked like a fresh one. Now a 🧭 tag rides the road at the fraction already survived, the walked stretch brightened behind it, labelled "day 2 of 3 — Highcrown". It reads the same legs the dice do, so the map and the fight you're about to walk into can never disagree.
- Feature
DISTANCE READS AS DISTANCE on the realm map: a settlement's radius now scales with the DAYS its road costs, so a two-day haul is drawn about twice as far out instead of every road looking the same length. Clamped to stay on the canvas, and the existing relax pass still keeps the pucks from overlapping.
- Fix
BLESS IS AIMED NOW, NOT GUESSED. A multi-target blessing filled its list by PROXIMITY to the first target — the cleric blessed whoever happened to be standing closest and you had no say — while Magic Missile, with the identical shape (N independent picks), has had a marker UI for ages. Bless now arms that same UI and you place the blessings. Every name is validated by the engine (your side, alive, in range, not already blessed) and capped at what the slot allows, so a blessing can never be misdirected onto a foe; name nobody — an AI cast, an old save — and the proximity pick still fills it, so a slot is never half-spent. One shared count function means the markers you may place and the allies who actually get blessed are always the same number.
- Feature
LEVELS ARE TAKEN AT A LONG REST — and the level-up left the character sheet entirely. XP still banks the moment a floor pays, but the climb waits for a night: a paid bed at the tavern (🛏 walk up the stairs), a camp on the road, or the retreat's day at the gates. The night opens a REST SUMMARY — "the fire burns low, the watch changes twice" — that calls the climbed companions by name (their growth auto-chosen, it's theirs) and hosts YOUR picks where the sheet's panel used to be. The sheet now only says a level is waiting. One seam does it everywhere, so no rest site can forget.
- Feature
THE ROAD ROLLS ITS OWN DICE. A journey is no longer a fade to black: an N-day road is N day-marches with a camp between each pair, and EVERY leg throws independently — trouble on the march at 17+, an AMBUSH ON THE CAMP at 18+, with a dangerous land's modifier added to the night roll so the wilds ambush on 15+ while the king's road stays quiet. The camp posts a SENTRY: on an ambush their passive Perception contests the attackers' Stealth — win and the party stands armed, lose and the whole party starts SURPRISED (no first turn, and an assassin's blade rides it). Survive a leg and the road continues; every camp passed is a long rest. The whole journey is seeded, so a mid-road save resumes the same road with the same luck.
- Feature
A NOTICE IS A COMMISSION, NOT A VENDING MACHINE. Every board notice is now pinned by a named local — "📌 pinned by Bessa Hale, the reeve · The Commons" — drawn from the ward it was posted from (the reeve posts village trouble, the priest the restless dead, the smith recovery work). Taking it enters your journal against THEM; clearing the field only marks the work done. To be paid you find them: they wait by the very board they used, 📌 while the job's open, ❗ when they owe you. The journal names the place so it's never a hunt without a map. This also FIXES a silent hole — the advertised bounty was owed by nobody and credited by nobody: a notice promising 120 gp paid zero, and corpse loot was the only money a delve ever produced.
- Feature
THE BARKEEP WILL COLLECT — FOR A CUT. Can't face crossing town? He'll carry the word for a keep of 30% (pleased) to 70% (hostile), riding your standing with him: never worth more than walking there yourself, and cheaper the better he likes you. His OWN quests still pay in full, and the renown is yours either way — the work was yours whoever brought the news back.
- Feature
THE PURSE IS SPLIT, LIKE THE XP. A bounty landed entirely in the hero's purse while the XP for the same job was already shared out — one job, two economies. Quest coin now splits evenly, each share into that member's own purse. Two deliberate rules: the divisor counts the LIVING only (coin paid to a corpse is coin deleted, and every piece must land somewhere), and the odd coin goes to whoever did the talking.
- Feature
THE MAPS GET GROUND UNDER THEM. The travel graphs no longer float in a black void: the REALM view lies over rendered terrain — woodland, plain, downs and crag from a noise field — with a clearing under each settlement; the TOWN view lies over a plan of the settlement itself, ward footprints in their own palettes with streets drawn between the connected ones, and dark silhouettes where you've only heard a name. The shape of a town is legible before you've walked it.
- Fix
THE CHANGELOG IS DATA NOW — one JSON per release (144 of them) instead of a single 2,170-line TypeScript array that every release appended to. That file was a growth deadlock of exactly the kind the content rules forbid: merge-conflicting on every cut, impossible to touch without recompiling code. Cutting a release is now DROPPING A FILE — no index, no barrel, no registration — because the accessor reads the directory at build time. Semver ordering is explicit (a string sort put 0.9.1 above 0.94.0), and since the compiler no longer guards the shape, tests do: unique versions, ISO dates, valid change types, and every filename matching the version inside it.
- Feature
Every sword in the party EARNS: companions bank their own equal share of each floor's XP and climb on it — the veteran of ten delves is finally a different person from this morning's recruit. The hero's number doesn't move (the divisor was always the whole party), nobody demotes (an old companion's level is read as the XP it was worth), and each member's own bar now shows on the hero sheet. Level-ups auto-take their picks the moment a delve pays, so growth never sits unbanked.
- Feature
THE COMMANDER'S MARK — right-click a foe and the party converges: 🎯 over its head, the mark leads the TEAM briefing, outranks even 'kill the caster' in every party brain, and always keeps its options on the model's menu. Advisory like every command (the obedience dice stay the law), monsters never read it, and a dead mark is spent. Right-click again to lift it.
- Feature
The spoils of the delve: the results screen now reports the RUN — XP banked, coin carried, gear hauled, foes slain, floors walked, time delved — not just the last floor's numbers. Carried spoils count as a snapshot, never a re-sum, so a retreat that re-walks paid floors pays nothing twice.
- Feature
The barkeep's work-for-hire finds its voice: with the Narrator on, each quest card gets a title, the pitch in the giver's own words, what's actually known, the catch, and whom to ask — while the rolled kind, tier, level and pay stay untouchable underneath. Any answer the parser can't vouch for falls back to the canned line, so the board never waits on the model.
- Feature
The town shows where you can walk — a faint dot on every walkable cell, read from the same grid the walk itself uses, subtler than the battle board but always there. And 'Copy log' now bundles the node side's LLM transcript under the battle log, so a weird AI decision ships with the exact prompt and answer that produced it.
- Feature
The sell shelf tells the truth twice over: two daggers are two lines (selling one no longer sells — and silently DELETED — both for the price of one), and the gear a member is actually wearing is badged 🛡 worn / ⚔ wielded, so the suit off their back stops being an accident. A haggle won on one copy discounts that copy alone; the +1 working survives while any copy of the blade remains.
- Fix
The boss holds its lair: a lairAnchor leash (40ft, enforced in the apply layer AND the auto-advance) plus a BOSS INSTINCT prompt line that overrules the difficulty rung's 'quick to flee' — so the Worg that ran four rounds through its own traps stands its ground and dies where it lived. Siege attackers stay unleashed; they're the ones coming to you.
- Fix
AI movement stops looking hurried — it was never the animation, it was the INTERRUPTION: the next creature committed 420ms after the last and cut every longer walk off mid-stride. The turn loop now waits out the walk still playing (one shared timing module for the canvas and the runner), and a creature's consecutive steps chain into a single glide instead of a teleport with a stroll at the end.
- Fix
Three ways the AI stopped wasting turns: Rage only rides an attack it can actually make (no more raging down empty corridors until [0 left] — both brains, menu and heuristic, honour it); the model's target list ranks only foes the actor can SEE, so a cleric with a clean Guiding Bolt shot stops blessing itself while three unhittable casters hog the menu; and 'Drop concentration' appears only when a different focus spell is genuinely waiting behind it — the drop-Bless-recast-Bless slot burner is gone.
- Fix
Town movement runs smooth: the standing town (every tree, house and flagstone) moved into its own canvas layer, painted once per ward — a walk now repaints only the dozen things that move, not the whole district 60 times a second. And shortcut travel puts the party back on its marks even when two wards share the same muster cells, so the hero token stops vanishing under another district's buildings.
- Fix
React Doctor triage, round seven — the ledger moves into the code and the scan goes SILENT: 47 findings to zero, score 89 → 100. Every validated false positive now carries its verdict at the site itself: a one-line reason plus an inline suppression on the exact flagged line, so the next scan — and the next reader — sees WHY the index is the identity, why the reset must live in that effect, why a Set would go stale. No rule was disabled globally; each keeps guarding new code everywhere else. Two survivors taught the tool's newer anatomy (the derived-state check is a PAIR — one rule anchored at the effect, one at the setter — and both want their own line), and one fresh warning was the suppressions' own weight: the comments pushed VillageScene over the 300-line threshold, suppressed as comment-inflation with the split tracked as its own task. The ledger (docs/REACT-DOCTOR-LEDGER.md) stays the audit trail; the code is now the enforcement. Comments-only change — typecheck clean, 1413 tests green.
- Fix
React Doctor triage, round six — 51 findings down to 47 by giving the village's spoken words real identities. The NPC chat transcript, topic-talk answer lines, dialogue-node lines and the trader's negotiation log all keyed their rows by array position; one shared helper (withOccurrenceKeys) now keys each row by its content plus its occurrence number — stable as transcripts grow, safe when two lines say the same thing, and no wire types or engine code touched. The remaining 43 index-key-and-friends findings stay in the ledger (docs/REACT-DOCTOR-LEDGER.md) as validated false positives: positional lists where the index IS the identity, plus the ⚠ traps that would become real bugs if 'fixed'. 1413 tests green.
- Fix
React Doctor triage, round five — 61 findings down to 51, score 73 → 80 and ZERO errors, this time by dismantling the traps the ledger warned about instead of walking into them. The jailbreak screen folds three load states into one (the not-found redirect still fires — the ref swap the scanner suggested would have wedged the page on a blank screen forever). The sidebar's combatant selection keeps only the pin and derives the rest each render: turn-follow now has zero lag, released pins stay released, and the eslint-disable is gone. The warm-round pool keeps its 3-worker GPU guard as a recursive chain, the warmup helper moved to module scope, area-log entries carry real ids (the scanner then caught a StrictMode double-increment in the first attempt — fixed), spell-preview re-aim happens in render, class-feature rows key by tag, and every builder dropdown names itself to screen readers. The one error-severity survivor — the scanner misreading LivingVillager's correct bark-timer teardown — is now suppressed inline on that single line with the reason in the comment, so the rule keeps guarding everywhere else. The ledger (docs/REACT-DOCTOR-LEDGER.md) is re-verified at 51 entries. 1413 tests green.
- Fix
React Doctor triage, final round — 196 findings down to 61, and every survivor is now a WRITTEN false-positive ledger entry (docs/REACT-DOCTOR-LEDGER.md), not a backlog. The four god-components fell: ArenaBoard, TraderShopModal, ForgeHeroCard, and SpellSceneCanvas are thin orchestrators over 24 new focused pieces. Hot loops build their lookup Sets once (pathfinding's inner ring, the fight roster, spell menus), style factories and context values stopped being rebuilt every render, modals close from the keyboard, redirects fire in render instead of flashing a frame, the JSON-LD script escapes itself, and five dead files left. The one scanner ERROR proved to be the scanner misreading a correct teardown — documented, kept. Zero behavior changes: 1413 tests green throughout.
- Fix
React Doctor triage, round three — the Performance top three, 405 findings down to 196. Every chained .filter().map() walk over a list (120 of them — candidate builders, wall sets, shop catalogs, legal-action menus) now makes one pass via flatMap with early-return guards, and every relative barrel import (145 across the engine, AI, and content layers) names its module directly — geometry, state, effects and friends no longer drag their whole folder into each chunk. The two spots that genuinely needed the intermediate array kept it, honestly named. Zero behavior changes: 1413 tests green before and after.
- Fix
React Doctor triage, round two — the Bugs category, 310 findings down to 45. Every render-time ref write moved into effects (the turn runner, the intro, the prefetch, the battle clock — render is pure again, safe for React to replay). Every plain <button> now says type="button" (151 of them), so a future <form> can't turn a Dash click into a page reload. List keys got real identities in ~30 places. Reset-effects became derived state (offers, narration pages, beam drafts), the builder navigates from the click instead of an effect, the forge fonts are self-hosted via next/font, and a failed save or stats read no longer strands its spinner. What remains is a documented false-positive ledger, not a backlog.
- Fix
React Doctor triage, round one. The Firestore rules now speak in named predicates (isSignedIn / the existing isParticipant) — same access policy, but the intent is explicit and the security scanner's permissive-rule error is gone. Twenty-three dead exports (canned barks, back-compat facades, an unused Tabs/Collapsible/AddButton trio, the never-called adminAuth…) left the public surface, and empty-module.mjs — Turbopack's canvas stub, alive but invisible to the import graph — is declared as an entry so the dead-code sweep stops accusing it.
- Feature
ACTION SURGE JOINS THE AI'S ARSENAL. The surge's legality gate (action spent) was exactly the turn-fill loop's exit condition, so no AI fighter ever surged — the fill now offers the perk catalog one shot at RESTORING the action before giving up. Fighters attack, ⚡ surge, and attack again (and a Dash-opener can surge into a swing); the enemy-visible gate keeps it from being wasted on an empty room.
- Feature
THE FILL LOOP CONFESSES. Its silent exits (a rung proposing a non-accepted intent, a rejected pick, a no-op repeat) now tag WHY through AI_TRACE — and the mute rungs (perk/buff/control) tag their picks. The next second-wind-then-stand turn names its own culprit in the console instead of demanding archaeology; test-pinned, zero cost with tracing off.
- Feature
The commander ask went WIDE AND FLAT: one row — the proposal card horizontal (icon beside text, ↻ flip in the corner) next to a strip of compact order buttons (label over DC). Roughly a third of the old height, so the board stays readable while an ally waits for the word.
- Feature
Settings toggles explain themselves: an ⓘ beside AI Narrator / Commander asks / Strict opens a small modal with a real description (what the switch does, what it costs) — replacing the hover-only title tooltip that touch never saw.
- Fix
The village LOCATION BAR docks at the true bottom of the scene pane again. Its wrapper hugged the canvas, and since the pane vertically CENTERS a short map, `bottom: 10` landed mid-screen — the breadcrumb floated over the streets. The wrapper now fills the pane (canvas centered within it), so the bar rides the screen's foot regardless of map height.
- Feature
HARNESS HEALTH METRICS: the AI turn loop now measures itself. Watchdog force-ends are counted (the stuck rate — should read 0), a model call that errored/timed out records as llm-failed instead of masquerading as a by-design heuristic turn (a degrading gateway is now visible), A→B→A move shuttles are derived from the log as oscillations, and every LLM role tracks its WORST single call (maxMs) alongside the average — the 45s outlier the mean used to hide. All of it flows through the existing GameRecord → IndexedDB → /stats pipeline; old records read as zeroes, no migration. Bonus fix: decide-role latency was never being fed into totalMs (only voice passed it) — the avg-decision stat on /stats was silently 0-based until now.
- Fix
DEAD CODE SWEEP: 29 unused imports/locals removed across the repo (refactor leftovers — dead pickers in SlotEditor, orphaned engine imports, test destructures) and `noUnusedLocals` is ON in tsconfig, so the class can't accumulate again — an unused entity is now a build error.
- Fix
Beam dispatch (Eldritch Blast bursts) now folds each beam through the SAME submit-pipeline steps instead of hand-duplicating apply→heckle — the burst can never drift from the single-shot rules. The rest of use-encounter stays deliberate hook wiring: a pipeline models a journey, not a switchboard.
- Fix
THE SUBMIT FUNNEL IS A PIPELINE now (the api-proxy shape): one intent's journey — route-descent → stamp-note → apply-engine → taunt-hecklers → react-outcome — each step a pure Context→Context unit in its own file, folded by a generic lib/pipeline runner. The orchestrator only commits the outcome. No behavior change; the steps are unit-pinned (descent short-circuits, a rejection stops before commit, the note stamps above its action).
- Fix
use-encounter de-godded, round two: the narration feed (use-narration-feed), beam-split delivery (use-beam-dispatch), the auto-descend watcher (home in use-dungeon-descent), and the commander's answer paths (answerAskDo / answerShield, now inside use-commander via a submit ref) each moved to their own hook. The orchestrator is wiring again — 392 → 308 lines, no behavior change (full suite green).
- Fix
THE INVERTED SAVE BARK. Casting Hex/Bane/Hold floated "resisted" over the target even when the curse LANDED: the popup layer guessed a save from the event's shape (any damage-less cast with a target), and a landed buff/curse is exactly that shape. Save popups now float only on a structured `saved` flag stamped by the genuine shrug-off events — a landed Hex reads as landed.
- Feature
THE ASK IS TWO CARDS NOW. Card one is THE PROPOSAL — the ally's suggestions one at a time, ↻ flipping through them (their plan → attack the nearest → the best cast → dodge); their own top plan approves with no dice, any flipped alternative is your word through the obedience roll. Card two is YOUR ORDERS — press the attack, fall back, the 🔮 SPELL STRIP ("alternate the spell": one chip per castable spell, target pre-picked — wounded foe for damage, wounded ally for heals, lowest slot), 🗣 Insist, and 🎮 take control (this turn).
- Feature
THE ASK GOT CONCRETE. An ally's held-turn ask now offers the real choices a table argues about: their own plan, up to two CONCRETE alternatives ("Attack the Worg", "Cast Haste on Gregor" — the best value cast or support spell), and Fall back. Picking a concrete card is your WORD: the obedience dice decide — obeyed, that exact action executes and the turn plays on; refused, they do it their way.
- Feature
THE INSTINCT ROLL. Before asking, the ally rolls a d20 (deterministic per turn): under the data threshold they trust their gut and never raise the ask — the turn just plays, like a real table where not everyone looks to the commander every round. ⛓️ Strict commander always asks.
- Fix
SAVE-CANTRIP FREE FIRE. Sacred Flame is a cast, not a weapon — no rung ever fired level-0 casts, so a slotless cleric stood at range reading wounds. Both brains (party and enemy) now zap with the best free cantrip when no weapon shot exists, and the idle-action fill spends the action on it.
- Fix
HONEST COMMAND LINES. "Ignores your Rush order" no longer prints when the ally's own plan WAS an attack (the Eldritch-Blast-then-"ignores" nonsense — silent instead: you got what you asked for). Bravery +1 is EARNED now: a rush that attacked with a foe at their throat, or a retreat that truly broke contact — not a buff cast from 45ft of safety. And the Chromatic Orb's leap names its doubles ("splits on double 6s") — the RAW matching-dice rule was always there, now it's visible.
- Fix
THE PASSIVE ALLY, DISSECTED. Three stacked bugs made a commander-mode ally stand beside a foe doing nothing: the idle-action fill asked the GOBLIN brain for a party member (nothing usable came back — no swing, so rage lapsed every round and burned all four uses re-raging), the stall-guard then threw away any swing that DID land because the hero hadn't moved, and the follow-the-leader gate fired IN COMBAT, walking a sightless ally toward the hero instead of the fight. All three fixed: allies fill their action with their own brain (rage → reckless → assess → both Extra Attack swings), an acted turn is never "stalled", and the leader gate is crawl-only.
- Fix
Command-log polish: the every-third-override "chafes under command" line was silently dropped (a state reassignment inside its own entities.map); order refusals and loyalty changes now carry their round instead of printing as [R0].
- Feature
ALLIES HAVE A NATURE. Each class carries a disposition (obedience.json): the reckless barbarian charges cheap and balks at retreat, the protective cleric answers Shield calls eagerly, the prideful fighter chafes at overrides — data-driven DC tilts on specific asks, visible in the shown DC and named in refusals ("it goes against their nature").
- Feature
LOYALTY LIVES. An ally who follows a Rush or Retreat order and is still standing when it clears earns trust (+1 loyalty, logged); every third commander override chafes (−1, logged). Clamped tight by data — a relationship, not a second HP bar.
- Feature
🗣 INSIST — spend a command point (base + your hero's CHA mod per battle) to add +3 to one ally's obedience roll: on the order radial, the ask modal, and an ally's Shield/Counterspell calls. 🫡 ALL — give the same order to the whole party from the radial; each ally rolls their own dice.
- Feature
⛓️ STRICT COMMANDER (☰ drawer): every obedience roll auto-obeys — pure tactical control for players who want it, logged as "the commander's word is law". The dice-driven default stays the game's identity.
- Fix
use-encounter was growing into a god object — the whole commander concern (asks, predicates, insist, strict, strain) moved into its own use-commander hook. "Take control" is labeled for what it always was: this turn only.
- Feature
AN INFORMED REQUEST. Every command surface now shows the obedience INPUTS before you commit — the DC (situational bumps included) and the ally's loyalty — on the order radial, the commander-ask directive cards, and an ally's Shield/Counterspell calls. The inputs, never the roll: the dice stay sovereign.
- Feature
ALLIES SAY WHY THEY SAY NO. Refusals now carry a reason drawn from the same math that raised the DC (data-driven, obedience.json): "ignores your Rush order — too wounded to charge", "nothing here worth fleeing", "they won't spend the slot on this", "they trust their own read of the field".
- Fix
The three control predicates (seat / asks / player) were extracted pure (lib/battle-control/predicates.ts) and pinned by a full matrix test — the 0.86.1 class of conflation bug (commander mode inflating the seat) can no longer ship silently.
- Feature
ONE ASK PER TURN — THE COMMANDER SPEAKS ONCE. The per-intent confirm spam is gone: an AI ally's turn is HELD on a single one-row ask — their own plan (named now: "Cast Bless on Qhorin", not "cast a spell"), ⚔️ Press the attack, 🏃 Fall back. Approve and the whole turn plays out on its own; a directive stamps a one-shot ORDER the obedience dice may still refuse ("ignores your order and acts on their own"). "Take control" hand-drives just that turn. Shield/Counterspell calls keep their own asks as before.
- Fix
THORN WHIP PULLS AGAIN. The yank was implemented only on the spell-cast path — but the whip is wielded as a spell-weapon through the attack pipeline, which silently skipped it. A hit now drags the target up to 10ft toward the caster on both routes (Large or smaller), logged (🌿) — pull them through the Spike Growth like the druid intended.
- Fix
THE COMMANDER'S ASKS ACTUALLY APPEAR NOW. The ask modal never showed: commander mode stamped every ally control="human" in the engine, and the modal's gate (rightly) excludes human seats — the same pollution made succession see phantom fallen seats. The stamp is SPLIT: entity.control stays the seat's truth, a new reactionAsk stamp carries commander coverage for Shield/Counterspell windows. And the 🎯 button left the board: "Commander asks" lives in the ☰ drawer beside the Narrator switch, live-synced, story mode ON by default (a fresh preference key — the old board-button toggle can't suppress it).
- Feature
YOU ARE THE PARTY'S COMMANDER (ally-control c). In story mode an AI ally's turn asks for your word — a compact prompt (Counterspell-window style) with the ally's own plan and a couple of alternatives. Confirm their plan and they act; ORDER something else and they roll the obedience dice (d20 + loyalty vs a data DC) — a failed roll and they shrug the order off and do it their way. Their Shield and Counterspell reactions are calls too: an ally may refuse the call and keep the slot. Every verdict lands in the combat log with its roll ("🎲 Asclepius shrugs off the commander's call (7 vs DC 10) — they know better"). The 🎯 toggle turns it off; story mode starts ON, and your choice sticks.
- Feature
STORY MODE LAYS THE LOG ALONG THE BOTTOM. On an expedition floor the combat log is a bottom strip — initiative on the left, the log center, the dice tray on the right — so the dungeon keeps its full width; the board reserves the strip's height while it's open (📜 tab at the bottom-right edge). The sandbox keeps the classic right drawer, and the ☰ settings panel stays a right drawer everywhere.
- Fix
A long name no longer overruns its headstone card — the cemetery hover card grows with the wrapped name, and the class line and epitaph shift down under it.
- Fix
THE SEALED CHAPEL DEAD END. The delve-mouth compound could wall off its own doorway: when the approach path ran ALONG the wall ring, every crossing but one was bricked over and the surviving doorway opened onto a rock plug — the mouth was sealed, and the whole muster parked on its spawn cells forever. The builder now keeps EVERY ring cell the path crosses open (reachable by construction; pinned across a 21-seed sweep incl. the shipped board), and the doctrine no longer treats an unreachable mouth as "wait here" — it falls through to the barrier/frontier rungs.
- Fix
A LEADERLESS PARTY IS A COLUMN TOO. With no human hero on the floor (a true floor split, a spectated party) each ally marched at its OWN nearest unseen monster and the party opened two fronts inside three turns. The column now falls back to the party ANCHOR — the lowest-id living member leads, the rest keep station on it.
- Fix
THE 🎯 TACTICAL TOGGLE STICKS. It was per-battle state defaulting off, so the ally "what should I do?" suggestion prompts silently vanished on the next fight (and on every expedition floor change). The preference is device-local now, like the Narrator switch.
- Fix
THE COLUMN HOLDS UNDER THE NARRATOR TOO. With the AI Narrator on, ally turns run through the LLM menu — and its auto-advance fell back to the nearest UNSEEN monster anywhere on the map, so a "Dash — close in" still marched allies door-to-door away from the leader (the split came back). The auto-advance now obeys the column: a party member with no foe in sight spends leftover movement keeping station on the human leader — same 20ft walk-station, same rung, both brains.
- Feature
THE PARTY IS A COLUMN, NOT A SCATTER. On a crawl with nothing in sight, AI allies now FOLLOW THE LEADER — the hero you steer — keeping station within 20ft (walk distance, path-based) instead of marching on their own frontier goal the other way (the 3-versus-1 split that fed heroes to the worg den one at a time). A leader dragging the column far off the party's own objective must win ONE shared d20 (their CHA vs a data DC): convinced, the party follows with a log line; not, it BALKS together — "why this way?" — and holds until the leader relents or takes a new stand (moving re-rolls). One verdict for the whole column: they follow together or balk together, never 1/1/2.
- Feature
LEAVING A FIGHT IS FLEEING IT — FOR REAL NOW. Mid-fight, the drawer's "Fall back to the hub" no longer teleports (and no longer silently stays clickable through a stale drawer): it SOUNDS THE RETREAT. The horn is a party-wide call on anyone's initiative; the reins leave the player's hands and the whole party — hero included — runs for the way out under the rout doctrine, floor by floor to the surface.
- Feature
THE NARRATOR SPEAKS OVER THE GRAVE. A wiped run now carves an EPITAPH: the DM's closing word is saved onto the fallen hero (a plain carved line when the Narrator is off), the result screen's way home becomes "To the graveside", and the hero's sheet opens on the epitaph over their record.
- Feature
THE LOG LEARNED TO SORT ITS NOISE. The area log now has TABS — All · Events · Talks · Noise. Street barks and idle chatter file under Noise (dimmed); arrivals, travel, and happenings stay Events; and conversations leave a SUMMARY under Talks — what a townsperson actually told you, and how a round at the barkeep's counter went.
- Feature
EVERY TOWN POSTS ITS OWN NOTICE BOARD. The board's rotation is seeded by the settlement you stand in, and its size decides the work posted (board-work.json): a village's board is modest chores with no death notices; a city's board opens on blood money and posts no rat-cellars. The gentlest posted notice always comes quiet — a soft option everywhere.
- Feature
THE AI NARRATOR SWITCH MOVED TO THE MAIN ☰ DRAWER — one app-level toggle for hub and battle alike, live-synced everywhere (flipping it mid-run updates the running floor; the hub's quest-givers appear and vanish with it).
- Fix
NO MORE BRUTEFORCE, ANYWHERE. The barkeep's dialogue checks are now one attempt per place — reopening the conversation does not re-offer a failed Persuasion. And the trader's counter has a MEMORY: the flattery you already spent and the attempts that hardened the price persist across shop visits (a market day clears the slate).
- Fix
Hub polish after the drawer unification: the sidebar keeps the profile's name header above the stat pills, and the settings drawer reads the log mode it renders under.
- Feature
THE MARKET IS AN ECONOMY (rules2/rule3). Settlements carry MARKET TIERS (market-tiers.json): a buy limit and a till — a village fence caps what he'll pay for a ruby, a city jeweler doesn't. REGIONS (regions.json) tilt prices by item kind, the trader's till is finite per visit, and outpriced goods say where they'd sell best ("best sold in Highcrown").
- Feature
THE MAP IS AN EGO-GRAPH (map.md). Travel renders around WHERE YOU STAND: your ward at center, direct roads as ring one, through-wards hanging off their hop, unexplored places as ghost pucks with rumors. Real map thumbnails fill each puck, routes march a gold dash along the actual hops, and the whole graph fits-to-bounds with pan/zoom. The Realm view speaks the same language, with day-count roads.
- Fix
THE WALLS BETWEEN THE CONTEXTS HOLD (ADR 0003). A full graph audit of the import matrix: the appraisal crafts law and the Locale axis moved down into content as data; the AI turn loop (pure machine, runner, watchdog, turn economy) moved home to ai/turn-loop; delve transitions, battle stats, battle ids and the multi-projectile seam left the UI tree for their lib contexts; the NPC-talk pass-through dissolved into its route. No behavior changed — every arrow now points the right way, and the tests reach domain logic without touching a single component.
- Feature
CONVERSATIONS ARE TOPICS OVER A WORLD, NOT SCRIPTS (ADR 0004). A townsperson no longer runs a hand-built tree: they offer a seeded set of reusable TOPICS (rumors, directions, this ward, their street's own concerns), and every answer resolves through a KNOWLEDGE BASE that speaks the actual world — the same question about trade names the peddler's cart in a village, the square in a town, the ward's own goods in a city, with real names filled in ({The Sleeping Fox}, {Bessa Hale}). Once-topics leave the menu when asked; when a speaker has nothing left, their ring drops. Dialogue choices now fire TYPED actions (one action language for every voice) — the quest-chain seam done properly.
- Feature
THE NARRATOR SPEAKS FOR THE BARKEEP. With the AI Narrator on, the barkeep becomes a FREE conversation — type anything; they answer in character, grounded in a curated brief (who they are, where you are, what they know, what they REMEMBER about you from past talks). The model can only REQUEST allow-listed actions (open the hiring hall, lay out work) — the engine validates everything; prose can never smuggle a world change. Narrator off, or one failed reply: the classic dialogue takes over seamlessly. The game never depends on the model.
- Feature
Internal: the map is now the territory — a bounded-context audit (ADR 0003) straightened every crooked arrow: the battle-assembly domain (slots, builders, share codes) and the settlement-scene domain (scene derivation, decor, walk grid) moved out of the UI tree into lib/, the engine no longer reaches into storage for a type, and content no longer reaches into a component. Five contexts, one-way imports, the whole suite green through the move.
- Feature
SHOPS SELL THEIR OWN GOODS. Walk into the alchemist and the ledger holds philtres and herbs — no longsword rack. A specialist building (jeweler, woodcarver, alchemist…) trades exactly its own crafts; the general trader still carries the ward market's full range.
- Feature
TOWNSFOLK REMEMBER YOUR TALKS — AND SPEAK LIKE THEIR STREET. Walk a villager's conversation to its end and they've told you what they know: the talk ring drops and they go back to muttering. No more BRUTEFORCING the Persuasion/Insight questions either — one roll ever, pass or fail. And each ward now has its OWN voices in the pool: a soot-streaked forge worker, a nervous copyist under the towers, a deckhand who knows what moves at night, a lay sister, an off-duty guard — themed dialogue trees keyed to the ward's type, in data.
- Feature
THE AREA LOG MOVED INTO THE REAL DRAWER. The hub's log now lives in the same right-side drawer the combat log uses in battle — the ☰ swaps settings ⇄ log the same way (navigation stays visible in town). The floating popover is gone.
- Fix
THE TOWN CAMERA IS YOURS. Zoom anchors at the pointer and the pan is free — no more snapping back to the hero (that's the battle board's manner, not the town's). The Lyceum stopped being one big barrack too: halls render as COMPOUNDS — two wings, a corner tower, and an open courtyard.
- Fix
PROFILE ISN'T NAVIGATION. 'Switch profile' moved out of the drawer's navigation list into its own Profile section at the foot of the ☰ drawer.
- Fix
THE REALM STOPPED LYING ABOUT ROADS. A settlement two roads away read 'No known road' forever; the Realm view now walks the road graph and tells you the way — 'No direct road — travel through Aldermoor.'
- Fix
THE CAMP SPEAKS ONE LANGUAGE. The pasted emoji props (the hut, the backpack, the emoji treeline and fire) are gone — drawn conifers, a stone-ringed flame, stacked packs, a bedroll and a signpost home, all in the board's own top-down idiom.
- Feature
THE SIDEBAR HAS A SPINE. Labeled stat pills (gold on hand · artifacts) over a proper IDENTITY CARD — portrait, name, kin, and a real XP bar — then three clear groups: CAMP (go to the fire, the sheet, the bank line, hiring), KNOWN PLACES (shortcuts you earn by exploring — a service in another ward shows '→ The Commons' and takes you there), and the QUEST BOOK: every taken job with its state and every running delve a click from continuing. The sidebar's competing Travel button is gone — the breadcrumb owns movement.
- Feature
THE EYE HAS A PATH. Places you can ENTER wear a warm rim, a lit doorway spilling onto the threshold, and a flat hanging SIGN (drawn, not an emoji — ale round, anvil, coin diamond); everything that's only scenery cools and recedes under a shade. Townsfolk pins muted and their chatter halved; when zoomed in, the camera FOLLOWS your hero as they walk. Click yourself at the camp to open your character sheet.
- Feature
THE AREA LOG. A 📜 drawer on the streets keeps the session's local record — your arrivals, roads taken, talks, deals — and what the townsfolk actually said, newest first.
- Fix
HEROES HAVE NO 'HOME' — TOWNS HAVE NAMES. The starting settlement's id, name and file all say ALDERMOOR now; old saves that still say 'home' are read as the same town.
- Feature
TRAVEL IS A JOURNEY. Leaving a ward from the quick bar walks your hero to the road out, dips the screen dark — 'You cross Aldermoor…' — and fades the new ward in; the same dark beat carries you down the road between settlements. The quick bar itself now lists only where a road actually leads from here.
- Feature
MAPS ARE GRAPHS ROOTED AT YOU. The town plan lays its wards out node by node from where you stand — you, then the wards a road reaches, then the wards beyond — with the roads drawn as edges between them. The Realm view got the same shape: your settlement, the roads out, the places past them.
- Feature
WARDS LOOK LIKE WHAT THEY ARE. The Forgeworks raise the GREAT FORGE — twin stacks, drifting smoke, a furnace maw glowing at the wall — with a second anvil down the street; Arcanist's Row raises the Violet Spire and the Lyceum; Highcrown's Arcanum gets its Scrying Needle and an alchemist, the Foundry a jeweler, Willowmere a woodcarver's shed. Backdrop rooftops now wear each ward's THEME (soot greys in craft streets, violet slate in arcane ones), city wards open onto bigger ground (Market Cross), and the district scene ZOOMS like the battle board — wheel toward the pointer, drag to pan.
- Fix
Switch profile moved out of the town card into the main ☰ drawer, with the rest of the app-level navigation.
- Feature
WARDS CONNECT BY ROADS, NOT BY FIAT. A settlement's districts form a GRAPH now — authored in its data file, drawn on the town plan as actual edges between the wards (bright where a road leaves the one you stand in). Only neighbouring wards are a direct walk; the rest tell you the way: 'No direct road — go through The Commons.' In Aldermoor, Arcanist's Row hides behind The Commons; in Highcrown, the Quays open only through the Foundry and Potter's Field only past The Watch — a city you learn to cross. The tests guarantee a graph can gate but never orphan a ward.
- Feature
BARKS ARE NOT CONVERSATIONS. Everyone in the street mutters again — ambient one-liners belong to the whole crowd. But the talk AURA now marks something real: a DIALOG — a structured chain of replicas with choices, run by the same engine as the barkeep's. A share of the townsfolk hold one (gossip, directions, ward lore — three trees in data, seeded stably per person); step up and the conversation opens as a proper tree, Persuasion checks and all. The dialogue format also gained the quest-chain seam: a choice can point you to the one who continues the thread — ready for quests to use.
- Fix
NOT EVERYONE WANTS TO CHAT. Every townsperson wore the 'step up and speak' ring — the whole street glowed. Now only a SHARE of the crowd has something to say (a data knob, ~half); the rest are silent ambience: no ring, no click, no barks. Who's chatty is seeded per person and stays put — you learn which faces in a ward will talk to you.
- Feature
YOUR ALLIES HAVE A WILL OF THEIR OWN. An order to an AI companion is a REQUEST now, not a string to pull: at their turn they roll to obey — the dice decide, never the Narrator. Loyalty tips the roll: a companion bound to you by a debt on the party ledger follows more readily; a stranger might not. Risky asks are a harder sell (charging while badly wounded, retreating with no enemy near), and a refusal is called out in the log — they simply do what THEY think is best that turn. Every knob lives in data.
- Feature
STREETS, NOT A ROAD. Dense wards finally have a street NETWORK: a second street row and vertical connectors weave the town into BLOCKS, each ward's web laid out its own way. Backdrop houses now FRONT the streets — every house faces a lane instead of floating orphaned on the grass — and doors connect to the nearest street, not always the far main road. Hamlets like Willow Green keep their single honest lane.
- Feature
THE QUAYS GOT THEIR WATER. A docks ward can author a waterfront — the Quays now front a harbour band along their east edge: deep water, boats riding it, and no walking into the river. Data-driven like everything else (one line in the district's file).
- Fix
NO MORE WALKING THROUGH WALLS. The backdrop houses and market stalls were scenery only — heroes strolled straight through them. The crowd is SOLID now: the walk grid and the drawing read the same set, and the tests prove no house ever seals a door, a lane, or the muster ground.
- Fix
THE DEAD STAY BURIED IN ONE PLACE. Headstone plots were standing in every district — empty grave rows in the Forgeworks, on Market Square, everywhere. The cemetery's plots now exist only where the cemetery actually is (The Commons, Potter's Field, Willow Green).
- Fix
NO TWO STREETS ALIKE. Every ward used the exact same road skeleton — the same main street on the same row with the same bend out of town. The main street now sits on a slightly different row per district (its own name seeds it), and the way out follows it — so walking ward to ward no longer feels like the same map recolored.
- Feature
THE QUARTERMASTER IS A CAMPFIRE NOW. Dealing with your party is no longer a form — it's a PLACE. The Quartermaster button walks you out to the party camp: a fire in a forest clearing, tents pitched, and your companions standing around the flames, each wearing the 'step up and speak' ring. Walk your hero up beside someone and the bargaining opens with THEM — whom you deal with is chosen by your feet, not a tab row. Asking, offering, selling and settling debts all work as before, one face at a time.
- Feature
TOWNS HAVE SQUARES. A district's street plan finally follows its authored road style: Market Square (and Highcrown's Market Cross) now opens onto a grand COBBLED PLAZA — the well at its heart, the notice board on its edge, market stalls ringing the pavement, and the new TOWN HALL fronting it. Crossroads wards cut a second lane with a small square at the meeting. And the wards wear their wealth: Highgate's houses became MANORS, Potter's Field's became SHACKS — rich and poor quarters you can tell apart at a walk. Inner blocks now fill the once-empty middle ground too. All of it authored in each district's data file.
- Fix
YOU CAN SEE WHERE TO STAND NOW. The trader's ledger (and the barkeep's ear) used to open from ONE secret cell, while the aura ring floated over the counter and never touched the floor. The standing spot is now PAINTED on the ground — a row of gold-dashed footstep tiles along the counter front — and the whole stretch in front of the merchant works, not a single square.
- Fix
ONE SCALE FOR ALL SOULS. Townsfolk were drawn half the size of hero tokens — but a person is a person and fills the same 5-foot square. Villagers now wear the same token disc at the same size; your party still reads apart at a glance by its brighter ring, name plate, and gold selection glow. And the 'step up and speak' aura is honest now: only folk who actually have something to say wear it — a silent figure draws no ring and takes no click.
- Feature
THE STREETS ARE ALIVE. Townsfolk amble about the lanes instead of standing frozen, and they TALK — ambient lines rise over their heads (each ward has its own voice: forge-talk in the Forgeworks, grave-talk on the Commons), rumors included. Walk a hero up to anyone (every soul wears the 5ft 'step up and speak' ring) and click to chat.
- Feature
THE WORLD HAS A SHAPE: Realm → town plan → streets. A new REALM view lays every known settlement out as tiles — where you stand, where the roads lead, and the places you've only heard of. A location bar rides the foot of the streets (🌍 › Aldermoor › The Commons) with every district a click away, you-are-here lit gold.
- Feature
YOU LEARN A PLACE BY WALKING IT. Districts start as RUMORS — a hooded card and a line overheard ('Smoke over the rooftops day and night…'). Travel there and the town plan learns its face and services; talk to a local and it learns the market too. Settlements on the realm map keep their secrets the same way until you've been.
- Fix
THE TOWN FINALLY SHOWS UP. The dense backdrop the districts always generated was being drawn OFF the edge of the canvas — built, then clipped invisible. The skyline now frames the walkable square on all four sides, and each district's own authored dressing counts are realized at last: rows of houses, garden plots behind fences, striped market stalls by the well, lamp posts pacing the main lane.
- Feature
ALLIES HAVE A WILL OF THEIR OWN. An order to an AI companion (Rush, Retreat, Heal…) is now a REQUEST, not a command: at their turn they roll a die — d20 plus their LOYALTY — against how hard a sell the order is. Aggressive orders are harder; stupid ones (charging while bleeding out, retreating from nothing) harder still. Fail the roll and they IGNORE you and fight their own way — the log tells you so. Loyalty comes from your actual relationship: a companion tied to you by a Quartermaster debt follows more readily. The dice decide, not the narrator — the same order, same turn, always resolves the same way.
- Fix
NO SLIPPING AWAY MID-FIGHT. Falling back to the hub while swords are drawn IS fleeing the fight — so it's no longer a free instant escape that froze the fight to resume untouched later. While a fight is running the retreat is barred; break contact and run from the fight first (move out of reach so the fight dissolves), and only then can you slip back to the hub.
- Feature
THE ROAD LEADS OUT OF TOWN. Aldermoor is no longer the whole world. From the district map, a new 'The road leads to' strip lets you set out for other settlements — Willowmere, a poor forest hamlet of one muddy green, and Highcrown, a seven-ward city of temple, foundry, arcanum, watch and quays. Each is built entirely from a data file, walkable ward by ward, with its own market, look and townsfolk.
- Feature
THE WORLD IS DATA. Under the hood every settlement — village, town or city — now loads from JSON: its wards, the buildings in each (placed by type), the scenery, where you muster, and which places it connects to. Adding a whole new town is now a data drop, not a code change. Building shapes, creature factions, wilderness-camp themes, trap archetypes, dungeon layout profiles, class glyphs and condition badges all moved out of code into data too, and a guard now fails the build if an enemy is ever left unregistered — so the game can keep growing without touching the engine.
- Feature
DISTRICTS ARE DATA NOW. A settlement's every district is authored as pure DATA — its buildings placed by TYPE and position, its scenery given as counts, its landmark and where you muster all spelled out in JSON — instead of one hardcoded village standing in for them all. Aldermoor's four wards each describe their own streets (the Forgeworks its smithy and steelmonger, The Commons its tavern, Arcanist's Row its reliquary), and the game derives a walkable, drawable scene from that. This is the groundwork for whole new villages, towns and cities to be built entirely from a data file.
- Fix
THE TOWN IS BUILT, NOT PEOPLED. A district's density now comes from BUILDINGS — neat rows of houses framing the square on every side and bleeding off the edges — instead of a crowd of townsfolk scattered over the grass. A handful of people now stand on the LANES, where they belong.
- Fix
EVERY SHOPKEEP GETS THEIR AURA. The trader now wears the same 5-foot 'step up' ring as the barkeep, so it's clear where to stand to deal.
- Feature
ALDERMOOR FEELS LIKE A TOWN NOW. Every district is packed with a dense skyline of decorative buildings that bleed off all four edges — you're looking at ONE BLOCK of a much larger place, not the whole town. The crowd scales with the settlement's size (a village stays a handful of cottages, a town swells, a city teems), warm lights glow in the windows, and idle townsfolk fill the streets. Each district's crowd is its own and stays put between visits.
- Fix
THE 5-FOOT AURA SITS RIGHT. The 'step up to talk' ring now hugs an NPC's token as a tidy 5-foot aura — the same size as a reach ring in battle — instead of a giant circle floating off to one side.
- Feature
THE QUARTERMASTER BARGAINS NOW. Coin and gear no longer slide around the party for free. Step up to an ally and make your case: ASK them for coin or one of their items — a Persuasion check they can refuse — where a LOAN is easy to win but writes an IOU on the party ledger, and a GIFT is a harder sell but theirs to keep. Or OFFER one of your OWN items: give it outright, or sell it for their coin — they'll take only what they can carry and afford. Every debt settles back at the counter.
- Feature
KNOW WHO'S WORTH A WORD. Interactable folk in the tavern now glow with a step-up ring and wear a marker overhead: ❗ when the barkeep has work to give or turn in, ❓ for just a chat, and ➕ over a prospect you can invite to a cold seat.
- Feature
NO ONE GETS LEFT BEHIND. If the party moves down a floor and a living companion was stranded above, they now catch up on their OWN — pulled forward to rejoin the band the moment the fighting lulls, no spectating or fetching required.
- Fix
NO MORE STANDING ON THE BARKEEP. In the tavern, the townsfolk are solid now — you step up BESIDE a prospect or the barkeep to deal with them, instead of walking your token right through them.
- Feature
THE TAPROOM GETS ITS FLOORBOARDS SQUARED. The tavern now shows the same faint cell grid as the rest of the world, so you can read exactly where each step lands when you walk up to the barkeep or a prospect.
- Fix
FALLING BACK NO LONGER FIGHTS THE BROWSER. "Fall back to the hub" from a delve used to trip your browser's own "Leave site?" warning. Now it asks IN the game — a quick confirm card — then slips back to the hub cleanly, the delve still waiting on the notice board to resume exactly where you left it.
- Fix
A TOWN LOOKS MORE LIKE A TOWN. Buildings in a town or city now wear a stone-grey wash over their roofs (a village keeps its warm thatch) — the clearest at-a-glance tell of a settlement's size, layered on top of the taller, two-storey, spire-crowned shapes already in place.
- Feature
CALL THE SHOTS FOR THE WHOLE BAND. A new 🎯 Tactical toggle on the battle screen hands you every ally's turn — and to keep it swift, each paused ally opens a compact modal with the AI's OWN recommended move plus a couple of alternatives (a strike at the nearest foe, a defensive hold), one click each. Want the full action bar for someone? Hit "Take control." Flip it off any time to let the tactics engine run the team again. This completes the ally-control set: choose who you lead, the reins pass to a survivor when the hero falls, and now you can override any move the moment it matters.
- Feature
CHOOSE WHO YOU LEAD. On the hero's sheet, each living companion now carries a 🎮 You / 🤖 AI toggle — decide who you drive in battle and who the tactics engine runs. Tap to switch; the choice sticks, and the whole party marches out under your chosen roster. Steer just the front-liner and let the rest fight on their own, or take the reins of the entire band.
- Feature
THE REINS PASS TO A SURVIVOR. When your hero falls in a delve, the run no longer goes full-auto or freezes on the body — the sturdiest ally still on their feet takes command, and you keep playing with them. Should they fall too, the next survivor steps up. The band fights on as long as anyone draws breath. (Choosing who you steer from the outset, and vetoing an ally's move mid-fight, are coming next.)
- Feature
TAKE A LOOTED BLADE IN HAND. A weapon pulled off a fallen foe used to sit as dead weight in your bag until you got home. Now, on your turn, you can draw one straight from the pack and wield it — a free action, the same as drawing any weapon. Open the 🎒 inventory, tap ⚔ on a looted weapon, and it's in your hands ready to swing (a bow even comes strung with its ammo). The rest of the spoils still ride home to be equipped or sold.
- Feature
A TOWN LOOKS LIKE A TOWN. Buildings no longer wear the same little village-hut look everywhere you go. A settlement's SIZE now shapes its architecture: village cottages stand low with timber-warm eaves; a town's blocks rise taller, two storeys, stone-rimmed; a city's loom taller still, some crowned with a spire. Each district keeps its own palette and buildings — this is the scale and stonework that tells you at a glance whether you're standing in a hamlet or a capital. Driven by data per settlement kind, ready for the coming world map.
- Feature
CHESTS THAT FIT A LASTING STORY. Deep in a delve, a chest no longer bolts a permanent +1 stat or a free suit of armor straight onto your character — that was one-shot arena logic, and in a run you keep forever it was free, stacking power. Now a story chest holds real TREASURE: a piece of gear for your bag (carried home, then equipped or SOLD), a potion or scroll for the road, a purse of coin, or — rarely — a map of the dark. You earn power by hauling gear out and putting it on, not by cracking a lid. (The one-shot arena keeps its instant boons.)
- Fix
THE PARTY FINDS ITS OWN WAY DOWN. On any floor past the first, a party that had cleared the level would stand around beside the exit forever — the instinct to head for the stairs only ever worked on the surface approach. Now, with the level explored and the way down found, the party walks to the stairs and descends on its own. And it won't leave anyone breathing behind: a downed ally holds the whole party on the floor until they're back on their feet.
- Fix
THE CAMERA KEEPS UP WITH THE SURVIVORS. If your hero falls for good deep in a delve, the view no longer freezes on the body while the rest of the band walks on — it follows the survivors down the stairs, and the run continues while anyone still stands. (Handing the reins to a surviving companion comes next, with party control.)
- Feature
KNOW A FALLEN ALLY'S FATE. A member at 0 HP now shows their death saves right on the sheet AND the token — three success pips against three failure pips, filling as the rolls come in — or a plain STABILIZED / DEAD once it's settled. No more squinting at a downed friend wondering whether they're holding on or already gone.
- Fix
AC BONUSES NOW ADD UP. A magic item picked up mid-run (a +2 armor, a protective ring) raised your Armor Class but hid its own share — the total climbed while the breakdown still read the old sum ("20" shown as "16 + 2"). Granted gear now names its bonus in the AC popover, so the numbers reconcile: 16 + 2 + 2 = 20.
- Fix
GHOSTS ON THE STAIRS, BANISHED. A party member who takes the stairs no longer leaves a full-health phantom of themselves standing on the floor they left. Presence is now recomputed from the truth of who's where on EVERY load — saved floors included — so each ally appears on exactly one floor, at their real health, carrying their real loot. Phantoms are also kept out of the initiative order and off the aim reticle.
- Fix
YOUR LOOT IS SAFE (AGAIN). The empty purse-and-bag scare was a leftover of the old stairs loop, which kept overwriting a floor with fresh, loot-less copies of the party. With the loop and the phantoms gone, a member's coin and spoils now ride with them down every floor and through a reload, exactly as carried.
- Feature
EVERY ALLY HOLDS THEIR OWN PURSE. Gold is no longer one shared pile on the hero — each companion is born with their own leftover starter coin and keeps whatever THEY loot in the field (the coin a member pulls off a body lands in their purse, not a common pot). At the trader, each shops from their own purse, and the counter shows whose coin is being spent. The quest reward still goes to the hero who turns the work in.
- Feature
SHARE THE WEALTH. The Quartermaster now moves coin between ANY two purses — the shared bank, the hero, and every companion — so you can bankroll the party's shopper, pool for a big buy, or sweep it all into the bank. Each purse is shown; pick from, pick to, name the amount.
- Feature
DON'T LEAVE A FALLEN FRIEND'S COIN IN THE DARK. When a companion falls for good, a surviving hero can now search their body — right-click it, same as a foe — and recover the coin and gear they were carrying, so a partial loss isn't a total one. Only the truly dead, never the merely downed (them you still save).
- Feature
A PLACE IS SIZED BY ITS DISTRICTS: a village is one, a small town two or three, a town four to six, a city more — the rule that will shape the towns and cities of the world map to come. Aldermoor is a town of four.
- Feature
The Game Master reads the room BETWEEN floors differently than at the door. Descending the stairs used to get the same fresh-faced 'the party enters' cold open every level; now the deeper floors open on a weary band who've already come this far, the stairs behind them and a new dark ahead — not a grand entrance each time.
- Fix
The trader's mood tooltip is a proper card now, like the rest of the game — hover it for the whole scale laid out (pleased/fair/wary/hostile), your current standing marked, instead of a bare browser tooltip.
- Fix
The stairs no longer trap a lone member in an endless climb — and stop resurrecting the party. A hero taking a ladder used to LAND on the reciprocal ladder of the floor they arrived on, so the game spliced them straight back, climb and descend, forever (the run hung) — and each rebuild left the WHOLE party standing on the next floor at full health, the fallen included. Arrivals now step off the ladder to a spot beside it: the stairs are a way through, not a loop, so who descends is who descended, wounds and all.
- Fix
Reloading the hub keeps the travel map open. If you were looking at the town plan and the page reloaded, it used to dump you back on the streets; now the map reopens where you left it. (The tavern and shop still step back outside — they need a hero standing at the counter.)
- Feature
THE TRADER REMEMBERS HOW YOU LEFT HIM. His mood no longer resets to Fair every time you walk in — it PERSISTS between visits. Sour him with a bad haggle and he's still wary next time; win him over and he stays warm. It shifts only when you DO something at the counter: a completed deal mends it a step, a good word (or a bad one) moves it, and getting caught with your hand in the till shuts the shop. And cooling off after a theft is no clean slate — you come back to WARY, not Fair; the goodwill has to be earned again. Hover his mood to read the whole scale.
- Feature
YOUR HAGGLE HAS A VOICE. With the AI Narrator on, working the trader — talking them down, flattering, leaning on them — now SPEAKS: the character says their piece aloud, one short in-character line that fits how the roll went, shown at the counter. Cosmetic and unhurried — the model's line never holds up the deal, and with the Narrator off (or the model away) it simply stays quiet.
- Feature
EVERY DISTRICT ITS OWN PLACE. Travelling around town used to look identical wherever you went — now each district wears its own face. The Forgeworks is soot-grey with no trees and the smithy standing in it; Arcanist's Row runs to dusky violet; Market Square and The Commons keep their green. Each area shows only the buildings that belong there, on its own ground, so stepping between districts feels like moving through a real town — not the same field relabelled.
- Feature
THE TOWN PLAN, DRAWN. Each district on the travel map now shows a little picture of itself — its ground, its lane, its trees, the silhouettes of its buildings — so you can see where you're headed before you go. And the plan adapts to any settlement: two districts or nine, it lays them out and runs the lanes between them, ready for the towns and cities to come.
- Feature
WALLED QUARTERS. Districts can now be guarded — a rich quarter that turns away the unproven until your renown is high enough. Where a gate bars the way, the plan shows it locked (🔒) and names the reason, and you can't travel in until you're welcome. (Aldermoor's own districts stay open; the gates are for the grander places ahead.)
- Feature
EACH SHOP SELLS ITS OWN TRADE. The trader no longer offers the same shelves everywhere — a district stocks only what its market deals in. Market Square and the Forgeworks sell steel and armour (and only the Forgeworks, with its smithy, works your blade up to +1); Arcanist's Row keeps the scrolls, philtres and wondrous things. Shelves a district doesn't trade in simply don't show.
- Fix
Arriving in a district drops the party at its ENTRANCE — the start of the lane — instead of the middle of the square, and the lanes no longer run off to plots where nothing stands: a district's roads reach only its own buildings.
- Fix
Hover the trader's MOOD to read what it means — pleased pays you more and charges less, wary the reverse, hostile shuts the counter — with the whole scale laid out and your current standing marked.
- Fix
The travel map now draws each district's REAL layout in miniature — its actual buildings where they stand, the lanes that reach them, the graves — instead of a stand-in sketch. And a district's lanes are paved in its own material: dirt for the green wards, grey stone for the soot-black Forgeworks.
- Feature
BRING YOUR OWN FACE. Every hero (and companion) can now wear a portrait of your choosing — drop an image onto the forge's portrait frame, or click it to pick one, and it becomes their battle token. It's downscaled and saved with the hero, so it rides onto every floor. Don't like it? One ✕ and it's back to the drawn default.
- Feature
The forge's craft pick moved to the card's back, with the feats, fighting style and magic where the rest of your build choices live — the front stays your identity (name, race, class, subclass), the table holds what you learn.
- Fix
Once the dice have spoken, they're done. Rolling a hero's stats now hides the − / + steppers entirely — a rolled score is theirs for life (only feats and level-ups move it), so there's no more half-working manual nudge on numbers the dice already settled. Point-buy still tunes with the steppers as before.
- Fix
The battle sheet's 🎒 tab is now a proper INVENTORY, not just a loot bag: it lists a hero's own items alongside the spoils they've pulled off bodies, with the coin in their purse and the weight they're bearing.
- Feature
SEARCH THE BODY. Looting a fallen foe is a real search now, not a silent grab. Right-click a slain enemy your active hero stands beside and they ROLL an Investigation check over the corpse — the loose coin goes straight in the purse, but its CONCEALED valuables (a gem, a jewel) only turn up on a good roll, and a craftier or tougher foe hides its purse better. A panel then lays out what's on the body — every item with its weight — and you take what you want, one at a time, the weight rules leaving behind what your back can't bear. A poor search misses the hidden prize for good; the obvious spoils are always yours.
- Feature
THE INVENTORY TAB. A new 🎒 tab beside the sheet and magic holds everything a hero carries — the coin in their purse, the weight they're bearing, their own items, and, in its own section, the LOOT pulled off bodies. Spoils go into the bag, not into your hands: that looted greataxe won't clutter your attacks or tempt a mid-fight swap — it's hauled, not wielded, weighing on your carry limit like everything else. Only when the run banks home does loot become real kit: a blade onto your rack, a gem onto the trader's scales.
- Fix
Right-clicking a corpse actually loots it. A slain foe's right-click had stopped opening the loot menu and popped the browser's own 'Save Image As…' menu instead — the ally-command radial had quietly narrowed which tokens answered a right-click, and corpses fell through. The board now owns every right-click again (no stray browser menu anywhere on it), and a body answers with the search panel.
- Fix
Taking a looted weapon no longer crashes the run back to the hub. A blade pulled off a body was being filed with magic trinkets, and the inventory readers choke on a weapon there — so the page threw. Spoils now go into the loot bag instead, sorted into real kit (a blade to the rack, a gem to sell) only when the run banks home.
- Fix
The log shows what you do between fights. Looting, searching a body, and giving first aid to a downed ally out of combat were being filed under 'pre-battle' and hidden from the live log — so a search roll or a stabilize check seemed to vanish. Those lines now appear where they happen.
- Feature
THE MARKET DEPENDS ON WHERE YOU STAND. Your home is no longer one flat square but a TOWN of districts — and a new 🧭 Travel map lets you click from one to the next. The Market Square trades in plain steel and bread; the FORGEWORKS is where the smithy stands and where a jeweller, smith and leatherworker will price and buy your haul; ARCANIST'S ROW deals in scrolls, philtres and wondrous things; THE COMMONS holds the tavern, the cells and the graves. Each place only offers what belongs there — the smithy forges in the Forgeworks, the tavern hires in the Commons — so getting around means travelling.
- Feature
A VILLAGE HAS NO JEWELLER. Because a market only knows the goods it regularly trades, you can now only SELL a thing where a merchant can value its kind. Your own jeweller still tells you the ruby is worth 500 gp — but the Market Square store won't touch it: 'no market here — take it to the Forgeworks.' Carry your gems to the district that deals in them. And when nobody — party or counter — can price a find, a trained eye now gives an ESTIMATE band ('180–320 gp') instead of a bare shrug, wider the rarer the thing. (Design: ADR 0017, following rules.md's Merchant Interaction & Estimating Value.)
- Feature
YOU ONLY KNOW WHAT YOU CAN PRICE. A ruby is 'clearly valuable' to anyone — but only a jeweller knows it's 500 gp. Every hero now picks a CRAFT at the forge (Jeweler's Tools, Smith's, Leatherworker's, a Herbalism Kit, Alchemist's Supplies, Arcana), and it decides what your party can appraise: gems by the jeweller, steel by the smith, potions by the herbalist, scrolls and wondrous magic by Arcana. At the trader's counter, an item your party can price shows its exact worth; one nobody can read shows only an impression — 'a trinket', 'valuable', 'a fortune' — and selling it is a gamble on whether the offer's fair. The appraiser just became a member worth having. (Design: ADR 0016.)
- Feature
RICHER SPOILS. The magic-item pool deepens with a whole spread of new finds across the rarities — silent Boots of Elvenkind, a Cloak of Displacement, giant-strength belts up the ladder, an Amulet of Health, Elven Chain, a warden's Mantle — topped now by a LEGENDARY tier: the Aegis of the Warden, the Ring of the Ancients, a Belt of Storm Giant Strength, found only in the deepest dark and never sold in a village. And foes now carry TREASURE: gems and jewelry — garnets, amethysts, a black pearl, emeralds, a diamond, a jewelled circlet — that you loot off the body, haul home, and sell. Pure spoils, weightless in the purse, worth stooping for.
- Feature
QUESTS WITH GIVERS. With the AI Narrator on, the barkeep has work: ask what's going and they lay a few jobs on the table — slay a warband, recover what was stolen, bring captives home, burn out a nest — each with its danger and its pay in coin AND renown. Take one and it enters your journal (on the hero sheet). The notice board then pins it as its own quest notice; march it, clear the wilderness that holds it, and the objective's done. Carry it back to the barkeep — 'it's done, I've come to collect' — and the coin lands in the purse, the renown on your name (a standing that'll matter later). Retreating never fails a quest; only the turn-in closes it. With the Narrator off, the village is as before — board delves only.
- Feature
The tavern's hires are a luck of the draw now. A prospect used to be the class your party lacked, in a fixed kit — now it's a RANDOM face: any class, its own kin, whatever gear that class fields at your level. Take them or leave them, it's your call. And the crowd turns over: a fresh set of faces gathers after every cleared run, so who's looking for work is never the same twice.
- Feature
THE BUILDINGS COME ALIVE. The tavern now has tables with regulars nursing their drinks — and when a companion has fallen, PROSPECTS gather by the fire: a living face for every cold seat. Walk your hero up to one and you're offered the chance to take them on (name, class, kit, and the fee), right there, instead of only through the barkeep. One prospect per empty chair, so a wiped-out party can rebuild in one visit. And the trader's shop is dressed for market — awninged stalls strewn with wares, crates, and the counter laid out — so it reads as a place of business, not an empty room.
- Feature
The trader has a shop you walk into. Marching a hero to the shop no longer pops a ledger at the door — it opens the SHOP itself: a room with a counter, the wares laid out, and a merchant behind it. Step up to the counter and the ledger opens; walk to the door to leave. Just like the tavern, you enter the place and approach the person, rather than the menu appearing on the threshold.
- Fix
Internal: the walkable village scene was split too — the static scenery (houses, well, notice board), the cemetery (headstones + hover card), and the shared cursor helper each moved to their own file. No behaviour change; the scene file shrank by nearly half.
- Fix
Internal: the battle screen's god component was split into focused pieces — the selection/pin logic, the left sheet+action sidebar, the reactive offer bar, and the end-of-battle overlays each moved to their own file. No behaviour change; the shell shrank by 40%.
- Feature
NOT EVERY JOB IS A DUNGEON. The notice board now mixes wilderness CAMPS in with the delves: a goblin nest behind a wood palisade, a spider-haunted thicket, a bandit stockade, a beast den — a single field of themed camps to clear under the open sky, no floors to descend. Camps read differently on the board (⛺ 'A warband is nesting' beside ⚔ 'Something worse below'), still carry a tier and skulls, and pay the same. Which notices are camps and which are crawls is its own roll, so the board is never all one shape.
- Fix
The party investigates the dark more carefully instead of feeding heroes into it one at a time. The crawl's formation leash is tightened, so the front-runner holds tighter to the group while pushing the frontier — the party arrives at a room together and wakes it together, rather than a lone scout blundering in ahead. (In testing the delves also resolved faster for it — a grouped party ends fights quicker.)
- Feature
Hover a headstone in the cemetery and a card rises telling who lies there — their name, who they were (level, race, class), and how far they got before the dark took them.
- Feature
A DELVE IS NO LONGER A ONE-WAY TRIP. Move freely up and down the stairs between the floors you've opened: the way down goes deeper, the way UP climbs back to the floor above — carrying your wounds with you. Running from a fight is a real option now, not a surrender: you retreat a floor, the fight dissolves behind you, and the run lives on. Only walking out through floor 1's surface mouth truly ends a delve. And the whole thing happens IN PLACE — no more full page reload that rebuilt the party every time you took the stairs.
- Fix
A trap that goes off always stings. Saving against a trap or a trapped door halves its damage — but a low roll could halve to zero, so a flame jet or frost sigil would 'deal 0 damage'. The halved hit now floors at 1; only a natural-20 dodge escapes a sprung trap clean.
- Fix
There's always an easy job on the board now. The gentle notice used to be able to roll skulls of its own — a 'Rats in the cellar' that had noticed you coming, and suddenly no soft option anywhere. The easy tier now always comes quiet, so a green or battered party can always find honest, low-stakes work.
- Fix
A dead hero's delve no longer haunts the notice board. A run left open by a hero who fell used to still show "Continue" — a quest you couldn't play or continue. The board now skips the fallen entirely: the village pays no wages to the dead, and it offers them no work either.
- Fix
The magic picker no longer promises a spell slot you can't fill. A level-1 wizard's counter used to read 2/3 — the prepared formula's number — while the two first-level slots meant only two spells could ever be known, so the third slot sat forever locked. The counter now shows the ACHIEVABLE cap (2/2 there), matching what the forge validates and what the battle actually casts.
- Fix
The six rolls now show in the order they were thrown instead of pre-sorted high→low — a throw is a sequence, and you're placing them yourself anyway. (Auto still finds the best fit regardless of order.)
- Feature
Hover a hero's tab in the forge and their story unfolds: every named hero is a book character, so the card tells you their race and class, the background baked into the name, their signature trait, and the tale it's drawn from. Name a hero yourself and it says so — no borrowed lore. The same trait/bio the battle resolves later, shown before you commit.
- Fix
Hovering a blocked Forge button now spells out the full unfinished picture instead of a vague "finish this hero's choices first" — every member who still has gaps, named, with exactly what each one still needs to pick.
- Fix
The throw breakdown now shows all four dice on every row with the lowest crossed out — even for a roll cast before the dice were recorded, which now shows a faithful reconstruction (its three kept dice still sum to the total) instead of just the bare result.
- Feature
The forge won't let a half-made hero march. Unmade choices — a caster's cantrips and spells, a fighting style, a human's origin feat — are now checked, and the Forge button names exactly what's still to pick. Because those choices live on the card's back, hitting Forge with gaps flips you straight to the table (which now wears a count), so nothing's ever hidden. The whole team is held to it: any companion with unfinished business gets a ⚠ on its tab. And to keep it painless, new casters are born battle-ready — recommended cantrips and spells filled to cap, a human's feat pre-picked — so a fresh build passes on its own and only nags if you strip something out.
- Feature
The roll modal now THROWS the dice: on open the six values tumble and settle one by one, left to right, before you can place them. And it shows the full throw — each of the six 4d6 rolls laid out with its four dice and the lowest struck through, so you can see exactly where every score came from instead of just the total.
- Fix
Forge header polish: the hero name field no longer jumps around when you switch between characters — the name/identity column is a fixed width now, and the tab pills take the rest and wrap. The − / + steppers on the ability chips center their glyphs properly instead of sitting a hair off.
- Fix
A subclass can only be chosen once its level is reached. The forge (and the sandbox editor) used to let a level-1 rogue pick Assassin or Thief on the spot — every subclass here unlocks at level 3, so the picker now stays hidden until the character is old enough to earn it, and the level-up screen surfaces the choice the moment it comes due.
- Feature
PLACE THE DICE YOURSELF. Rolling stats in the Hero Forge no longer drops each number silently onto its ability — now the six 4d6-drop-lowest rolls land on the table and YOU assign them. Tap a die, tap an ability; every socket previews the final score and modifier with the race bonus already folded in, so you arrange with the real numbers in view. There's an Auto (best for class) if you'd rather not fuss. And the dice truly speak once: the whole forge draft — team, gear, and the cast dice — now survives a page reload, so you can't reload your way to a better roll. Only forging the hero (or changing a class, a wholly new person) clears the slate.
- Feature
THE BARKEEP SPEAKS. Walk a hero up to the tavern counter and they talk back. Ask for the word around town — coax it out with Persuasion or read what they're not saying with Insight, and a good roll turns up a real rumor (the skull-marked delves are giving up more than coin lately) where a bad one gets you the weather and the miller's daughter. A cold seat at your table? The barkeep knows someone by the fire. Every line and every choice is data, and the dice that decide a conversation are the same ones that decide a haggle — so the quest-givers to come will speak the very same language.
- Fix
LEVELLING UP no longer makes the world harder. The difficulty curve was measured across levels and had a cruel twist: because the enemy budget grew far faster than a party's real power, a delve tier you'd cleared at level 1 could beat you at level 5. The high-level bands are re-tuned so every tier stays about as hard as it says it is, whatever your level — easy trivial, medium comfortable, hard tense, deadly a real gamble. Now the danger you sign up for is the danger you get.
- Feature
HEROES GROW. Every kill you've banked finally counts: the 5e XP table decides when a level is owed, and a gold star on the village panel says the road has taught your hero something. Their sheet shows how far along they are and opens the LEVEL-UP — choose your path when a subclass comes due, a way of fighting when the class learns one, two ability points or a feat at the milestones, and whatever new magic the progression allows.
- Feature
Levelling only ever ADDS. What you rolled at the forge stands forever, your subclass is yours once taken, your spells stay learned — a level opens new doors, it never reopens old ones. And your living companions climb with you: they share the danger, they share the growth. The dead stay where they fell.
- Feature
DEATH IS FOR KEEPS. A wipe ends a hero — for good — and buries every companion who was down there with them; their purse and their loot stay in the dark. Only someone standing on another floor walks away. The BANK survives: profile gold and artifacts are the estate your next hero inherits.
- Feature
THE CEMETERY. A fenced plot up the north-east lane, and a headstone for every hero who didn't come home — their name cut in the stone and the floors they managed beneath it. The village remembers its dead in the order they were buried.
- Feature
A WORD WITH THE BARKEEP. When a companion falls, their seat stays cold — until you ask around the tavern. One prospect at a time by the fire, built to cover what your party now lacks, at your level, for coin. Take them on and they slide into the empty chair; ask about someone else and another face turns up.
- Feature
Profiles can be erased — one click arms it, a second means it: the profile, its heroes and every run beneath them, gone together.
- Feature
THE BOARD TELLS THE TRUTH. Four delves pinned at once, from 'Rats in the cellar' to 'Nobody came back' — every tier offered, and it's YOUR call which one you're good for. Each notice says what it pays and what odds it gives on something uncommon, so you choose with open eyes.
- Feature
💀 SKULLS — the second axis. On top of its tier, a delve carries up to three skulls: they know you're coming. Each skull swells the garrison waiting below AND the purse promised for it. Hard work rarely comes quiet; deadly work never does. Whatever the board advertised is written onto the run when you take it — the deal you took is the deal you're owed, even after the board rotates.
- Feature
SEARCH THE BODY. Right-click a fallen foe within reach and take what it carried — its coin, its blade, whatever it held. Your back sets the limit: a heavy haul leaves what won't fit for a stronger arm (or a Bag of Holding). Clear the delve and it all comes home — coin into the purse, gear onto whoever hauled it — ready to wield, hand off at the quartermaster, or sell at the trader. A wipe leaves it all in the dark with you.
- Fix
ANYONE can save a dying friend. First Aid was locked to characters carrying a Healer's Kit — which only clerics, paladins, rangers and druids ever got — so a fighter could only watch an ally bleed out. Now any hero can kneel and STABILIZE a downed comrade with a bare-hands Medicine check; a Healer's Kit still makes the difference, letting a trained medic snap them back to their feet. (Nobody gets a free perpetual-revive: bare hands only stop the dying, never return someone to the fight.)
- Feature
THE QUARTERMASTER. Share the party's wealth: slide coin between the profile's bank and a hero's purse, and hand any item from one party member to another. Weight is honest about it — you can't pass the plate to the STR-8 wizard who'd buckle under it — and who a character IS never travels with the gear, only what they carry.
- Feature
THE VILLAGE REMEMBERS. Every party member can stand at the counter now — each with their own Persuasion, Intimidation and Sleight of Hand — and each gets ONE try per item. Lean on the trader for a better price and they'll resent you for it. Pocket something and the whole village grows warier: every attempt makes the next one harder, forever. Get caught three times and that member goes behind bars — no shopping, no marching — until someone pays their bail.
- Feature
THE TRADER BUYS. A Sell tab: hand over anything you carry — starting kit, delve salvage, the axe that's too heavy — and the trader offers what a trader offers, which is a third of worth. Every verb works on that number too: haggle the OFFER up, or lean on them for it. The mood cuts both ways (a pleased trader pays more, a wary one less), and selling is never profit — only recovery.
- Feature
SPELLS AT THE COUNTER. Charm Person warms the room — your next word lands with advantage, though when it fades they know exactly what you did. Fear puts steel behind a threat. The whole conversation system is now DATA (skill, DC, spell hooks, once-per rules), so the barkeep and the quest-givers will speak the same language when their doors open.
- Feature
THE CELLS HAVE TWO DOORS. A jailed party member can be bought out — bail from purse or bank — or SPRUNG: storm the village green against its militia, cut down the captain, and your people walk free. But the gate comes off its hinges, and the village closes behind you: no trade, no tavern, guards cold at the door, until you pay reparations for the blood on the square.
- Fix
The dice speak ONCE: rolling a character's stats now spends the throw for good — those scores are theirs for life, and only feats and level-ups will move them.
- Feature
WEIGHT MATTERS. Every piece of gear now weighs what the book says — a longsword's 3 pounds, chain mail's 55 — and every party member carries at most STR × 15 lb. Load bars on the hero sheet show who's near the line (green, gold, red), and the trader refuses a haul you can't carry home. The BAG OF HOLDING arrives on the uncommon shelf: 15 lb no matter what goes in, and 250 lb of the delve swallowed whole. Coins stay weightless — for now.
- Feature
THE TRADER'S LEDGER. The shop became a negotiation: browse by category, build your haul, and watch the TRADER'S MOOD — haggle with Persuasion (each item argued once past a rising DC; a silver tongue takes up to 40% off, an insult sours the room and the prices), or POCKET IT with Sleight of Hand and walk out with it free… unless you're caught, and the shop slams shut until you leave and cool off. Every roll lands in the ledger's log.
- Feature
VILLAGE LAW on prices: magic gear now costs what the RULES say — DMG-band pricing by rarity (a Cloak of Protection is 500 gp, not pocket change; the +1 working on your blade the same) — and a village shelf stocks NOTHING above uncommon. The rare wonders are found in the dark, not bought over a counter. Mundane steel keeps its honest PHB cost, and the sandbox economy is untouched.
- Feature
THE WARRIOR'S CODEX. The forge got its v2 — a hand-illustrated codex look in Cinzel and EB Garamond over deep navy and gold: your hero's name in display capitals with race, class and subclass plaques beneath, the party tabs at its shoulder; a portrait frame over the vitals LEDGER (hit points under a red rule, armor class under gold, speed, darkvision) and the saving-throw seals; abilities as three-across chips with glowing save-dots; skills in two gilded columns grouped by their governing ability — and the whole skills page FLIPS, a real half-turn, to the table of feats, fighting style and ✨ magic. One gold button seals it: FORGE THE HERO.
- Feature
THE HERO CARD. The forge reads like a character card now: the six abilities across the top (modifier over score, table-style), the 18-skill drawer down the left with live modifiers, and vitals on the right — HP, AC, speed, vision, saves, resists — computed by the battle's own math, never a lookalike formula. The middle IS a card: it loads on the PORTRAIT cover (name banner, class portrait, race and class plaques, the level hex) and FLIPS — a real half-turn — to the table of feats, style and features, and flips again to ✨ magic. Keep flipping; it never runs out of card. The forge fills the whole window — the card stretches with your screen.
- Fix
Rolled stats stopped arguing with the point-buy accountant: dice outside the 8–15 band now show a 🎲 rolled badge instead of 'Points −98/27', and the +/− buttons spend ASI points only (the dice said what the dice said).
- Feature
THE TRADER OPENS SHOP. A new roof in the village — walk any hero to the 🛒 door (or take the panel's shortcut) and spend their OWN purse on weapons, +1 upgrades, armor and potions. Trade-ins at full price: small village, honest scales. The forge stopped selling entirely — it builds WHO you are; the trader sells what you carry.
- Feature
THE LOCK, made law: once forged, a hero's stats, feats, spells and features never change — the trader deals in gear only, structurally. Levels (coming next) will be the one sanctioned way a hero grows.
- Feature
THE TRUE SPLIT. The party can be on different floors at once: the stairs move exactly who stands on them — send the rogue down alone, hold the line above. Every opened floor is a live board the expedition remembers; a floor whose party has all gone below simply waits, mid-breath, exactly as left. Whoever arrives below steps off the ladder wounds-and-all, joining a frozen fight's initiative if one waits there. (Built coop-shaped: one floor per player is the plan.)
- Feature
THE LAYER SWITCHER. A floor strip above the board shows every opened layer and who stands where — click one to peek: the frozen floor opens read-only, pan and zoom, time holding its breath. See what happened down there before you follow.
- Fix
Story mode's memory moved fully into the expedition record: no more resume dialog, no restart-a-floor — the dungeon remembers, full stop. (Old runs migrate on first open.)
- Feature
THE STAIRS ARE THE EXIT. An expedition floor no longer ends with a popup: kill everything and the crawl simply continues — 'the way DOWN lies open' — and the party moves on by WALKING ONTO THE STAIRS beside the fallen champion. Floors below the first are true underground now (no sky, no field); only the last floor ends by battle, and only the RUN'S end shows a screen: your outcome over a floor-by-floor map of the delve, and the road home.
- Feature
XP FLOWS. Every kill banks its 5e XP; taking the stairs (or clearing the run) pays the hero their party share. The sheet counts it — levels cash it in next.
- Feature
Story-mode comforts: the ☰ menu grew an AI NARRATOR toggle (no setup screen needed), and every character card on the hero page now opens — click for the full rules text of their class, race and feat features, straight from the forge's own panel.
- Feature
The village gets a COMMAND PANEL — the battle screen's own layout comes home: your selected hero on the left (name, level, purse, their running delves) with every action a click away — sheet, march, continue, the notice board, the smithy, the profile door. Click a token in the village and the panel follows.
- Feature
Creation is profile-level now: a fresh profile walks STRAIGHT into the Hero Forge — the hub belongs to the created. No empty village, no hint cards; your first sight of home is with a hero standing in it.
- Feature
STORY MODE has its own address: an expedition lives at /expedition/<id> — one URL for the whole run, every floor rebuilt from the record, never from the link. The ☰ menu knows which game you're playing now: in the sandbox it offers reroll and setup; on an expedition floor it shows the delve's name and ONE way out — fall back to the hub, with the fight saved exactly where you left it and the delve still pinned to the board.
- Feature
Village hands-on: DRAG a hero token and drop them anywhere walkable — dropping on a door knocks, same as walking there. The ground shows its cell grid like the battle board, and the roads finally go where roads go: a lane spur runs from the main road to every single door.
- Fix
The village reads TOP-DOWN like the battlefield: buildings are roofs seen from above — ridge, chimney, a lit slope and a shaded one — in the board's own raised-block style, with a door mat where the walk arrives. No more storefront facades. And the page under the canvas no longer scrolls; the village is the page.
- Fix
The forge, the hero sheet and the profile picker hold their width now — the page used to breathe wider and narrower as you switched tabs, sized by whatever content was open instead of the screen.
- Feature
THE LIVING VILLAGE. The hub is a place now, not a page: the village fills your window, and your heroes STAND IN IT — every living hero a token on the lane. Click the ground and they walk it, easing around corners; right-click a token for their affairs — character sheet, march out, continue a delve. The roster lists are gone: the village is the roster.
- Feature
DOORS OPEN. Walk a hero to the tavern door and step inside — plank floor, the long bar, a crackling hearth, and the barkeep who says nothing yet (they're working up to it). The smithy is the Hero Forge: walk in to build a new hero. Cottage doors are barred — villagers value their privacy.
- Fix
The notice board reads like a notice board: notes pinned in two ragged columns, each tilted where the pin caught. Quests stopped naming heroes — work is work, and WHO takes it is chosen on the notice. Running delves are told apart by name now (The Fallow Barrow, The Whispering Vaults…), and the sandbox no longer masquerades as village work.
- Feature
THE HERO FORGE. Hero creation is a real character build now: its own screen with the full editor — point-buy or 🎲 ROLL your stats (4d6 drop lowest), pick feats, fighting style, subclass, spells and cantrips, and spend your starting purse in the shops before you ever march. Your three companions get the same treatment: pre-picked to cover what your class lacks, every one of them editable down to their spell list. What you forge is what fights — every choice persists and walks onto every expedition floor.
- Feature
THE VILLAGE. The hub's board became a home: a painted village — cottages up the lane, the tavern under its swinging sign, woodland at your back — with the NOTICE BOARD standing by the tavern door. Read it and the parchment unrolls: delves wanting clearing, unfinished journeys, the open arena — every notice pinned to the board. The tavern door opens in a later chapter.
- Feature
THE HERO PAGE. Click any hero on the roster for their full sheet: rolled abilities, feats and spells, gear, each companion's own card, the record of expeditions, floors and kills — and every journey they've walked, running or done.
- Feature
EXPEDITIONS. The board is open: march a hero out on a 3-floor delve. Each floor is its own dungeon under its own patch of wilderness, and what the party carries down is what it has — wounds, spent spell slots and the fallen all ride the stairs with you; nothing heals between floors. Clear the last floor's champion and the run is done; fall, and the run is wiped; sound the retreat and the run is abandoned. Close the tab whenever — a running expedition waits on the board, exactly on the floor you left.
- Feature
THE TEAM. A new hero no longer marches alone: creation now rolls three companions chosen to cover what the hero's class lacks — a fighter gets a healer, a skirmisher and a caster at their back, each with their own name, gear and starting kit. The team is THE team: no swapping while everyone lives.
- Feature
Every expedition floor is reproducible forever from its record — same run, same floor, same dungeon, down to the last torch. Concurrent journeys are legal: every living hero can have their own delve running at once.
- Feature
PROFILES. Tactforge now remembers you: create a profile on your device, and it keeps its own heroes, bank and (soon) running expeditions. No password, no account — pick who's playing and go. Built Firebase-shaped from day one, so cloud sync later is a swap, not a rewrite.
- Feature
THE HUB. Every profile gets a home base: your hero roster, your bank (the gold and artifacts that survive anything), and the board. Roll a hero — name, class, race — and they're born at level 1 with their class's gear and a PHB-style starting purse: a fighter marches out with 125 gp, a monk with 12 and their fists. The board offers the open arena for now; expeditions are what it's being built for.
- Feature
The test bench grew a browser: UI screens and the profile store are now tested the way players actually touch them, including a real end-to-end run — create a profile, enter the hub, roll a hero, reload, still there.
- Fix
Movement flows. Tokens now EASE through their walk — leaning into the first step, settling into the last — and corners round into little arcs instead of snapping square to square. Slow going through water and up hills still reads as slow going.
- Fix
Shoves fly. A repelling blast, a hurl from a thunderous burst, a thorn whip's yank — the victim used to teleport to the landing square. The engine now records every square of the forced flight, and the token is launched hard and decelerates into the landing, twice as fast as a walk (nobody wades carefully while airborne).
- Feature
The dungeon goes UNDERGROUND — the first double-level map. Choosing a dungeon starts the party on a forest field above it: a road runs from your muster to the entrance, and the entrance is a real BUILDING — a ruined tower over cut-stone halls, a chapel over a hub, a hollow hill over a warren, a rock-mouthed cave over a cavern, an earthen barrow over a gauntlet — walls and all, with a doorway where the road arrives and the descending stairs inside. Step onto the stairs and the whole party goes down; your AI companions gather at the entrance on their own.
- Feature
The dungeon REMEMBERS. Climb the entrance ladder any time: the whole party returns to daylight, the battle carries on, and the mouth stays open. Go back down and the dungeon is exactly as you left it — dead monsters stay dead, opened doors stay open. Victory is sealed only when the boss falls below and you stand on the surface again. Inside a dungeon the ladder IS the retreat; the horn is reserved for true no-way-back escapes to come.
- Feature
The stairwell reads as a hole going down: a stone kerb matching the paving, five treads narrowing and darkening into a black throat, torchlight at the rim — perspective instead of an icon.
- Fix
One scuffle no longer summons the whole dungeon. Battle noise used to relay from guard to guard — each woken monster's footsteps 'woke' the next room as it marched, until the entire garrison converged on the party in one pile. Noise is the BATTLE now: a sleeper wakes only when the fighting itself is close enough to hear (walls and closed doors still muffle everything). The crawl is room by room again.
- Feature
The dungeon is UNDER the world now — the first double-level map. Choosing a dungeon starts your party on an open field above it: walk to the dungeon mouth, descend, and the crawl begins below; climb the entrance ladder any time to return to daylight — the whole party comes up together, the battle carries on, and the mouth stays open. A half-cleared dungeon STAYS half-cleared: go back down and the dead are still dead. Victory is only sealed when the boss falls below and you stand on the surface again. (Inside a dungeon the ladder IS the retreat now — the horn is reserved for true no-way-back escapes to come.)
- Feature
Dungeon passages follow the book: corridors are 10ft wide as standard — the old 5ft warren squeezes are gone, which also means a Large creature can finally walk every hallway. Every crawl now begins OUTSIDE the dungeon. A 10ft entry tunnel leads in from the surface; the party musters at its mouth beside a proper 10ft ladder — two cells wide, redrawn as a carved stone flight in the board's 2.5D style, hard against the tunnel's dead end — and the first move of every delve is the walk into the first room. The ladder is the way back out, and the retreat's escape zone.
- Feature
The party can RUN — where there is somewhere to run to. In a dungeon, sound the retreat (a free horn on any hero's turn, once per battle) and the way out is the entrance ladder; an open one-off battle offers no horn — there is nothing behind you but the field's edge, and that is not an escape. Fleeing is not an exit button: the fight rages on while you run, leaving melee still provokes, and every hero who reaches the way out slips off the board alive while whoever is left behind is left behind. When the last runner makes it out the battle ends in a new outcome — FLED: not a victory, not a wipe. The AI party drops everything and routs when the horn sounds; monsters chase what they can see, as they always did. The horn lives on the BACK of the actions card: flip the card over (☠️ Desperate measures) to reach it, then click twice to confirm — a battle-ending call can never fire from a stray tap.
- Feature
Initiative only exists while swords are out. A dungeon used to roll one initiative for the whole map — sleepers included — and 'rounds' ticked while you walked empty corridors. Now the crawl has two moods: EXPLORATION (no initiative, no round counter, the panel shows a compass) and FIGHTS — when a room wakes, the participants roll fresh initiative; when the last awake foe falls, the fight dissolves and you explore on. A floor is a series of fights, not one forty-round battle.
- Feature
Fights own their magic. Bless, Blur and every minute-scale spell now expires with the fight it was cast in — and between fights you can only cast healing and long-lasting magic (Mage Armor, Shield of Faith), so no more arming Bless at a closed door. Hour-scale spells (Hex, Invisibility, Stoneskin) persist across fights, as they should. New enemies waking mid-fight roll INTO the running order — a fight grows, it never splits.
- Fix
The 'battle that never ends' is structurally impossible now. When only sleepers remained, the game used to force-wake the nearest few so victory could ever fire — a workaround, now deleted: the fight simply ends and the party walks to the next room. Killing the last awake foe also hands the rest of that hero's turn back for looting or advancing.
- Fix
A medic kneeling diagonally beside a fallen comrade can actually give first aid. The menu offered it (diagonal = 5ft) but the engine measured the diagonal as 7ft and refused — the rescuer tried and failed forever. One adjacency rule everywhere now.
- Fix
A hero revived between fights rejoins the marching order — they used to be left out of the rotation and the party waited on their 'straggler' for the rest of the crawl.
- Feature
The battle ends with the Game Master's word. The closing tale now headlines the result screen the moment the fight is decided — and it starts being written while you read the banner, so it's usually there when you look. It used to hide behind the Statistics button, where the fetch only began after you clicked and you watched a loading line instead. The stats table is still there, one tap away, as always.
- Feature
Every dungeon now has a way out: a ladder stands in the entrance room, on a clear spot near its middle. For now it anchors where you came in — soon it's how a routed party escapes with their lives, and how deeper floors connect. Inside a sub-dungeon it still climbs back to the surface as before; a top-level ladder no longer dangles an ascend button with nowhere to go.
- Feature
Monster spellcasters cast their spells. The enemy brain had no rung for a single-target spell at all — only area bursts — so every leveled spell on a monster's sheet was unreachable: a Cult Fanatic with Inflict Wounds walked up and poked you with a dagger instead. Monsters now weigh a slot the same way your companions do (spend the cheapest one that secures a kill or lands on a real threat, never a reflexive max-upcast), and the casters who had no ranged option at all — the Cult Fanatic and the Lizardfolk Shaman — carry an at-will attack cantrip, so they fight from range instead of Dashing across the map to stab.
- Fix
Chromatic Orb no longer splits off a roll it never made. The chain looks for two matching damage dice, but it read the last damage in the log rather than the attack in front of it — so when a leap MISSED, the previous hit's dice were still sitting there and the orb happily leapt again. A miss now ends the chain, as it should.
- Fix
The log says what the orb is doing: “Chromatic Orb splits — the orb leaps to Elite Gnoll (1/2)”, with the chain position, and it reads properly in Ukrainian (the old line was half-translated English).
- Fix
The ⓘ on a combatant in the initiative list opens a proper card — health, action economy, background and per-round turn times — instead of the raw browser tooltip that sprawled across the panel and covered the fighters underneath it.
- Fix
The turn clock stops when the battle does. A won or lost board still has a creature “up”, so the timer kept counting the victory screen as that creature's turn.
- Fix
Renewing a group blessing covers the group again. Ending your old casting to start a new one is the rule — but the new one picked its targets BEFORE the old lapsed, so everyone still under it was passed over as “already covered”, then lost it a heartbeat later. A Bless on three heroes came back covering one. Targets are now chosen after the old casting ends, so a renewal blankets the party exactly like the first one did. Same for Bane.
- Fix
AI casters no longer renew a buff that is still running. Re-casting means dropping the blessing you are already sustaining to start it over — pure loss while it is up and unbroken. The AI's own doctrine has always forbidden it, but the option still appeared on the menu the narrator AI picks from, so it took it: three heroes lost Bless so the caster could bless itself. Both brains now follow the one rule.
- Fix
Blur, Bless and other buffs that need concentration wait until the fight is actually in front of you. A caster would burn one in round 2 while the party was still hacking at a closed door, and it ran out before a single blow landed. Cheap, long-lasting buffs (Mage Armor) are still cast during the walk-up.
- Fix
Archers and battle-casters stopped jogging back and forth instead of fighting. A ranged hero would close for a shot, then retreat toward its “ideal range” — losing sight of the enemy — then march back in next turn, forever. Retreating now has to actually escape the enemy: against a foe as fast as you are, stand and shoot. Measured across seeded dungeon crawls, wasted back-and-forth turns fell from 5% to 1.3%, fights end several rounds sooner, and the party wins crawls it used to lose.
- Feature
Encounters are sized by how strong your party actually is, not just how many heads it has. Four heroes are four turns a round, focus fire and a healer; one hero is none of that — but the old budget priced them the same per head, so a full party breezed through deadly fights while a lone hero lost easy ones. Small parties now face proportionate packs, and how well you geared up in the shop counts too.
- Feature
The party arrives at a fight together. Closing on an enemy was deliberately exempt from the group's cohesion rule — everyone ran at the foe flat out — so the fastest hero reached it first and fought alone until the others trickled in one at a time. Heroes now advance at the group's pace and hit the enemy line as a unit. Measured across seeded dungeons: crawls the party used to lose outright are now winnable, and skirmishes at three heroes went from losing most hard fights to winning them.
- Feature
Dungeon crawls give you room to breathe. A crawl spends most of an adventuring day's worth of fighting, but the party got exactly one short rest for the whole thing — and could almost never take it, because a garrison ASLEEP two rooms away counted as "enemies nearby" through solid stone. Longer crawls now grant more breathers (a lair 1, a citadel 3), sleeping monsters no longer block one, and AI companions actually stop to catch their breath between rooms instead of walking into the next fight at 40% health.
- Feature
New balance doc and a repeatable probe that plays out seeded battles and reports win rate by party size, level, difficulty and gear — so difficulty claims can be measured instead of guessed. Honest headline: a solo run is still hard mode, and no amount of shrinking the enemy pack fixes that.
- Fix
Dungeon crawls now respect the difficulty you picked. Every crawl was built as a chain of deadly-grade rooms whatever band you chose — on the theory that you would rest between rooms, which you cannot: the rest is once per encounter. A level-3 solo hero's "easy" dungeon fielded twelve monsters including an ogre; a four-hero party's fielded seventeen including two trolls. Easy now means easy, and hard and deadly are no longer the same fight.
- Fix
AI companions drink their healing potions. They bought them in the shop, carried them into the dungeon, and died with them unused — across six test crawls the party drank exactly zero. They now quaff one when badly hurt, and will hand one to a fallen comrade beside them to get them back on their feet (a potion is a bonus action, so it costs them nothing they meant to do with their turn).
- Fix
Trolls and ogre magi no longer ambush low-level parties. A regenerating CR-5 troll was legal from level 1 — a level-3 party's "easy" dungeon could field two of them. Trolls now need level 4, ogre magi level 3.
- Fix
The enemy XP budget shown in setup now matches the pack actually built — it reads the same party-strength adjustment the generator does.
- Feature
Monsters named after a class now fight like one: the Goblin Berserker rages, attacks recklessly and gets a frenzy strike; the Goblin Warlock's Eldritch Blast carries its full damage; the Goblin Stalker slips away with Cunning Action; the Ogre Chain Brute swings wild. Expect these to hit noticeably harder.
- Feature
New developer doc mapping every AI decision rung and what each reason code in the battle log means, plus a repeatable probe that measures how many turns the AI wastes. Wasted turns are down from 12.7% to 3.8%.
- Fix
A turn is no longer over after one action. A fighter who catches Second Wind, a barbarian who rages, a healer who whispers a Healing Word, or anyone who takes a moment to size up an enemy now goes on to actually fight — those all cost a bonus action or nothing at all, but they used to end the turn on the spot. This was the single biggest cause of creatures standing around doing nothing.
- Fix
Multiattack works. Creatures with two or three attacks — Hobgoblin Captains, Trolls, Veterans, Orc War Chiefs, Goblin Berserkers — were only ever swinging once per turn. They now use every swing they have, so heavy hitters hit like their stat block says.
- Fix
Monsters sealed off behind a barred door used to march at the nearest door on the map — usually the one on YOUR side of the seal, which they could never reach — then give up and Dodge for the rest of the battle. They now head for the nearest door they can actually get to, and smash their way through.
- Fix
Archers and rogues stopped pacing. A skirmisher with no shot would back off toward its ideal range while another rule pulled it forward to close the distance, so it shuffled between the same two squares for rounds on end.
- Feature
New Statistics screen: every battle you finish is recorded in your browser and rolled up — win rate, how the AI decided its turns, which spells you actually use, and what the AI Narrator costs to run. Copy the whole summary to your clipboard with one button. Nothing is uploaded.
- Feature
Party roster: clear any slot with the × on its tab, or hit Solo run to strip the party down to a single hero. A one-hero party is now a legitimate way to play.
- Feature
Enemies commit to a target instead of drifting: a creature now remembers who it has been fighting and finishes what it started, rather than picking a fresh victim every turn — while still switching when a healer or a wide-open caster is the better call.
- Feature
The AI Narrator can finally see high ground: monsters know when a hero holds the rampart above them (and when they hold it themselves), so they fight the terrain instead of ignoring it.
- Feature
Every creature now hunts according to its own nature. A mindless zombie simply mauls whoever is closest; a pack piles onto the quarry it is already biting; an assassin slips past the tank to reach your healer; a commander plays the board and goes for whoever is holding a spell together. Temperament is read from each stat block, so every monster has one.
- Fix
The AI Narrator works again. Enemy turns had silently fallen back to the basic AI on every single decision — the model was being cut off mid-answer and returned nothing at all.
- Fix
Bless can be cast on three allies again (four at 2nd level, five at 3rd, and so on). It had been stuck at a single target, and upcasting it was refused outright even with slots to spare.
- Fix
Monsters walled out of the fight now batter down the gate between you. One watching the party through a locked door would stand there and dodge instead of breaking through.
- Fix
AI heroes no longer strand themselves: one told to close on an enemy it couldn't reach — behind a wall, across a locked door — used to Dash in place every round while an ally fought alone. It now falls back to breaking the barrier or regrouping with the party.
- Fix
A knocked-down fighter gets up before it swings. AI creatures were attacking from the floor — at disadvantage, and handing every adjacent foe advantage in return — instead of spending the movement to stand first.
- Fix
Combat log reads in the right order: the blow that fells a creature now prints above the “is down!” line, and an AI's stated intent prints above the action it took, not after it.
- Fix
Sleeping monsters no longer wake the whole dungeon at once: a shout now has to travel through open space to be heard, rather than passing straight through solid stone.
- Fix
The Dungeon Master no longer comments on every single thing you do — the jabs now land occasionally, while the big moments (a critical hit, a kill, a hero going down) always get their line.
- Fix
Ukrainian narration stays in Ukrainian instead of slipping into Russian or English.
- Fix
Humans follow the 2024 rules: an extra feat instead of the old +1-to-everything-AND-a-feat, which no official option ever granted. Existing human heroes are a little weaker as a result.
- Fix
Paladins can now take Blessed Warrior as their Fighting Style, learning Cleric cantrips that use Charisma.
- Fix
Fighting Styles arrive when they should: paladins and rangers pick one at level 2 (fighters still at level 1), instead of getting one immediately.
- Fix
Enemies assaulting a fortified position no longer freeze: an attacker at the foot of a rampart now climbs to reach a defender standing above it, instead of swinging at thin air from below.
- Fix
Besiegers that start far from a castle gate now march to it and batter it down, instead of bracing in place for the whole battle.
- Feature
Spell effects now carry a distinct per-element look — fire orbs flicker, cold reads as angular ice shards, lightning forks and crackles, necrotic pulses as dark wisps, radiant as bright stars — driven by each spell's described nature, not just a colour tint.
- Feature
The compendium spell EXAMPLE is now interactive: aim the spell over a fixed foe and click (or ▶ Cast) to fire it, watch the damage dice roll (both packets for dual-type spells like Ice Storm), and see lingering aftermaths — Ice Storm's difficult-terrain ice patch, Witch Bolt's crackling lightning tether.
- Feature
Compendium spells now have filters (by role: damage/buff/debuff/utility, and by damage element) plus grouping by spell level.
- Feature
Thorn Whip now pulls a Large-or-smaller target 10ft toward you on a hit.
- Feature
Warlocks gain the Repelling Blast invocation: an Eldritch Blast hit shoves a Large-or-smaller foe 10ft straight back (each beam pushes).
- Feature
Chromatic Orb: the caster now picks the damage type (acid/cold/fire/lightning/poison/thunder), and the orb leaps to another foe within 30ft when two or more of its damage dice match — chaining on upcast.
- Feature
Witch Bolt is now a sustained arc: the initial hit tethers the target, then each turn you re-zap it for 1d12 (no slot) while you concentrate and it stays in range — shown as a live crackling lightning link between caster and target.
- Feature
Character setup: cantrips and spells are picked in one ✨ Magic list (each with its own limit), the level filter is single-select, and you can no longer pick more spells of a level than you have slots for it (e.g. a level-6 sorcerer: 4 first-level, 3 second, 3 third) — with the total spells-known cap enforced on build too.
- Fix
Ice Storm now deals its full 2d10 bludgeoning + 4d6 cold, renders as a 20ft blast, and leaves difficult terrain (double movement) for a round.
- Fix
Flame Strike now deals 4d6 fire + 4d6 radiant (was a single damage type).
- Fix
Ray of Frost slows the target 10ft on a hit and renders as a frost beam; Chill Touch is 1d10 necrotic and stops the target regaining HP for a round.
- Fix
Spike Growth renders as a spiked-ground patch (not a blast); Lightning Bolt renders as a crackling lightning beam, and all lightning effects are now electric blue-white for a consistent look.
- Fix
Mage Armor's +3 now shows on the character sheet's AC while the spell is up (e.g. AC 16 = 10 + 2 gear + 3 mage armor), matching what the combat resolver already applied.
- Fix
Spells that gain nothing from a higher slot (Mage Armor, Blur, Shield of Faith, Hold Person…) no longer show a meaningless slot-level upcast picker. Spells that do scale (heals, Aid, Scorching Ray, Magic Missile) still offer it.
- Fix
The spell info popover now includes the spell's description, and long text wraps cleanly instead of overflowing the modal.
- Fix
Cleric Divine Order aligned with 2024 rules: the base cleric trains in Light + Medium armor and shields; the Protector order grants Heavy armor and Martial weapons (instead of a flat +1 AC), and Thaumaturge keeps Thaumaturgy. A cleric who isn't a Protector can no longer wear heavy armor.
- Feature
Multi-projectile spells now have a player-facing aiming UI: with Scorching Ray, Magic Missile, or Eldritch Blast armed, click foes to place projectile markers (⚡×N over each target — stack them on one foe or spread across several), with a live "2 / 3 placed" tally and undo. The volley auto-fires once every shot is assigned.
- Fix
Mage Armor is now a spell you cast (1 action, touch) on yourself or a willing ally, not a free bonus baked onto every wizard/sorcerer sheet. Unarmoured casters start at 10 + Dex and gain the +3 (to 13 + Dex) only after the spell lands — and it does nothing for anyone already wearing armor.
- Fix
Ally-targeted spells (Mage Armor, buffs, heals) light up the friendly ring so you pick which ally to bolster, instead of the foe ring.
- Feature
Multi-projectile spells (Scorching Ray, Eldritch Blast, Magic Missile) now split their rays/beams/darts across targets — the AI spreads a volley across foes (finishing weak ones first) instead of dumping every shot on one, and the projectile count scales correctly on upcast.
- Fix
Creature traits like Undead Fortitude, Pack Tactics, Regeneration, Cunning Action, and Brave now show a description instead of a raw feature id.
- Fix
Lingering hazards (Spike Growth, Wall of Fire, …) show a rounds-left badge on the board, so you can see how long they last.
- Feature
The battle log now shows each AI creature's chosen action (a 🧠 line), so you can see what the enemy AI decided — handy for spotting a monster that's standing idle.
- Fix
Enemy spellcasters no longer stand idle: they now advance until the party is within casting range (with line of sight) and cast, instead of only wanting melee range and doing nothing for the whole fight.
- Fix
The area-spell aim preview now counts hits with the same logic that applies damage (cover and Large creatures included), so the '· N hit' number matches what actually gets hit.
- Fix
Spike Growth now covers its full RAW area (was too small).
- Fix
Info popovers (spell/stat details) no longer clip off the bottom of the screen — they flip and scroll to stay readable.
- Fix
Internal: split the LLM action-menu builder into per-section files for maintainability (no gameplay change).
- Feature
Added a Changelog link to the site footer.
- Feature
The battle-setup screen now health-checks the AI Game Master: the 'LLM master' option is greyed out when the LLM backend is offline (and reverts to the built-in AI director), so you can't start a game on an unreachable model.
- Fix
You can now attack a hidden enemy — you strike at its square with disadvantage (RAW) instead of the Attack option being unavailable.
- Fix
AI spellcasters stop wasting leveled spell slots: a Fireball/area spell needs a real 3+ cluster, and a single-target slot is reserved for bosses/elites or beefier foes rather than a lone weak goblin a cantrip handles.
- Feature
Timed effects (buffs, spells like Shield of Faith / Hold Person) now show the rounds remaining on their status chip and in the hover tooltip — a live countdown.
- Feature
Enemy target priority now weights healers and concentration-holders over raw low-HP, and accounts for reachability — no more swarming an unreachable mage.
- Feature
Party cohesion: an isolated hero regroups toward its allies instead of charging a distant foe alone.
- Feature
Party-wide short rest: one rest heals the whole group (half max HP + class recharges), once per encounter.
- Fix
Rogues now stab an adjacent foe instead of fleeing to a bow stand-off.
- Fix
Large (2×2) creatures can be attacked from any of their cells — the Attack button no longer greys out when adjacent to their far edge.
- Fix
Opportunity attacks measure reach from a Large creature's full footprint.
- Fix
Movement AIs Disengage instead of walking into free opportunity attacks.
- Fix
Concentration spells respect their real durations (e.g. Wall of Fire 1 minute) instead of lasting forever.
- Fix
The active-hero card is force-selected on its turn so you can act immediately.
- Fix
The per-turn timer now counts from turn start, including the AI's thinking time.
- Fix
Reduced Game Master narration spam.