Story phase 1: the spine — acts, cups, chapters, checkpoints

The front door now continues the story. An act is its league cup, whose
final is the boss's own body (acts II and IV play their band out of
ladder order for that), then a ten-game gore chapter on the act's court.
The chapter has no duel at all, takes the act's weapon stock into the
rack, meets a mid-boss after game 5 (the checkpoint: restock and full
blood) and the act boss after game 10, then the act card. Death is not
permadeath: it counts the attempt, banks nothing on the boards, and
TRY AGAIN restarts from the checkpoint the profile holds. Barrels hold
what the act has earned. The chapter plays the arcade's games
base+1..base+10 so every director curve keeps its slope.

Profiles from before the story start it from the top (league, cups and
champion reset; level kept). The server mirror stores the act and
checkpoint and only ever moves them forward.

Plain cards stand in for the screens (phase 3) and the transformation
(phase 2). Six new tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Opus 5.5 committed 2026-10-15 14:10:09 +02:00
1 parent 5e1c6abba4
commit 75b450f105
10 files changed
+456 -39

No files matched your search

+4
View File
@@ -185,6 +185,10 @@ export const G = {
swung: false, // player swung at least once this rally — whiff log supersedes PASSED
lastMiss: null, // {text, at} — most recent miss reason, drawn on the HUD briefly
moveTapT: 0, // the double tap's open window (gameplay.keyPressed, moveCall)
// THE STORY's run state (beats.startStory). Wiped by restartRun like everything on G — the place in
// the story lives in the profile (prof.story); this is only what THIS run is doing with it.
story: null, // {act, part: 'cup'|'chap', base, midDone, fight: 'mid'|'end'|null, winT}
storyBoss: null, // 'mid' | 'end' — a story boss is due at the next clear (splatPoint arms it)
ring: null, // the drawn gold ring's steady cue (gameplay update smooths ringCue)
logShow: false, // tap the scoreboard to toggle the on-screen miss-log dump
};