Commit Graph

15 Commits

Author SHA1 Message Date
Brian Fertig 64da303c23 Add escort denial gates and transport captain comms
- Hold jumps while the escort convoy is linked or setting down: the
  player must have the transport, its surviving escorts, and the gate
  all on screen before leaving the system.
- Close the destination world's landing door until the transport has
  reached it (phase delivered) or been destroyed (phase failed), so a
  lost convoy never blocks the reset remedy.
- Arm OAC's escortDeny visual beat plus flat toasts on both denials.
- Register the transport captain character and add neutral-transport-link
  (convoy link greeting) and neutral-transport-delivery (delivery thanks)
  comms with audio pools, all once:false so they re-arm per contract.
- Require the convoy to be on screen before the delivery begins, not just
  the destination world.
- Update escort-flow and comms tests for the new witness gates, landing
  door, and transport captain beats.
2026-09-26 09:42:56 -06:00
Brian Fertig 81a1589307 Add neutral-only encounter comms and soundtrack
- Introduce a NEUTRAL-ONLY encounter path: when escorts are live with zero hostiles, the combat seam now carries a `neutral` flag so the scene can swap to a dedicated neutral hum instead of the combat shuffle.
- Fire two new pilot comms once per neutral encounter — `neutralScan` (pilot on screen) and `neutralScanComplete` (first pilot break-off) — via a new `onComm` seam in CombatSystem; hostile-only beats stay silent during neutral encounters.
- Add `neutral` music context to data/music.json with its own shuffle playlist, load it in GameScene, and resume the correct context on wake.
- Ship a `?neutral` dev boot (two pilots, 8 s escort window) for testing the full beat at home, plus tests covering the comm seam, mixed→neutral re-resolution, and data validation.
2026-09-22 20:12:41 -06:00
Brian Fertig 5e799bbd5a Add pirate comms: attack/defeat/bounty voice lines with speech and video
- Raiders now roll an attack comm on-screen (50%) or on rolling-wave arrival (20%), and a defeat comm on kill (20%), driven by per-type config in combat.json
- New bounty-attack comm fires when the wanted leader's fight stands up in GameScene._fireBountyEngagements
- Ship 12 pirate speech clips, 3 enemy video clips, and register three new senders (pirate, pirate_defeat, pirate_bounty) in comms.json
- Wire onComm seam through CombatSystem so the scene can arm CommsHub triggers; rolls are no-ops when the seam is absent
- Add combat, bounty-hunt, and comms test coverage for the new roll logic, trigger arming, asset presence, and roster count
2026-09-20 21:34:05 -06:00
Brian Fertig 4595950fb9 Add Pirate Problems quest payoff comms and trigger arming
- Wire GameScene._questRefresh to arm the quest's own `payoffTrigger` on the once-per-quest READY moment, so Trestle's two-beat sign-off (job boards + level-5 hook) plays when 'Pirate Problems' becomes complete + unclaimed.
- Add trestle-q4-4/5 ack comms (data/comms.json) and declare `payoffTrigger: "trestleQ4Payoff"` on the quest (data/quests.json).
- Reorder stationVideos in data/landing.json to put ss-02 before ss-01.
- Extend dev/comms.test.mjs roster count and add payoff pair checks; add new dev/quest-payoff.test.mjs pinning the arming seam; extend dev/quests.test.mjs with payoff wiring checks.
2026-09-19 19:49:30 -06:00
Brian Fertig d61f2d6934 Add combat comms, block jump/landing during fights, and retime pirate am
- Add OAC "enemies detected" / "enemies defeated" visual comms with random voice pools, fired on CombatSystem active-flag flips
- Deny jumping or landing while a fight is live so the wave run can't be escaped or hidden on a surface
- Move the 'Pirate Problems' ambush trigger to the midpoint of the entry-gate → capital-world stretch, persisting lastJumpFrom through saves for a stable midpoint
2026-09-17 17:18:53 -06:00
Brian Fertig 78b280d7db Add 'Pirate Problems' quest with combat ambush and save-state ledgers
- New main-story quest granted after 'Special Delivery' is claimed AND its payoff comms are ACKed all the way through (unlocks.acked gate)
- Three-step checklist: speak with Trestle (trestleQ4 warning beats), defend from a rolling wave of six raiders at the gate-to-capital midpoint, return to the Neutral Capital World
- CombatSystem.startWaves gains an origin option so ambush enemies materialize in a ring around a specified point rather than off-screen around the ship
- CommsHub fires a new onAck hook before onEnd so the scene can record acknowledgments and run its grant pass in the same tick
- QuestState.isUnlockMet / grantUnlocked accept a gates.acked set; GameScene supplies it from the comms acked-ledger
- SaveData captures/restores comms.acked, combat.done, and story.capitalReturned; resetRunState clears all three on New Game
- Combat is now built for every scene (not just ?combat demo); the hostile pack spawns only in the sandbox boot
- Test suites updated: quest unlock gating, ambush wave shape, roster count 25→28, save round-trip of new ledgers
2026-09-16 20:15:21 -06:00
Brian Fertig 58aab347c2 Add OAC "new research" audio beat on research sign-off end
- Arm `oac-research-new` (trigger `researchNew`) from `_commEnded` when the `oac-research-complete` sign-off finishes and `researchAnyAvailable()` is true, so the hub FIFO plays it right behind the sign-off
- Register the new audio-only comm in `data/comms.json` and move `researchNew` out of the reserved trigger list
- Update roster count to 25 and add node checks for the beat's fields, clip presence, and zero delay in `dev/comms.test.mjs`
- Add headless browser harness (`dev/new-research-shot.html`/`.mjs`) that verifies the seam, gating (in-flight vs available), and FIFO ordering through the real `onEnd` hook
- Ship `assets/videos/arid-shop-03.mp4`
2026-09-13 20:52:28 -06:00
Brian Fertig 8ff7f0ee12 Add 'Special Delivery' payoff comms chain on surface departure
- Register Carol as a comm sender with her video clip and role
- Add four ack beats (carol-delivered-1/2/3, oac-delivered-1) under the new 'deliveredLaunch' trigger, fired when the player launches after selling the package
- Arm the chain in GameScene.onSurfaceDeparture once story.delivered is set, with the once-ledger keeping it a one-shot
- Update comms tests to cover Carol's registration, the four-beat sequence ordering, and re-arm deduplication
2026-09-13 15:29:21 -06:00
Brian Fertig efaa559efa Rework "Leaving the Nest" arrival to the capital world with voice
- Split trestle-arrive into an arrive-1/2 ack pair, both voiced (new q2-04/q2-05 clips)
- Quest now completes on reaching the neutral capital planet instead of entering the neighboring system; add _atCapitalWorld proximity check and arm arrival in _checkDestinationReached
- Gate capital-world landing until the quest reward is claimed, with a new capitalDenyToast denial
- Update tests, save-data comments, and fix lava-shop-02 asset reference
2026-09-12 23:16:49 -06:00
Brian Fertig 3137a800bf Add "Leaving the Nest" quest chain and READY tracker state
- New second main quest "Leaving the Nest" (data/quests.json) that unlocks when the starter quest's reward is claimed, with four checks: system charted, gates activated, Trestle talked, Trestle met
- Quest unlock chain in QuestState (isUnlockMet / grantUnlocked) and GameScene._grantUnlockedQuests — grants on claim + scene create for loaded saves, announces via SFX, OAC quest-grant voice (new oac-quest-new comm), and NEW QUEST toast
- Trestle story beats: three-brief ACK sequence (trestle-brief-1/2/3, trigger trestleBrief) armed when home jumpgates go online, and arrival beat (trestle-arrive, trigger trestleArrival) on landing in a neighbor system; CommsHub gains onStart hook so the played-ledger marks feed quest checks live
- Quest check types: systemCharted, gatesActivated, trestleTalked, trestleMet — evaluated in GameScene._questCheckEval / _trestleCheck against the comms played-ledger (survives reloads; mid-sequence quit re-arms only unplayed beats)
- System-complete milestone moved from research completion to the chart-completing discovery (celebrateDiscovery), one fire per system via _systemCompleteSeen set
- QuestTrackerHud READY state: completed-unclaimed rows turn amber with breathing tint, percent reads "READY" (bold), one-shot flash + diamond burst on flip, CLAIM REWARD button in row popup claims in place; silent when tracker is slid off (toast + chime carry it)
- New speech clips (trestle q2-01/02/03), lava-takeoff video, updated lava-land video, renamed lava-planet image, new laval-surface image
- Dev: quest-ready.html/mjs capture harness for the READY state shot; tests updated across comms, quests, quest-tracker, and system-hud suites
2026-09-10 20:29:47 -06:00
Brian Fertig 6dcc340a3b Add system-complete comm and audioPool random clip support
- Introduce the oac-system-complete visual comm that fires on the
  'systemComplete' trigger when a system's jumpgate research unlocks,
  arming before the generic researchComplete sign-off so the FIFO plays
  specific -> generic.
