Skip to content

platformer: transition card + boot title screen + recomposed win card#70

Merged
SethMorrowSoftware merged 1 commit into
mainfrom
claude/zealous-hypatia-v52yu7
Jun 20, 2026
Merged

platformer: transition card + boot title screen + recomposed win card#70
SethMorrowSoftware merged 1 commit into
mainfrom
claude/zealous-hypatia-v52yu7

Conversation

@SethMorrowSoftware

Copy link
Copy Markdown
Owner

What & why

The headline item of docs/platformer-polish-plan.md (§2 / §2.4): kill the single most "demo-not-game" tell. pfStartGame ran its teardown trio (b2kClear / b2kTeardown / pfWipeStage) before lock screen, so the player watched the old level clear and the new one assemble on every start / advance / restart / picker-jump / hero-pick.

A single full-screen card-level overlay now covers that, and the same overlay system gives the demo its bookends.

What changed (example-side only)

Transition card — pfCardShade + pfCardText (built once in buildPfUI, kPfUIVersion 10 → 11; card-level chrome raised above the camera viewport like the pause overlay, so it never scrolls):

  • Cover → reveal. pfStartGame raises the opaque biome card (pfCardCover) before the teardown, so the whole build paints behind it; after b2kStart, pfCardReveal holds a beat then fades it out via a send-driven, generation-guarded blendLevel ramp. The fade is decoupled from the frame loop on purpose — it never touches the intro code a past pan rework broke (gotcha 11). Every caller gets it for free (level start, level→level, R-restart, dev picker, title SPACE-start). Death/respawn keeps its light camera-shake (no full card, by design).

Boot title screen (pfShowTitle): the demo no longer drops straight into L1. It opens on a B O X 2 D X T card with a live hero preview (the chosen skin's idle frame — a camera-off Kit sprite is a plain card control) and the 1-5 hero chooser moved here, where picking can't accidentally restart a level. SPACE/RETURN starts a fresh run. The in-level 1-5 binding and pfPickHero are retired; the pause overlay's hero line now points at the title.

Recomposed win card (pfWin): the final-run summary restyled in the level-card visual language (deeper, more central panel) and now naming the chosen hero alongside time / falls / gems / stars / coin-score / the flawless callout.

Bug fix carried along: a single pfResetRun zeroes every whole-run bank. The dev picker and "Play again" previously left the coin-score + star banks stale, inflating a second run's win screen.

Verification

  • python3 tools/check-livecodescript.py — clean (handler/control balance, smart-quotes, dangling-else, embedded-Kit in sync).
  • python3 tools/audit-platformer.py — 0 findings across 7 levels.
  • No Kit touch → no kStHarnessV bump, embedded copies stay in sync.

⚠️ Needs an OXT pass

OXT is the only runtime; this is "verified statically, needs an engine pass." Please confirm on the engine:

  1. The opaque card actually masks the teardown+build (the lock screen/unlock screen flush in pfCardShow puts the cover on screen before the churn).
  2. The fade feel (hold ~620 ms, ramp ~400 ms) and that control hands over cleanly as the gIntroPan beat ends.
  3. The title hero preview renders/positions correctly, and the folder prompt at boot is acceptable (art now loads at the title, not first level build).
  4. Card composition — tints (pfLevelTint), flavours, text vertical centering, and the win-card layout. All first-pass tunables.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HkN9P6YodA65ZuhDDuuQks


Generated by Claude Code

The headline polish item (docs/platformer-polish-plan.md §2/§2.4): a
full-screen opaque overlay now COVERS every level teardown+rebuild, so the
player never sees construction. One card-level control (pfCardShade/pfCardText,
built once in buildPfUI, kPfUIVersion 10->11) does three jobs:

- Cover->reveal: pfStartGame raises the opaque biome card before the teardown
  trio, the build paints behind it, then pfCardReveal holds a beat and fades it
  out via a send-driven, generation-guarded blendLevel ramp (decoupled from the
  frame loop, so it never touches the intro code a past pan rework broke).
- Boot title screen: the demo opens on a BOX2DXT card with a live hero preview
  and the 1-5 hero chooser moved here (off the in-level binding, which could
  accidentally restart a level); SPACE/RETURN starts. pfPickHero retired.
- Recomposed win card: the final-run summary in the level-card visual language,
  now naming the chosen hero.

Also folds the per-caller run-bank resets into one pfResetRun, fixing a latent
bug where the dev picker and Play again left the coin-score/star banks stale.

Example-side only (no Kit touch -> no harness bump, embedded Kit in sync).
Static gates + audit clean. Needs an OXT pass to confirm the cover masks the
build and to tune the card tints/flavours/timings.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HkN9P6YodA65ZuhDDuuQks
@SethMorrowSoftware SethMorrowSoftware marked this pull request as ready for review June 20, 2026 22:51
@SethMorrowSoftware SethMorrowSoftware merged commit deafc00 into main Jun 20, 2026
7 checks passed
SethMorrowSoftware pushed a commit that referenced this pull request Jun 21, 2026
Tie off the merged transition-card / title / illustrated-card work (PR #70 +
#71) across the docs:

- platformer-polish-plan: §2 status -> SHIPPED & MERGED (transitions, bookends,
  illustrated cards); tick the §9 DoD "no visible build" + "bookends"; note the
  docs pass under "Docs current".
- Fix the false "recoverable at commit fbc93b2" claim - that commit does not
  exist in git and there is no Clocktown commit anywhere, so the rollback left
  no recoverable trace; the as-built record is plan.md + CHANGELOG.md.
- README + CLAUDE: describe the new front-end (a boot title screen with
  character select, biome-illustrated transition cards that mask every level
  load).

Docs only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HkN9P6YodA65ZuhDDuuQks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants