Implement View Map mode [commit 1] (#29)

This commit is contained in:
xCrystal
2023-10-31 20:25:56 +01:00
parent 85f9c258b5
commit 147c9f2add
12 changed files with 207 additions and 22 deletions

View File

@@ -331,9 +331,11 @@ CheckBoardEvent:
.Jumptable:
table_width 2, .Jumptable
dw .none
dw .menu ; BOARDEVENT_DISPLAY_MENU
dw .board ; BOARDEVENT_HANDLE_BOARD
dw .none ; BOARDEVENT_END_TURN
dw .menu ; BOARDEVENT_DISPLAY_MENU
dw .board ; BOARDEVENT_HANDLE_BOARD
dw .none ; BOARDEVENT_END_TURN
dw .mapview ; BOARDEVENT_VIEW_MAP_MODE
dw .menu ; BOARDEVENT_REDISPLAY_MENU
assert_table_length NUM_BOARD_EVENTS + 1
.none
@@ -369,6 +371,25 @@ CheckBoardEvent:
scf
ret
.mapview
; check if player pressed B and if so queue the script to exit View Map mode
ldh a, [hJoyDown]
and D_PAD
ret nz ; nc
ldh a, [hJoyPressed]
bit B_BUTTON_F, a
ret z ; nc
; B was pressed
ld a, BANK(.ExitMapViewModeScript)
ld hl, .ExitMapViewModeScript
call CallScript
scf
ret
.ExitMapViewModeScript:
reloadmapafterviewmapmode
end
.no_space_effect
; continue moving in board
xor a
@@ -389,6 +410,10 @@ CheckBoardEvent:
assert_table_length NUM_COLL_SPACES
CheckTrainerEvent:
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret z
call CheckTrainerBattle
jr nc, .nope
@@ -409,10 +434,18 @@ CheckTileEvent:
farcall CheckMovingOffEdgeOfMap
jr c, .map_connection
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret z
call CheckWarpTile
jr c, .warp_tile
.connections_disabled
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret z
call CheckCoordEventScriptFlag
jr z, .coord_events_disabled
@@ -488,6 +521,10 @@ SetMinTwoStepWildEncounterCooldown: ; unreferenced
ret
RunSceneScript:
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret z
ld a, [wCurMapSceneScriptCount]
and a
jr z, .nope
@@ -536,6 +573,10 @@ endr
ret
CheckTimeEvents:
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret z
ld a, [wLinkMode]
and a
jr nz, .nothing
@@ -572,10 +613,12 @@ OWPlayerInput:
and a
jr nz, .NoAction
; Can't perform button actions while in BOARDEVENT_HANDLE_BOARD
; Can't perform button actions while in BOARDEVENT_HANDLE_BOARD or BOARDEVENT_VIEW_MAP_MODE
ld a, [hCurBoardEvent]
cp BOARDEVENT_HANDLE_BOARD
jr z, .NoAction
cp BOARDEVENT_VIEW_MAP_MODE
jr z, .NoAction
; Can't perform button actions while sliding on ice.
farcall CheckStandingOnIce
@@ -1121,6 +1164,9 @@ WarpToSpawnPoint::
ret
RunMemScript::
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret z
; If there is no script here, we don't need to be here.
ld a, [wMapReentryScriptQueueFlag]
and a

View File

@@ -87,6 +87,11 @@ UpdatePlayerCoords:
jr nz, .check_step_down
ld hl, wYCoord
inc [hl]
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementY
inc [hl]
ret
.check_step_down
@@ -94,6 +99,11 @@ UpdatePlayerCoords:
jr nz, .check_step_left
ld hl, wYCoord
dec [hl]
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementY
dec [hl]
ret
.check_step_left
@@ -101,6 +111,11 @@ UpdatePlayerCoords:
jr nz, .check_step_right
ld hl, wXCoord
dec [hl]
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementX
dec [hl]
ret
.check_step_right
@@ -108,6 +123,11 @@ UpdatePlayerCoords:
ret nz
ld hl, wXCoord
inc [hl]
ld a, [hCurBoardEvent]
cp BOARDEVENT_VIEW_MAP_MODE
ret nz
ld hl, wViewMapModeDisplacementX
inc [hl]
ret
UpdateOverworldMap:

View File

@@ -235,6 +235,7 @@ ScriptCommandTable:
dw Script_wait ; a8
dw Script_checksave ; a9
dw Script_exitoverworld ; aa
dw Script_reloadmapafterviewmapmode ; db
assert_table_length NUM_EVENT_COMMANDS
StartScript:
@@ -1203,6 +1204,22 @@ Script_reloadmapafterbattle:
.done
jp Script_reloadmap
Script_reloadmapafterviewmapmode:
xor a
ld [wBattleScriptFlags], a
ld a, MAPSETUP_EXITVIEWMAP
ldh [hMapEntryMethod], a
ld a, SPAWN_FROM_RAM
ld [wDefaultSpawnpoint], a
ld a, BOARDEVENT_REDISPLAY_MENU
ldh [hCurBoardEvent], a
ld a, MAPSTATUS_ENTER
call LoadMapStatus
ld hl, wPlayerFlags
res INVISIBLE_F, [hl]
call StopScript
ret
Script_reloadmap:
xor a
ld [wBattleScriptFlags], a

View File

@@ -7,6 +7,8 @@ EnterMapSpawnPoint:
ld a, [wDefaultSpawnpoint]
cp SPAWN_N_A
jr z, .spawn_n_a
cp SPAWN_FROM_RAM
jr z, .spawn_from_ram
ld l, a
ld h, 0
add hl, hl
@@ -21,6 +23,20 @@ EnterMapSpawnPoint:
ld [wXCoord], a
ld a, [hli]
ld [wYCoord], a
pop de
pop hl
ret
.spawn_from_ram
; exiting from View Map mode
ld a, [wBeforeViewMapMapGroup]
ld [wMapGroup], a
ld a, [wBeforeViewMapMapNumber]
ld [wMapNumber], a
ld a, [wBeforeViewMapXCoord]
ld [wXCoord], a
ld a, [wBeforeViewMapYCoord]
ld [wYCoord], a
.spawn_n_a
pop de
pop hl