Save the conversion table to SRAM, load it when loading the game, and clear it on new game

Co-Authored-By: aaaaaa123456789 <aaaaaa123456789@acidch.at>
This commit is contained in:
aaaaaa123456789
2019-11-09 09:30:11 -03:00
committed by vulcandth
parent e860d11b37
commit dcb610e88d
3 changed files with 108 additions and 14 deletions
+10
View File
@@ -100,6 +100,16 @@ ResetWRAM:
ret
_ResetWRAM:
ld a, BANK(wPokemonIndexTable)
ldh [rSVBK], a
ld hl, wPokemonIndexTable
ld bc, wPokemonIndexTableEnd - wPokemonIndexTable
xor a
call ByteFill
ld a, 1
ldh [rSVBK], a
ld hl, wShadowOAM
ld bc, wOptions - wShadowOAM
xor a
+84 -12
View File
@@ -27,8 +27,10 @@ SaveAfterLinkTrade:
farcall StageRTCTimeForSave
farcall BackupMysteryGift
call SavePokemonData
call SaveIndexTables
call SaveChecksum
call SaveBackupPokemonData
call SaveBackupIndexTables
call SaveBackupChecksum
farcall BackupPartyMonMail
farcall SaveRTC
@@ -95,11 +97,13 @@ MoveMonWOMail_InsertMon_SaveGame:
call SaveOptions
call SavePlayerData
call SavePokemonData
call SaveIndexTables
call SaveChecksum
call ValidateBackupSave
call SaveBackupOptions
call SaveBackupPlayerData
call SaveBackupPokemonData
call SaveBackupIndexTables
call SaveBackupChecksum
farcall BackupPartyMonMail
farcall BackupGSBallFlag
@@ -244,12 +248,14 @@ SaveGameData:
call SaveOptions
call SavePlayerData
call SavePokemonData
call SaveIndexTables
call SaveBox
call SaveChecksum
call ValidateBackupSave
call SaveBackupOptions
call SaveBackupPlayerData
call SaveBackupPokemonData
call SaveBackupIndexTables
call SaveBackupChecksum
call UpdateStackTop
farcall BackupPartyMonMail
@@ -466,15 +472,32 @@ SavePokemonData:
call CloseSRAM
ret
SaveIndexTables:
ldh a, [rSVBK]
push af
ld a, BANK(wPokemonIndexTable)
ldh [rSVBK], a
; saving is already a long operation, so take the chance to GC the table
farcall PokemonTableGarbageCollection
ld a, BANK(sPokemonIndexTable)
call OpenSRAM
ld hl, wPokemonIndexTable
ld de, sPokemonIndexTable
ld bc, wPokemonIndexTableEnd - wPokemonIndexTable
call CopyBytes
pop af
ldh [rSVBK], a
jp CloseSRAM
SaveBox:
call GetBoxAddress
call SaveBoxAddress
ret
SaveChecksum:
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
ld a, BANK(sGameData)
ld hl, sSaveData
ld bc, sSaveDataEnd - sSaveData
ld a, BANK(sSaveData)
call OpenSRAM
call Checksum
ld a, e
@@ -528,10 +551,25 @@ SaveBackupPokemonData:
call CloseSRAM
ret
SaveBackupIndexTables:
ld a, BANK(sBackupPokemonIndexTable)
call OpenSRAM
ldh a, [rSVBK]
push af
ld a, BANK(wPokemonIndexTable)
ldh [rSVBK], a
ld hl, wPokemonIndexTable
ld de, sBackupPokemonIndexTable
ld bc, wPokemonIndexTableEnd - wPokemonIndexTable
call CopyBytes
pop af
ldh [rSVBK], a
jp CloseSRAM
SaveBackupChecksum:
ld hl, sBackupGameData
ld bc, sBackupGameDataEnd - sBackupGameData
ld a, BANK(sBackupGameData)
ld hl, sBackupSaveData
ld bc, sBackupSaveDataEnd - sBackupSaveData
ld a, BANK(sBackupSaveData)
call OpenSRAM
call Checksum
ld a, e
@@ -546,6 +584,7 @@ TryLoadSaveFile:
jr nz, .backup
call LoadPlayerData
call LoadPokemonData
call LoadIndexTables
call LoadBox
farcall RestorePartyMonMail
farcall RestoreGSBallFlag
@@ -554,6 +593,7 @@ TryLoadSaveFile:
call SaveBackupOptions
call SaveBackupPlayerData
call SaveBackupPokemonData
call SaveBackupIndexTables
call SaveBackupChecksum
and a
ret
@@ -563,6 +603,7 @@ TryLoadSaveFile:
jr nz, .corrupt
call LoadBackupPlayerData
call LoadBackupPokemonData
call LoadBackupIndexTables
call LoadBox
farcall RestorePartyMonMail
farcall RestoreGSBallFlag
@@ -571,6 +612,7 @@ TryLoadSaveFile:
call SaveOptions
call SavePlayerData
call SavePokemonData
call SaveIndexTables
call SaveChecksum
and a
ret
@@ -711,15 +753,30 @@ LoadPokemonData:
call CloseSRAM
ret
LoadIndexTables:
ld a, BANK(sPokemonIndexTable)
call OpenSRAM
ldh a, [rSVBK]
push af
ld a, BANK(wPokemonIndexTable)
ldh [rSVBK], a
ld hl, sPokemonIndexTable
ld de, wPokemonIndexTable
ld bc, wPokemonIndexTableEnd - wPokemonIndexTable
call CopyBytes
pop af
ldh [rSVBK], a
jp CloseSRAM
LoadBox:
call GetBoxAddress
call LoadBoxAddress
ret
VerifyChecksum:
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
ld a, BANK(sGameData)
ld hl, sSaveData
ld bc, sSaveDataEnd - sSaveData
ld a, BANK(sSaveData)
call OpenSRAM
call Checksum
ld a, [sChecksum + 0]
@@ -757,10 +814,25 @@ LoadBackupPokemonData:
call CloseSRAM
ret
LoadBackupIndexTables:
ld a, BANK(sBackupPokemonIndexTable)
call OpenSRAM
ldh a, [rSVBK]
push af
ld a, BANK(wPokemonIndexTable)
ldh [rSVBK], a
ld hl, sBackupPokemonIndexTable
ld de, wPokemonIndexTable
ld bc, wPokemonIndexTableEnd - wPokemonIndexTable
call CopyBytes
pop af
ldh [rSVBK], a
jp CloseSRAM
VerifyBackupChecksum:
ld hl, sBackupGameData
ld bc, sBackupGameDataEnd - sBackupGameData
ld a, BANK(sBackupGameData)
ld hl, sBackupSaveData
ld bc, sBackupSaveDataEnd - sBackupSaveData
ld a, BANK(sBackupSaveData)
call OpenSRAM
call Checksum
ld a, [sBackupChecksum + 0]
+14 -2
View File
@@ -67,13 +67,19 @@ sBackupOptions:: ds wOptionsEnd - wOptions
sBackupCheckValue1:: db ; loaded with SAVE_CHECK_VALUE_1, used to check save corruption
sBackupSaveData::
sBackupGameData::
sBackupPlayerData:: ds wPlayerDataEnd - wPlayerData
sBackupCurMapData:: ds wCurMapDataEnd - wCurMapData
sBackupPokemonData:: ds wPokemonDataEnd - wPokemonData
sBackupGameDataEnd::
ds $18a
sBackupPokemonIndexTable:: ds wPokemonIndexTableEnd - wPokemonIndexTable
sBackupSaveDataEnd::
ds $8a
sBackupChecksum:: dw
@@ -96,13 +102,19 @@ sOptions:: ds wOptionsEnd - wOptions
sCheckValue1:: db ; loaded with SAVE_CHECK_VALUE_1, used to check save corruption
sSaveData::
sGameData::
sPlayerData:: ds wPlayerDataEnd - wPlayerData
sCurMapData:: ds wCurMapDataEnd - wCurMapData
sPokemonData:: ds wPokemonDataEnd - wPokemonData
sGameDataEnd::
ds $18a
sPokemonIndexTable:: ds wPokemonIndexTableEnd - wPokemonIndexTable
sSaveDataEnd::
ds $8a
sChecksum:: dw