Skip to content

fix(m13): audit Phase 2 — game-feel correctness (F-03/04/13/14/15/19/40/41) - #28

Merged
ksdisch merged 5 commits into
mainfrom
fix/phase2-game-feel
Jul 11, 2026
Merged

fix(m13): audit Phase 2 — game-feel correctness (F-03/04/13/14/15/19/40/41)#28
ksdisch merged 5 commits into
mainfrom
fix/phase2-game-feel

Conversation

@ksdisch

@ksdisch ksdisch commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Audit Phase 2 — ship the juice that was built

Implements §Phase 2 of docs/AUDIT-2026-07-09.md (game-feel correctness). Branched off main per Kyle's call; drafts #23/#24 rebase over this (only overlap is one pointerdown hook in Hub.ts).

Fixes

  • F-04 effects.tsexplode()'s x/y args are emitter-local in Phaser ≥3.60 and the emitter already sits at world (x,y); dropping them un-doubles the coords. Every particle burst was rendering off-screen since M5; they're visible for the first time.
  • F-03 Enemy.ts — freeze re-cast now extends the freeze via a freezeToken guard (mirrors phaseToken); previously the first cast's timer un-froze mid-window. No pure helper extracted: the logic is two lines of Phaser-timer interplay, covered live (below) rather than by a contrived mock.
  • F-13 Planet.tscastPower() ignores casts landing after the win (no banners/cues/platforms over the end card; lastCastPower untouched).
  • F-14 Planet.tsshowWin() hides the hazard curtain (depth 40) + unrevealed dark zone (depth 50) instead of raising the card: the card must stay below the depth-60 win burst that F-04 just made visible.
  • F-15 Planet.ts — link indicator + net wiring now exist only in co-op; solo (never connected) no longer shows a green "phone linked".
  • F-19 Planet.ts — a platform re-cast while one is alive flashes PLATFORM HOLDS! instead of being swallowed silently (mirrors illuminate's banner-only re-cast).
  • F-40 Hub.ts/music.ts — one-time pointerdownresumeMusic(); first hub visit ran startMusic with no gesture in the call stack, so the context could sit suspended (silent hub). MusicSink gains resume(), mirroring the SFX sink.
  • F-41 music.ts — the master GainNode is now disconnected (delayed past fade/note tails) on track switch; previously one leaked per switch.

Gate (all green)

  • typecheck clean · 177/177 Vitest (+2 resumeMusic dispatch tests) · smoke:relay passes
  • Headless bridge playbook: planet-1 full run (boot, clean slate, clear, omit-freeze 7 respawns, omit-platform 3 pit respawns, illuminate flip, reload durability, juice cues/bursts, shake-on-death) · planet-2 clear · planet-3 clear with phase negative (maxX pinned 560 at the curtain, 5 respawns) + positive (phaseActive, crossed, 0 respawns)
  • F-03 regression: cast @t0 + re-cast @t1.5s → still frozen @t3.5s (past the old timer), released @t4.9s; single-cast expiry unchanged
  • F-13 probe: post-win phase-dash/summon-platform casts changed nothing
  • Screenshot pass (the blind spot that shipped F-04): freeze burst visible on the frozen sentry; Nebula Core end card clean of curtain stripes; PLATFORM HOLDS! banner captured
  • F-40 note: headless Chromium autoplay is always-running, so the resume is asserted via unit tests + error-free Hub boot; it's a best-effort no-op when nothing is suspended.

🤖 Generated with Claude Code

ksdisch and others added 5 commits July 10, 2026 23:34
…er-local (F-04)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(F-03)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-19)

- castPower() ignores casts after the win (F-13)
- showWin() hides the hazard curtain / unrevealed dark zone that striped
  across the end card (F-14) — hidden, not re-depthed, so the card stays
  below the depth-60 win burst
- solo mode no longer shows a false green 'phone linked' indicator (F-15)
- a platform re-cast while one is alive flashes 'PLATFORM HOLDS!' instead
  of being swallowed silently (F-19)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… track switch (F-40, F-41)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ksdisch
ksdisch merged commit 3f2af91 into main Jul 11, 2026
@ksdisch
ksdisch deleted the fix/phase2-game-feel branch July 11, 2026 04:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant