Docs: record the three feedback rounds, decisions, and verification gotchas

PLAN.md: two-stage aiming, runner-glass, fps-60, and no-engine decisions added
to the don't-re-litigate list; PWA/App Store noted as a next-arc candidate.
HANDOFF.md: status covers the post-plan rounds; gotchas gain the synthetic-touch,
1/60-stepping, port-hold, and zombies[]-mutation lessons.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-07-12 18:33:50 +02:00
1 parent 2e5af224b8
commit 5d815a4fc8
2 files changed
+49 -14

No files matched your search

+25 -7
View File
@@ -38,14 +38,23 @@ Two runtime-only import cycles (documented in headers): input↔gameplay, zombie
Ball boys mop gore they pass. HUD shows THEM instead of CPU.
- Balance knobs in TUNE (T panel): zSpeed, zSpawnEvery, zMax, zSplatQ, zPushback.
## STATUS — plan v2 COMPLETE (phases 1–13 + feedback round, 2026-07-12)
## STATUS — plan v2 COMPLETE + three feedback rounds (2026-07-12)
Everything in PLAN.md is shipped: match structure (games/sets/changeovers, permadeath,
spawn director), bomb juice, new-balls weapon ladder (BOMB→TRIPLE→FIRE→GUN), enemy
roster (runner/brute/shield, sprites in assets), free-aim flicks (flick = aim + commits
the special, tap = keep stock + auto-target), game-end sweep + 'GAME N' theater, an
always-there racket-zombie opponent, and the SUDDEN DEATH interlude (real line calls,
one duel per opponent, win = tin on the spot, lose = surge). PLAN.md records the
decisions and the tuning surface. Next: Oliver playtests and tunes via the T panel.
roster (runner/brute/shield), game-end sweep + 'GAME N' theater, an always-there
racket-zombie opponent, and the SUDDEN DEATH interlude (intro card, tennis-palette
lerp while the duel runs, real line calls, win = tin on the spot, lose = surge).
Post-plan rounds added: TWO-STAGE serve aiming (touch = reticle + auto-lock, drag =
aim, release = fire, drag-back = cancel; aimed serves commit specials, taps keep them),
the RAF-freeze fix (sweepCourt guts zombies[] under iterating loops → null guards
everywhere a kill can cascade + RAF rescheduled before update), instant absolute
machine-gun steering clamped to the visible court, RES 3 + flatter lens (camZ 42,
camF per orientation in fitViewport), 4-frame walk cycles (z_a/b/f 1–4), tiered gore
(GORE_MUL in zombies.js), generated stadium (x_crowd.png bounce-columns, x_ads.png
sponsor boards, umpire at UMP_X 5.6 — 7.1 was one pixel off-screen in portrait),
runner = glass cannon (any touch kills; runnerVMax cap), battery pass (TUNE.fps knob
default 60 — 30 was vetoed on feel; cached pile canvases). PLAN.md records all
decisions + next-arc candidates. Next: Oliver playtests and tunes via the T panel.
## PREVIOUS TASK — all four items from Oliver's feedback round are DONE and VERIFIED
(serve cadence · flick-aim anywhere incl. over the net · zombie speed ramp · eaten):
@@ -115,5 +124,14 @@ gives clean manual stepping. `T.press('Space')` = tap. Dismiss the intro overlay
(setupPoint pins facing=1).
- The scratchpad venv/scripts get wiped between sessions — recreate venv (requests+pillow)
and slice.py lives only in scratchpad; its logic is described above if gone.
- Don't trust single-sample gameplay sims; randomness (aiFlub 9%, aim error) needs ~12 runs.
- Don't trust single-sample gameplay sims; randomness (aiFlub 9%, aim error) needs ~12 runs
(a 9/12 serve-return run is normal flub noise — re-run 24 before suspecting a regression).
- Synthetic touch tests: input.js only sets stick.moved in touchmove, so a
touchstart→touchend pair reads as a TAP — always dispatch a touchmove between them.
- Contact/kill tests must step 1/60: pellets at 26 m/s tunnel past 0.55m radii at
coarser steps and kills silently don't happen (looks exactly like a bug).
- preview_start autoPort only yields a fresh origin if the configured port is BUSY —
hold 8641 with a throwaway socket first, or you get stale cached modules again.
- Any loop over zombies[] whose body can kill (killZombie/splatter) can cascade into
sweepCourt and gut the array mid-iteration — keep the `if (!zb) continue` guards.
- Commit style: imperative summary + Co-Authored-By Claude line; push = deploy.