From bf910f66bafedf92be60b5457e6ea2621aaabab8 Mon Sep 17 00:00:00 2001 From: Ash Ketchum Date: Wed, 15 Jul 2026 12:23:17 +0200 Subject: explore: hide player (camera) + fix menu close - UpdatePlayerSprite: when wSlopNoclip is set, jump to .disableSprite so the player sprite is hidden -> true free-roam camera (bankable bank, no ROM0 cost). - SlopExplore was returning carry-set into .exitProceed, which bare-returns and assumes a warp will redraw the screen; since noclip doesn't warp, the menu window lingered. Now it closes like the B path (SlopMenuRestoreFlags + push bank + jp CloseTextDisplay) so the overworld is rebuilt cleanly. - SL0P.md: document EXPLORE noclip camera + the hooks. Verified A/B in Pallet: noclip on -> player gone, walls/seams passable; off -> player back, collision restored, menu closes cleanly. --- SL0P.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'SL0P.md') diff --git a/SL0P.md b/SL0P.md index a498a3eb..9501a0d6 100644 --- a/SL0P.md +++ b/SL0P.md @@ -37,17 +37,23 @@ 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 camera: hides the player + disables collision, so you glide through walls/NPCs/ledges and cross map connection seams seamlessly across the whole overworld. Pick it again to turn off. | 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 live in `wSlopNoWild` (the repurposed unused `wc5d8`). +Persistent toggle flags: `wUnusedFlag` (NOWILD) and `wSlopNoclip` (EXPLORE, the +repurposed unused `wUnusedObtainedBadges` at D356). -### TODO -- **NOCLIP** (walk-through-walls): prototyped, but its hook lands in the full - home bank (ROM0). Needs ~5 bytes of home budget reclaimed first. +**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`) and `UpdatePlayerSprite` in +`engine/overworld/movement.asm` (jump to its `.disableSprite` path to hide the +player). 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. ## Build -- cgit v1.3.1-sl0p