From af9ab166c4b3c5418d00306d990a39fd247b5fbb Mon Sep 17 00:00:00 2001 From: xCrystal Date: Thu, 14 Dec 2023 17:11:15 +0100 Subject: [PATCH] Ensure anchor points are applied when landing after warp by creating a new setup script --- data/maps/setup_script_pointers.asm | 1 + data/maps/setup_scripts.asm | 3 +++ engine/board/menu.asm | 2 +- engine/board/spaces.asm | 2 +- engine/overworld/warp_connection.asm | 21 +++++++++++++++++++++ home/map.asm | 2 +- 6 files changed, 28 insertions(+), 3 deletions(-) mode change 100755 => 100644 engine/board/menu.asm mode change 100755 => 100644 engine/board/spaces.asm diff --git a/data/maps/setup_script_pointers.asm b/data/maps/setup_script_pointers.asm index a837ab7e5..58a7466fb 100644 --- a/data/maps/setup_script_pointers.asm +++ b/data/maps/setup_script_pointers.asm @@ -53,3 +53,4 @@ MapSetupCommands: add_mapsetup EnableOverworldHUD ; 2e add_mapsetup SpawnInCustomFacing ; 2f add_mapsetup ResetLevelScopedEventFlags ; 30 + add_mapsetup AnchorPointAfterWarp ; 31 diff --git a/data/maps/setup_scripts.asm b/data/maps/setup_scripts.asm index 7e56e90be..9b1d910da 100644 --- a/data/maps/setup_scripts.asm +++ b/data/maps/setup_scripts.asm @@ -78,6 +78,7 @@ MapSetupScript_Warp: mapsetup FadeInPalettesFromWhite mapsetup ActivateMapAnims mapsetup LoadWildMonData + mapsetup AnchorPointAfterWarp db -1 ; end MapSetupScript_BadWarp: @@ -102,6 +103,7 @@ MapSetupScript_BadWarp: mapsetup FadeInPalettesFromWhite mapsetup ActivateMapAnims mapsetup LoadWildMonData + mapsetup AnchorPointAfterWarp db -1 ; end MapSetupScript_Connection: @@ -147,6 +149,7 @@ MapSetupScript_Train: mapsetup ActivateMapAnims mapsetup LoadWildMonData mapsetup UpdateRoamMons + mapsetup AnchorPointAfterWarp db -1 ; end MapSetupScript_ReloadMap: diff --git a/engine/board/menu.asm b/engine/board/menu.asm old mode 100755 new mode 100644 index 3f461514e..686b8018a --- a/engine/board/menu.asm +++ b/engine/board/menu.asm @@ -93,7 +93,7 @@ BoardMenuScript:: res 2, [hl] ld a, BOARDEVENT_VIEW_MAP_MODE ldh [hCurBoardEvent], a - ld a, TRUE + ld a, 100 ld [wViewMapModeRange], a ld a, [wMapGroup] ld [wBeforeViewMapMapGroup], a diff --git a/engine/board/spaces.asm b/engine/board/spaces.asm old mode 100755 new mode 100644 index b552c9815..836b972b5 --- a/engine/board/spaces.asm +++ b/engine/board/spaces.asm @@ -271,7 +271,7 @@ PromptPlayerToChooseBranchDirection: .EnterViewMapMode: ld a, BOARDEVENT_VIEW_MAP_MODE ldh [hCurBoardEvent], a - ld a, TRUE + ld a, 100 ld [wViewMapModeRange], a ld a, [wMapGroup] ld [wBeforeViewMapMapGroup], a diff --git a/engine/overworld/warp_connection.asm b/engine/overworld/warp_connection.asm index 7c20df81c..2f3027373 100644 --- a/engine/overworld/warp_connection.asm +++ b/engine/overworld/warp_connection.asm @@ -412,3 +412,24 @@ GetMapScreenCoords:: and 1 ld [wPlayerMetatileX], a ret + +AnchorPointAfterWarp: +; if wCurSpaceNextSpace is not an anchor point, override any anchor point we pass through + ld a, [wCurSpaceNextSpace] + cp NEXT_SPACE_IS_ANCHOR_POINT + ret c + ld a, [wCurMapAnchorEventCount] + and a + ret z +; if we have arrived to an anchor point, load its associated next space to wCurSpaceNextSpace right now. +; note that the next space of an anchor point could be another anchor point. + ld c, a + ld hl, wCurMapAnchorEventsPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wXCoord] + ld d, a + ld a, [wYCoord] + ld e, a + jp CheckAndApplyAnchorPoint diff --git a/home/map.asm b/home/map.asm index 5dc0f6871..2539df458 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1807,7 +1807,7 @@ CheckAndApplyAnchorPoint:: ; e = [wYCoord] ; hl = [wCurMapAnchorEventsPointer] ; if currently at coords of any anchor point, copy its next space byte to wCurSpaceNextSpace. -; return carry if anchor point matched, nc otherwise. +; return nc if anchor point matched, carry otherwise. ldh a, [hROMBank] push af call SwitchToMapScriptsBank