diff --git a/PROJECT.md b/PROJECT.md index 91d9a74..2558e99 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -560,12 +560,81 @@ record, promotion screen) are the material the story is built from. 9. **METAL IN GORE ONLY.** The existing beds do not fit. Oliver is researching a track; parked until he brings one. Entry point: the transformation. -### Still open -- A prologue: one classic match against a living opponent with the old transformation, once at the start? -- The racket zombie in story chapters. -- Endless arcade gore keeping its duel economy unchanged (proposed: yes). -- The arcade unlock order. -- Then the phase plan (to be written before any gameplay changes). +10. **A PROLOGUE**, once, before Act I: a classic match against a LIVING opponent and the old transformation + unchanged (the living man turns), which tells the outbreak. Classic tennis gets its story role. +11. **THE RACKET ZOMBIE** stays in story chapters as an ordinary opponent that returns balls, with no duel + behind it. +12. **ENDLESS GORE (arcade) keeps its duel economy unchanged.** Only the story drops the duel. +13. **ARCADE UNLOCK ORDER** (as in the storyboard): + - Act I: Training and Classic Tennis (the free tier ends here, on a win); + - Act II: The Climb; + - Act III: Splatter Gore (endless); + - Act IV: Vs a Friend, hosting; + - Act V: Members' Night, the boss marathon (option C, later). + Each act also unlocks its court for all modes, as the leagues already do. The weapon pool grows per act: + - I: bomb, triple, fire; + - II: gun, beacon; + - III: laser; + - IV: flamer, rocket; + - V: double tins. + +All decided (Oliver, 2026-10-15). Next: the phase plan, written here before any gameplay changes. + +### What the code forces (survey of 2026-10-15, before building) +- **The cup does not run in `'tennis'`.** It runs in `'splatter'` under a permanent `G.interlude`; O is + invisible and the opponent is a zombie `'r'` with a `fam`. `startTransition` is keyed on O and on mode + `'tennis'`, so the act transformation is a NEW variant on the `'r'` body. The prologue can use the old + one unchanged, because it IS a classic match. +- **`restartRun` wipes all of `G`.** Checkpoint state (act, checkpoint, rack snapshot, attempts) must live in + the profile, the way the promotion and the last run already survive it. +- **The cup's games count into `G.runGames`.** A chapter must start at game 0. Spawn ramps, `barrelGap`, + `BARREL_WEAPONS.from` and racket hp all read it. +- **Bosses are keyed on chapter numbers.** `G.bossDue = floor(runGames / 10)`, `bossArt(ch)`, and hp/scale + grow with the chapter. The story needs a design-indexed spawn: a `BOSS_ART` row plus an act strength, + with a game-5 hook in `splatPoint`. +- **Duels fire from TWO places:** the schedule (`duelDue`), and an unscheduled lucky-clear trigger in update + whenever exactly one un-dueled `'r'` stands in pretoss. Racket zombies also arrive from `splatPoint`, + `endHorde` and `startDuel`. "No duel in the story" must gate both triggers. +- **`cupWon` ends with `G.done`, which freezes `update()`.** The story's final must branch before that: + at the final's kill fall, or by replacing `cupWon`. +- **Tests that pin what the story changes:** + - 'THE CUP CLIMBS' (rounds ascending, the final the band's top). The story builds its own rounds and + leaves `cupRoundsFor` alone. + - The TOURNAMENT / LEAGUES promotion tests. The story's act card replaces promotion only on the story + path. + - Arcade gore's tests stay as they are, because arcade gore stays as it is. + +### The phases +Each phase ships to staging and gets a phone verdict, and tests ride along with each one. +1. **THE SPINE — story state and flow, on the existing screens.** + - `prof.story = {act, cp, stock, tries}`, with a profile version bump that resets the testers. + - `beats.startStory()` is a mode owner like every other. + - The story cup is the league cup machinery with its own rounds builder (final = the act boss's body). + - The chapter is gore from game 0, capped at 10, with: + - no duels (both triggers gated); + - the racket zombie as an ordinary returning body; + - the mid-boss at game 5 and the boss at game 10 through a design-indexed boss spawn; + - the cup loot as the starting rack (`grantWeapon`); + - a restock and full heal after the mid-boss. + - Death or elimination restarts from the checkpoint. + - The splash's primary button continues the story. + - Transitions are plain cards (`showModal` / `G.card`) for now. +2. **THE TRANSFORMATION AND THE PROLOGUE.** + - The act variant: at the final's last point, zoom onto the `'r'` body, hitstop and flash, and a `'B'` + boss of its design spawns there and grows. It runs out of frame, the stands empty onto the court + (the mob beat), and `enterSplatter()` starts game 1 without a cut. The boss's name slams with + "GAME 10". + - The prologue: a classic match against a living opponent, re-using `startTransition` as written. +3. **THE SCREENS.** The act title card, the cup-won/loot screen (count-up, weapons dropping into the rack, + the chapter preview with "???"), the checkpoint banner, the death screen with its retry point, and the + act card on the promotion screen's pattern. All animated, in the storyboard's look. +4. **HELP, ARCADE, UNLOCKS.** + - The assist tiers (from the 3rd try, at most 2). + - The menu: arcade shows only what the story has unlocked (with a premium flag stub), in the agreed + order. + - Courts and the weapon pool per act, and the free-tier cut at the end of Act I (the store plan's flag). +5. **LATER.** The metal bed (when Oliver has a track: start at the transformation, gore only) and Members' + Night (option C). ## Session log: THE SEASON, PHASES 1-4 — the front door, the record, the rooms, the season beat (2026-08-31, STAGING ONLY) @@ -5838,8 +5907,7 @@ stance the old recovery still takes him back. Nothing here is broken; these are known gaps and unverified risks. -0. **THE STORY (2026-10-15) is agreed in discussion and NOT built.** See "THE STORY" above; the phase plan - comes next. +0. **THE STORY (2026-10-15) is agreed and planned (five phases), NOT built.** See "THE STORY" above. 00. **THE RALLY GOES FLAT (2026-10-13).** Every match converged on serve, both at the net, reflex volleys, won by a wrong-foot. Step 1 (the court gets its length) SHIPPED v361, awaiting the diff --git a/index.html b/index.html index 1c79045..11bad8c 100644 --- a/index.html +++ b/index.html @@ -1140,6 +1140,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat - +