Commit Graph

18 Commits

Author SHA1 Message Date
type-two
8e4d13b72b Decree two: construction buildup anims, Boombox Crates, real faction flags, character portraits
* 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>
2026-07-26 19:53:36 +10:00
type-two
9bca0f99c2 Juice pass: living buildings, battle scars, screen shake, living menu, Stream buffs
* 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>
2026-07-26 18:45:51 +10:00
type-two
39ca9c78a5 AI balance pass driven by arena telemetry
Two fair-map matches showed MRP annihilating Stream by ~5min. Build-order
telemetry (new BALTYPES histogram in balance.lua) found the cause: Stream's
podfarm arrived at 5.8min vs MRP's merchtable at 1.7min, so the cheap-swarm
faction fielded 1 bufferbot against 17 djgrunts, and Stream spent 1500cr on the
Algorithm superweapon before it had an army.

Fixes:
 * BuildingFractions: barracks 1 -> 10, factories 1 -> 6 so army buildings come
   before tech. Result: podfarm 5.8min -> 2.5min, algorithm 3.3min -> 5.8min,
   and Stream survived to 9.5min with 13 buildings instead of being wiped at 5.2.
 * BuildingDelays on mastering/algorithm (4500) — no superweapon before an army.
 * UnitsToBuild shares normalised. Reading UnitBuilderBotModule showed these are
   PERCENTAGES of army composition, and mine summed to 233% per faction, which
   made unit selection collapse to iteration order and starved Stream of infantry.

balance_report.py now emits a verdict (flatline / runaway / stalled production)
and refuses to judge matches under 5 minutes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 10:48:13 +10:00
type-two
6847a47fea SIDE B campaign: three Stream missions (m04 Onboarding quota race, m05 Engagement Metrics wave defence, m06 The Shuffle finale)
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>
2026-07-25 23:35:15 +10:00
type-two
ef432e4182 Mission 03: THE DROP — campaign finale
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>
2026-07-25 23:19:43 +10:00
type-two
c09da56dbe Mission 02: CRATE DIGGERS — timed raid with no base building
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>
2026-07-25 23:11:20 +10:00
type-two
e11ec402ff Terrain overhaul: 52-tile atlas from 5 generated surfaces, tone-harmonized so they read as one material family
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>
2026-07-25 22:37:38 +10:00
type-two
bffe4e088a Fix two runtime-only bugs found on first live run: missing sidebar icons for the 4 facing-sheet units, and waxseed needing QuantizeFacingsFromSequence
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>
2026-07-25 22:20:38 +10:00
type-two
93ad888c32 Round 5b: SIDE A campaign — mission 01 FIRST PRESSING with scripted objectives, briefing, timed Stream probe; shared campaign.lua, campaign rules, objectives panel, missions registry
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-25 19:12:35 +10:00
type-two
5255aeeb1f Round 5a: heroes (The Selector, The Curator), air (45 Flyer, Compression Drone) with pads + Aircraft queue/tab, scouts (Boom Bike, Crawler), 5 weapons, wax seep regrowth on all maps
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>
2026-07-25 19:08:13 +10:00
type-two
975f305fa1 Round 4: balance-arena harness with lua telemetry, minimap radar, damage smoke, harvester-attack warning, Needle Drop + Compression maps
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>
2026-07-21 02:09:20 +10:00
type-two
7a02ca19fd Round 2: 16-facing rotating vehicles, projectile/explosion effects, death booms, real terrain + wax crystal art, Pressing District 4-player map
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 16:48:13 +10:00
type-two
2362a04605 Phase D+F: real MODELBEAST art for all 23 actors + icons, MC 8-TRACK announcer, 3-track ACE-Step soundtrack, emblem branding
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 04:51:31 +10:00
type-two
7bb6e649f7 Phase E: The Stream faction (9 actors), Wax AI bot for both factions, bot-vs-bot shellmap battle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 04:40:06 +10:00
type-two
19fcb7c525 Phase C: weapons, combat units (spinner/stacktank/basscannon/roadie), mastering studio, conquest victory
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 04:34:17 +10:00
type-two
71879139c2 Phase B: production loop — MCV pop-up van, conyard, classic queues, sidebar palette, buildable roster
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 04:27:37 +10:00
type-two
86ca71b9a2 Phase A: Black Wax economy — resource layer, digger harvester, pressing plant, amp stack, vault, seeded maps, cash HUD, placeholder sprites
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 01:30:20 +10:00
type-two
030b3f2698 VINYLGOD baseline: rename SDK example mod to vinylgod, add lore, megaplan, MODELBEAST asset pipeline + first concepts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 00:38:52 +10:00