Commit Graph

5 Commits

Author SHA1 Message Date
Brian Fertig 1a581af211 Add faction crossfire: rivals shoot each other in war-zones
- Bullets and seekers now carry their shooter's factionId so a
  faction's fire drops rival-faction craft but never its own wing
  (classic pack bolts/seekers are unaffected)
- NPC kills via crossfire are silent: no kill count, XP, defeat comm,
  or screen shake — the war is the world's, not the player's ledger
- Survivors of a neutral-to-player side peel off once their rivals are
  spent, clearing the sky for the director's cadence
- Bump faction cooldown to 40–60 s and update data/encounters tests
2026-09-30 16:57:52 -06:00
Brian Fertig 89fac9ef78 Rework faction encounters into two-faction crossfire with per-player dis
- Faction space now deploys the local faction AND one rival as hostile groups
  (previously only an opposing faction attacked, local was allies), with both
  sized off the level band.
- Each ship's hostility toward the player is stamped from reputation standing
  vs `encounters.faction.hostileBelow`; neutral factions are observe-only —
  untargetable by guns/skills/escort fire, their bolts/seekers/rams fizzle past
  the ship, and they peel off once rivals are spent.
- Add faction-space encounter timers (tighter roll interval + cooldown) in
  `encounters.faction`, applied via `ctx.faction` in the director.
- Route all player-targeting paths through a new `_playerPool()`/
  `playerTargetable()` gate; add `_peelOff` disengage and rival-live check.
- Update tests for the two-group compose, disposition, and faction timers.
2026-09-30 16:28:56 -06:00
Brian Fertig 8cce093a79 Add 16 elite faction fighters with a duel arena and skill layer
- Register 8 Apex (frames 30-37) and 8 Mindweave (frames 40-47) in
  data/combat.json enemyTypes at 2x damage / 3.5x armor vs the pirate,
  each with a distinct weapon pattern and ability kit
- New shared skill layer (js/combat/EnemyAbilities.js): cloaked ambush,
  flank strafe, blink reposition, illusion decoys, telekinetic waves;
  wired into CombatSystem update/collide with cloak gating on fire,
  targeting, and player skills
- Add sweep/spiral/shell weapon patterns in js/combat/Weapons.js
- New ?combat=apex / ?combat=mindweave duel arena with an in-game
  DuelPicker (keys 1-8 / click, 0 = whole pack); plain ?combat demo
  unchanged
- Paint the 16 missing spritesheet frames (ships-enemy.png) so the
  fighters are visible; add a PNG alpha regression test guarding against
  blank cells
- Add dev/cdp-faction-arena.mjs CDP smoke check and extend
  dev/combat.test.mjs with faction roster, balance, ability, duel, and
  sheet-pixel checks
2026-09-28 21:33:23 -06:00
Brian Fertig 2f80ddfdb1 Add periodic random ship encounters with neutral ally escorts
- New EncounterDirector (js/combat/Encounters.js): pure, data-driven clock that rolls pirate / neutral / mixed encounters in neutral non-home systems on a ~45–90s interval at 50–60% chance, one at a time with a 30–60s cooldown, never during a live wave run or on a downed player.
- Neutral ally ships (js/combat/NeutralShip.js) on spritesheet frames 20–27: escort the player for a per-ship 10–15s window, engage the nearest pirate in mixed fights, then break off and fly off-screen; player-safe by construction (never targeted or damaged by ally bolts/seekers).
- Pirate targeting generalized so hostiles can draw aggro onto escorts when the player is out of range; escort and pirate bolts/missiles collide with each other but not the player.
- Group size scales with combat level (1–2 low → 4–5 high, bands in data/combat.json); encounter hostiles are one-shots so the fight ends when the sky clears.
- New 'volley' weapon pattern (wide staggered-speed fan) and owner-tagged bolts/missiles for ally vs enemy routing in Weapons.js.
- Neutral roster config + encounters section added to data/combat.json; EnemyTypes gains neutralTypeConfig/Ids/SheetList.
- Tests: dev/encounters.test.mjs (cadence, gate, weights, size bands), dev/neutral.test.mjs (roster, escort AI, targeting, no friendly fire), plus combat/xp test updates; CDP probes and encounter-hud-check for in-browser HUD verification.
2026-09-22 07:19:20 -06:00
Brian Fertig 69ce598f6c Add seven enemy weapon patterns and a rolling ?combat demo wave sequence
- New hostiles frames 1–7 (bomber → warden) with distinct stats and
  monotonic difficulty ramp in data/combat.json
- Shared js/combat/Weapons.js dispatch for lance, spray, burst, rapid,
  ring, missile, and combo patterns used by both combat contexts
- New dodgeable heat-seeking Missile (capped turn-rate homing) plus pure
  geometry helpers in Combat.js
- Rewire ?combat boot to startWaves('combat_demo'): 7 rolling waves, one
  type each, 6 ships per wave, 3 concurrent, replacement per kill
- Add missile_fire SFX voice and extend tests/CDP demo checks for all
  patterns and the full wave run
2026-09-20 08:17:34 -06:00