The climb: the arcade runs the whole earned ladder, the tempo follows the territory, the court is yours

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-29 16:24:43 +02:00
1 parent 041827c4dc
commit 689550d2d5
7 files changed
+104 -52

No files matched your search

+6 -1
View File
@@ -825,7 +825,9 @@ export const COURTS = [
// baked in — the button's own name/sub render over a scrim, so the caption stays crisp.
export const MODES = [
{ id: 'classic', name: 'CLASSIC TENNIS', sub: 'REAL TENNIS · BEST OF THREE SETS', art: 'mode_classic' },
{ id: 'zombie', name: 'ARCADE', sub: 'ONE GAME PER OPPONENT · BLOOD ONLY', art: 'mode_arcade' },
// THE CLIMB (2026-08-29): the arcade is the survival marathon through the WHOLE earned ladder,
// bottom up — its length grows with the career; the cup stays the league fixture. See beats.
{ id: 'zombie', name: 'ARCADE', sub: 'THE WHOLE CLUB, BOTTOM UP · BLOOD ONLY', art: 'mode_arcade' },
// `tag` is the poster's corner chip (main.banner): the cup is THE WAY UP — winning your
// league's tournament is the one route to promotion, and the picker should say so standing.
{ id: 'cup', name: 'THE TOURNAMENT', sub: 'YOUR LEAGUE\'S ROUNDS · WIN IT TO RISE', art: 'mode_cup',
@@ -910,6 +912,9 @@ export const LEAGUES = [
{ id: 5, name: 'THE HONOURS BOARD', court: 'members', band: [16, 18], color: '#e8b23a' },
];
export const leagueOf = lg => LEAGUES[Math.min(LEAGUES.length, Math.max(1, lg | 0 || 1)) - 1];
// which league a LADDER POSITION belongs to — THE CLIMB's tempo reads this (the world speeds up
// as the run crosses each band border), and it is what makes the club read as five territories
export const leagueOfRung = n => LEAGUES.find(l => n <= l.band[1]) || LEAGUES[LEAGUES.length - 1];
// The tournament, PER LEAGUE. Same shape CUP_ROUNDS always had (name/band/need) — round one is a
// single game so a run opens fast, and the drawn body's pool still scales with `need`