Skip to content
Shattered Crowns

v1.3.2-beta · 2026-08-09

Tidings

Everything the game already knew and never said. An evening of 5v5 and 3v3 against a real human produced four match logs, and almost every bug in them was the same bug: something happened, and nobody was told.

  • The CT tick's own events never left the server. The match loop read the batch it got back from the clock, handled two of the event kinds, and threw the rest away. That batch is where the death countdown, the crystallization, every poison and regen tick and every status expiry live — so for the entire life of the online server, no client was ever told about any of them. Four match logs across two evenings contain zero death countdowns, and a status applied "(2 turns)" is never once seen wearing off. It also meant the reward tally never saw a turn start, so participation EXP has been paying zero in every online match ever played.

  • Crystals were the visible half of that. "The dead units never turned into crystal and I couldn't walk over the dead White Seraph" was two bugs stacked: the event never arrived, and when it did the client set the unit's HP and pulse and never set the flag its own pathing reads to decide a crystal tile is walkable. Both fixed — and a crystallized unit now becomes a crystal, a team-tinted shard rising out of the ground the body spent three turns sinking into. Walk onto it for the full HP/MP restore and it's gone.

  • The last KO ends the match. The win check sat behind a gate that skipped busy turns, so a killing blow left everyone staring at a finished battle until the turn closed — 32 seconds, in one log. Fixed on both sides of the wire, and the slow motion now starts on the killing blow rather than when the verdict comes back, so the cinematic covers the blow instead of a slow pan across corpses.

  • Whose turn it is, at a glance. A gold sword hovers and bobs over the acting unit — visible from every camera angle, drawn through terrain, and the only moving thing on a still board.

  • Every ability shows its odds. The hit chance for the whole faith-gated family — Induration, Death Knell, every talk skill — was being calculated and thrown away, so the abilities whose entire question is whether they land were the one kind that showed no percentage at all.

  • Your R/S/M exists now. The three passives you pick were shown almost nowhere once a match began: they are on the roll-reveal card, on the results board, and on the saved-build cards. The quick-match pickers no longer hide anything learned on a job you aren't currently fielding — a restriction the rules never had. The war table can pick them at all, which it could not; army units went to battle with all three slots empty.

  • The Tab scoreboard is the end-of-match board, live and updating: kit, gear, passives and per-ability breakdown, all hoverable, while you can still act on knowing what the enemy healer drew.

  • The muster walks you through the whole draft. Picking a calling used to hop once to sub-class and stop; it now walks the full rail to movement, and says so as it moves.

  • How many people are actually here. Player counts on the title screen and the lobby browser, and queue depth on quick match before you commit — plus a 5v5 queue, which no combination of clicks could reach before.

  • You can leave a lobby. There was no way to; the back button was a scene change and nothing else, so a player who wandered off sat in the roster forever and wedged the host's start gate. The seat frees and reopens.

  • Turn timer 45 seconds, both control schemes (was 30 and 40). Two of Joe's own turns were auto-waited mid-decision, and weighing a Draw-Out against a charge is the part of the game worth doing.

  • Also: weapon range on the item card, audio defaults remixed, the walk onto the battlefield runs half again as long, chat starts folded and unfolds when someone speaks, and the public-lobby list stops printing its text on top of the gold rule.

