Skip to content

Platformer Level 6 "Cavern Depths" — the dirt biome (asset expansion Phase B, slice 1)#58

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

Platformer Level 6 "Cavern Depths" — the dirt biome (asset expansion Phase B, slice 1)#58
SethMorrowSoftware merged 3 commits into
mainfrom
claude/wizardly-brown-1lgjrx

Conversation

@SethMorrowSoftware

Copy link
Copy Markdown
Owner

What this is

The first implementation slice of asset-expansion Phase B (docs/asset-expansion-plan.md) — the dirt biome and a sixth platformer level, CAVERN DEPTHS, built on the terrain_dirt_* tile set and the background_solid_dirt backdrop that the demo loaded but never used.

This lands after a full audit of the project (the four layers, the static gates, the optimization playbook, and a frame-by-frame cross-check of the asset plan against the atlases).

Slice 1 — the dirt biome + a Level 6 that completes start-to-finish

  • Dirt terrain art (all previously unused): block tops, block_center mass under the mound, carved block_top_left/right cliff corners on the goal steps, ramp_long_a/b dirt ramps, and a one-way cloud_left/middle/right dirt platform — over the unused background_solid_dirt parallax backdrop.
  • The level: a wall-jump shaft of floating dirt columns (slot coin — the proven L3 ice-shaft recipe rendered in dirt), a spike gap to leap, a dirt-ramp mound, a high one-way-cloud bonus route, two slimes + a snail, a bonus gem above the shaft, and carved dirt goal steps.
  • Wiring: pfBuildBackdrop gains the dirt case; both pfStartGame dispatch switches wire case 6; the win gate moves to gLevel >= 6 (L5's flag now advances); help/splash/win strings and the header walkthrough updated to six levels.

Reuses the existing slime/snail cast and proven makers — example-side only, no Kit change, no harness bump. Phase B's headline mechanics (the block slime and the conveyor belt) follow in slices 2–3.

Verification

  • tools/check-livecodescript.pyPASS (no smart quotes, balanced handlers/control structures, embedded Kit in sync).
  • tools/audit-platformer.py — auto-discovers and clears L6 (bounds 64..3040, 9 coins, 3 walkers, 0 findings across 6 levels). No audit changes were needed because the level reuses the whitelisted pf_ground/pf_plat slab names.
  • Every referenced frame name verified to exist in the atlas XML (terrain_dirt_*, background_solid_dirt, plus the reused spikes/flag/coin/gem/slime/snail frames).

Statically verified — needs an OXT pass (header verify item 20). Things to confirm in OXT: dirt art reads with no missing-frame fallbacks; the wall-jump slot coin is reachable by wall-jump and a straight double-jump (never trick-only); the bonus gem above the shaft is reachable (lower it if not); the dirt mound walks up/across/down with no fall-through; the cloud drops through on DOWN+JUMP; the win screen says ALL SIX LEVELS CLEAR.

Also in this PR

Two small asset-expansion-plan.md accuracy fixes found during the review: the tiles hud_* strip is 30 frames (not 33 — the 33-frame sheet is the separate hud_sheet.xml), and the conveyor tile is a single frame (not an animated 2-frame pair) — which matters for the slice-3 conveyor.

🤖 Generated with Claude Code

https://claude.ai/code/session_01X92APxUJUMue3bAzXiX9V2


Generated by Claude Code

claude added 3 commits June 17, 2026 22:47
… B, slice 1)

A sixth level on the previously-unused terrain_dirt_* tile set and the
background_solid_dirt backdrop, completing start-to-finish:

- dirt block tops + block_center mass under the mound, carved
  block_top_left/right cliff corners on the goal steps, ramp_long_a/b
  dirt ramps, and a one-way cloud_left/middle/right dirt platform
- a wall-jump shaft of floating dirt columns (slot coin; the L3
  ice-shaft recipe in dirt), a spike gap to leap, a dirt-ramp mound,
  a high one-way-cloud bonus route, two slimes + a snail, a bonus gem
- win moves to gLevel >= 6 (L5's flag now advances); pfBuildBackdrop
  gains the dirt case; both pfStartGame switches wire case 6;
  help/splash/win strings + header walkthrough updated to six levels

Example-side only - no Kit change, no harness bump. check-livecodescript
passes; audit-platformer auto-discovers and clears L6 (9 coins, 3
walkers, 0 findings). Every referenced frame verified against the atlas.
Statically verified; needs an OXT pass (header verify item 20). Block
slime + conveyor follow in slices 2-3.

Also fixes two asset-expansion-plan inaccuracies found during review: the
tiles hud_* strip is 30 frames (not 33), and the conveyor tile is a
single frame (not an animated 2-frame pair).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X92APxUJUMue3bAzXiX9V2
…erywhere

Addresses the OXT pass on Level 6 (no background, lackluster, misaligned spikes):

- BACKGROUND: Kenney's flat "background_solid_dirt" frame read as blank. L6 now
  builds a dark cave backdrop (pfBuildCaveBackdrop - two card graphics: deep
  earth + a warmer play band), guaranteed visible. No parallax drift (the depth
  comes from the scrolling cave structure).
- ATMOSPHERE (was "lackluster"): flickering wall TORCHES (torch_on_a/b, new
  pfMakeTorch + a "torch" anim def), hanging CHAINS + STALACTITES
  (terrain_dirt_vertical_bottom), carved dirt CLIFF LIPS on the spike pit
  (block_top_right/left), and cave DECOR (a rock, cave mushrooms, a bush),
  all placed clear of every beat.
- SPIKES (misaligned): the spike art's pixels are the bottom 34px of the 64px
  cell, so placing the tile at y576 sank the tips to y606 - 30px below the pit
  edge, reading as floating/misaligned. pfMakeSpikes now places at y546 so the
  tips meet y576 (the ground line) and the spikes bristle AT the edge. Affects
  every spike pit (L1/L3/L5/L6); the hurt sensor and pit geometry are unchanged.

Example-side only (no Kit change, no harness bump). check-livecodescript passes;
audit-platformer clears all 6 levels (0 findings); new frame names verified
against the atlas. Statically verified; needs an OXT re-pass (header item 20).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X92APxUJUMue3bAzXiX9V2
The reported "misaligned spikes" was a horizontal offset, not the vertical
seating I changed last round. pfTile treats its (x,y) as the tile TOP-LEFT
(it centres at x+32, like all the ground tiling), but pfMakeSpikes tiled the
spike row over pL+32 .. pR-32 - shifting every spike 32px RIGHT: a bare 32px
gap at the left pit edge and the last spike overhanging onto the ground on the
right. The row now tiles pL .. pR-64 (top-lefts), landing flush from pL to pR.

Verified flush in all five pits (L1/L3/L5 x2/L6): each tiles to an exact
pL..pR span. Sensor + pit geometry unchanged; the y546 vertical seating (tips
at the ground line) stays. check-livecodescript passes; audit clears all 6
levels. Needs an OXT re-pass on the spike pits.

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 17, 2026 23:50
@SethMorrowSoftware SethMorrowSoftware merged commit a2f1b95 into main Jun 17, 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