Story: the cup's tableau between rounds, a brighter act card (v388)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-16 15:32:35 +02:00
1 parent 0576f24614
commit 0c67d32519
5 files changed
+67 -5

No files matched your search

+16 -1
View File
@@ -90,7 +90,7 @@ globalThis.getComputedStyle = () => ({ paddingTop: '0' });
const state = await import('./src/state.js');
const { G, P, O, score, ball, setupPoint } = state;
const { ringCue, predictLanding, solveShot, update, forceZombies, startGore, splatPoint, restartRun, leaguePace, duelSkill, tinLadder, deliverTin, peerK: _peerK, legLevel: _legLevel, winLevel: _winLevel, assistK: _assistK, flickTarget, flatCount, swayOf, keyPressed, classicGame, serveApexY, assistK, rallyFeel, barrelGap, machCap, hitServe, cheer, inCourt } = await import('./src/gameplay.js');
const { startDuel, resolveInterlude, startBossFight, endBossFight, startDrill: _startDrill, endDrill, startMatch: _startMatch, endMatch, FALL_LEN, startNetVs, endNetVs, startStory, startStoryChapter, startHorde } = await import('./src/beats.js');
const { startDuel, resolveInterlude, startBossFight, endBossFight, startDrill: _startDrill, endDrill, startMatch: _startMatch, endMatch, FALL_LEN, startNetVs, endNetVs, startStory, startStoryChapter, startHorde, storyUI } = await import('./src/beats.js');
const { mirror, netMsg, netTest, netTick, netAgain } = await import('./src/net.js');
// the drill's first-sight modal freezes the world (that is what modals do) — dismiss it the way a
// player would, so the tests step a live court
@@ -3720,6 +3720,21 @@ test('THE STORY: the act\'s cup is won into its chapter — no promotion, the st
assert.equal(G.runGames, cfg.STORY.base(1), 'the chapter starts at its own game 1');
});
test('THE STORY: every round won shows the cup\'s tableau, stamped up to the next face', () => {
// the storyboard's screen 03 (Oliver, 2026-10-16: "das Turnier-Tableau sehe ich nie")
const shown = [], was = storyUI.show;
storyUI.show = (kind, d) => { shown.push(kind + ':' + (d.round ?? '')); return Promise.resolve(); };
try {
intoStory(1, 'cup');
winStoryCup();
} finally { storyUI.show = was; }
const R = cfg.storyRounds(1).length;
assert.deepEqual(shown.filter(k => k.startsWith('draw')), Array.from({ length: R - 1 }, (_, i) => 'draw:' + (i + 1)),
'one tableau per won round before the final (the act card opens round 0\'s)');
assert.equal(shown[0], 'act:', 'the act card comes first');
restartRun();
});
test('THE STORY: the beaten finalist grows into the act boss, runs off, and game 1 begins without a cut', () => {
intoStory(1, 'cup');
const cup = G.match.cup;