BODY COUNT loses its nine states, the board loses a mode
Three mode tabs times three period tabs, and the same three boxes meant something different in every one — Oliver had no idea what he was looking at, which is the correct reaction to a screen with nine states. It is one screen now: bodies felled, best gore run, deepest climb, runs. Never anything else. MULTI-KILLS retired (a vanity number on no board) and DEATHS with it (every run ends in one, so it was RUNS again). The period filter went too: LAST RUN is the summary you just tapped away, and 7 DAYS is a fitness metric in a permadeath game. The card stops repeating the ledger and keeps the CAREER instead — league, cups won, best cup. The world board drops CLASSIC: that mode is out of competition by its own room's rule now, so ranking it contradicted the wall. A classic best no longer opens the name prompt either — it would have had nowhere to go. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5927664905
commit
e96b4374d8
3 files changed
+57
-82
No files matched your search
+12
-22
@@ -646,12 +646,14 @@ function buildCard() {
|
||||
c = stats.read('all', undefined, stats.MODE_CLASSIC);
|
||||
// the ledger climbs: rows are [box id, [label, target, format]...]; every value starts at 0 and
|
||||
// counts up through the same easing the bars sweep with
|
||||
// THE CARD IS WHO YOU ARE, not what you have done (2026-08-31, the stats streamline): the
|
||||
// lifetime ledger lives on BODY COUNT, which is the screen for it. What stays here is the
|
||||
// CAREER — how far up the club you have got, and how far each cup let you.
|
||||
for (const [boxId, rows] of [
|
||||
['cdFigs1', [['KILLS', g.kills + z.kills + c.kills],
|
||||
['MULTI-KILLS', g.multi + z.multi + c.multi],
|
||||
['DEATHS', g.deaths + z.deaths + c.deaths]]],
|
||||
['cdFigs2', [['BEST RUN', g.longest, v => v + ' G'],
|
||||
['MOST FELLED', z.longest],
|
||||
['cdFigs1', [['LEAGUE', profile.prof.lg], ['CUPS WON', profile.prof.lg - 1 + profile.prof.ch],
|
||||
['BEST CUP', profile.cupBest(profile.prof.lg)]]],
|
||||
['cdFigs2', [['BODIES FELLED', g.kills + z.kills + c.kills],
|
||||
['DEEPEST CLIMB', z.longest],
|
||||
['RUNS', g.matches + z.matches + c.matches]]]]) {
|
||||
const box = document.getElementById(boxId);
|
||||
box.innerHTML = rows.map(([label]) => fig(label, '0')).join('');
|
||||
@@ -767,13 +769,11 @@ function start(modeId = pickedMode) {
|
||||
// training: the picked rung rides the match machinery with the ladder parked (beats.startMatch)
|
||||
if (modeId === 'train') { intoSplatter(); startMatch(false, null, trainRung); }
|
||||
}
|
||||
let stPeriod = 'all', stMode = stats.MODE_GORE;
|
||||
|
||||
// the stats screen opens on the mode you last PICKED to play — that is the one whose numbers you
|
||||
// came to look at, and it saves a tap on the way in every single time
|
||||
const openStats = () => {
|
||||
stMode = boardFor(pickedMode);
|
||||
for (const el of document.getElementById('stModes').children) el.classList.toggle('on', el.dataset.m === stMode);
|
||||
stats.drawStats(stPeriod, SPRV, stMode); go('stats');
|
||||
stats.drawStats('all', SPRV); go('stats');
|
||||
};
|
||||
// entering a question screen rebuilds it, so the LAST tag always names the run actually played —
|
||||
// and the FIRST visit ever detours through the identity screen (the leagues): the club wants a
|
||||
@@ -976,18 +976,6 @@ for (let ch = 1; ch <= 10; ch++) {
|
||||
}
|
||||
// the three period tabs are one listener on the strip — the button carries the period in data-p
|
||||
// the two tab strips are one listener each — the button carries its value in a data attribute
|
||||
document.getElementById('stTabs').addEventListener('click', e => {
|
||||
const b = e.target.closest('button'); if (!b) return;
|
||||
stPeriod = b.dataset.p;
|
||||
for (const el of e.currentTarget.children) el.classList.toggle('on', el === b);
|
||||
stats.drawStats(stPeriod, SPRV, stMode);
|
||||
});
|
||||
document.getElementById('stModes').addEventListener('click', e => {
|
||||
const b = e.target.closest('button'); if (!b) return;
|
||||
stMode = b.dataset.m;
|
||||
for (const el of e.currentTarget.children) el.classList.toggle('on', el === b);
|
||||
stats.drawStats(stPeriod, SPRV, stMode);
|
||||
});
|
||||
refreshSplash();
|
||||
// the profile mirror: adopt a server copy that is ahead (a wiped phone, a second device), then
|
||||
// let the plaque show whatever came back. The BOOT GATE holds the splash locked (skeleton
|
||||
@@ -1106,7 +1094,9 @@ const maybeRestart = e => {
|
||||
if (promo) { buildPromo(promo, run); go('promo'); return; }
|
||||
// ...on the BOARD's number, not on kills: a classic match has none, so the gore-shaped test here
|
||||
// silently barred two of the three modes from ever reaching the prompt
|
||||
if (run && run.newKillBest && run.score > 0) { askName(run); return; }
|
||||
// ...on a board that still EXISTS: classic tennis left the world board with the stats streamline
|
||||
// (out of competition, by its own room's rule), so a classic best has nowhere to be written
|
||||
if (run && run.newKillBest && run.score > 0 && run.mode !== stats.MODE_CLASSIC) { askName(run); return; }
|
||||
// the fixture button restarts the canonical path without a detour through the menus; PLAY AGAIN
|
||||
// re-deals the mode that just ended (pickedMode is what started it, cup included)
|
||||
if (door === 'next') { pickMode('cup'); start('cup'); return; }
|
||||
|
||||
Reference in new issue
Block a user