- Support an optional audioPool list of speech clips in CommsModel; the
  hub picks one at random per arm so only the chosen clip is fetched and
  cached, with validation that audio comms need a clip or pool.
- Wire GameScene to trigger systemComplete on activateGates when the
  system nav chart is complete.
- Update comms tests for the new comm, pool normalization/asset rolling,
  roster counts, and add a tether-rules audit script plus station shop
  video references and lava assets.
2026-09-09 22:20:30 -06:00
Brian Fertig b33aecade2 Rename firstForeignPlanet trigger to firstWorld and make busy() type-awa
- The Trestle intro comm now fires on the first discovered world (the
  starter quest's own witness, `discoveredWorldCount`) instead of the
  first planet in a foreign system, so the comm and the quest can never
  drift; delayMs drops to 0 so it lands at the moment of discovery.
- The scene's `busy()` contract is now comm-type-aware: audio-only comms
  (voice, no box, no pause) ride over in-progress actions like mining or
  a scan sweep, while ack/visual comms still wait; modal windows and a
  jump in flight block every type.
- Add the `comms-mine` dev harness that walks the type-aware busy
  contract (free scene → real mining → audio comm mid-mining → jump) and
  update the trestle dev scripts/tests to the new trigger and witness.
- Arm the pair on scene-create for loaded saves that already hold
  discovered worlds, and widen the cdp-shot ready dump.
- Add ice-shop art/video assets.
2026-09-09 13:00:25 -06:00
Brian Fertig 8afe4c78c6 Add Trestle's first-foreign-planet intro comm pair and ACK pulse cue
- Introduce the `firstForeignPlanet` trigger: when the player discovers a planet in a non-home system, Trestle (new out-of-system mentor character) delivers a two-part ack comm pair (meetup + quest claim), with dedicated video and speech assets.
- Make audio cache keys folder-scoped so characters with identically-named clips (e.g. both having `intro-01.mp3`) don't collide in the loader.
- Add an amber pulsing attention cue (halo + staggered sonar rings) on the ACKNOWLEDGE button for ack comms, driven per-frame from CommsBox.update().
- Put the ActionBar deck into a standby state while an ack comm holds: slots go inert (no hover/press), dimmed visually; re-arms when the comm ends. GameScene wires this via `actionBar.setEnabled()` each frame based on `comms.paused`.
- Extend MenuButton to accept a custom border color so the ACK button can wear the box's amber against the cyan UI.
- Add dev self-check harnesses (`comms-trestle.mjs`, `comms-trestle-hold.mjs`) and update existing tests to cover the new pair, folder-scoped keys, deck standby behavior, and pulse animation.
- Disable browser module caching in CDP probe/shot scripts to avoid stale ES modules shadowing on-disk changes during dev testing.
2026-09-09 12:12:34 -06:00
Brian Fertig 881a94a1b6 Add full OAC tutorial comms chain and ice-surface video assets
- Wire 10 new comm beats (oac-tether, oac-scan, oac-upgrade, oac-minerals,
  oac-fly-mine, oac-first-cluster, oac-research-complete, oac-tether2,
  oac-relaunch, oac-explore) into data/comms.json with their triggers,
  speech clips, and FIFO ordering
- Add trigger arming in GameScene (firstScan, tetherResearch, firstCluster,
  minerals200, researchComplete) and SurfaceScene (tetherL2Launch)
- Make CommsHub.trigger idempotent so a double-click can't queue the same
  comm twice
- Fix landing.json to use ice-surface-02/03.mp4 instead of rocky variants;
  add the two new ice-surface videos and an ice-shop image
- Add speech clips intro-05 through intro-10 and research-complete
- Expand dev/comms-intro.mjs into a full 10-step walkthrough self-check,
  add dev/comms-upgrade-hold page for screenshotting the longest comm, and
  update dev/comms.test.mjs to cover the new roster
2026-09-09 11:28:22 -06:00
Brian Fertig aaa953d654 Added Comms Feature 2026-09-09 10:10:38 -06:00