The movement slot gets the same treatment. Movements 23 → 19, and the dragoon's Jump tiers finally sit with the ability they belong to.

  • Jump 4 / 5 / 6 are ABILITY rows now, not movements. They set how far the dragoon's Jump action reaches — they never granted a point of MOV or JUMP — and were only filed under M because the field lived there. They sat in the movement picker looking like a choice competing with Crashing Descent while equipping one did precisely nothing (the roll read them out of the learned pool all along). New AbilitySlot::Passive: bought with JP, never cast, never slotted.

  • Three duplicate movements removed. Dancer's Grace and Shadow Walk were both "+1 MOV, +1 JUMP", a third of the ninja's Ninja Step; Shadow Drift was the archer's Jump +1 with a mystic's name on it.

  • Razor Pavane (dancer) — the mirror of the bard's Marching Ballad: enemies within 2 tiles lose 10 HP whenever you move. Never lethal, for the reason Crashing Descent already records — an effect with no targeting step and no forecast must not take the last point.

  • Witherstep (mystic) replaces Shadow Drift: enemies within 2 tiles lose 5 MP and the Cursebrand takes it. The only movement in the game that touches somebody else's MP, and a leech rather than pure denial — against a knight's 40 MP a drain alone would be nothing.

  • Every move aura fires where the move ENDS. It always did; nothing pinned it, and from sits right there in the signature for LandingShock's height drop. Now guarded, with the victim placed outside the aura at the origin and inside it at the destination so the two answers cannot agree.

  • Levitate lifts the unit off the board. The Seraph's Levitate, the Geomancer's Any Terrain and the Float status all ignored terrain height in the rules and looked identical to everyone else standing in the mud. Now a real hover with an idle bob, applied on the same two-source rule get_move_range reads.

  • Teleport looks like teleporting. Live since v0.5.8 and rendered as an ordinary walk — the one ability whose whole point is ignoring walls and height glided straight through them. Now collapses into a column of light and rises out of another.

  • On-move auras draw their footprint. A Manhattan diamond of the real radius blooms outward from where the unit landed — mint when it mends, red when it bites. Driven by a new MoveAura event rather than inferred from what follows a UnitMoved in the same batch: CtDrained and MpDrained name only the victim, so the cause was guessable from event ORDER alone. Fires only when the aura actually touched somebody.

  • Every on-move aura has a voice. Witherstep, Commanding Presence, Stolen Seconds, Move-MP Up and Ki Stride reached the battle log and nothing else, so on the board they were indistinguishable from the movement doing nothing. One shared MP/CT popup covers all four resource events; new MpDrained event so a drain is not a negative restore.

  • Crashing Descent measured, not guessed (Joe asked whether it is too strong): 9.9 damage on average, firing on 11% of possible moves, max 20 — 22% of a chemist's HP — and never lethal. Table printed by cargo test --test landing_shock_table -- --ignored --nocapture, walking every passable tile of all 19 maps through the real move range.

The reaction slot stops repeating itself. Joe's pass over all 24 reactions plus an audit of all 32 supports. Reactions 24 → 22.

  • Three reactions removed for being another job's reaction in a different hat. Adrenaline (archer) and the thief's Speed Save were the same ApplyStatusToSelf { sp_up } one job apart. Evade (thief) was the fourth "block physical entirely" in a catalog of twenty-four — on the class that already carries the highest evade on the roster, so the slot was spent restating a stat. Third Eye (samurai) was the fifth, differing from Parry, Finger Guard and Blade Grasp in nothing but its JP cost.

  • The bard sings for somebody else. Encore was a 15% self-heal — Auto-Potion with a bard's name on it. It now heals every ALLY on the four tiles around the bard and never the bard, which makes it the only reaction in the game that pays someone else, and asks the bard to stand in the line rather than behind it.

  • The dancer answers it. New Scything Reel replaces Fury: when struck by a physical blow, every ENEMY beside her takes half her Brave. Same footprint as Encore, same exclusion, opposite sign. Brave decides both how often it fires and how hard it lands, so one stat carries the whole ability.

  • The monk's Counter is a reflex, not a rule of the universe. Melee physical only now — it will not answer a spell — and 0.75×PA rather than the 1.2 every counter shared. Cheap, frequent and small, and it gives casters a real reason to exist opposite a monk. Fires on Brave.

  • Regenerate actually casts Regen. The seraph's reaction paid out a 10% lump; it now applies the status, so it accrues over following turns, can be dispelled, and refreshes rather than doubling.

  • Fury → samurai. Mana Shield ↔ MA Save swap owners. The class whose kit is one enormous swing should get angrier when hit. Mana Shield goes to the Cursebrand, who holds a pool it never empties; MA Save to the Eidolon Caller, whose MP is its damage.

  • CounterAnyRange folded into Counter { pct, any_range, physical_only }. Reach and damage-type are independent questions, so pairing them meant a variant per combination — the same reasoning that keeps AoeShape off AbilityType.

  • Support audit: 29 of 32 do exactly what they say; three descriptions overclaimed and were corrected. Dual Wield said "strikes twice" and never mentioned that each blow lands at 60% power (the pair totals 1.2×, not 2×). Elementalist said "elemental abilities" but only applies on the magic path — the eight element-carrying physical rows collect nothing, because a physical ability's authored element is inert engine-wide. Equip Knives said "Speed becomes your damage stat" when the class scales on (PA+SP)/2. No behaviour changed; the words did.