mirror of
https://github.com/pret/poketcg2.git
synced 2026-04-25 07:29:27 -05:00
Identify save data structure
TODO: label save functions
This commit is contained in:
parent
b49d2e2b06
commit
6907dcbc08
76
src/data/save.asm
Normal file
76
src/data/save.asm
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
MACRO wram_sram_map
|
||||
dw \1 ; WRAM address
|
||||
dw \2 ; number of bytes
|
||||
db \3 ; min allowed value
|
||||
db \4 ; max allowed value
|
||||
ENDM
|
||||
|
||||
; maps WRAM addresses to SRAM addresses in order
|
||||
; to save and subsequently retrieve them on game load
|
||||
; in tcg1, it used to check if the values saved in SRAM
|
||||
; were valid within the given range,
|
||||
; but the valid range is now $00–$ff (anything) for all values
|
||||
|
||||
; 441 bytes
|
||||
WRAMToSRAMMapper_GeneralSave::
|
||||
wram_sram_map wPlayTimeCounter + 0, 1, $00, $ff
|
||||
wram_sram_map wPlayTimeCounter + 1, 1, $00, $ff
|
||||
wram_sram_map wPlayTimeCounter + 2, 1, $00, $ff
|
||||
wram_sram_map wPlayTimeCounter + 3, 2, $00, $ff
|
||||
wram_sram_map wCurMusic, 1, $00, $ff
|
||||
wram_sram_map wNextGameEvent, 1, $00, $ff
|
||||
wram_sram_map wNextWarpMap, 1, $00, $ff
|
||||
wram_sram_map wd54e, 2, $00, $ff
|
||||
wram_sram_map wPlayerOWObject, 1, $00, $ff
|
||||
wram_sram_map wCurMapScriptsBank, 1, $00, $ff
|
||||
wram_sram_map wCurMapScriptsPointer, 2, $00, $ff
|
||||
wram_sram_map wOverworldMode, 1, $00, $ff
|
||||
wram_sram_map wOverworldTransition, 1, $00, $ff
|
||||
wram_sram_map wPrevMap, 1, $00, $ff
|
||||
wram_sram_map wTempPrevMap, 1, $00, $ff
|
||||
wram_sram_map wCurMap, 1, $00, $ff
|
||||
wram_sram_map wCurOWLocation, 1, $00, $ff
|
||||
wram_sram_map wCurIsland, 1, $00, $ff
|
||||
wram_sram_map wPlayerOWLocation, 1, $00, $ff
|
||||
wram_sram_map wNextMapHeaderData, MAPHEADERSTRUCT_LENGTH, $00, $ff
|
||||
wram_sram_map wNextWarpPlayerData, 3, $00, $ff
|
||||
wram_sram_map wScriptNPC, 1, $00, $ff
|
||||
wram_sram_map wScriptNPCName, 2, $00, $ff
|
||||
wram_sram_map wSentMailBitfield, 4, $00, $ff
|
||||
wram_sram_map wTempCardDungeonBet, 1, $00, $ff
|
||||
wram_sram_map wEventVars, EVENT_VAR_BYTES - 2, $00, $ff
|
||||
wram_sram_map wGeneralVars, GENERAL_VAR_BYTES - 2, $00, $ff
|
||||
wram_sram_map wOWData, 177, $00, $ff
|
||||
wram_sram_map wd98b, 5 * MAX_NUM_OW_OBJECTS, $00, $ff
|
||||
wram_sram_map wScrollTargetObject, 1, $00, $ff
|
||||
wram_sram_map wSelectedCoin, 1, $00, $ff
|
||||
wram_sram_map wCoinPage, 1, $00, $ff
|
||||
wram_sram_map wPauseMenuCursorPosition, 1, $00, $ff
|
||||
wram_sram_map wMinicomMenuCursorPosition, 1, $00, $ff
|
||||
wram_sram_map wdc06, 1, $00, $ff
|
||||
wram_sram_map wNumMailInQueue, 1, $00, $ff
|
||||
wram_sram_map wMailQueue, MAIL_QUEUE_BUFFER_SIZE, $00, $ff
|
||||
wram_sram_map wMailCount, 1, $00, $ff
|
||||
wram_sram_map wMailList, MAIL_BUFFER_SIZE, $00, $ff
|
||||
wram_sram_map wNewMail, 1, $00, $ff
|
||||
wram_sram_map wTempNumMailInQueue, 1, $00, $ff
|
||||
wram_sram_map wMailboxPage, 1, $00, $ff
|
||||
wram_sram_map wSelectedMailCursorPosition, 1, $00, $ff
|
||||
wram_sram_map wMailOptionSelected, 1, $00, $ff
|
||||
wram_sram_map wBlackBoxCardReceived, BLACK_BOX_OUTPUT_BYTES, $00, $ff
|
||||
wram_sram_map wBillsPCCardReceived, 2, $00, $ff
|
||||
wram_sram_map wPCMenuCursorPosition, 1, $00, $ff
|
||||
wram_sram_map wGameCenterChips, 2, $00, $ff
|
||||
wram_sram_map wGameCenterBankedChips, 2, $00, $ff
|
||||
wram_sram_map wdb1f, 1, $00, $ff
|
||||
wram_sram_map wOWObj1Flags, 1, $00, $ff
|
||||
dw NULL
|
||||
|
||||
; 64 bytes
|
||||
WRAMToSRAMMapper_ChallengeMachineSave::
|
||||
wram_sram_map wddf9, 20, $00, $ff
|
||||
wram_sram_map wde0d, 4, $00, $ff
|
||||
wram_sram_map wde11, 4, $00, $ff
|
||||
wram_sram_map wde15, 4, $00, $ff
|
||||
wram_sram_map wde19, 32, $00, $ff
|
||||
dw NULL
|
||||
|
|
@ -337,8 +337,8 @@ Func_c24d:
|
|||
xor a
|
||||
ld [wNextGameEvent], a
|
||||
ld [wNextWarpMap], a
|
||||
ld [wd54e], a
|
||||
ld [wd54f], a
|
||||
ld [wd54e + 0], a
|
||||
ld [wd54e + 1], a
|
||||
ld [wCurMapScriptsBank], a
|
||||
ld [wCurMapScriptsPointer + 0], a
|
||||
ld [wCurMapScriptsPointer + 1], a
|
||||
|
|
@ -4486,764 +4486,8 @@ ScriptCommand_WaitInput:
|
|||
call WaitForWideTextBoxInput
|
||||
jp IncreaseScriptPointerBy1
|
||||
|
||||
; returns carry if no save data
|
||||
Func_e883:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
call EnableSRAM
|
||||
ld a, [$baa3]
|
||||
ld b, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
bit 0, a
|
||||
jr z, .set_carry
|
||||
; no carry
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.set_carry
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e8a3:
|
||||
call EnableSRAM
|
||||
ld a, [$baa3]
|
||||
ld b, a
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
bit 1, a
|
||||
jr z, .asm_e8b5
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_e8b5
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e8b7:
|
||||
ld a, BANK("SRAM2")
|
||||
ld [wd668], a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld a, [$b800]
|
||||
ld b, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp $16
|
||||
jr nz, .asm_e918
|
||||
ld a, LOW($6dec)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6dec)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($b801)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($b801)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed7c
|
||||
ld a, [wd66d]
|
||||
ld d, a
|
||||
ld a, [wd66c]
|
||||
ld e, a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld a, [$baa0]
|
||||
ld b, a
|
||||
ld a, [$baa1]
|
||||
ld c, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .asm_e918
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .asm_e918
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_e918
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e91a:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
xor a ; BANK("SRAM0")
|
||||
call BankswitchSRAM
|
||||
ld a, [$b800]
|
||||
ld b, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp $16
|
||||
jr nz, .asm_e978
|
||||
ld a, LOW($6dec)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6dec)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($b801)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($b801)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed7c
|
||||
ld a, [wd66d]
|
||||
ld d, a
|
||||
ld a, [wd66c]
|
||||
ld e, a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
xor a
|
||||
call BankswitchSRAM
|
||||
ld a, [$baa0]
|
||||
ld b, a
|
||||
ld a, [$baa1]
|
||||
ld c, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .asm_e978
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .asm_e978
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_e978
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e97a:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld hl, $baa3
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [$b800], a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
call EnableSRAM
|
||||
ld hl, $baa3
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [$b800], a
|
||||
call DisableSRAM
|
||||
farcall ClearSavedDuel
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_e9a7:
|
||||
call EnableSRAM
|
||||
ld hl, $baa3
|
||||
xor a
|
||||
ld [hl], a
|
||||
call DisableSRAM
|
||||
farcall ClearSavedDuel
|
||||
ret
|
||||
|
||||
Func_e9b7:
|
||||
ld a, 2
|
||||
call BulkCopySRAM
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld a, $16
|
||||
ld [$b800], a
|
||||
ld hl, $baa3
|
||||
set 0, [hl]
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
; sram copy
|
||||
; a = 0: sCardAndDeckSaveData onwards, from SRAM2 to SRAM0
|
||||
; a = 1: sCardAndDeckSaveData onwards, from SRAM0 to SRAM2
|
||||
; a = 2: all, from SRAM0 to SRAM2
|
||||
BulkCopySRAM:
|
||||
cp 1
|
||||
jr z, .from_sram0_to_sram2
|
||||
jr nc, .all_from_sram0_to_sram2
|
||||
; from sram2 to sram0
|
||||
ld e, BANK("SRAM2")
|
||||
ld d, BANK("SRAM0")
|
||||
jr .card_deck_onwards
|
||||
.from_sram0_to_sram2
|
||||
ld e, BANK("SRAM0")
|
||||
ld d, BANK("SRAM2")
|
||||
jr .card_deck_onwards
|
||||
.all_from_sram0_to_sram2
|
||||
ld e, BANK("SRAM0")
|
||||
ld d, BANK("SRAM2")
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld bc, SIZEOF(SRAM)
|
||||
ld hl, STARTOF(SRAM)
|
||||
jr .loop_copy
|
||||
.card_deck_onwards
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld bc, SIZEOF(SRAM) - (sCardAndDeckSaveData - STARTOF(SRAM))
|
||||
ld hl, sCardAndDeckSaveData
|
||||
.loop_copy
|
||||
ld a, e
|
||||
call BankswitchSRAM
|
||||
ld a, [hl]
|
||||
push af
|
||||
ld a, d
|
||||
call BankswitchSRAM
|
||||
pop af
|
||||
ld [hli], a
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .loop_copy
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ea19:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wd668]
|
||||
call BankswitchSRAM
|
||||
ld a, [$baa2]
|
||||
ld [wd673], a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ea30::
|
||||
ld a, OWMODE_SAVE_PRELOAD
|
||||
call ExecuteOWModeScript
|
||||
farcall Func_10f32
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
.asm_ea3d
|
||||
ld a, LOW($6dec)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6dec)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($b801)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($b801)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ec94
|
||||
call EnableSRAM
|
||||
ld a, $16
|
||||
ld [$b800], a
|
||||
ld a, [wd66d]
|
||||
ld [$baa0], a
|
||||
ld a, [wd66c]
|
||||
ld [$baa1], a
|
||||
ld a, [wd673]
|
||||
ld [$baa2], a
|
||||
ld hl, $baa3
|
||||
set 0, [hl]
|
||||
call DisableSRAM
|
||||
call Func_ea19
|
||||
call Func_ed7c
|
||||
ld a, [wd66d]
|
||||
ld d, a
|
||||
ld a, [wd66c]
|
||||
ld e, a
|
||||
call EnableSRAM
|
||||
ld a, [$baa0]
|
||||
ld b, a
|
||||
ld a, [$baa1]
|
||||
ld c, a
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .error
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .error
|
||||
ld a, 1
|
||||
call BulkCopySRAM
|
||||
ld a, OWMODE_SAVE_POSTLOAD
|
||||
call ExecuteOWModeScript
|
||||
ret
|
||||
|
||||
.error
|
||||
debug_nop
|
||||
jr .asm_ea3d
|
||||
|
||||
Func_eaa8:
|
||||
farcall Func_10f32
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
ld a, LOW($6dec)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6dec)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($b801)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($b801)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ec94
|
||||
call EnableSRAM
|
||||
ld a, $16
|
||||
ld [$b800], a
|
||||
ld a, [wd66d]
|
||||
ld [$baa0], a
|
||||
ld a, [wd66c]
|
||||
ld [$baa1], a
|
||||
ld a, [wd673]
|
||||
ld [$baa2], a
|
||||
ld hl, $baa3
|
||||
set 1, [hl]
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_eaea:
|
||||
call Func_eaf6
|
||||
xor a
|
||||
call BulkCopySRAM
|
||||
farcall Func_10f78
|
||||
ret
|
||||
|
||||
Func_eaf6:
|
||||
ld a, BANK("SRAM2")
|
||||
ld [wd668], a
|
||||
ld a, LOW($6dec)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6dec)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($b801)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($b801)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed0b
|
||||
ret
|
||||
|
||||
Func_eb16:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
ld a, LOW($6dec)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6dec)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($b801)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($b801)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed0b
|
||||
farcall Func_10f78
|
||||
ret
|
||||
|
||||
Func_eb39:
|
||||
ld hl, wddf9
|
||||
xor a
|
||||
ld c, $14
|
||||
.loop_init
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .loop_init
|
||||
|
||||
; init verbosely from wde0d to wde17
|
||||
ld hl, wde0d
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
ld hl, wde11
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
ld hl, wde15
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
|
||||
ld a, $01
|
||||
ld [wde15], a
|
||||
ld a, $05
|
||||
ld [wde17], a
|
||||
ld hl, .data
|
||||
ld de, wde19
|
||||
ld c, $20
|
||||
.loop_copy
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .loop_copy
|
||||
call Func_ec38
|
||||
ret
|
||||
|
||||
.data
|
||||
db $04, $13, $79, $15, $0f, $6b, $0f, $34, $0f, $2f, $0f, $00, $00, $00, $00, $00, $4e, $0f, $39, $0f, $38, $0f, $5f, $0f, $21, $0f, $00, $00, $00, $00, $00, $00
|
||||
|
||||
SECTION "Bank 3@6b97", ROMX[$6b97], BANK[$3]
|
||||
|
||||
Func_eb97:
|
||||
call Func_ebc6
|
||||
jr nc, .asm_eb9f
|
||||
call Func_eb39
|
||||
.asm_eb9f
|
||||
call Func_ec6c
|
||||
; init verbosely from wde0d to wde13
|
||||
ld hl, wde0d
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
ld hl, wde11
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
call Func_ec38
|
||||
ret
|
||||
|
||||
Func_ebb6:
|
||||
call EnableSRAM
|
||||
xor a
|
||||
ld [$bae5], a
|
||||
ld a, $ff
|
||||
ld [$bae4], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ebc6:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
ld a, LOW($6f20)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6f20)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($baa4)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($baa4)
|
||||
ld [wd671 + 1], a
|
||||
call EnableSRAM
|
||||
ld a, [$bae6]
|
||||
ld [wd673], a
|
||||
call DisableSRAM
|
||||
call Func_ed0b
|
||||
ld a, [wd66d]
|
||||
ld d, a
|
||||
ld a, [wd66c]
|
||||
ld e, a
|
||||
call EnableSRAM
|
||||
ld a, [$bae4]
|
||||
ld b, a
|
||||
ld a, [$bae5]
|
||||
ld c, a
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .asm_ec36
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .asm_ec36
|
||||
ld a, [wde15 + 0]
|
||||
ld e, a
|
||||
ld a, [wde15 + 1]
|
||||
ld d, a
|
||||
cp16_long 0
|
||||
jr z, .asm_ec36
|
||||
ld a, [wde17 + 0]
|
||||
ld e, a
|
||||
ld a, [wde17 + 1]
|
||||
ld d, a
|
||||
cp16_long 0
|
||||
jr z, .asm_ec36
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_ec36
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_ec38:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
ld a, LOW($6f20)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6f20)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($baa4)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($baa4)
|
||||
ld [wd671 + 1], a
|
||||
call Func_ec94
|
||||
call EnableSRAM
|
||||
ld a, [wd66d]
|
||||
ld [$bae4], a
|
||||
ld a, [wd66c]
|
||||
ld [$bae5], a
|
||||
ld a, [wd673]
|
||||
ld [$bae6], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ec6c:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wd668], a
|
||||
ld a, LOW($6f20)
|
||||
ld [wd66f], a
|
||||
ld a, HIGH($6f20)
|
||||
ld [wd66f + 1], a
|
||||
ld a, LOW($baa4)
|
||||
ld [wd671], a
|
||||
ld a, HIGH($baa4)
|
||||
ld [wd671 + 1], a
|
||||
call EnableSRAM
|
||||
ld a, [$bae6]
|
||||
ld [wd673], a
|
||||
call DisableSRAM
|
||||
call Func_ed0b
|
||||
ret
|
||||
|
||||
Func_ec94:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wd668]
|
||||
call BankswitchSRAM
|
||||
xor a
|
||||
ld [wd66c], a
|
||||
ld [wd66d], a
|
||||
call UpdateRNGSources
|
||||
or $01
|
||||
ld [wd673], a
|
||||
ld [wd66e], a
|
||||
ld a, [wd66f]
|
||||
ld l, a
|
||||
ld a, [wd66f + 1]
|
||||
ld h, a
|
||||
ld a, [wd671]
|
||||
ld e, a
|
||||
ld a, [wd671 + 1]
|
||||
ld d, a
|
||||
.asm_ecbf
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
or c
|
||||
jr z, .asm_ed03
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [wd66a], a
|
||||
ld a, [hli]
|
||||
ld [wd66b], a
|
||||
pop hl
|
||||
.asm_ecd5
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [wd66d]
|
||||
xor c
|
||||
ld [wd66d], a
|
||||
ld a, [wd66c]
|
||||
add c
|
||||
ld [wd66c], a
|
||||
ld a, [wd66e]
|
||||
ld b, a
|
||||
sla a
|
||||
add b
|
||||
ld b, a
|
||||
ld a, c
|
||||
add b
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, b
|
||||
ld [wd66e], a
|
||||
pop bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_ecd5
|
||||
pop hl
|
||||
REPT 4
|
||||
inc hl
|
||||
ENDR
|
||||
jr .asm_ecbf
|
||||
.asm_ed03
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ed0b:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wd668]
|
||||
call BankswitchSRAM
|
||||
xor a
|
||||
ld [wd66c], a
|
||||
ld [wd66d], a
|
||||
ld a, [wd673]
|
||||
ld [wd66e], a
|
||||
ld a, [wd66f]
|
||||
ld l, a
|
||||
ld a, [wd66f + 1]
|
||||
ld h, a
|
||||
ld a, [wd671]
|
||||
ld e, a
|
||||
ld a, [wd671 + 1]
|
||||
ld d, a
|
||||
.asm_ed31
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
or c
|
||||
jr z, .asm_ed74
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [wd66a], a
|
||||
ld a, [hli]
|
||||
ld [wd66b], a
|
||||
pop hl
|
||||
.asm_ed47
|
||||
push bc
|
||||
ld a, [wd66e]
|
||||
ld b, a
|
||||
sla a
|
||||
add b
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
sub b
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld c, a
|
||||
ld a, b
|
||||
ld [wd66e], a
|
||||
ld a, [wd66d]
|
||||
xor c
|
||||
ld [wd66d], a
|
||||
ld a, [wd66c]
|
||||
add c
|
||||
ld [wd66c], a
|
||||
pop bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_ed47
|
||||
pop hl
|
||||
REPT 4
|
||||
inc hl
|
||||
ENDR
|
||||
jr .asm_ed31
|
||||
.asm_ed74
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ed7c:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wd668]
|
||||
call BankswitchSRAM
|
||||
xor a
|
||||
ld [wd66c], a
|
||||
ld [wd66d], a
|
||||
ld a, [wd673]
|
||||
ld [wd66e], a
|
||||
ld a, [wd66f]
|
||||
ld l, a
|
||||
ld a, [wd66f + 1]
|
||||
ld h, a
|
||||
ld a, [wd671]
|
||||
ld e, a
|
||||
ld a, [wd671 + 1]
|
||||
ld d, a
|
||||
.asm_eda2
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
or c
|
||||
jr z, .asm_ede4
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [wd66a], a
|
||||
ld a, [hli]
|
||||
ld [wd66b], a
|
||||
pop hl
|
||||
.asm_edb8
|
||||
push bc
|
||||
ld a, [wd66e]
|
||||
ld b, a
|
||||
sla a
|
||||
add b
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
sub b
|
||||
inc de
|
||||
ld c, a
|
||||
ld a, b
|
||||
ld [wd66e], a
|
||||
ld a, [wd66d]
|
||||
xor c
|
||||
ld [wd66d], a
|
||||
ld a, [wd66c]
|
||||
add c
|
||||
ld [wd66c], a
|
||||
pop bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_edb8
|
||||
pop hl
|
||||
REPT 4
|
||||
inc hl
|
||||
ENDR
|
||||
jr .asm_eda2
|
||||
.asm_ede4
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
; 0xedec
|
||||
|
||||
SECTION "Bank 3@6f40", ROMX[$6f40], BANK[$3]
|
||||
INCLUDE "engine/save.asm"
|
||||
INCLUDE "data/save.asm"
|
||||
|
||||
Func_ef40:
|
||||
or a
|
||||
|
|
|
|||
753
src/engine/save.asm
Normal file
753
src/engine/save.asm
Normal file
|
|
@ -0,0 +1,753 @@
|
|||
; returns carry if no save data
|
||||
Func_e883:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
call EnableSRAM
|
||||
ld a, [sBackup_baa3]
|
||||
ld b, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
bit 0, a
|
||||
jr z, .set_carry
|
||||
; no carry
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.set_carry
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e8a3:
|
||||
call EnableSRAM
|
||||
ld a, [s0baa3]
|
||||
ld b, a
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
bit 1, a
|
||||
jr z, .asm_e8b5
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_e8b5
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e8b7:
|
||||
ld a, BANK("SRAM2")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld a, [sBackupGeneralSaveDataHeader]
|
||||
ld b, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp $16
|
||||
jr nz, .asm_e918
|
||||
ld a, LOW(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sBackupGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sBackupGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed7c
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld d, a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld e, a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld a, [sBackup_baa0]
|
||||
ld b, a
|
||||
ld a, [sBackup_baa1]
|
||||
ld c, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .asm_e918
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .asm_e918
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_e918
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e91a:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
xor a ; BANK("SRAM0")
|
||||
call BankswitchSRAM
|
||||
ld a, [sGeneralSaveDataHeader]
|
||||
ld b, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp $16
|
||||
jr nz, .asm_e978
|
||||
ld a, LOW(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed7c
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld d, a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld e, a
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
xor a
|
||||
call BankswitchSRAM
|
||||
ld a, [s0baa0]
|
||||
ld b, a
|
||||
ld a, [s0baa1]
|
||||
ld c, a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .asm_e978
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .asm_e978
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_e978
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_e97a:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld hl, sBackup_baa3
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [sBackupGeneralSaveDataHeader], a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
call EnableSRAM
|
||||
ld hl, s0baa3
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [sGeneralSaveDataHeader], a
|
||||
call DisableSRAM
|
||||
farcall ClearSavedDuel
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_e9a7:
|
||||
call EnableSRAM
|
||||
ld hl, s0baa3
|
||||
xor a
|
||||
ld [hl], a
|
||||
call DisableSRAM
|
||||
farcall ClearSavedDuel
|
||||
ret
|
||||
|
||||
Func_e9b7:
|
||||
ld a, 2
|
||||
call BulkCopySRAM
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, BANK("SRAM2")
|
||||
call BankswitchSRAM
|
||||
ld a, $16
|
||||
ld [sBackupGeneralSaveDataHeader], a
|
||||
ld hl, sBackup_baa3
|
||||
set 0, [hl]
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
; sram copy
|
||||
; a = 0: sCardAndDeckSaveData onwards, from SRAM2 to SRAM0
|
||||
; a = 1: sCardAndDeckSaveData onwards, from SRAM0 to SRAM2
|
||||
; a = 2: all, from SRAM0 to SRAM2
|
||||
BulkCopySRAM:
|
||||
cp 1
|
||||
jr z, .from_sram0_to_sram2
|
||||
jr nc, .all_from_sram0_to_sram2
|
||||
; from sram2 to sram0
|
||||
ld e, BANK("SRAM2")
|
||||
ld d, BANK("SRAM0")
|
||||
jr .card_deck_onwards
|
||||
.from_sram0_to_sram2
|
||||
ld e, BANK("SRAM0")
|
||||
ld d, BANK("SRAM2")
|
||||
jr .card_deck_onwards
|
||||
.all_from_sram0_to_sram2
|
||||
ld e, BANK("SRAM0")
|
||||
ld d, BANK("SRAM2")
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld bc, SIZEOF(SRAM)
|
||||
ld hl, STARTOF(SRAM)
|
||||
jr .loop_copy
|
||||
.card_deck_onwards
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld bc, SIZEOF(SRAM) - (sCardAndDeckSaveData - STARTOF(SRAM))
|
||||
ld hl, sCardAndDeckSaveData
|
||||
.loop_copy
|
||||
ld a, e
|
||||
call BankswitchSRAM
|
||||
ld a, [hl]
|
||||
push af
|
||||
ld a, d
|
||||
call BankswitchSRAM
|
||||
pop af
|
||||
ld [hli], a
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .loop_copy
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ea19:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wSaveDataSRAMBank]
|
||||
call BankswitchSRAM
|
||||
ld a, [s0baa2]
|
||||
ld [wd673], a
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ea30::
|
||||
ld a, OWMODE_SAVE_PRELOAD
|
||||
call ExecuteOWModeScript
|
||||
farcall Func_10f32
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
.asm_ea3d
|
||||
ld a, LOW(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ec94
|
||||
call EnableSRAM
|
||||
ld a, $16
|
||||
ld [sGeneralSaveDataHeader], a
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld [s0baa0], a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld [s0baa1], a
|
||||
ld a, [wd673]
|
||||
ld [s0baa2], a
|
||||
ld hl, s0baa3
|
||||
set 0, [hl]
|
||||
call DisableSRAM
|
||||
call Func_ea19
|
||||
call Func_ed7c
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld d, a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld e, a
|
||||
call EnableSRAM
|
||||
ld a, [s0baa0]
|
||||
ld b, a
|
||||
ld a, [s0baa1]
|
||||
ld c, a
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .error
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .error
|
||||
ld a, 1
|
||||
call BulkCopySRAM
|
||||
ld a, OWMODE_SAVE_POSTLOAD
|
||||
call ExecuteOWModeScript
|
||||
ret
|
||||
|
||||
.error
|
||||
debug_nop
|
||||
jr .asm_ea3d
|
||||
|
||||
Func_eaa8:
|
||||
farcall Func_10f32
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ld a, LOW(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ec94
|
||||
call EnableSRAM
|
||||
ld a, $16
|
||||
ld [sGeneralSaveDataHeader], a
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld [s0baa0], a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld [s0baa1], a
|
||||
ld a, [wd673]
|
||||
ld [s0baa2], a
|
||||
ld hl, s0baa3
|
||||
set 1, [hl]
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_eaea:
|
||||
call Func_eaf6
|
||||
xor a
|
||||
call BulkCopySRAM
|
||||
farcall Func_10f78
|
||||
ret
|
||||
|
||||
Func_eaf6:
|
||||
ld a, BANK("SRAM2")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ld a, LOW(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sBackupGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sBackupGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed0b
|
||||
ret
|
||||
|
||||
Func_eb16:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ld a, LOW(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_GeneralSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sGeneralSaveDataMain)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ea19
|
||||
call Func_ed0b
|
||||
farcall Func_10f78
|
||||
ret
|
||||
|
||||
Func_eb39:
|
||||
ld hl, wddf9
|
||||
xor a
|
||||
ld c, $14
|
||||
.loop_init
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .loop_init
|
||||
|
||||
; init verbosely from wde0d to wde17
|
||||
ld hl, wde0d
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
ld hl, wde11
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
ld hl, wde15
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
|
||||
ld a, $01
|
||||
ld [wde15], a
|
||||
ld a, $05
|
||||
ld [wde17], a
|
||||
ld hl, .data
|
||||
ld de, wde19
|
||||
ld c, $20
|
||||
.loop_copy
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .loop_copy
|
||||
call Func_ec38
|
||||
ret
|
||||
|
||||
.data
|
||||
db $04, $13, $79, $15, $0f, $6b, $0f, $34, $0f, $2f, $0f, $00, $00, $00, $00, $00, $4e, $0f, $39, $0f, $38, $0f, $5f, $0f, $21, $0f, $00, $00, $00, $00, $00, $00
|
||||
|
||||
Func_eb97:
|
||||
call Func_ebc6
|
||||
jr nc, .asm_eb9f
|
||||
call Func_eb39
|
||||
.asm_eb9f
|
||||
call Func_ec6c
|
||||
; init verbosely from wde0d to wde13
|
||||
ld hl, wde0d
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
ld hl, wde11
|
||||
xor a
|
||||
REPT 4
|
||||
ld [hli], a
|
||||
ENDR
|
||||
call Func_ec38
|
||||
ret
|
||||
|
||||
Func_ebb6:
|
||||
call EnableSRAM
|
||||
xor a
|
||||
ld [s0bae5], a
|
||||
ld a, $ff
|
||||
ld [s0bae4], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ebc6:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ld a, LOW(WRAMToSRAMMapper_ChallengeMachineSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_ChallengeMachineSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sChallengeMachineSaveData)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sChallengeMachineSaveData)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call EnableSRAM
|
||||
ld a, [s0bae6]
|
||||
ld [wd673], a
|
||||
call DisableSRAM
|
||||
call Func_ed0b
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld d, a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld e, a
|
||||
call EnableSRAM
|
||||
ld a, [s0bae4]
|
||||
ld b, a
|
||||
ld a, [s0bae5]
|
||||
ld c, a
|
||||
call DisableSRAM
|
||||
ld a, b
|
||||
cp d
|
||||
jr nz, .asm_ec36
|
||||
ld a, c
|
||||
cp e
|
||||
jr nz, .asm_ec36
|
||||
ld a, [wde15 + 0]
|
||||
ld e, a
|
||||
ld a, [wde15 + 1]
|
||||
ld d, a
|
||||
cp16_long 0
|
||||
jr z, .asm_ec36
|
||||
ld a, [wde17 + 0]
|
||||
ld e, a
|
||||
ld a, [wde17 + 1]
|
||||
ld d, a
|
||||
cp16_long 0
|
||||
jr z, .asm_ec36
|
||||
scf
|
||||
ccf
|
||||
ret
|
||||
.asm_ec36
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_ec38:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ld a, LOW(WRAMToSRAMMapper_ChallengeMachineSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_ChallengeMachineSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sChallengeMachineSaveData)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sChallengeMachineSaveData)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call Func_ec94
|
||||
call EnableSRAM
|
||||
ld a, [wSaveDataChecksum1]
|
||||
ld [s0bae4], a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
ld [s0bae5], a
|
||||
ld a, [wd673]
|
||||
ld [s0bae6], a
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ec6c:
|
||||
xor a ; BANK("SRAM0")
|
||||
ld [wSaveDataSRAMBank], a
|
||||
ld a, LOW(WRAMToSRAMMapper_ChallengeMachineSave)
|
||||
ld [wWRAMToSRAMMapperPointer], a
|
||||
ld a, HIGH(WRAMToSRAMMapper_ChallengeMachineSave)
|
||||
ld [wWRAMToSRAMMapperPointer + 1], a
|
||||
ld a, LOW(sChallengeMachineSaveData)
|
||||
ld [wSaveDataSRAMOffset], a
|
||||
ld a, HIGH(sChallengeMachineSaveData)
|
||||
ld [wSaveDataSRAMOffset + 1], a
|
||||
call EnableSRAM
|
||||
ld a, [s0bae6]
|
||||
ld [wd673], a
|
||||
call DisableSRAM
|
||||
call Func_ed0b
|
||||
ret
|
||||
|
||||
Func_ec94:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wSaveDataSRAMBank]
|
||||
call BankswitchSRAM
|
||||
xor a
|
||||
ld [wSaveDataChecksum0], a
|
||||
ld [wSaveDataChecksum1], a
|
||||
call UpdateRNGSources
|
||||
or $01
|
||||
ld [wd673], a
|
||||
ld [wSaveDataChecksum2], a
|
||||
ld a, [wWRAMToSRAMMapperPointer]
|
||||
ld l, a
|
||||
ld a, [wWRAMToSRAMMapperPointer + 1]
|
||||
ld h, a
|
||||
ld a, [wSaveDataSRAMOffset]
|
||||
ld e, a
|
||||
ld a, [wSaveDataSRAMOffset + 1]
|
||||
ld d, a
|
||||
.asm_ecbf
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
or c
|
||||
jr z, .asm_ed03
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [wSaveDataItemMinValidValue], a
|
||||
ld a, [hli]
|
||||
ld [wSaveDataItemMaxValidValue], a
|
||||
pop hl
|
||||
.asm_ecd5
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [wSaveDataChecksum1]
|
||||
xor c
|
||||
ld [wSaveDataChecksum1], a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
add c
|
||||
ld [wSaveDataChecksum0], a
|
||||
ld a, [wSaveDataChecksum2]
|
||||
ld b, a
|
||||
sla a
|
||||
add b
|
||||
ld b, a
|
||||
ld a, c
|
||||
add b
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, b
|
||||
ld [wSaveDataChecksum2], a
|
||||
pop bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_ecd5
|
||||
pop hl
|
||||
REPT 4
|
||||
inc hl
|
||||
ENDR
|
||||
jr .asm_ecbf
|
||||
.asm_ed03
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ed0b:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wSaveDataSRAMBank]
|
||||
call BankswitchSRAM
|
||||
xor a
|
||||
ld [wSaveDataChecksum0], a
|
||||
ld [wSaveDataChecksum1], a
|
||||
ld a, [wd673]
|
||||
ld [wSaveDataChecksum2], a
|
||||
ld a, [wWRAMToSRAMMapperPointer]
|
||||
ld l, a
|
||||
ld a, [wWRAMToSRAMMapperPointer + 1]
|
||||
ld h, a
|
||||
ld a, [wSaveDataSRAMOffset]
|
||||
ld e, a
|
||||
ld a, [wSaveDataSRAMOffset + 1]
|
||||
ld d, a
|
||||
.asm_ed31
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
or c
|
||||
jr z, .asm_ed74
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [wSaveDataItemMinValidValue], a
|
||||
ld a, [hli]
|
||||
ld [wSaveDataItemMaxValidValue], a
|
||||
pop hl
|
||||
.asm_ed47
|
||||
push bc
|
||||
ld a, [wSaveDataChecksum2]
|
||||
ld b, a
|
||||
sla a
|
||||
add b
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
sub b
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld c, a
|
||||
ld a, b
|
||||
ld [wSaveDataChecksum2], a
|
||||
ld a, [wSaveDataChecksum1]
|
||||
xor c
|
||||
ld [wSaveDataChecksum1], a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
add c
|
||||
ld [wSaveDataChecksum0], a
|
||||
pop bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_ed47
|
||||
pop hl
|
||||
REPT 4
|
||||
inc hl
|
||||
ENDR
|
||||
jr .asm_ed31
|
||||
.asm_ed74
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
|
||||
Func_ed7c:
|
||||
ldh a, [hBankSRAM]
|
||||
push af
|
||||
ld a, [wSaveDataSRAMBank]
|
||||
call BankswitchSRAM
|
||||
xor a
|
||||
ld [wSaveDataChecksum0], a
|
||||
ld [wSaveDataChecksum1], a
|
||||
ld a, [wd673]
|
||||
ld [wSaveDataChecksum2], a
|
||||
ld a, [wWRAMToSRAMMapperPointer]
|
||||
ld l, a
|
||||
ld a, [wWRAMToSRAMMapperPointer + 1]
|
||||
ld h, a
|
||||
ld a, [wSaveDataSRAMOffset]
|
||||
ld e, a
|
||||
ld a, [wSaveDataSRAMOffset + 1]
|
||||
ld d, a
|
||||
.asm_eda2
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
or c
|
||||
jr z, .asm_ede4
|
||||
push hl
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [wSaveDataItemMinValidValue], a
|
||||
ld a, [hli]
|
||||
ld [wSaveDataItemMaxValidValue], a
|
||||
pop hl
|
||||
.asm_edb8
|
||||
push bc
|
||||
ld a, [wSaveDataChecksum2]
|
||||
ld b, a
|
||||
sla a
|
||||
add b
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
sub b
|
||||
inc de
|
||||
ld c, a
|
||||
ld a, b
|
||||
ld [wSaveDataChecksum2], a
|
||||
ld a, [wSaveDataChecksum1]
|
||||
xor c
|
||||
ld [wSaveDataChecksum1], a
|
||||
ld a, [wSaveDataChecksum0]
|
||||
add c
|
||||
ld [wSaveDataChecksum0], a
|
||||
pop bc
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_edb8
|
||||
pop hl
|
||||
REPT 4
|
||||
inc hl
|
||||
ENDR
|
||||
jr .asm_eda2
|
||||
.asm_ede4
|
||||
pop af
|
||||
call BankswitchSRAM
|
||||
call DisableSRAM
|
||||
ret
|
||||
81
src/sram.asm
81
src/sram.asm
|
|
@ -86,7 +86,54 @@ sBoosterPacksObtained:: ; b7a3
|
|||
|
||||
sCardAndDeckSaveDataEnd::
|
||||
|
||||
ds $359
|
||||
ds $59
|
||||
|
||||
sGeneralSaveData:: ; b800
|
||||
|
||||
sGeneralSaveDataHeader:: ; b800
|
||||
ds $1
|
||||
|
||||
; see WRAMToSRAMMapper_GeneralSave
|
||||
; TODO: break down into each segment (after fully labelling wram?)
|
||||
sGeneralSaveDataMain:: ; b801
|
||||
ds $1b9
|
||||
|
||||
sGeneralSaveDataEnd::
|
||||
|
||||
ds $e6
|
||||
|
||||
s0baa0:: ; baa0
|
||||
ds $1
|
||||
|
||||
s0baa1:: ; baa1
|
||||
ds $1
|
||||
|
||||
s0baa2:: ; baa2
|
||||
ds $1
|
||||
|
||||
s0baa3:: ; baa3
|
||||
ds $1
|
||||
|
||||
sChallengeMachineSaveData:: ; baa4
|
||||
|
||||
; see WRAMToSRAMMapper_ChallengeMachineSave
|
||||
; TODO: break down into each segment (after fully labelling wram?)
|
||||
sChallengeMachineSaveDataMain:: ; baa4
|
||||
ds $40
|
||||
sChallengeMachineSaveDataMainEnd::
|
||||
|
||||
s0bae4:: ; bae4
|
||||
ds $1
|
||||
|
||||
s0bae5:: ; bae5
|
||||
ds $1
|
||||
|
||||
s0bae6:: ; bae6
|
||||
ds $1
|
||||
|
||||
sChallengeMachineSaveDataEnd::
|
||||
|
||||
ds $19
|
||||
|
||||
; saved data of the current duel, including a two-byte checksum
|
||||
; see SaveDuelDataToDE
|
||||
|
|
@ -110,8 +157,40 @@ sCardPopRecords:: ; a100
|
|||
SECTION "SRAM2", SRAM
|
||||
|
||||
; the same structure as SRAM0
|
||||
; mainly as a backup, much like tcg1
|
||||
; see BulkCopySRAM
|
||||
|
||||
ds $1800
|
||||
|
||||
sBackupGeneralSaveData:: ; b800
|
||||
|
||||
sBackupGeneralSaveDataHeader:: ; b800
|
||||
ds $1
|
||||
|
||||
sBackupGeneralSaveDataMain:: ; b801
|
||||
ds $1b9
|
||||
|
||||
sBackupGeneralSaveDataEnd::
|
||||
|
||||
ds $e6
|
||||
|
||||
sBackup_baa0:: ; baa0
|
||||
ds $1
|
||||
|
||||
sBackup_baa1:: ; baa1
|
||||
ds $1
|
||||
|
||||
sBackup_baa2:: ; baa2
|
||||
ds $1
|
||||
|
||||
sBackup_baa3:: ; baa3
|
||||
ds $1
|
||||
|
||||
sBackupChallengeMachineSaveData:: ; baa4
|
||||
ds $43
|
||||
|
||||
sBackupChallengeMachineSaveDataEnd::
|
||||
|
||||
SECTION "SRAM3", SRAM
|
||||
|
||||
; buffers used to temporary store gfx related data
|
||||
|
|
|
|||
35
src/wram.asm
35
src/wram.asm
|
|
@ -2261,10 +2261,7 @@ wNextWarpMap:: ; d54d
|
|||
ds $1
|
||||
|
||||
wd54e:: ; d54e
|
||||
ds $1
|
||||
|
||||
wd54f:: ; d54f
|
||||
ds $1
|
||||
ds $2
|
||||
|
||||
wPlayerOWObject:: ; d550
|
||||
ds $1
|
||||
|
|
@ -2419,6 +2416,8 @@ wNextMusic:: ; d58e
|
|||
|
||||
wNextMapHeaderDataEnd::
|
||||
|
||||
wNextWarpPlayerData:: ; d58f
|
||||
|
||||
wNextWarpPlayerXCoord:: ; d58f
|
||||
ds $1
|
||||
|
||||
|
|
@ -2428,6 +2427,8 @@ wNextWarpPlayerYCoord:: ; d590
|
|||
wNextWarpPlayerDirection:: ; d591
|
||||
ds $1
|
||||
|
||||
wNextWarpPlayerDataEnd::
|
||||
|
||||
wOverworldScriptBank:: ; d592
|
||||
ds $1
|
||||
|
||||
|
|
@ -2542,33 +2543,31 @@ wBoosterPacksToGive:: ; d65f
|
|||
wNumBoosterPacksToGive:: ; d667
|
||||
ds $1
|
||||
|
||||
; sram bank
|
||||
wd668:: ; d668
|
||||
; SRAM0 or SRAM2
|
||||
wSaveDataSRAMBank:: ; d668
|
||||
ds $1
|
||||
|
||||
ds $1
|
||||
|
||||
wd66a:: ; d66a
|
||||
wSaveDataItemMinValidValue:: ; d66a
|
||||
ds $1
|
||||
|
||||
wd66b:: ; d66b
|
||||
wSaveDataItemMaxValidValue:: ; d66b
|
||||
ds $1
|
||||
|
||||
wd66c:: ; d66c
|
||||
wSaveDataChecksum0:: ; d66c
|
||||
ds $1
|
||||
|
||||
wd66d:: ; d66d
|
||||
wSaveDataChecksum1:: ; d66d
|
||||
ds $1
|
||||
|
||||
wd66e:: ; d66e
|
||||
wSaveDataChecksum2:: ; d66e
|
||||
ds $1
|
||||
|
||||
; data ptr
|
||||
wd66f:: ; d66f
|
||||
wWRAMToSRAMMapperPointer:: ; d66f
|
||||
ds $2
|
||||
|
||||
; sram ptr
|
||||
wd671:: ; d671
|
||||
wSaveDataSRAMOffset:: ; d671
|
||||
ds $2
|
||||
|
||||
wd673:: ; d673
|
||||
|
|
@ -2691,6 +2690,9 @@ wd7e9:: ; d7e9
|
|||
|
||||
ds $2
|
||||
|
||||
; 177 bytes
|
||||
wOWData:: ; d7ec
|
||||
|
||||
; OW map constant
|
||||
wOWMap:: ; d7ec
|
||||
ds $2
|
||||
|
|
@ -2728,6 +2730,8 @@ wOWScrollX:: ; d89b
|
|||
wOWScrollY:: ; d89c
|
||||
ds $1
|
||||
|
||||
wOWDataEnd::
|
||||
|
||||
wd89d:: ; d89d
|
||||
ds $1
|
||||
|
||||
|
|
@ -3478,6 +3482,7 @@ wddf7:: ; ddf7
|
|||
wddf8:: ; ddf8
|
||||
ds $1
|
||||
|
||||
; challenge machine
|
||||
wddf9:: ; ddf9
|
||||
ds $14
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user