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:
1 parent
0576f24614
commit
0c67d32519
5 files changed
+67
-5
No files matched your search
+22
-1
@@ -3,7 +3,7 @@
|
||||
// Module map: config (tuning/constants) · state (mutable game state) · gameplay (logic/update)
|
||||
// render (camera/drawing) · input (keys/touch) · audio (sfx/umpire) · panel (T tuning UI)
|
||||
|
||||
import { TUNE, COURTS, TOURS, KITS, SKINS, MODES, MENU, DIFFS, EATEN_RESTART, DONE_RESTART, WEAPONS, bossArt, LEAGUES, leagueOf, cupRoundsFor, cupFixture, cupRoundName, matchFoe, LADDER , storyFixture, storyAct , STORY, ROMAN, storyBossArt , STORY_HELP, STORE } from './config.js';
|
||||
import { TUNE, COURTS, TOURS, KITS, SKINS, MODES, MENU, DIFFS, EATEN_RESTART, DONE_RESTART, WEAPONS, bossArt, LEAGUES, leagueOf, cupRoundsFor, cupFixture, cupRoundName, matchFoe, LADDER , storyFixture, storyRounds, storyAct , STORY, ROMAN, storyBossArt , STORY_HELP, STORE } from './config.js';
|
||||
import { P, O, ball, score, G, setupPoint, sendBoy, selectCourt, selectTour, selectKit, selectSkin } from './state.js';
|
||||
import { update, restartRun, keyPressed, solveShot, inServeBox, inCourt, forceZombies, startGore, splatPoint, deliverTin, selectWeapon, grantWeapon, showModal, dismissModal, flickTarget, dragServe, toggleTestMode } from './gameplay.js';
|
||||
import { startDuel, resolveInterlude, startHorde, startBossFight, endBossFight, startDrill, endDrill, startMatch, endMatch, startBench, endBench, FALL, benchFall, startNetVs, endNetVs , startStory , storyUI } from './beats.js';
|
||||
@@ -784,6 +784,25 @@ function storyScreen(kind, d) {
|
||||
<div class="lab tap">TAP</div>
|
||||
</div>`;
|
||||
whoosh(0.3); at(0.3, () => boom(0.45)); // the court flies in, ACT n lands
|
||||
} else if (kind === 'draw') {
|
||||
// THE TOURNAMENT TABLEAU (storyboard 03): the cup's rounds up the league, the final the act boss's
|
||||
// body. After the act card it is the checkpoint (⚑ — a loss throws you back here); between rounds
|
||||
// it stamps the round just won and points at the next face.
|
||||
auto = 3.2;
|
||||
glow = '#1a2030';
|
||||
const R = storyRounds(act), last = R.length - 1;
|
||||
html = `<div class="bgc dim" style="background-image:url(${art(court.tile)})"></div><div class="col">
|
||||
<div class="lab gold r">ACT ${ROMAN[act]} · THE CUP${d.round ? '' : ' · ⚑ SAVED'}</div>
|
||||
<div class="big r" ${delay(1)}>${['', 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE'][R.length]} ROUNDS</div>
|
||||
<div class="draw">${R.map((r, i) => { const f = matchFoe(r.band[0]);
|
||||
const st = i < d.round ? '<span class="won">WON</span>' : i === d.round ? '<span class="gold tap">NEXT</span>' : '';
|
||||
return `<div class="r${i === last ? ' fin' : ''}${i < d.round ? ' done' : ''}" ${delay(2 + i)}>
|
||||
<img src="${foeArt(f)}" alt=""><div><div class="lab${i === last ? ' gold' : ''}">${r.name}</div>
|
||||
<div class="mid">${f.name}</div></div><div class="lab st">${st}</div></div>`; }).join('')}</div>
|
||||
<div class="lab tap">TAP</div>
|
||||
</div>`;
|
||||
R.forEach((_, i) => at(0.3 + (2 + i) * 0.15, () => pock(0.4, 600 + i * 120)));
|
||||
if (d.round) at(0.3 + (1 + d.round) * 0.15 + 0.3, () => boom(0.3)); // the WON stamp
|
||||
} else if (kind === 'loot') {
|
||||
const xd = profile.runDelta(), mid = storyBossArt(act, 'mid').name;
|
||||
html = `<div class="col">
|
||||
@@ -852,6 +871,8 @@ sty.addEventListener('click', e => {
|
||||
if (b) styClose(b.dataset.door); else if (!styDoors) styClose('tap');
|
||||
});
|
||||
storyUI.show = (kind, d) => storyScreen(kind, d).then(door => {
|
||||
// the act card opens onto the cup's tableau — the checkpoint the cup starts from
|
||||
if (kind === 'act') return storyScreen('draw', { act: d.act, round: 0 });
|
||||
if (kind !== 'clear') return;
|
||||
// the act card IS the act's ending: the run closes here, and the story picks up where it now stands
|
||||
restartRun(); profile.push(); refreshSplash();
|
||||
|
||||
Reference in new issue
Block a user