aboutsummaryrefslogtreecommitdiffstats
path: root/SL0P.md
diff options
context:
space:
mode:
authorAsh Ketchum <no-reply@sl0p.foo>2026-07-15 13:37:56 +0200
committerAsh Ketchum <no-reply@sl0p.foo>2026-07-15 13:37:56 +0200
commit27c01477dffa3f0aa66d531e5b5ed1bdc54609e3 (patch)
tree71e0f344747f52fe58133886f83d51371581812d /SL0P.md
parentexplore: don't hide the player (fixes glitchy orphaned Pikachu) (diff)
downloadpokeyellow-27c01477dffa3f0aa66d531e5b5ed1bdc54609e3.tar.gz
pokeyellow-27c01477dffa3f0aa66d531e5b5ed1bdc54609e3.tar.xz
pokeyellow-27c01477dffa3f0aa66d531e5b5ed1bdc54609e3.zip
explore: rewrite as an instant screen-paging camera
Per feedback, EXPLORE should page whole screens on button presses (instant redraw), not move/walk the character. Ripped out the walk-engine approach entirely -- reverted the CollisionCheckOnLand noclip hook and the OverworldLoop simulated-joypad paging hook, and removed both helpers. EXPLORE is now a self-contained camera loop that renders straight from the map block buffer: - view pointer = wOverworldMap + (by+1)*stride + bx (LoadCurrentMapView) - a d-pad press shifts the camera coords by ~one screen and re-renders - at a map edge it crosses to the connected map using that connection's alignment offset (or clamps if none), LoadMapData + re-render - B restores the origin view + returns to the SL0P menu No character walking, sprites hidden for a clean camera. Verified: within-map paging steps a screen at a time, seams cross with correct offsets (Pallet -> Route1 -> Viridian), 25-page random stress with no corruption, and normal gameplay resumes after exit.
Diffstat (limited to 'SL0P.md')
-rw-r--r--SL0P.md22
1 files changed, 12 insertions, 10 deletions
diff --git a/SL0P.md b/SL0P.md
index 6d02fe03..1c9da048 100644
--- a/SL0P.md
+++ b/SL0P.md
@@ -37,23 +37,25 @@ A table-driven cheat menu. Cursor + A to pick, B to back out / close.
| **ITEMS** | submenu: give ×99 of balls, Rare Candy, Full Restore, Max Revive, Max Elixer, PP Up, and all five evolution stones |
| **NOWILD** | toggle wild encounters off (shows `ON`) |
| **REPEL** | refill repel steps |
-| **EXPLORE** | toggle noclip free-roam: disables collision so you (and Pikachu) walk through walls/NPCs/ledges and cross map connection seams seamlessly across the whole overworld. Pick it again to turn off. |
+| **EXPLORE** | a screen-paging overworld camera: each d-pad press instantly redraws the next screenful of the world (no walking), hopping to the connected map at each edge. B returns to the menu. |
Everything is in `engine/slop_menu.asm`. Adding a new entry = add a name to
`SlopMenuText`, a `dw Handler` to `SlopMenuHandlers`, and bump `SLOP_MENU_COUNT`.
Handlers return carry set (a warp/exit was started) or clear (back to the menu),
and can be submenus or one-shot actions.
-Persistent toggle flags: `wUnusedFlag` (NOWILD) and `wSlopNoclip` (EXPLORE, the
-repurposed unused `wUnusedObtainedBadges` at D356).
+Persistent toggle flag: `wUnusedFlag` (NOWILD).
-**EXPLORE / noclip** hooks the home `CollisionCheckOnLand` (5-byte early-out when
-`wSlopNoclip` is set; ROM0 room was reclaimed by deleting the unreferenced
-`Func_0db5` dead farcall in `LoadMapHeader`). The engine's own player-walk +
-connection-crossing code then carries you seamlessly across the world -- see
-`tools/render_overworld.py` for the ground-truth map that proved connections join
-maps along shared edges with an offset. (The player is left visible on purpose:
-hiding it orphaned the Pikachu follower into a lone wandering sprite.)
+**EXPLORE** is a self-contained camera loop in `engine/slop_menu.asm`. It renders
+straight out of the map block buffer (`wOverworldMap`): compute a view pointer
+`wOverworldMap + (by+1)*stride + bx` (by/bx = player block, stride = width+6),
+`LoadCurrentMapView`, push to VRAM, OBJ off. A d-pad press moves the camera coords
+by ~one screen (`SLOP_PAGE_X/Y`) and re-renders; at a map edge it crosses using
+that connection's `*Alignment` offset (vertical: Y=align, X+=align; horizontal:
+X=align, Y+=align) and `LoadMapData`s the neighbour, or clamps if there's none.
+No walk engine, no character movement. See `tools/render_overworld.py` for the
+ground-truth map that proved connections join maps along shared edges with an
+offset -- the same math this camera uses to cross seams.
## Build