Commit Graph

10 Commits

Author SHA1 Message Date
Brian Fertig 4312177c3d Add BOUNTY HUNT side quest with elite combat seam and verification
- Enable the `bounty` category in data/sidequests.json with level-2 gate,
  Neutral-only contexts, encounter chain odds, and 20 written leader dossiers
- Add pure bounty model to SideQuests.js: plan derivation, wave scripts, XP,
  sequential waypoint rule, and completion only via the mark's kill
- Extend combat seam (Waves/CombatSystem/EnemyShip) for a named elite unit
  deployed with the opening group at scaled hull/damage, plus haltWaves() so
  killing the mark stops deployments while survivors stay hostile
- Wire GameScene/SurfaceScene/JobBoardWindow for locked rows, dossier readout,
  sequential check-ins, engagement chain, and single idempotent claim
- Add dev/bounty-hunts.test.mjs (591 checks) and in-browser probe with JSON/PNG
  evidence; update patrol/sidequests tests for the new live category
2026-09-20 20:10:07 -06:00
Brian Fertig d9ba476d57 Fix LevelUpMarquee digit lock on non-zero scene clocks
- Stamp `c.lockAt` as elapsed beat time instead of an absolute scene-clock value, so `el >= c.lockAt` holds and the slots actually lock onto the final level during a live session (previously they kept cycling random digits)
- Add regression test 6 covering a marquee on a scene clock at 60s
- Refresh marquee dev screenshots
- Add trestle-q4-04/05 speech assets
2026-09-19 19:16:45 -06:00
Brian Fertig ec1ad155d6 Add level-up marquee beat for combat level landings
- New js/ui/LevelUpMarquee.js: a self-contained full-screen beat (dim, old-level shatter, digit-by-digit decode, lock-in FX, neon shutter peel) driven by hand-stepped timeline with no tweens; coalesces multi-level grants into one "+N LEVELS" beat and buffers mid-beat level-ups so none are dropped
- GameScene wires the marquee to XpManager's 'levelup' event, gates ship/combat/research/build/discovery ticks on its active flag (same pause contract as comms ack), tears it down on shutdown, and exposes a ?combat dev `marquee(from,to)` preview hook
- Add headless Node test (dev/marquee.test.mjs) covering trigger/timeline/reap, coalesce, buffer, teardown, and the FIRMWARE-MAXED cap branch
- Add CDP screenshot harness (dev/marquee-shot.mjs) plus committed dev/shots/ evidence frames for each beat phase via a new debugSeek/debugRelease latch
2026-09-19 18:42:21 -06:00
Brian Fertig b461bc98af Add combat XP leveling: kills earn XP, level-ups bump armor
- Kills grant the hostile type's own `xp` (the roster sets XP-per-threat;
  the curve lives in data/progression.json, 100 x n^2, capped at level 80)
- Each crossed level fires one `levelup` event: +3 hull / +2 shields with
  a full heal, cyan burst + a distinct voice, and a kill-feed line — the
  placeholder toughness the skill layer will subscribe to later
- Combat bar gains an XP row below the orbs (level, live gold fill,
  banked / next cost; hidden when the snapshot carries no xp, so the
  range bar keeps its old face)
- Kills show a gold "+N" reward floater; the level-up's SFX is the new
  8th combat event (solar_flare_01)
- XpManager is pure and tested headless (node dev/xp.test.mjs); the
  ledger saves as { level, xp } and old saves load fresh at level 0
- dev hooks (xp/grantXp), sfxcheck (range seven, main eight), shot
  captures, and README all follow along
