Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,63 @@ The native shim's ABI is tracked separately by `b2Version()` (currently `4`).

### Added

- **Platformer: the LAVA SERPENT + a widened L4 lava pit (asset-expansion Phase
E).** L4's old collapsing bridge (which never read right) is **gone**; in its
place the lava pit is widened to a **512px chasm** (2944..3456, up from a 192px
strip) crossed in **two ~160px hops** over a middle **stepping-stone**, and a
rearing **LAVA SERPENT** (`snakeLava` art, bodiless) rises OUT of the lava, arcs
ACROSS it and sinks back in on a sine path, **peaking at the stepping-stone** so
it contests the very rock you must land on (time your hops between its rises).
New `pfMakeLavaSerpent` / `pfTickLavaSerpent`: a pure sprite created BEFORE the
lava tiles so the y576 tile row occludes its submerged lower body (it reads as
rising from / sinking into the lava), with a visibility toggle backing the
no-tile fallback; the head's strike zone is a proximity-poll knockback (the saw
rule, gotcha 16), never a stomp. The collapsing-bridge maker/tick/globals were
removed wholesale. Self-gates on `gSpooksOK` - absent the spooks sheet the pit is
simply a two-hop lava gap (always completable).
- **Platformer: SNAKES - the slither movement type (asset-expansion Phase E).** A
new slime-family kind `snake` with its own tick: it crawls the floor and
AUTO-REVERSES at a pit edge or wall (a single floor-probe `b2kOverlap`
ahead-and-below the body per frame), so you place it without hand-tuning a patrol
band - `pMinX/pMaxX` are just the outer safety bound. Stompable on top / hurts on
a side touch like a slime (kind "snake" falls through to the classic verdict),
and the Phase-D defeat juice (dead pose, poof, fade, pop) carries it for free.
`pfMakeSnake pIdx,pX,pMinX,pMaxX,pTopY` is the LOW (`snake.png`) crawler; the
tall rearing `snakeLava`/`snakeSlime` art is the lava serpent above. Spook-sheet
`.png` art, so it self-gates on `gSpooksOK`. Deployed on L3 (turns at the spike
pit) and L4's lava-pit approach (turns at the entry pit and the lava lip).
- **Platformer: spook slime/snake sprites sit ON the ground (alignment fix).** The
new spook-sheet skins (green/blue slime, snake) had inherited the FOES bind
offset (`pDY -6/-8`), which floated them ~9px: the foes art has soft, sparse
bottom rows that want a deep frame-sink, but the spook frames fill edge-to-edge
(zero transparent padding, measured against `enemies.png`), so feet-on-ground is
just `pFullH/2 - frameH*0.9/2`. Re-derived per frame (snake `pDY 3`, slimes `4`);
needs an OXT pass to confirm to the pixel (art alignment is statically
unverifiable). Example-side only; static gates clean, audit 0 findings.
- **Platformer: defeat-animation juice (asset-expansion Phase D).** Pure polish,
no new mechanics, on the one shared slime-family defeat path (so it lifts every
level at once). A stomped foe now **fades out** over its ~700ms linger
(`blendLevel` 0 -> ~96) instead of blinking off, and the spook foes show a
proper **dead** pose rather than a hit-flash: the bat `bat_hit.png` ->
`bat_dead.png`, the mimic `grassBlock_hit.png` -> `grassBlock_dead.png`. The
slimes/snail/block-slime already played their `_flat`/`_shell`/`_rest` squash
poses, and the telegraphing foes already idle on rest frames (`barnacle_*_rest`,
`block_rest`, `bat_hang`). The fade window is short and only a stomped foe or
two ever fade at once.
- **A stomp DUST-POOF** (more juice): four little pale motes arc out of a
squashed foe (`pfMakeDustPool`/`pfDustBurst`/`pfTickDust`, the pooled-debris
pattern - eight bodies parked off-world, flung on the stomp, re-parked ~0.5s
later, so nothing is created mid-game). The motes are `b2kSpawnBall` bodies
(no new art) born in the camera group, so they scroll with the world. Built
every level.
Example-side only; static gates clean, audit 0 findings.
- **A defeat POP + second SKINS** (more juice): the squashed art now also POPS
up on an ease-out arc (~50px) as it fades; and the bestiary gains variants -
a **green** and **blue** slime (the `spooks` `.png` skins, via `pfMakeCritter`
which now takes an optional sheet; `gSpooksOK`-gated, a normal slime without
it) reskin two L1 slimes, and the **ring worm** (`worm_ring_*`, native foes)
reskins L2's worm. `tools/audit-platformer.py` learned that two same-index
makers are a conditional reskin (`if gSpooksOK ... else ...`), not two foes.
- **Platformer: MULTI-KEY doors + a two-key puzzle in L2 (asset-expansion Phase C,
slice 3 - part 1).** `pfMakeKeyDoor` was single-instance (one door per level via
shared globals); it now appends to a per-door table, so a level can plant
Expand Down
40 changes: 33 additions & 7 deletions docs/asset-expansion-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,21 +209,47 @@ needs an OXT eye.
- **Level:** a fortress interior — strong `block_strong_*` ?-blocks, a key/switch
puzzle wing, spinner gauntlets, stone cliffs/overhangs.

