<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pokeyellow.git/engine/slop_menu.asm, branch master</title>
<subtitle>Pokemon Yellow disassembly with SL0P mods: fastboot, SECRET SL0P WARP MENU, custom intro splash</subtitle>
<id>https://git.sl0p.foo/pokeyellow.git/atom/engine/slop_menu.asm?h=master</id>
<link rel='self' href='https://git.sl0p.foo/pokeyellow.git/atom/engine/slop_menu.asm?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/'/>
<updated>2026-07-15T19:24:29Z</updated>
<entry>
<title>SAVER: continuous scrolling (chain pages, no per-page pause)</title>
<updated>2026-07-15T19:24:29Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T19:24:29Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=397f583158195e85118c4027cf18e2536e8d1452'/>
<id>urn:sha1:397f583158195e85118c4027cf18e2536e8d1452</id>
<content type='text'>
The screensaver used to return through .renderArrows (reloading the font,
re-clearing/re-arming OAM+LCDC -- all pointless when arrows are hidden) plus an
idle DelayFrame between every page, giving a ~1-frame hitch each screen. Add
.afterMove: in saver mode it skips all that and dispatches the next direction
immediately, so in-map pages chain back-to-back and the camera scrolls
continuously. Manual EXPLORE still redraws its arrows as before.

(Map-boundary crossings still briefly freeze while LoadMapData reloads the
neighbour -- inherent to the full map load; a same-tileset fast path would be a
larger, riskier change.)
</content>
</entry>
<entry>
<title>SL0P menu: confirmation feedback for single-shot cheats</title>
<updated>2026-07-15T14:30:21Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T14:30:21Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=b6ed7736b92e9772626e6c457b2cb28c9d63411c'/>
<id>urn:sha1:b6ed7736b92e9772626e6c457b2cb28c9d63411c</id>
<content type='text'>
The instant cheats (MONEY/HEAL/COINS/BADGES/DEX/MAXTEAM/TEACH/HMS/REPEL,
NOWILD, and ITEMS-give) dropped you straight back to the menu with no sign
anything happened. Add SlopConfirm: play the item jingle and flash a centred
message box for ~0.8s before returning. NOWILD reports WILD MONS ON/OFF to
match the new state.
</content>
</entry>
<entry>
<title>EXPLORE/SAVER: clamp camera into map bounds after a connection cross</title>
<updated>2026-07-15T13:46:49Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T13:46:49Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=92856fd4b4908939ff4998a84369d4b9ac097b7a'/>
<id>urn:sha1:92856fd4b4908939ff4998a84369d4b9ac097b7a</id>
<content type='text'>
Crossing a map connection applies the connection's alignment offset blindly.
At an edge position the connection doesn't span, the resulting coord lands
outside the neighbour (e.g. Y = -8 = $f8), and since the bounds checks then
operate on the wrapped value the camera roams far outside the map, rendering
whatever WRAM lies past wOverworldMap as on-screen garbage. SlopClampCoords
(run in .renderView, i.e. after every entry/cross LoadMapData) clamps wYCoord
to [0,maxY] and wXCoord to [0,maxX] of the freshly-loaded map.

Verified: 120-sample saver soak across 19 maps -&gt; 0 out-of-bounds; manual
EXPLORE crossing unaffected.
</content>
</entry>
<entry>
<title>SAVER: wander straight until blocked, and fix the edge-freeze</title>
<updated>2026-07-15T13:35:32Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T13:35:32Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=038a9bdb6e3520912477d254177e91be179ce813'/>
<id>urn:sha1:038a9bdb6e3520912477d254177e91be179ce813</id>
<content type='text'>
- Drop the occasional junction turn: keep the current heading until it is
  actually blocked, then turn onto a random non-U-turn direction.
- Fix a freeze: a map's far edge (maxY/maxX = wCurrentMap*2 - 1) is always odd,
  but scroll moves round down to even coords, so the camera stops one coord short
  and 'coord != max' never flagged the edge as blocked -&gt; the wander got stuck
  clamping forever. SlopValidDirMask now treats a direction as open only if there
  are &gt;= 2 coords of room (one even step) or a connection to cross.
</content>
</entry>
<entry>
<title>SL0P menu: add SAVER screensaver (autopilot EXPLORE)</title>
<updated>2026-07-15T13:23:39Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T13:23:39Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=eeb61bd9aa3ad514d685b82a635a8b7d4511339a'/>
<id>urn:sha1:eeb61bd9aa3ad514d685b82a635a8b7d4511339a</id>
<content type='text'>
New menu entry that auto-drives the EXPLORE camera across the overworld:
- persistent-direction wander (DFS-ish): keep heading, turn only when blocked
  or occasionally at a junction, never an immediate U-turn. SlopSaverPickDir
  synthesises a d-pad direction into the normal EXPLORE dispatch, so it inherits
  smooth scrolling and smooth map-edge crossing.
