diff --git a/PROJECT.md b/PROJECT.md index b6f5e4d..33fbe4b 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -816,6 +816,43 @@ walking with no kills. them back. The teacher steps in exactly when you demonstrably need it and out when you don't, and `drillMark: 0` still kills them outright. +**THIRTEENTH PASS — ZOMBIE TENNIS, and the drill steps aside.** Oliver on triage: *"i think the +normal player does not grasp this"* — the lesson across four drill designs being that **every +invented rule needs teaching, and the only rules that don't are the ones the scene already implies**. +Brainstormed again; he picked the dark horse: real tennis against the dead. One game per opponent, +blood only. *"i can live simple tapping and timing"* — the tap-and-timing scheme, not the slingshot. + +**MATCH TEST in the back room (`#match`).** Built ON TOP of the duel machinery, deliberately: +`G.match` runs a PERMANENT interlude — which is already what makes serving tennis-like, hides the +rack, quiets the spawn director and wakes `racketAI`. The one change is in `resolveInterlude`: a +settled point feeds `matchPoint` instead of ending anything. ~90 lines in beats.js for a whole mode, +because the deepest system in the repo (swings, volleys, lanes, the AI) was already built. + +- **The score IS the body**: a quarter of the pool per point won, floored at 1 — a love game walks + the racket zombie through every wound stage and the game point fells it (`explode` at the body). + The scoreboard and the corpse agree all the way down. `matchOppHp` 4 + 2 per opponent felled. +- **Its points draw your blood**: `G.hp--`, eaten at zero, the ordinary channel. Four clean points + against you IS the run — `matchHeal` 2 per game won is how you last. +- **Regicide inherited free**: smashing the ball into the body still wounds it, killing it outright + wins the game early (killZombie -> resolveInterlude('P') lands with the court empty; the game is + banked BY HAND there, since advancePoint never saw a game point). +- **THE TIMING IS DRAWN** — his ask: *"what is the possible tap window what is the sweet spot"*. + Two cues riding the mechanics' own numbers so the picture cannot lie: the APPROACH RING (a ring + around the incoming ball that kisses a fixed inner ring exactly at `matchRingSweet` 2.7 m — the + centre of the tapped-points benchmark's window — gold inside `matchRingBand`), and the APEX BAND + (a guide beside the toss, gold across serveApexY ± the same 0.12 m keyPressed scores as perfect, + a white tick riding the live ball). Match-only for now; they would serve plain tennis and the + duel too if Oliver wants them there. +- Verified by autopilot in the browser: 7 games in 90 simulated seconds, opponents 1..8, pools + 4/6/8/10, wounds tracking points exactly, heal capping at hpMax. +- **One harness trap that cost a round**: startMatch queues TWO first-sight modals (EXHIBITION + MATCH, then the racket zombie's own) — and a dismiss during a modal's entrance (`m.in < 1`) is + swallowed BY DESIGN. A scripted playtest must clear `G.modal` AND `G.modalQ`, or the world is + frozen and sixty seconds of stepping measures nothing. + +**The drill stays in the back room beside it** — triage is a decent idea that failed the +grasp-in-five-seconds test, and the match is now the lead candidate for the middle mode. + **Open, and every one of them is Oliver's call after he plays it:** 1. ~~**A ball that carries through the lane can complete two steps at once.**~~ Largely CLOSED by the slice removal (seventh pass) — a cut ball picking its own next victim was the main way this diff --git a/index.html b/index.html index b2d001f..90dbbaa 100644 --- a/index.html +++ b/index.html @@ -374,6 +374,7 @@ +