Ensure anchor points are applied when landing after warp by creating a new setup script

This commit is contained in:
xCrystal 2023-12-14 17:11:15 +01:00
parent 429aad6798
commit af9ab166c4
6 changed files with 28 additions and 3 deletions

View File

@ -53,3 +53,4 @@ MapSetupCommands:
add_mapsetup EnableOverworldHUD ; 2e add_mapsetup EnableOverworldHUD ; 2e
add_mapsetup SpawnInCustomFacing ; 2f add_mapsetup SpawnInCustomFacing ; 2f
add_mapsetup ResetLevelScopedEventFlags ; 30 add_mapsetup ResetLevelScopedEventFlags ; 30
add_mapsetup AnchorPointAfterWarp ; 31

View File

@ -78,6 +78,7 @@ MapSetupScript_Warp:
mapsetup FadeInPalettesFromWhite mapsetup FadeInPalettesFromWhite
mapsetup ActivateMapAnims mapsetup ActivateMapAnims
mapsetup LoadWildMonData mapsetup LoadWildMonData
mapsetup AnchorPointAfterWarp
db -1 ; end db -1 ; end
MapSetupScript_BadWarp: MapSetupScript_BadWarp:
@ -102,6 +103,7 @@ MapSetupScript_BadWarp:
mapsetup FadeInPalettesFromWhite mapsetup FadeInPalettesFromWhite
mapsetup ActivateMapAnims mapsetup ActivateMapAnims
mapsetup LoadWildMonData mapsetup LoadWildMonData
mapsetup AnchorPointAfterWarp
db -1 ; end db -1 ; end
MapSetupScript_Connection: MapSetupScript_Connection:
@ -147,6 +149,7 @@ MapSetupScript_Train:
mapsetup ActivateMapAnims mapsetup ActivateMapAnims
mapsetup LoadWildMonData mapsetup LoadWildMonData
mapsetup UpdateRoamMons mapsetup UpdateRoamMons
mapsetup AnchorPointAfterWarp
db -1 ; end db -1 ; end
MapSetupScript_ReloadMap: MapSetupScript_ReloadMap:

2
engine/board/menu.asm Executable file → Normal file
View File

@ -93,7 +93,7 @@ BoardMenuScript::
res 2, [hl] res 2, [hl]
ld a, BOARDEVENT_VIEW_MAP_MODE ld a, BOARDEVENT_VIEW_MAP_MODE
ldh [hCurBoardEvent], a ldh [hCurBoardEvent], a
ld a, TRUE ld a, 100
ld [wViewMapModeRange], a ld [wViewMapModeRange], a
ld a, [wMapGroup] ld a, [wMapGroup]
ld [wBeforeViewMapMapGroup], a ld [wBeforeViewMapMapGroup], a

2
engine/board/spaces.asm Executable file → Normal file
View File

@ -271,7 +271,7 @@ PromptPlayerToChooseBranchDirection:
.EnterViewMapMode: .EnterViewMapMode:
ld a, BOARDEVENT_VIEW_MAP_MODE ld a, BOARDEVENT_VIEW_MAP_MODE
ldh [hCurBoardEvent], a ldh [hCurBoardEvent], a
ld a, TRUE ld a, 100
ld [wViewMapModeRange], a ld [wViewMapModeRange], a
ld a, [wMapGroup] ld a, [wMapGroup]
ld [wBeforeViewMapMapGroup], a ld [wBeforeViewMapMapGroup], a

View File

@ -412,3 +412,24 @@ GetMapScreenCoords::
and 1 and 1
ld [wPlayerMetatileX], a ld [wPlayerMetatileX], a
ret 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

View File

@ -1807,7 +1807,7 @@ CheckAndApplyAnchorPoint::
; e = [wYCoord] ; e = [wYCoord]
; hl = [wCurMapAnchorEventsPointer] ; hl = [wCurMapAnchorEventsPointer]
; if currently at coords of any anchor point, copy its next space byte to wCurSpaceNextSpace. ; 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] ldh a, [hROMBank]
push af push af
call SwitchToMapScriptsBank call SwitchToMapScriptsBank