Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Finale Design (2026-08)

Grand finale + rickroll trove — design proposal (2026-08-08)

Decided 2026-08-08: the recommended combination below (1b + 2c + 3a) is confirmed and merged to main. The trove’s room is named “The Upperworld” (see NEXT.md’s two finale sections for the final wording). The axis breakdown below is kept as the rationale record, not because the options are still open.

Important scope note, added 2026-08-08 after a follow-up question: “merged” covers the mechanic only — recall a sequence correctly, a real chest spawns, a RECALLED! fanfare plays, and triggerRickrollStub() flips one boolean flag. That’s it. The actual rickroll — an 8-bit animation, a music sting, anything a player would see or hear — does not exist. triggerRickrollStub() is a literal no-op beyond the flag, exposed only for the test suite to verify the mechanic fires correctly. The real payoff stays blocked on sourcing royalty-free-cleared audio (see the licensing note in NEXT.md’s “rickroll gag” section) — that’s still 100% unbuilt.

Decided: one mechanic, not two objects

Torsten’s own description settles what was previously an open question (“is ROLL.txt’s trove the same object as the dance-sequence chest?”): yes. The mechanic is a single continuous thread — learn → recall → unlock → payoff:

  1. Tanzstunde’s dance QTE teaches the player a specific input sequence (Simon-Says style — today’s fixed DANCE_COMBO = ['crouch', 'left', 'crouch', 'right']).
  2. Later, the player repeats that same sequence at a trove to open it.
  3. Opening it triggers the rickroll payoff.

So the dance chest and the rickroll trove are the same chest, opened by the same taught sequence. What’s still open — and what this doc actually proposes options on — is where that trove physically sits, how the recall is presented, and when in the game’s flow it pays off.

What’s already there, grounding every option below:

  • chest (items.ts) is an established reward-progression “tier-2 pickup” sprite, already reused across both existing Underworld sub-levels (River Cola’s, the mushroom house’s) — the likely “known good from an earlier level” prop.
  • Level order is fixed and one-way within a run: [Minigolf, Lidl Lunch, Soccer, Tanzstunde, Clouds] (main.ts’s LEVELS/LEVELS2), advanced by advanceLevel() incrementing an index — no backtracking exists. The only level reachable after Tanzstunde in the same run is Clouds. Revisiting an earlier level at all means a full Season 2 replay (New Game+), not backtracking mid-run.
  • The dance overlay today (drawDanceSequenceOverlay) already shows the upcoming move labels and a beat-timing bar live during the QTE — teaching is already guided, not blind. Nothing currently tests whether the player actually remembers the sequence without the overlay’s help.
  • hasCompletedGame already exists and is persisted (localStorage) — it currently gates title-screen attract mode, but the same flag could gate anything else.
  • gameComplete (Season 2’s real ending) already runs a parametrized backdrop montage (drawBackdropSequence over activeLevels) — a slot built to take more frames, not something needing new plumbing.
  • Music earmarked for this: deep_drone_bells.wav (“a grand-finale reveal moment”), storm_atmo.wav (“a hidden-level entrance”), bytebeat_1/2/3.wav (the rickroll joke itself). Standing family-game rule: misses never punish, only reward skill.

Axis 1 — where does the trove physically sit?

  • 1a. Inside/near the new Tanzstunde Underworld (the sub-level built to relocate the dance QTE into). Recall gap is short — seconds to minutes after learning it. Cheapest: one new level, one new portal, done.
  • 1b. In Clouds (the only level reachable afterward in the same run), reusing the chest sprite as a “known good” prop transplanted somewhere new — genuinely fits ROLL.txt’s implied distance, and the recall gap is real (a full level’s worth of intervening gameplay). Costs the same new Tanzstunde Underworld/portal as 1a plus placing a second, separate chest object in Clouds.

Placing it in an earlier level (Minigolf/Lidl Lunch/Soccer) isn’t viable without new backtracking infrastructure that doesn’t exist and isn’t worth building for this alone — not proposing it.

Axis 2 — how is the recall presented?

  • 2a. Blind recall. At the trove, no on-screen move-label hints and no beat-timing bar — pure memory test of the sequence taught in Tanzstunde. Matches “ultimate chance to rickroll” as a genuine gotcha. Needs a second, simpler input-reading path alongside updateDanceSequence() (same combo data, no overlay).
  • 2b. Same guided overlay, reused. The trove re-runs the existing dance QTE wholesale (same overlay, same hints), just gated behind reaching the trove instead of a fixed x. Cheapest — zero new UI — but weakens “recall” to “dance again.”
  • 2c. Middle ground. Keep the beat-timing bar (rhythm help) but drop the move labels — tests memory of the sequence while still helping with timing, which is more reflex than memory anyway.

Axis 3 — when does it pay off relative to gameComplete?

  • 3a. Same-run, mid-flow. Reachable as soon as the player gets to Clouds/the new Underworld, before the run’s actual ending. Payoff plays immediately in-level; if found, it also echoes as one extra frame in the later gameComplete montage. No new persisted state beyond a same-run “found it” flag.
  • 3b. Post-completion capstone. Gate the trove (inert/absent) behind the existing hasCompletedGame flag, so it only becomes openable on a replay after finishing the game once. True “you have to have already seen the grand finale to unlock this” framing — but note the tension: the payoff then never appears during the actual finale run itself, only on a later replay, which could read backwards for something billed as the grand finale moment.

Not a decision — a concrete starting point to react to: 1b + 2c + 3a. Build the Tanzstunde Underworld/portal for the relocated dance QTE (teaching the sequence stays exactly as guided as today), place the actual trove in Clouds reusing the chest prop (real distance, real recall), test the sequence with rhythm help but no move labels, and let it pay off in the same run with a later gameComplete echo — so the “grand finale” framing is earned by players who catch it on a normal first playthrough, not locked away from the very run it’s supposed to cap off. 3b (a deeper post-completion variant) could layer on top later without conflicting with this, if a second, harder version is ever wanted for completionists.