The cup board: the league ranks, the level breaks the tie

Oliver wanted to rank the level a league was taken at. The challenge held: xp
comes only from playing, so a board that rewards a low level rewards not
playing — it would pay you to avoid the three rooms the season leans on. It
also inverts every other number in the game, freezes after five entries, and
makes the player who played more look worse.

So the league ranks and the level decides between everyone who got equally far,
where "lower is better" reads naturally. BOARDS.u carries subLow; server
rank_key is the other half, and the same key decides whether a submission beats
the row already standing. The level is written once at the promotion — before
the league moves, because it is the level that WON the cup — mirrored like the
rest of the profile, and inscribed under the shield it belongs to. Earned
shields smoulder while they are on screen: five CSS embers each, no loop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-31 15:51:38 +02:00
1 parent e96b4374d8
commit 80eb60d181
8 files changed
+226 -40

No files matched your search

+47
View File
@@ -643,6 +643,53 @@ through.
Open for the phone: whether the fixture button should ever go to the setup screen (it does not
now), and whether the promotion's WALK ON should enter the cup instead of the clubhouse.
## Session log: THE STATS STREAMLINE AND THE CUP BOARD (2026-08-31, STAGING ONLY)
Oliver: "stats und board — es ist total verwirrend, ich habe keine ahnung was dort angezeigt wird...
ich habe die vermutung, dass hier noch viele kpis erfasst werden, die in alten spielmodi bedeutung
hatten". He was right, and the count was worse than the feeling: the screen had THREE mode tabs
times THREE period tabs, and the same three boxes meant something different in every one of the
nine states (KILLS/MULTI-KILLS/DEATHS · FELLED/DEEPEST/RUNS · PLAYED/WON/LOST). The card repeated
three of those numbers summed across modes, so the same word meant "this mode" in one place and
"all modes" in the other — and "BEST RUN" on the card counted GAMES while "BEST" on the board
counted KILLS.
**What went, and why:**
- **MULTI-KILLS** — a vanity number on no board, from the gore era.
- **DEATHS** — every gore and climb run ends in one, so it was RUNS again in a second box.
- **The period tabs** — LAST RUN is the summary you just tapped away; 7 DAYS is a fitness metric in
a permadeath arcade game. `read()` keeps the parameter; the UI does not.
- **The mode tabs on BODY COUNT** — one career, four numbers that never change meaning: BODIES
FELLED, BEST GORE RUN, DEEPEST CLIMB, RUNS. Then the roster (the collection, which is what the
screen is actually good at) and the rack.
- **The CLASSIC board** — classic tennis is OUT OF COMPETITION by its own room's rule since the
text reduction, so ranking it contradicted the wall. Its records still bank locally; they just no
longer submit, and a classic best no longer opens the name prompt.
**THE CUP BOARD** (Oliver: "cup board finde ich das wichtigste"), and the one real design argument
of the session. He wanted to rank THE LEVEL YOU TOOK THE LEAGUE AT. Challenged, and the challenge
held: xp comes only from playing, so a board that rewards a low level rewards NOT PLAYING — it
would pay you to avoid gore, the climb and training, the three rooms the season leans on. Three
smaller objections: it inverts the reading direction of every other number in the game, it can be
set exactly five times in a career and then freezes, and it makes the player who played MORE look
worse.
Settled instead: **the league ranks, the level breaks the tie.** `LEAGUE 4 · AT 22` — the canonical
achievement sorts, and his number decides between everyone who got equally far, where "lower is
better" reads naturally. Playing more costs you the tie-break at worst, never the place.
- `BOARDS.u` (`MODE_CUP`) carries `subLow: true`; `server.rank_key()` is the other half — the ONE
board whose second column sorts ascending, and the "is this submission better" test uses the same
key, so a better row is a higher league or the same league at a lower level.
- `profile.at` (league -> level) is written ONCE, at the promotion, before `prof.lg` moves — the
level that WON the cup, not the one you walk on with. Mirrored server-side like `cups`.
- A promotion posts itself (`main.postCup`): no name prompt in the way, no personal-best gate.
- The same number is the INSCRIPTION under each earned shield on the card (`AT 14`) — where a
figure set once in a career belongs. Earned shields smoulder now: five CSS embers each, random
lane and delay, no game loop involved.
The card also stopped repeating the ledger (it carries the CAREER: league, cups won, best cup) and
its crest moved beside the league line instead of pushing it down.
## Session log: THE MENU TEXT REDUCTION — the design handoff, built (2026-08-31, STAGING ONLY)
A handoff from a design session (its folder is on Oliver's disk, git-ignored: the prototype ships a