The leagues, phase 2: five bands, pace tiers, locked courts, the members' ground, the promotion ceremony

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-29 12:43:23 +02:00
1 parent 9133c0d351
commit 16bf5b9fed
12 files changed
+406 -71

No files matched your search

+48
View File
@@ -491,6 +491,54 @@ zombie (now an occasional opponent, `TUNE.racketEvery`, not the every-game fixtu
`RETURNED`, `DOUBLE KILL`) is a footnote to something you already watched happen. Sharing the loud
FACE with the milestone cards is right; sharing their SIZE made every footnote read as a milestone.
## Session log: THE LEAGUES, PHASE 2 — bands, pace tiers, courts, the promotion (2026-08-29, STAGING ONLY)
Phase 2 of the plan. STAGING ONLY, like phase 1.
- **`LEAGUES` in config.js** — five bands tiling the 18-rung ladder exactly (1-4 / 5-8 / 9-12 /
13-15 / 16-18, the club's own hierarchy), each with its home court: clay → hard → grass →
gloom → **members** (new). `leagueOf(lg)`, and the ladder-shape test now pins the tiling.
- **`CUP_ROUNDS` is GONE; the cup carries its own rounds** (`cup.rounds`, stamped by startMatch
from `cupRoundsFor(G.league)`). A league band is 3-4 rungs, so the draw is WITHOUT REPLACEMENT:
non-final rounds carry the whole sub-band, `cup.played` (and buildBracket's `used` set) stop a
body being dealt twice, the final is always the band's top rung — "only the finale is settled"
survives the narrow bands. 4-rung leagues play four rounds, 3-rung leagues three.
- **`G.league`** (state, PRISTINE 1) is stamped by startMatch — netplay and training stay league-1
worlds. **`gameplay.leaguePace()`** = `1 + (league-1) * TUNE.leaguePace` (0.06) multiplies ball
pace on BOTH rackets (doHit, both serve paths) and `rzChaseSpeed`, so the world speeds up as one
piece and the reach tests keep believing the legs. League 1 IS the shipped game (factor 1.0 —
the calibration rule); league 5 plays ~24% faster. Everything non-match is factor 1: gore keeps
its own director.
- **The arcade opens at its band's bottom rung and CLAMPS at its top** — past it the league has
nobody stronger and the top body walks back on; the cup is the only way up. `d.felled` counts
bodies now (opp is a band position, `opp - 1` stopped meaning anything — killPlayer, pagehide
and the scoreboard slot all read felled).
- **Courts lock to the leagues**: a court unlocks for EVERY mode when you reach its league
(settled reward formula). Rows keep their tile visible but answer no tap and say the price
("LOCKED — REACH THE OFFICIALS"); syncSetup repaints locks on entry; a remembered-but-locked
pick falls back to the league court. League matches force the league court in `start()`; the
footer says so plus "LEAGUE N". The training picker only offers rungs up to your band's top.
- **THE MEMBERS' GROUND** (Oliver's pick): new COURTS row — brightly decayed prestige, dead
grey-green lawn (fastest bounce in the table, finishing the pace ladder), pale marble, ivy,
faded gold; borrows clay's crowd/ads with `dim` 0.15. Tile rolled via the famroll OpenRouter
route (style ref = court_grass tile, 4x NEAREST downscale + quantise), SPRV 148 → 149.
- **THE PROMOTION CEREMONY**: cupWon (non-train, cup of your CURRENT league) moves `prof.lg`,
parks a ceremony in the profile module (consumed-on-read, survives restartRun), and
maybeRestart plays it before the name prompt: PROMOTED. / league name / the new court's tile /
"OPEN IN EVERY MODE" / WALK ON. League 5 crowns instead (`prof.ch`, "CHAMPION."). The cup
summary's big line is league-aware now: 'CHAMPION OF THE DEAD CLUB.' belongs to league 5 only,
lower cups say 'THE CUP IS YOURS.'
- **Fix found live**: the scoreboard's cup slot indexed `cup.rounds[cup.round]` one past the end
on the trophy frame (cup.round is incremented before cupWon is reached) — clamped.
- **XP bar wears a gradient** (Oliver, mid-session): green → acid → gold, splash strip and the
canvas bar on the death screen.
- Tests 118 → 121 (band tiling + per-league cup shape, promotion + ceremony parked, champion
crown, arcade band clamp + felled, pace-tier scaling and its exemptions; the tournament
walkthrough now also asserts no body is dealt twice and the promotion fires; freshSplatter
resets the profile league so a won cup cannot leak league 2 into later tests). Seeds fuzzed.
Pane-verified: locks, forced court + league footer, league-2 draw, full cup → trophy (+1512 XP
· LEVEL 6 → 8) → PROMOTED ceremony → league-5 arcade opening vs THE BRUTE on the members court.
## Session log: THE LEAGUES, PHASE 1 — profile, xp, the identity screen (2026-08-29, STAGING ONLY)
Phase 1 of the plan below, built exactly to it. **STAGING ONLY for now** (Oliver: he tests himself