- arrows hidden; player/Pikachu never drawn (clear+freeze OAM right after every
  LoadMapData, before the first frame renders - also fixes a brief player flash
  at crossings in manual EXPLORE).
- any button wakes it back to the menu.

State byte wSlopSaverDir reuses wUnusedCreditsByte (0=off, else current dir).
</content>
</entry>
<entry>
<title>EXPLORE: animate the approach to map edges instead of hard-jumping</title>
<updated>2026-07-15T13:01:08Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T13:01:08Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=1a494d70ad252b08185342cbfaae018740fcde30'/>
<id>urn:sha1:1a494d70ad252b08185342cbfaae018740fcde30</id>
<content type='text'>
At a map boundary, smooth-scroll the remaining (even) distance up to the
edge, then either cross into the connected map (one unavoidable instant
load) or, with no connection, stop smoothly at the edge. Previously any
edge move hard-jumped a whole screen; now only crossing from exactly on a
boundary snaps.
</content>
</entry>
<entry>
<title>EXPLORE: smooth hardware-scroll animation for in-map page moves</title>
<updated>2026-07-15T12:44:55Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T12:44:55Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=2749e462a29ec323fee27dfc674f99d044f04706'/>
<id>urn:sha1:2749e462a29ec323fee27dfc674f99d044f04706</id>
<content type='text'>
</content>
</entry>
<entry>
<title>explore: press A to warp to the viewed location</title>
<updated>2026-07-15T12:09:43Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T12:09:43Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=01a1241e71e3aabfcaf36fee71916654dd95f407'/>
<id>urn:sha1:01a1241e71e3aabfcaf36fee71916654dd95f407</id>
<content type='text'>
In the paging camera, A now drops the player onto the map you're looking at. It
scans outward from the screen centre (wTileMap col 8,row 9 = the view centre) for
the nearest tile that IsTilePassable, adjusts wYCoord/wXCoord to it, sets
wDestinationWarpID=$ff so LoadMapData enters at those coords, and returns carry
set to close the menu and resume the overworld right there. Factored the view-
pointer math into SlopSetViewPtr (shared by the camera + the warp landing).

Verified: browse Pallet -&gt; Route 1, A -&gt; player lands on Route 1 at the centre
tile and walks around normally (sprite + Pikachu, wild data intact).
</content>
</entry>
<entry>
<title>explore: direction arrows showing where you can move</title>
<updated>2026-07-15T11:58:35Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T11:58:35Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=76925904c16bef43eea7d8d08f864880695525fd'/>
<id>urn:sha1:76925904c16bef43eea7d8d08f864880695525fd</id>
<content type='text'>
Overlay real ▲▼◀▶ arrow sprites at the screen edges for every direction the
camera can currently page: either there's more map that way, or the map has a
connection that way. Arrows update live -- e.g. at a connectionless edge that
direction's arrow disappears.

Implementation: the font has only a down-arrow ($ee) and right-arrow ($ed), so
up/left are made with CGB OBJ Y/X-flip (the emulator supports OBJ flips). Drawn
as 4 sprites in wShadowOAM (8x8 OBJ mode, font loaded so $ed/$ee are OBJ-
reachable at 0x8ed0/0x8ee0). Set wUpdateSpritesEnabled=$ff after building them so
the vblank PrepareOAMData leaves shadow OAM alone instead of repopulating the
player sprite over the arrows.

Verified: Pallet mid-map shows all 4; Viridian shows N/S/W (no E); paging to a
connectionless edge drops that arrow and it returns on the way back.
</content>
</entry>
<entry>
<title>explore: rewrite as an instant screen-paging camera</title>
<updated>2026-07-15T11:37:56Z</updated>
<author>
<name>Ash Ketchum</name>
<email>no-reply@sl0p.foo</email>
</author>
<published>2026-07-15T11:37:56Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/pokeyellow.git/commit/?id=27c01477dffa3f0aa66d531e5b5ed1bdc54609e3'/>
<id>urn:sha1:27c01477dffa3f0aa66d531e5b5ed1bdc54609e3</id>
<content type='text'>
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 -&gt;
Route1 -&gt; Viridian), 25-page random stress with no corruption, and normal
gameplay resumes after exit.
</content>
</entry>
</feed>
