You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-04-09 05:44:44 -07:00
Implement View Map mode [commit 1] (#29)
This commit is contained in:
@@ -8,10 +8,15 @@ BoardMenuScript::
|
||||
ifequal BOARDMENUITEM_PACK, .Pack
|
||||
ifequal BOARDMENUITEM_POKEGEAR, .Pokegear
|
||||
ifequal BOARDMENUITEM_EXIT, .Exit
|
||||
ifequal BOARDMENUITEM_VIEWMAP, .ViewMap
|
||||
closetext
|
||||
end
|
||||
|
||||
.Upkeep:
|
||||
; skip upkeep if we are re-entering after returning from View Map mode
|
||||
ld a, [hCurBoardEvent]
|
||||
cp BOARDEVENT_REDISPLAY_MENU
|
||||
ret z
|
||||
; save after opentext to reanchor map first
|
||||
; save before processing variables like wCurTurn due to BoardMenuScript reentry after game reset
|
||||
farcall AutoSaveGameInOverworld
|
||||
@@ -68,6 +73,34 @@ BoardMenuScript::
|
||||
text ""
|
||||
done
|
||||
|
||||
.ViewMap:
|
||||
callasm .EnterViewMapMode
|
||||
closetext
|
||||
end
|
||||
|
||||
.EnterViewMapMode:
|
||||
ld hl, wVramState
|
||||
res 2, [hl]
|
||||
ld a, BOARDEVENT_VIEW_MAP_MODE
|
||||
ldh [hCurBoardEvent], a
|
||||
ld a, TRUE
|
||||
ld [wViewMapModeRange], a
|
||||
ld a, [wMapGroup]
|
||||
ld [wBeforeViewMapMapGroup], a
|
||||
ld a, [wMapNumber]
|
||||
ld [wBeforeViewMapMapNumber], a
|
||||
ld a, [wXCoord]
|
||||
ld [wBeforeViewMapXCoord], a
|
||||
ld a, [wYCoord]
|
||||
ld [wBeforeViewMapYCoord], a
|
||||
xor a
|
||||
ld [wViewMapModeDisplacementY], a
|
||||
ld [wViewMapModeDisplacementX], a
|
||||
call DisableOverworldHUD
|
||||
ld hl, wPlayerFlags
|
||||
set INVISIBLE_F, [hl]
|
||||
ret
|
||||
|
||||
.SubmenuCallback:
|
||||
; if submenu has requested a callback through wMenuReturn,
|
||||
; it has also taken care of queuing it into wQueuedScriptBank/wQueuedScriptAddr.
|
||||
@@ -163,6 +196,8 @@ GetBoardMenuSelection:
|
||||
call GetMenuJoypad
|
||||
bit A_BUTTON_F, a
|
||||
jr nz, .a_button
|
||||
bit SELECT_F, a
|
||||
jr nz, .select_button
|
||||
bit D_RIGHT_F, a
|
||||
jr nz, .d_right
|
||||
bit D_LEFT_F, a
|
||||
@@ -176,6 +211,14 @@ GetBoardMenuSelection:
|
||||
scf
|
||||
ret
|
||||
|
||||
.select_button
|
||||
ld a, BOARDMENUITEM_VIEWMAP
|
||||
ld [wBoardMenuCursorPosition], a
|
||||
call PlayClickSFX
|
||||
call WaitSFX
|
||||
scf
|
||||
ret
|
||||
|
||||
.d_right
|
||||
call PlayClickSFX
|
||||
ld a, [wBoardMenuCursorPosition]
|
||||
|
@@ -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
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user