* 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>
Adds tools/gen_sideb.py — one data-driven builder replacing the copy-pasted
gen_missionN.py pattern — and tools/smoketest.sh, which reports
PASS/FAIL/DISPLAY_UNAVAILABLE instead of the process-is-alive check that has
produced false passes twice now.
NOT verified in-game: the display went to sleep mid-session. Static checks all
pass (luac, check-yaml 0 errors, map refresh, check_assets, make) and the
already-verified m03 hangs identically, confirming it is environmental.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Full base-building map against a live Stream bot holding The Algorithm behind a
defended base. Building the Mastering Studio triggers a scripted all-in
counterattack; silencing The Algorithm wins. Tick scan throttled to 1Hz.
SIDE A is now three missions.
Co-Authored-By: Claude Opus 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>
Replaces the single flat grey tile. Adds tools/build_tiles.py (atlas builder
with edge-blending + tone matching), paint_terrain.py (surgical tile-plane
repaint: asphalt base, concrete pads, dirt blobs, groove patches near wax,
rubble clumps), jitter_wax.py, render_map.py (offline map preview), and
check_assets.py.
Also fixes the arena harness being rigged: both wax fields sat ~12 cells from
BotA and ~18 from BotB, so BotB starved for map reasons, not balance reasons.
Arena wax is now mirrored (7.1/18/18/19.8 from both starts). Seep interval
90 -> 20 after telemetry showed the slower rate still drained both economies.
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>