platformer: level-length audit + expand Cavern Depths (L6) to three acts#60
Merged
Merged
Conversation
Per the level-length audit: the thinnest level (Cavern Depths, 2,976px / 9 coins / 3 foes) grows to ~6,400px and 24 coins with a rich cave bestiary, keeping all of Act 1 verbatim and appending two acts of proven geometry. ACT 2 - the CRUSHER GALLERY: two bats roosting on a dirt overhang (split bands so the flyers never share a path - gotcha 18), two faced dirt crushers to dash between, a wider spike chasm (PIT2). ACT 3 - the DEEP RUN: a dropping spider, a stalking ghost, a floor barnacle, a cave plant, a spiked chasm a lift ferries (PIT3, still double-jumpable so the lift is flair), a rightward speed conveyor + a second block slime, a fire critter, a treasure mimic and a finale crusher to the flag. Three checkpoints up from one. The spook-sheet foes (bat/spider/ghost/mimic/plant) are gSpooksOK-gated: a missing enemies.png degrades them silently and the level stays completable on the native foes (slimes/snail/crushers/fire/barnacle). Example-side only (no Kit change, no harness bump). Static gates clean; the geometry audit caught a goal past the ground edge, a coin + decor crowding the flag and a checkpoint on the pit lip - all fixed, 0 findings across all 7 levels. Needs the OXT pass for feel/spacing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X92APxUJUMue3bAzXiX9V2
L6 is the first level with more than one checkpoint, which exposed a
single-checkpoint assumption: pfMakeCheckpoint stored the flag sprite and
its x in single globals (gCheckSpr/gCheckX) that each call overwrote, and
the sensor handler banked gCheckX + raised gCheckSpr behind a one-time
gCheckpointOn guard. With three flags only the LAST (5008) was tracked, so
touching the first flag banked respawn=5008 and raised the 5008 flag - the
first never lit ("didn't work") and a downstream flag stood pre-raised
("already up"). L1-L5 worked only because they each have exactly one.
Fix (example-side): each flag now carries its OWN respawn x (uPfCheckX)
and a one-shot guard (uPfCheckDone); the sensor handler activates the
flag you TOUCHED (raises pSensorCtrl, banks its x) and only ever ADVANCES
gRespawnX, so a knockback onto an earlier flag can't drag respawn
backward. Single-checkpoint levels behave identically (no regression).
No Kit change, no harness bump. Static gates clean, audit 0 findings.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X92APxUJUMue3bAzXiX9V2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Begins the level-length / variety pass the user asked for: the later levels had been getting shorter and thinner than L1. This PR audits all seven levels and expands the thinnest one (L6 "Cavern Depths") from a single ~3,000px act into a full three-act level, with a rich cave bestiary.
The audit (current state)
Target (agreed with the user): bring the thin levels up to ~6,500px / ~24 coins — consistent and challenging, not grindy. Worst-first, one level per increment so each gets an OXT pass.
L6 — Cavern Depths, now ~6,400px / 24 coins / 3 checkpoints
All of Act 1 is kept verbatim; two acts of proven geometry are appended:
The spook-sheet foes (bat/spider/ghost/mimic/plant) are
gSpooksOK-gated: a missingenemies.pngdegrades them silently and the level stays completable on the native foes.Verification
check-livecodescript.py— PASSaudit-platformer.py— 0 findings across all 7 levels (it caught a goal past the ground edge, a coin + decor crowding the flag, and a checkpoint on a pit lip; all fixed)Needs the OXT pass for feel/spacing and the spook art. L5, L7 (and topping up L2's coins) follow in subsequent increments.
🤖 Generated with Claude Code
Generated by Claude Code