From 85f9c258b578cd74af63e520bbec34e23fdb5bae Mon Sep 17 00:00:00 2001 From: xCrystal Date: Tue, 31 Oct 2023 16:02:37 +0100 Subject: [PATCH] Fix that CheckObjectCoveredByTextbox doesn't account for the background scroll (SCX/SCY) (#8) --- engine/overworld/map_objects.asm | 6 +----- home/menu.asm | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm index 6b6d18d0a..4f55f3320 100644 --- a/engine/overworld/map_objects.asm +++ b/engine/overworld/map_objects.asm @@ -2406,18 +2406,14 @@ CheckObjectCoveredByTextbox: ldh a, [hCurSpriteYCoord] add e dec a - cp SCREEN_HEIGHT - jr nc, .ok9 ld b, a .next ldh a, [hCurSpriteXCoord] add d dec a - cp SCREEN_WIDTH - jr nc, .ok8 ld c, a push bc - call Coord2Tile + call ScrollAwareCoord2Tile pop bc ; NPCs disappear if standing on tiles FIRST_REGULAR_TEXT_CHAR or above, ; since those IDs are for text characters and textbox frames. diff --git a/home/menu.asm b/home/menu.asm index 03f21caf0..36f28137e 100644 --- a/home/menu.asm +++ b/home/menu.asm @@ -257,6 +257,34 @@ ClearWholeMenuBox:: call ClearBox ret +ScrollAwareCoord2Tile:: +; Return the address of wTilemap(c, b) in hl relative to the background scroll in hSCX and hSCY. +; c = c - [hSCX] / 8 + ld a, [hSCX] + srl a + srl a + srl a + ld l, a + ld a, c + sub l + jr nc, .ok1 + add BG_MAP_WIDTH +.ok1 + ld c, a +; b = b - [hSCY] / 8 + ld a, [hSCY] + srl a + srl a + srl a + ld l, a + ld a, b + sub l + jr nc, .ok2 + add BG_MAP_HEIGHT +.ok2 + ld b, a + jr Coord2Tile + MenuBoxCoord2Tile:: ld a, [wMenuBorderLeftCoord] ld c, a