### Phase D — The defeat-animation & bestiary fill-in (S–M)
### Phase D — The defeat-animation & bestiary fill-in (S–M) — IN PROGRESS
- **Assets:** `*_squashed/_hit/_dead` across `spooks` and `foes` `_rest` poses;
`worm_ring_*` (second worm skin); `slimeBlue*`/`slimeGreen*` skins.
- **Polish, every level:** play the proper **squash/dead** frame on a stomp (slimes,
snail, snake, etc.) instead of just dropping the art; **rest/idle** poses for
sleeping/telegraphing foes. Adds juice without new mechanics.
- *Pure example-side; no new levels.* Good "between big phases" polish.

### Phase E — Snakes & the slither biome beat (M)
- **Done (pending OXT):** the stomped foe now **fades out** over its linger
(`blendLevel` ramp) instead of blinking off; the bat + mimic show a proper
`_dead` pose (was a `_hit` flash); and a **dust-POOF** (four pooled `b2kSpawnBall`
motes, the debris pattern) bursts from the squash. Slimes/snail/block already
had `_flat`/`_shell`/`_rest` squash poses; telegraphing foes already idle on rest.
- **Done (round 2):** a defeat **POP** (the squashed art arcs up ~50px as it
fades) and the **second skins** - a green + blue slime (`slimeGreen/Blue`,
`spooks`, via `pfMakeCritter`'s new optional sheet param, `gSpooksOK`-gated) and
the **ring worm** (`worm_ring`, native foes). Phase D essentially complete.

### Phase E — Snakes & the slither biome beat (M) — BEGUN
- **Assets:** `snake(.png)/_walk/_hit/_dead`, `snakeLava*`, `snakeSlime*`.
- **New movement type:** **slither** — a ground crawler that hugs the floor and
reverses at edges/walls (slime-family kind `snake`, animated `_walk`). `snakeLava`
belongs by the L4 lava / Phase-B cavern; `snakeSlime` by slime pools.
- Woven into L4 and the new biomes (no dedicated level needed, but could anchor a
"serpent pit" beat).
reverses at edges/walls (slime-family kind `snake`, animated `_walk`). The LOW
`snake.png` is the crawler; the TALL rearing `snakeLava`/`snakeSlime` art is the
rising **lava serpent** (a separate bodiless mover, not a floor crawler).
- Woven into L4 and the new biomes (no dedicated level needed).
- **Done (pending OXT):**
- The `snake` kind + slither tick (floor-probe edge/wall reversal) +
`pfMakeSnake pIdx,pX,pMinX,pMaxX,pTopY` — the plain low crawler, `gSpooksOK`-
gated, via `pfMakeCritter`'s sheet param. Deployed: L3's ice platform (turns at
the spike pit) and L4's lava-pit approach (turns at the entry pit + lava lip).
- **The "serpent pit" beat (`pfMakeLavaSerpent`/`pfTickLavaSerpent`):** L4's old
collapsing bridge is removed; the lava pit is widened to a 512px chasm crossed
in two hops over a middle stepping-stone, and a rearing `snakeLava` serpent
rises out / arcs across / sinks back in on a sine path, peaking at the stone
(a proximity-poll knockback, the saw rule). Created under the lava tiles so its
submerged body is occluded.
- **Sprite grounding fix:** the spook skins fill their frames edge-to-edge (no
transparent padding, measured), so their bind offset is the plain geometric
`pFullH/2 - frameH*0.9/2`, not the FOES soft-bottom sink that floated them ~9px.
- **TODO:** a `snakeSlime` home (a slime-pool beat) and more snake placements;
optionally teach `audit-platformer.py` the `pfMakeSnake`/`pfMakeLavaSerpent`
makers (currently ignored — harmless, the pit isn't gap-checked).

### Phase F — Collectibles & a health model (M)
- **Assets:** `coin_bronze/silver(_side)`, `star`, `heart`, `hud_heart(_half/
Expand Down
Loading
Loading