feat: dash ability; ammo pressure scaling, full-HP hearts, muzzle alignment, holstered debug ammo

- Shift dash: 0.45*v*0.6 instant burst then 0.6s of 50% slow (net 95% of
  walking distance); slow doubles as cooldown, no dash while idle/slowed.
- Generic ammo refills scale with the live pressure dial at 80% of the HP
  multiplier via ammoPressureMul().
- Hearts at full HP stay on the floor (magnet ignores them) instead of
  converting to score.
- Muzzle audit: flame FX and pellets share one right-hand origin, Spinal
  Tap beam starts at the muzzle, saw flash suppressed (blade sparks are
  the effect).
- Debug REFILL/INF AMMO and the ammo row now cover a spent special
  holstered behind the Bone Popper.
- Sfx.duck() defaults its args; a no-arg call crashed the loop with a
  non-finite AudioParam value (found via the dash E2E).
This commit is contained in:
Quintine committed 2026-08-12 18:04:58 +10:00
1 parent 684a54f5ad
commit 4b9e4a1e97
6 files changed
+49 -24

No files matched your search

+1 -1
View File
@@ -77,7 +77,7 @@ const Sfx = {
try { audio._sfxSource.disconnect(); } catch (e) {}
// The owning Music entry is discarded immediately; never re-wrap this element.
},
duck(amount, duration) {
duck(amount = 0.3, duration = 0.15) {
if (!this.ctx || !this.duckGain || G.muted) return;
const t = this.ctx.currentTime, gain = this.duckGain.gain;
if (gain.cancelAndHoldAtTime) gain.cancelAndHoldAtTime(t);