* All 17 buildings now RISE out of the ground behind a pink scan line when
built (tools/make_anims.py generates 7-frame make sequences; WithMakeAnimation
on the building template).
* Boombox Crates: neutral pickups spawn on a timer (max 4). 500 records usually,
1500 jackpot sometimes, bass_ring feedback trap rarely. Locomotors crush
crates to collect, classic style.
* Lobby faction flags are real now: MRP record, Stream play button, split '?'.
* MC 8-TRACK and ASSISTANT portraits generated for briefings/press kit.
* Balance ledger updated: first aura-era match went to Stream (runaway flag);
full ledger M M M | S S | M | S — boundary variance, no knee-jerk tune.
Smoke-tested PASS on arena and m01 with everything live.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signature mechanic — auras make sound physical:
* In The Mix (MRP): allied units within 5 cells of an Amp Stack get +25%
firepower, pink note decoration. Amp placement is now forward strategy.
* Low Latency (Stream): allied units within 5 cells of an Edge Node move 30%
faster, blue chevron decoration. The datacentre build-radius creep now has a
combat identity to match the lore.
Pure YAML: ProximityExternalCondition -> ExternalCondition + multipliers.
Also: VISION.md (five pillars, one page), THE DROP/SHUFFLE launches now play a
procedural vinyl needle-drop crackle (33rpm rumble + dust pops), and generated
cinematic keyart wired into the loadscreen stripe.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* All 19 structures now breathe: procedural pulse-glow animation generated from
each sprite's own lit pixels (tools/animate_sprites.py), 6 frames at 130ms.
WithSpriteBody PlayRepeating()s multi-frame idles, so no trait changes needed.
* Big explosions leave scorch smudges on the ground (SmudgeLayer + LeaveSmudge
on bass_ring, both superweapon impacts, and building deaths).
* Buildings shake the screen when they die (ScreenShaker + ShakeOnDeath).
* The main menu is alive again: shellmap split into two lua-driven sides that
skirmish forever. No Bot: players, so no order-manager stall.
* Stream buffs owed by telemetry: bufferbot HP 3500->5000 (survives a second
seven-inch), drmwalker 750, scraper capacity 18.
Verified: arena smoketest PASS with all changes, shellmap lua confirmed live.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Strike force + The Selector against a Stream transcoder outpost; 6-minute
countdown shown via SetMissionText, master lacquer is cut (killed) if the timer
beats you. Adds the lacquer prop (deliberately untargetable) and ScriptTriggers
on all actor templates, without which Trigger.OnKilled throws at map load.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Adds tools/check_assets.py — check-yaml does NOT resolve sprite file paths, so a
missing PNG only crashes at map load. This catches it statically.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wax seeps fix the economy flatline the arena telemetry exposed: both bots hit
cash=0/stored=0 from tick 6250 with no way to recover.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Fixes a critical bug: undeployed MCV vans now count for short-game survival —
previously every match ended at tick 1 (all players 'defeated', local player
'won'). The bot-vs-bot shellmap claim from earlier rounds was invalid for the
same reason: shellmaps stall with Bot: players and matches insta-ended. The
arena map + tools/balance_report.py is the real, verified harness.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>