Skip to content

platformer: level-length audit + expand Cavern Depths (L6) to three acts#60

Merged
SethMorrowSoftware merged 2 commits into
mainfrom
claude/wizardly-brown-1lgjrx
Jun 18, 2026
Merged

platformer: level-length audit + expand Cavern Depths (L6) to three acts#60
SethMorrowSoftware merged 2 commits into
mainfrom
claude/wizardly-brown-1lgjrx

Conversation

@SethMorrowSoftware

Copy link
Copy Markdown
Owner

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)

Level Width Coins Verdict
L1 Meadow 8,500px 29 gold standard
L2 5,820px 19 light on coins
L3 6,176px 23 solid
L4 6,500px 23 rich (bestiary)
L5 Dunes 4,200px 12 thin
L6 Cavern 2,976px 9 thinnest
L7 Keep vertical 8 short climb

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:

  • Act 2 — Crusher Gallery: two bats roosting on a dirt overhang (split bands, gotcha 18), two faced dirt crushers, 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 slime, a treasure mimic, and a finale crusher to the flag.

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.

Verification

  • check-livecodescript.py — PASS
  • audit-platformer.py0 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)
  • Example-side only — no Kit change, no harness bump.

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

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
@SethMorrowSoftware SethMorrowSoftware marked this pull request as ready for review June 18, 2026 18:23
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
@SethMorrowSoftware SethMorrowSoftware merged commit a46efb7 into main Jun 18, 2026
7 checks passed
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