2026-09-18 09:57:07 -06:00
Brian Fertig 1b9b269b80 Add Job Board console UI and surface scene integration
- Introduce js/ui/JobBoardWindow.js: nearly full-screen (depth 80) build-console-style window with a muted looping 2:3 feed on the left, and AVAILABLE JOBS / JOB DETAILS placeholder sections on the right; open/close state machine, boot reveal, ambient glitch/sweep/cursor effects, ✕ close door
- Wire the Job Board slot through SurfaceScene: toggleJobBoard/leaveJobBoard, setServiceLocked (generalized from setBarLocked) so deck + drawer stand down while the board is up with the jobBoard slot kept live as a second door; pause/resume the surface clip under the console
- Preload assets/videos/jobboard.mp4 in GameScene via data/actionbar.json → surface.explore.video (2:3 aspect), adding a NO SIGNAL fallback when missing
- Update data/actionbar.json explore drawer with the jobBoard item (isHomeSystem:false, no labelActive) and the shared video block
- Add headless test dev/jobboard.test.mjs covering config, build, geometry, open/close, update ticks, and destroy; extend phaser-stub with setVisible/setDepth
- Add dev screenshot harness dev/jobboard-shot.{html,mjs} and reference shots for drawer/board/left stages
2026-09-17 19:47:02 -06:00
Brian Fertig 63bb6508bb Fix white-flash sticking bug with overlap guard and periodic tint purge
- Prevent overlapping hit flashes from stacking, which captured the in-flash
  state as the restore value and left crafts permanently white
- Track flashed crafts in a Set so the expiry path can always settle them
- Add purgeCraftTints(), called every ~250 ms from update(), that re-asserts
  normal colors on any craft (tracked or roster) not holding a live flash
- Wire purgeRoster in both CombatScene and CombatSystem so the purge covers
  the full player + enemy pack, not just Fx's own flashes
- Prune destroyed crafts from the tracking set to avoid leaked references
- Add tests covering overlap extension, kill-seam settle, periodic purge,
  roster coverage, and dead-craft pruning
2026-09-17 16:50:33 -06:00
Brian Fertig db75222ca2 Fix enemy ships reviving with stuck white hit-flash tint
- Add Fx.releaseCraft() to settle a craft's pending white tintFlash
  immediately on kill/destroy, so sprites never die mid-flash
- Add exported settleCraftTint() helper that resets tint mode and tint
  to identity; call it on revive (EnemyShip), respawn, and reuse seams
- Guard restore callbacks against destroyed sprites with try/catch so a
  half-restored craft can't leak white state
- Update combat screenshots
2026-09-17 08:13:47 -06:00
Brian Fertig 716f9270ae Overhaul combat FX: laser bolts, impact reads, shield-sphere strike, and
- Replace dot tracers with elongated glowing bolts (trail band + core streak + head bloom)
  and a directional muzzle flare in both the range and main-game contexts.
- Add enemy impact reads: core flash, directional sparks along the travel vector,
  cyan arc ripple on shield hits vs orange shards on hull hits, white craft hit-flash,
  and a polished damage-number pop.
- Add player shield-sphere strike effect: full-sphere outline + bright arc centered on
  the laser's incoming bearing, radial ripple, spark burst, and a shield-collapse cue
  when shields break to hull.
- Add subtle world-camera shake on player hits, enemy kills, and shield-break while
  keeping the HUD/combat bar perfectly still via the fx-ui camera split.
- Expose new visual knobs (bolt size/trail, muzzle, arc span, shake intensity) in
  data/combat.json; fix Fx.update destroying ships on tintFlash expiry.
2026-09-17 07:55:48 -06:00
Brian Fertig c352e089e8 Rework combat bar into bottom-centered orb strip
- Replace vertical gauges with draining hull/shield/energy orbs
  (hull with overlapping shield on the left, energy on the right).
- Share the main game's CombatBar in the combat range and add
  range energy tracking with optional regen.
- Make gauge hit flashes shape-aware: circle orbs get a soft bloom,
  rects keep the legacy white pulse.
- Update combat data and assets for the new orb-strip storyboard.
2026-09-16 16:14:35 -06:00
Brian Fertig c411a170dd Combat feedback parity: README combat section, screenshot evidence, CDP shot harness 2026-09-16 02:58:55 -06:00