Skip to content
Shattered Crowns

v0.5.7-dev · 2026-07-18

Dressed for Battle

The board stopped being colored boxes. Units, battlefields, and the ability kit all took a large step in one day.

Added — 3D unit characters (e18facb)

  • Units are rigged KayKit characters instead of colored capsules. Six meshes cover all eighteen jobs: silhouette carries the archetype, and a job-color tint over the palette texture carries the specific job, so Arcanist / White Seraph / Eidolon Caller share a body without reading as the same unit.
  • Weapons mount on the rig's dedicated handslot.l / handslot.r bones.
  • 65 animation clips drive melee (1h / 2h / dual-wield / unarmed), bow, spellcast, summon, jump, hit, death and walk. Ability type picks the clip family; the caster's job picks the style within it.
  • Team color moved into geometry — an emissive base plate under the feet — because the job tint now owns the character's own material.
  • UnitModel.create returns null when art is unavailable and the grid falls back to the original capsule, so missing assets can never break a battle.

Added — themed battlefields (e18facb, 422e817, ba01fe9)

  • Three visual themes now dress 15 of 17 battlefields:
    • graveyard (Halloween Bits) — Cursed Graveyard, Potter's Field
    • forest (Forest Nature Pack) — Sacred Grove, Forest Glade, Open Plains, Highland Pass, Twin Peaks, River Crossing
    • dungeon (Dungeon Pack) — Cathedral Hall, Obsidian Keep, Crimson Citadel, Ashen Battlements, Ironforge Bridge, Starfall Arena, Coastal Ruins
  • Only Frozen Expanse (ice) and Scorched Crater (lava) stay box-rendered — nothing in the KayKit catalog covers snow or magma.
  • Themes are additive: a map absent from MAP_THEMES renders exactly as before, so a theme cannot break another battlefield.
  • Two new battlefields: Cursed Graveyard (16x14, the largest in the catalog) and Potter's Field (10x10, its 3v3 sibling). Both mirrored on both axes, test-enforced, so neither side gains an advantage.
  • Battlefields can now be pinned explicitly rather than rolled from the mode — surfaced as BATTLEFIELD and ARMY SIZE pickers in the army builder.

Fixed — choosing a look no longer costs you a team size (422e817, ba01fe9)

The two themed sets had mirror-image gaps: every woodland map topped out at 3v3, while every stronghold map owned 5v5/8v8 and had no 3v3 at all.

map before after
Sacred Grove, Open Plains, Highland Pass 3v3 3v3, 4v4, 5v5
Forest Glade, Twin Peaks 2v2 2v2, 3v3, 4v4
River Crossing 1v1 1v1, 2v2, 3v3
Starfall Arena, Cathedral Hall 1v1 1v1, 2v2, 3v3
Coastal Ruins 2v2 2v2, 3v3, 4v4
Ironforge Bridge, Obsidian Keep 4v4, 5v5 3v3, 4v4, 5v5
Crimson Citadel 5v5 3v3, 4v4, 5v5
Ashen Battlements 8v8 5v5, 8v8

Guarded by themed_maps_span_small_and_large_modes, which also asserts the biggest supported mode never asks a side to seat more units than it has spawn tiles.

Fixed — units carry the right weapons (ba01fe9)

Gear now resolves across asset packs. Dragoon and Samurai had been sharing one generic greatsword because the Adventurers pack ships neither spear nor katana:

  • Dragoon sword_2handedspear_A (an actual polearm)
  • Samurai sword_2handedsword_D
  • Monk empty-handed → fistweapon_A x2

Added — abilities and supports (a6812ef, e19ca50, dbc9bba)

  • Phase 1 "deep kits": 50 pure-data abilities (102 → 152).
  • Phase 2a primitives: generic status apply, Dispel, Drain (+17 → 169).
  • Support batch: 8 → 18 supports, built on systems already running.
  • FFT parity audit plus an ability naming / IP pass.

Fixed

  • test: fix stale ChangeFacing assertion (b5b2e20) — the test asserted ChangeFacing emits no events, but v0.5.5 added FacingChanged so the facing arrow would actually turn. Now guards the current contract.
  • test: fix two stale sub_job tests (7ab9a76) — left behind by the v0.5.5 "JP always credits the primary job" rule.

Build

  • build: stop uploading 153 MB of art working files on every deploy (d95bc34) — art-candidates/ is gitignored, but .dockerignore is a separate list, so all 189 files were re-uploaded to the remote builder on every single deploy. Context drops from ~161 MB to under 1 MB.

Notes

  • All art is CC0 and free. KayKit's paid tiers add extra characters, recolors and .blend sources — not the combat animations, which ship free in a separate pack that is easy to miss.
  • Each art pack is authored at its own unit size, so model scale is per-theme, never one global constant. Every scale was measured, not guessed.
  • Regression nets added: tools/smoke_unit_models.tscn (all 18 jobs resolve a rigged character, gear mounts, clips exist, nothing mis-scaled) and scenes/test/map_preview.tscn (builds a real themed board, headless-safe).

Verified at release

348 tests, 0 failures — 291 engine + 57 server. Client smokes (smoke_unit_models 18/18, smoke_battle_roll, smoke_portraits, parse_check) all clean, and the deploy-path release binary builds with --locked.

Appearance is not machine-verifiable — the headless shell has no renderer, so geometry, rig binding, scale and animation binding are asserted programmatically while the actual look needs a human to run the game.


v0.5.6-dev — Portraits (2026-07-18)

  • Portrait roster completed to 18/18 (77c936a), with a v2 refresh for squire / chemist / archer / mage / summoner (07c72d0). Knight (v1) and monk / dragoon (v3) were deliberately kept off-v2.
  • Headless smoke asserting every job resolves a portrait (6137d95).
  • Shipped-portrait provenance recorded (ce9001c).

Earlier

See SHATTERED-CROWNS-PROJECT-SUMMARY.md for pre-v0.5.6 history and SHATTERED-CROWNS-VNEXT-DESIGN.md for the forward direction.