Implement the engine to backup map objects when chaning maps (#32)

This commit is contained in:
xCrystal
2023-12-15 19:10:47 +01:00
parent 2bca51eb09
commit d097191ab1
11 changed files with 249 additions and 14 deletions

View File

@@ -89,6 +89,7 @@ BoardMenuScript::
end
.EnterViewMapMode:
call BackupMapObjectsOnEnterViewMapMode
ld hl, wVramState
res 2, [hl]
ld a, BOARDEVENT_VIEW_MAP_MODE

View File

@@ -269,6 +269,7 @@ PromptPlayerToChooseBranchDirection:
jp PlayClickSFX
.EnterViewMapMode:
call BackupMapObjectsOnEnterViewMapMode
ld a, BOARDEVENT_VIEW_MAP_MODE
ldh [hCurBoardEvent], a
ld a, 100

View File

@@ -289,6 +289,7 @@ SaveGameData:
call SaveOptions
call SavePlayerData
call SavePokemonData
call SaveMapObjectsBackupsData
call SaveBox
call SaveChecksum
call ValidateBackupSave
@@ -446,6 +447,22 @@ SavePokemonData:
call CloseSRAM
ret
SaveMapObjectsBackupsData:
ldh a, [rSVBK]
push af
ld a, BANK(wMapObjectsBackups)
ldh [rSVBK], a
ld a, BANK(sMapObjectsBackups)
call OpenSRAM
ld hl, wMapObjectsBackups
ld de, sMapObjectsBackups
ld bc, wMapObjectsBackupsEnd - wMapObjectsBackups
call CopyBytes
call CloseSRAM
pop af
ldh [rSVBK], a
ret
SaveBox:
call GetBoxAddress
call SaveBoxAddress
@@ -526,6 +543,7 @@ TryLoadSaveFile:
jr nz, .backup
call LoadPlayerData
call LoadPokemonData
call LoadMapObjectsBackupsData
call LoadBox
farcall RestorePartyMonMail
call ValidateBackupSave
@@ -541,6 +559,7 @@ TryLoadSaveFile:
jr nz, .corrupt
call LoadBackupPlayerData
call LoadBackupPokemonData
call LoadMapObjectsBackupsData
call LoadBox
farcall RestorePartyMonMail
call ValidateSave
@@ -677,6 +696,22 @@ LoadPokemonData:
call CloseSRAM
ret
LoadMapObjectsBackupsData:
ldh a, [rSVBK]
push af
ld a, BANK(wMapObjectsBackups)
ldh [rSVBK], a
ld a, BANK(sMapObjectsBackups)
call OpenSRAM
ld hl, sMapObjectsBackups
ld de, wMapObjectsBackups
ld bc, wMapObjectsBackupsEnd - wMapObjectsBackups
call CopyBytes
call CloseSRAM
pop af
ldh [rSVBK], a
ret
LoadBox:
call GetBoxAddress
call LoadBoxAddress

View File

@@ -135,7 +135,7 @@ CheckTrainerAndTalkerEvents:
bit 5, [hl]
ret
; on enter overworld loop
; on enter overworld loop (MAPSETUP_ENTERLEVEL or MAPSETUP_CONTINUE)
StartMap:
xor a
ldh [hScriptVar], a
@@ -147,13 +147,39 @@ StartMap:
farcall InitCallReceiveDelay
call ClearJoypad
; initialize board state
ld a, [hMapEntryMethod]
cp MAPSETUP_ENTERLEVEL
jr nz, .not_starting_level
; initialize board state
xor a
ld [wCurTurn], a
ld [wCurSpace], a
; initialize overworld state
ld hl, wNextWarp
xor a
ld [hli], a ; wNextWarp
ld [hli], a ; wNextMapGroup
ld [hli], a ; wNextMapNumber
ld [hli], a ; wPrevWarp
ld [hli], a ; wPrevMapGroup
ld [hl], a ; wPrevMapNumber
ld a, BANK(wMapObjectsBackups)
ld [rSVBK], a
ld e, NUM_MAP_OBJECTS_BACKUPS
ld hl, wMapObjectsBackups
ld bc, wMap2ObjectsBackup - wMap1ObjectsBackup
.loop
ld a, GROUP_N_A
ld [hl], a
add hl, bc
dec e
jr nz, .loop
ld [hl], $00 ; list terminator
ld a, 1
ld [rSVBK], a
.not_starting_level
ld a, BOARDEVENT_DISPLAY_MENU
ldh [hCurBoardEvent], a

View File

@@ -144,6 +144,7 @@ EnterMapConnection:
ld [wOverworldMapAnchor], a
ld a, h
ld [wOverworldMapAnchor + 1], a
.done
scf
ret