aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--engine/slop_menu.asm28
1 files changed, 21 insertions, 7 deletions
diff --git a/engine/slop_menu.asm b/engine/slop_menu.asm
index 5d14cfb1..b69bb353 100644
--- a/engine/slop_menu.asm
+++ b/engine/slop_menu.asm
@@ -420,24 +420,38 @@ SlopExploreShared:
jp c, .moveRight
jp z, .moveRight
jp .edgeRight
-; in-map page moves: smooth-scroll one screen, then just redraw the arrows
-; (the scroll already left the destination view on screen in rotated VRAM).
+; in-map page moves: smooth-scroll one screen, then .afterMove.
.moveUp
ld c, SLOP_PAGE_Y
call SlopScrollUp
- jp .renderArrows
+ jp .afterMove
.moveDown
ld c, SLOP_PAGE_Y
call SlopScrollDown
- jp .renderArrows
+ jp .afterMove
.moveLeft
ld c, SLOP_PAGE_X
call SlopScrollLeft
- jp .renderArrows
+ jp .afterMove
.moveRight
ld c, SLOP_PAGE_X
call SlopScrollRight
- jp .renderArrows
+ jp .afterMove
+; After an in-map page (or an edge clamp): EXPLORE redraws its arrows and waits
+; for input; the SCREENSAVER instead picks the next direction and dispatches it
+; immediately -- no arrow redraw, no idle DelayFrame -- so pages chain into one
+; another and the camera scrolls continuously.
+.afterMove
+ ld a, [wSlopSaverDir]
+ and a
+ jp z, .renderArrows
+.saverNext
+ call Joypad ; refresh hJoyHeld (updated by the scroll's vblanks)
+ ldh a, [hJoyHeld]
+ and a
+ jp nz, .exit ; any real button wakes the screensaver
+ call SlopSaverPickDir ; d = next auto-scroll direction
+ jp .dispatch
; ---- map-edge handling ----
; A full page won't fit before the edge, so smooth-scroll the remaining (even)
; distance right up to the edge, then either cross into the connected map (one
@@ -527,7 +541,7 @@ SlopExploreShared:
call LoadMapData
jp .renderView
.clampArrows
- jp .renderArrows
+ jp .afterMove
; ---- A: warp the player to the walkable tile nearest the screen centre ----
; the centre tile is wTileMap(col 8,row 9) = coord (wYCoord,wXCoord); a coord
; offset (dy,dx) maps to wTileMap(8+2dx, 9+2dy). Scan outward for a passable tile.