pokered/engine/save.asm

707 lines
13 KiB
NASM
Raw Normal View History

2014-05-22 22:13:20 +00:00
LoadSAV: ; 735e8 (1c:75e8)
;(if carry -> write
;"the file data is destroyed")
call ClearScreen
call LoadFontTilePatterns
call LoadTextBoxTilePatterns
2015-07-19 03:49:52 +00:00
call LoadSAV0
2014-05-22 22:13:20 +00:00
jr c, .badsum
2015-07-19 03:49:52 +00:00
call LoadSAV1
2014-05-22 22:13:20 +00:00
jr c, .badsum
2015-07-19 03:49:52 +00:00
call LoadSAV2
2014-05-22 22:13:20 +00:00
jr c, .badsum
ld a, $2 ; good checksum
jr .goodsum
.badsum
ld hl, wd730
2014-05-22 22:13:20 +00:00
push hl
set 6, [hl]
ld hl, FileDataDestroyedText
call PrintText
ld c, 100
2014-05-22 22:13:20 +00:00
call DelayFrames
pop hl
res 6, [hl]
ld a, $1 ; bad checksum
.goodsum
2015-07-19 03:49:52 +00:00
ld [wSaveFileStatus], a
2014-05-22 22:13:20 +00:00
ret
FileDataDestroyedText: ; 7361e (1c:761e)
TX_FAR _FileDataDestroyedText
db "@"
2015-07-19 03:49:52 +00:00
LoadSAV0: ; 73623 (1c:7623)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamBank], a
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName ; hero name located in SRAM
ld bc, sMainDataCheckSum - sPlayerName ; but here checks the full SAV
2014-05-22 22:13:20 +00:00
call SAVCheckSum
ld c, a
2015-07-05 09:07:09 +00:00
ld a, [sMainDataCheckSum] ; SAV's checksum
2014-05-22 22:13:20 +00:00
cp c
2015-07-19 03:49:52 +00:00
jp z, .checkSumsMatched
; If the computed checksum didn't match the saved on, try again.
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName
ld bc, sMainDataCheckSum - sPlayerName
2014-05-22 22:13:20 +00:00
call SAVCheckSum
ld c, a
2015-07-05 09:07:09 +00:00
ld a, [sMainDataCheckSum] ; SAV's checksum
2014-05-22 22:13:20 +00:00
cp c
jp nz, SAVBadCheckSum
2015-07-19 03:49:52 +00:00
.checkSumsMatched
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName
ld de, wPlayerName
ld bc, NAME_LENGTH
2014-05-22 22:13:20 +00:00
call CopyData
2015-07-05 09:07:09 +00:00
ld hl, sMainData
ld de, wMainDataStart
ld bc, wMainDataEnd - wMainDataStart
2014-05-22 22:13:20 +00:00
call CopyData
2015-08-31 02:38:41 +00:00
ld hl, wCurMapTileset
2014-05-22 22:13:20 +00:00
set 7, [hl]
2015-07-05 09:07:09 +00:00
ld hl, sSpriteData
ld de, wSpriteDataStart
ld bc, wSpriteDataEnd - wSpriteDataStart
2014-05-22 22:13:20 +00:00
call CopyData
2015-07-05 09:07:09 +00:00
ld a, [sTilesetType]
2014-09-14 18:29:18 +00:00
ld [hTilesetType], a
2015-07-05 09:07:09 +00:00
ld hl, sCurBoxData
ld de, wBoxDataStart
ld bc, wBoxDataEnd - wBoxDataStart
2014-05-22 22:13:20 +00:00
call CopyData
and a
jp SAVGoodChecksum
2015-07-19 03:49:52 +00:00
LoadSAV1: ; 73690 (1c:7690)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamBank], a
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName ; hero name located in SRAM
ld bc, sMainDataCheckSum - sPlayerName ; but here checks the full SAV
2014-05-22 22:13:20 +00:00
call SAVCheckSum
ld c, a
2015-07-05 09:07:09 +00:00
ld a, [sMainDataCheckSum] ; SAV's checksum
2014-05-22 22:13:20 +00:00
cp c
jr nz, SAVBadCheckSum
2015-07-05 09:07:09 +00:00
ld hl, sCurBoxData
ld de, wBoxDataStart
ld bc, wBoxDataEnd - wBoxDataStart
2014-05-22 22:13:20 +00:00
call CopyData
and a
jp SAVGoodChecksum
2015-07-19 03:49:52 +00:00
LoadSAV2: ; 736bd (1c:76bd)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamBank], a
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName ; hero name located in SRAM
ld bc, sMainDataCheckSum - sPlayerName ; but here checks the full SAV
2014-05-22 22:13:20 +00:00
call SAVCheckSum
ld c, a
2015-07-05 09:07:09 +00:00
ld a, [sMainDataCheckSum] ; SAV's checksum
2014-05-22 22:13:20 +00:00
cp c
jp nz, SAVBadCheckSum
2015-07-05 09:07:09 +00:00
ld hl, sPartyData
ld de, wPartyDataStart
ld bc, wPartyDataEnd - wPartyDataStart
2014-05-22 22:13:20 +00:00
call CopyData
2015-07-05 09:07:09 +00:00
ld hl, sMainData
ld de, wPokedexOwned
2014-05-22 22:13:20 +00:00
ld bc, wPokedexSeenEnd - wPokedexOwned
call CopyData
and a
jp SAVGoodChecksum
SAVBadCheckSum: ; 736f7 (1c:76f7)
scf
SAVGoodChecksum: ; 736f8 (1c:76f8)
ld a, $0
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
2015-07-19 03:49:52 +00:00
LoadSAVIgnoreBadCheckSum: ; 73701 (1c:7701)
; unused function that loads save data and ignores bad checksums
call LoadSAV0
call LoadSAV1
jp LoadSAV2
2014-05-22 22:13:20 +00:00
SaveSAV: ; 7370a (1c:770a)
2014-05-22 22:13:20 +00:00
callba PrintSaveScreenText
ld hl,WouldYouLikeToSaveText
call SaveSAVConfirm
and a ;|0 = Yes|1 = No|
ret nz
2015-07-19 03:49:52 +00:00
ld a,[wSaveFileStatus]
2014-05-22 22:13:20 +00:00
dec a
jr z,.save
call SAVCheckRandomID
jr z,.save
ld hl,OlderFileWillBeErasedText
call SaveSAVConfirm
and a
ret nz
.save
call SaveSAVtoSRAM
2015-07-18 20:52:03 +00:00
coord hl, 1, 13
2015-08-05 21:20:29 +00:00
lb bc, 4, 18
call ClearScreenArea
2015-07-18 20:52:03 +00:00
coord hl, 1, 14
2014-05-22 22:13:20 +00:00
ld de,NowSavingString
call PlaceString
ld c,120
2014-05-22 22:13:20 +00:00
call DelayFrames
ld hl,GameSavedText
call PrintText
2015-07-19 08:46:12 +00:00
ld a, SFX_SAVE
2014-05-22 22:13:20 +00:00
call PlaySoundWaitForCurrent
call WaitForSoundToFinish
ld c,30
2014-05-22 22:13:20 +00:00
jp DelayFrames
NowSavingString:
db "Now saving...@"
SaveSAVConfirm: ; 73768 (1c:7768)
call PrintText
2015-07-18 20:52:03 +00:00
coord hl, 0, 7
2015-08-05 21:20:29 +00:00
lb bc, 8, 1
2015-02-07 20:27:36 +00:00
ld a,TWO_OPTION_MENU
2015-02-07 10:43:08 +00:00
ld [wTextBoxID],a
2015-02-07 20:27:36 +00:00
call DisplayTextBoxID ; yes/no menu
ld a,[wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
ret
WouldYouLikeToSaveText: ; 0x7377d
TX_FAR _WouldYouLikeToSaveText
db "@"
GameSavedText: ; 73782 (1c:7782)
TX_FAR _GameSavedText
db "@"
OlderFileWillBeErasedText: ; 73787 (1c:7787)
TX_FAR _OlderFileWillBeErasedText
db "@"
SaveSAVtoSRAM0: ; 7378c (1c:778c)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamBank], a
ld hl, wPlayerName
2015-07-05 09:07:09 +00:00
ld de, sPlayerName
ld bc, NAME_LENGTH
2014-05-22 22:13:20 +00:00
call CopyData
ld hl, wMainDataStart
2015-07-05 09:07:09 +00:00
ld de, sMainData
ld bc, wMainDataEnd - wMainDataStart
2014-05-22 22:13:20 +00:00
call CopyData
ld hl, wSpriteDataStart
2015-07-05 09:07:09 +00:00
ld de, sSpriteData
ld bc, wSpriteDataEnd - wSpriteDataStart
2014-05-22 22:13:20 +00:00
call CopyData
ld hl, wBoxDataStart
2015-07-05 09:07:09 +00:00
ld de, sCurBoxData
ld bc, wBoxDataEnd - wBoxDataStart
2014-05-22 22:13:20 +00:00
call CopyData
2014-09-14 18:29:18 +00:00
ld a, [hTilesetType]
2015-07-05 09:07:09 +00:00
ld [sTilesetType], a
ld hl, sPlayerName
ld bc, sMainDataCheckSum - sPlayerName
2014-05-22 22:13:20 +00:00
call SAVCheckSum
2015-07-05 09:07:09 +00:00
ld [sMainDataCheckSum], a
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
SaveSAVtoSRAM1: ; 737e2 (1c:77e2)
; stored pokémon
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamBank], a
ld hl, wBoxDataStart
2015-07-05 09:07:09 +00:00
ld de, sCurBoxData
ld bc, wBoxDataEnd - wBoxDataStart
2014-05-22 22:13:20 +00:00
call CopyData
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName
ld bc, sMainDataCheckSum - sPlayerName
2014-05-22 22:13:20 +00:00
call SAVCheckSum
2015-07-05 09:07:09 +00:00
ld [sMainDataCheckSum], a
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
SaveSAVtoSRAM2: ; 7380f (1c:780f)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamBank], a
ld hl, wPartyDataStart
2015-07-05 09:07:09 +00:00
ld de, sPartyData
ld bc, wPartyDataEnd - wPartyDataStart
2014-05-22 22:13:20 +00:00
call CopyData
ld hl, wPokedexOwned ; pokédex only
2015-07-05 09:07:09 +00:00
ld de, sMainData
2014-05-22 22:13:20 +00:00
ld bc, wPokedexSeenEnd - wPokedexOwned
call CopyData
2015-07-05 09:07:09 +00:00
ld hl, sPlayerName
ld bc, sMainDataCheckSum - sPlayerName
2014-05-22 22:13:20 +00:00
call SAVCheckSum
2015-07-05 09:07:09 +00:00
ld [sMainDataCheckSum], a
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
SaveSAVtoSRAM: ; 73848 (1c:7848)
ld a, $2
2015-07-19 03:49:52 +00:00
ld [wSaveFileStatus], a
2014-05-22 22:13:20 +00:00
call SaveSAVtoSRAM0
call SaveSAVtoSRAM1
jp SaveSAVtoSRAM2
SAVCheckSum: ; 73856 (1c:7856)
;Check Sum (result[1 byte] is complemented)
2015-07-19 03:49:52 +00:00
ld d, 0
2014-05-22 22:13:20 +00:00
.loop
ld a, [hli]
add d
ld d, a
dec bc
ld a, b
or c
jr nz, .loop
ld a, d
cpl
ret
2015-07-19 03:49:52 +00:00
CalcIndividualBoxCheckSums: ; 73863 (1c:7863)
2015-07-05 09:07:09 +00:00
ld hl, sBox1 ; sBox7
2015-07-19 03:49:52 +00:00
ld de, sBank2IndividualBoxChecksums ; sBank3IndividualBoxChecksums
2015-07-05 09:07:09 +00:00
ld b, NUM_BOXES / 2
2015-07-19 03:49:52 +00:00
.loop
2014-05-22 22:13:20 +00:00
push bc
push de
ld bc, wBoxDataEnd - wBoxDataStart
2014-05-22 22:13:20 +00:00
call SAVCheckSum
pop de
ld [de], a
inc de
pop bc
dec b
2015-07-19 03:49:52 +00:00
jr nz, .loop
2014-05-22 22:13:20 +00:00
ret
2015-07-19 03:49:52 +00:00
GetBoxSRAMLocation: ; 7387b (1c:787b)
; in: a = box num
; out: b = box SRAM bank, hl = pointer to start of box
ld hl, BoxSRAMPointerTable
2015-07-16 03:04:58 +00:00
ld a, [wCurrentBoxNum]
2014-05-22 22:13:20 +00:00
and $7f
2015-07-05 09:07:09 +00:00
cp NUM_BOXES / 2
2015-07-19 03:49:52 +00:00
ld b, 2
jr c, .next
2014-05-22 22:13:20 +00:00
inc b
2015-07-05 09:07:09 +00:00
sub NUM_BOXES / 2
2015-07-19 03:49:52 +00:00
.next
2014-05-22 22:13:20 +00:00
ld e, a
2015-07-19 03:49:52 +00:00
ld d, 0
2014-05-22 22:13:20 +00:00
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ret
2015-07-19 03:49:52 +00:00
BoxSRAMPointerTable: ; 73895 (1c:7895)
2015-07-05 09:07:09 +00:00
dw sBox1 ; sBox7
dw sBox2 ; sBox8
dw sBox3 ; sBox9
dw sBox4 ; sBox10
dw sBox5 ; sBox11
dw sBox6 ; sBox12
2014-05-22 22:13:20 +00:00
2014-09-14 18:29:18 +00:00
ChangeBox:: ; 738a1 (1c:78a1)
2014-05-22 22:13:20 +00:00
ld hl, WhenYouChangeBoxText
call PrintText
call YesNoChoice
2014-09-14 18:29:18 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
and a
2014-09-14 18:29:18 +00:00
ret nz ; return if No was chosen
2015-07-16 03:04:58 +00:00
ld hl, wCurrentBoxNum
2015-07-19 03:49:52 +00:00
bit 7, [hl] ; is it the first time player is changing the box?
call z, EmptyAllSRAMBoxes ; if so, empty all boxes in SRAM
call DisplayChangeBoxMenu
2014-05-22 22:13:20 +00:00
call UpdateSprites
2015-02-08 00:24:16 +00:00
ld hl, hFlags_0xFFF6
2014-05-22 22:13:20 +00:00
set 1, [hl]
call HandleMenuInput
2015-02-08 00:24:16 +00:00
ld hl, hFlags_0xFFF6
2014-05-22 22:13:20 +00:00
res 1, [hl]
2015-08-11 05:34:32 +00:00
bit 1, a ; pressed b
2014-05-22 22:13:20 +00:00
ret nz
2015-07-19 03:49:52 +00:00
call GetBoxSRAMLocation
2014-05-22 22:13:20 +00:00
ld e, l
ld d, h
ld hl, wBoxDataStart
2015-07-19 03:49:52 +00:00
call CopyBoxToOrFromSRAM ; copy old box from WRAM to SRAM
2014-09-14 18:29:18 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
set 7, a
2015-07-16 03:04:58 +00:00
ld [wCurrentBoxNum], a
2015-07-19 03:49:52 +00:00
call GetBoxSRAMLocation
ld de, wBoxDataStart
2015-07-19 03:49:52 +00:00
call CopyBoxToOrFromSRAM ; copy new box from SRAM to WRAM
2015-08-31 02:38:41 +00:00
ld hl, wMapTextPtr
2014-09-14 18:29:18 +00:00
ld de, wChangeBoxSavedMapTextPointer
2014-05-22 22:13:20 +00:00
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
2014-09-14 18:29:18 +00:00
call RestoreMapTextPointer
2014-05-22 22:13:20 +00:00
call SaveSAVtoSRAM
2014-09-14 18:29:18 +00:00
ld hl, wChangeBoxSavedMapTextPointer
call SetMapTextPointer
2015-07-19 08:46:12 +00:00
ld a, SFX_SAVE
2014-05-22 22:13:20 +00:00
call PlaySoundWaitForCurrent
call WaitForSoundToFinish
ret
WhenYouChangeBoxText: ; 73909 (1c:7909)
TX_FAR _WhenYouChangeBoxText
db "@"
2015-07-19 03:49:52 +00:00
CopyBoxToOrFromSRAM: ; 7390e (1c:790e)
; copy an entire box from hl to de with b as the SRAM bank
2014-05-22 22:13:20 +00:00
push hl
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
2014-05-22 22:13:20 +00:00
ld a, b
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
ld bc, wBoxDataEnd - wBoxDataStart
2014-05-22 22:13:20 +00:00
call CopyData
pop hl
2015-07-19 03:49:52 +00:00
; mark the memory that the box was copied from as am empty box
2014-05-22 22:13:20 +00:00
xor a
ld [hli], a
dec a
ld [hl], a
2015-07-19 03:49:52 +00:00
2015-07-05 09:07:09 +00:00
ld hl, sBox1 ; sBox7
2015-07-19 03:49:52 +00:00
ld bc, sBank2AllBoxesChecksum - sBox1
2014-05-22 22:13:20 +00:00
call SAVCheckSum
2015-07-19 03:49:52 +00:00
ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum
call CalcIndividualBoxCheckSums
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
2015-07-19 03:49:52 +00:00
DisplayChangeBoxMenu: ; 7393f (1c:793f)
2014-05-22 22:13:20 +00:00
xor a
ld [H_AUTOBGTRANSFERENABLED], a
2015-07-19 03:49:52 +00:00
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
2015-07-19 03:49:52 +00:00
ld a, 11
ld [wMaxMenuItem], a
2015-07-19 03:49:52 +00:00
ld a, 1
ld [wTopMenuItemY], a
2015-07-19 03:49:52 +00:00
ld a, 12
ld [wTopMenuItemX], a
2014-05-22 22:13:20 +00:00
xor a
2015-07-13 07:32:03 +00:00
ld [wMenuWatchMovingOutOfBounds], a
2015-07-16 03:04:58 +00:00
ld a, [wCurrentBoxNum]
2014-05-22 22:13:20 +00:00
and $7f
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
2015-07-18 20:52:03 +00:00
coord hl, 0, 0
2015-07-19 03:49:52 +00:00
ld b, 2
ld c, 9
2014-05-22 22:13:20 +00:00
call TextBoxBorder
ld hl, ChooseABoxText
call PrintText
2015-07-18 20:52:03 +00:00
coord hl, 11, 0
2015-07-19 03:49:52 +00:00
ld b, 12
ld c, 7
2014-05-22 22:13:20 +00:00
call TextBoxBorder
2015-02-08 00:24:16 +00:00
ld hl, hFlags_0xFFF6
2014-05-22 22:13:20 +00:00
set 2, [hl]
ld de, BoxNames
2015-07-18 20:52:03 +00:00
coord hl, 13, 1
2014-05-22 22:13:20 +00:00
call PlaceString
2015-02-08 00:24:16 +00:00
ld hl, hFlags_0xFFF6
2014-05-22 22:13:20 +00:00
res 2, [hl]
2015-07-16 03:04:58 +00:00
ld a, [wCurrentBoxNum]
2014-05-22 22:13:20 +00:00
and $7f
cp 9
2015-07-19 03:49:52 +00:00
jr c, .singleDigitBoxNum
sub 9
2015-07-18 20:52:03 +00:00
coord hl, 8, 2
ld [hl], "1"
add "0"
2015-07-19 03:49:52 +00:00
jr .next
.singleDigitBoxNum
add "1"
2015-07-19 03:49:52 +00:00
.next
Coorda 9, 2
2015-07-18 20:52:03 +00:00
coord hl, 1, 2
2014-05-22 22:13:20 +00:00
ld de, BoxNoText
call PlaceString
2015-07-19 03:49:52 +00:00
call GetMonCountsForAllBoxes
2015-07-18 20:52:03 +00:00
coord hl, 18, 1
2015-07-19 03:49:52 +00:00
ld de, wBoxMonCounts
2015-07-14 07:16:19 +00:00
ld bc, SCREEN_WIDTH
2014-05-22 22:13:20 +00:00
ld a, $c
2015-07-19 03:49:52 +00:00
.loop
2014-05-22 22:13:20 +00:00
push af
ld a, [de]
2015-07-19 03:49:52 +00:00
and a ; is the box empty?
jr z, .skipPlacingPokeball
ld [hl], $78 ; place pokeball tile next to box name if box not empty
.skipPlacingPokeball
2014-05-22 22:13:20 +00:00
add hl, bc
inc de
pop af
dec a
2015-07-19 03:49:52 +00:00
jr nz, .loop
ld a, 1
ld [H_AUTOBGTRANSFERENABLED], a
2014-05-22 22:13:20 +00:00
ret
ChooseABoxText: ; 739d4 (1c:79d4)
TX_FAR _ChooseABoxText
db "@"
BoxNames: ; 739d9 (1c:79d9)
db "BOX 1"
next "BOX 2"
next "BOX 3"
next "BOX 4"
next "BOX 5"
next "BOX 6"
next "BOX 7"
next "BOX 8"
next "BOX 9"
next "BOX10"
next "BOX11"
next "BOX12@"
BoxNoText: ; 73a21 (1c:7a21)
db "BOX No.@"
2015-07-19 03:49:52 +00:00
EmptyAllSRAMBoxes: ; 73a29 (1c:7a29)
; marks all boxes in SRAM as empty (initialisation for the first time the
; player changes the box)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
2015-07-19 03:49:52 +00:00
ld a, 2
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
2015-07-19 03:49:52 +00:00
call EmptySRAMBoxesInBank
ld a, 3
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
2015-07-19 03:49:52 +00:00
call EmptySRAMBoxesInBank
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
2015-07-19 03:49:52 +00:00
EmptySRAMBoxesInBank: ; 73a4b (1c:7a4b)
; marks every box in the current SRAM bank as empty
2015-07-05 09:07:09 +00:00
ld hl, sBox1 ; sBox7
2015-07-19 03:49:52 +00:00
call EmptySRAMBox
2015-07-05 09:07:09 +00:00
ld hl, sBox2 ; sBox8
2015-07-19 03:49:52 +00:00
call EmptySRAMBox
2015-07-05 09:07:09 +00:00
ld hl, sBox3 ; sBox9
2015-07-19 03:49:52 +00:00
call EmptySRAMBox
2015-07-05 09:07:09 +00:00
ld hl, sBox4 ; sBox10
2015-07-19 03:49:52 +00:00
call EmptySRAMBox
2015-07-05 09:07:09 +00:00
ld hl, sBox5 ; sBox11
2015-07-19 03:49:52 +00:00
call EmptySRAMBox
2015-07-05 09:07:09 +00:00
ld hl, sBox6 ; sBox12
2015-07-19 03:49:52 +00:00
call EmptySRAMBox
2015-07-05 09:07:09 +00:00
ld hl, sBox1 ; sBox7
2015-07-19 03:49:52 +00:00
ld bc, sBank2AllBoxesChecksum - sBox1
2014-05-22 22:13:20 +00:00
call SAVCheckSum
2015-07-19 03:49:52 +00:00
ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum
call CalcIndividualBoxCheckSums
2014-05-22 22:13:20 +00:00
ret
2015-07-19 03:49:52 +00:00
EmptySRAMBox: ; 73a7f (1c:7a7f)
2014-05-22 22:13:20 +00:00
xor a
ld [hli], a
dec a
ld [hl], a
ret
2015-07-19 03:49:52 +00:00
GetMonCountsForAllBoxes: ; 73a84 (1c:7a84)
ld hl, wBoxMonCounts
2014-05-22 22:13:20 +00:00
push hl
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
2014-05-22 22:13:20 +00:00
ld a, $2
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
2015-07-19 03:49:52 +00:00
call GetMonCountsForBoxesInBank
2014-05-22 22:13:20 +00:00
ld a, $3
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
2015-07-19 03:49:52 +00:00
call GetMonCountsForBoxesInBank
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
pop hl
2015-07-19 03:49:52 +00:00
; copy the count for the current box from WRAM
2015-07-16 03:04:58 +00:00
ld a, [wCurrentBoxNum]
2014-05-22 22:13:20 +00:00
and $7f
ld c, a
2015-07-19 03:49:52 +00:00
ld b, 0
2014-05-22 22:13:20 +00:00
add hl, bc
2015-08-31 02:38:41 +00:00
ld a, [wNumInBox]
2014-05-22 22:13:20 +00:00
ld [hl], a
2015-07-19 03:49:52 +00:00
2014-05-22 22:13:20 +00:00
ret
2015-07-19 03:49:52 +00:00
GetMonCountsForBoxesInBank: ; 73ab8 (1c:7ab8)
2015-07-05 09:07:09 +00:00
ld a, [sBox1] ; sBox7
2014-05-22 22:13:20 +00:00
ld [hli], a
2015-07-05 09:07:09 +00:00
ld a, [sBox2] ; sBox8
2014-05-22 22:13:20 +00:00
ld [hli], a
2015-07-05 09:07:09 +00:00
ld a, [sBox3] ; sBox9
2014-05-22 22:13:20 +00:00
ld [hli], a
2015-07-05 09:07:09 +00:00
ld a, [sBox4] ; sBox10
2014-05-22 22:13:20 +00:00
ld [hli], a
2015-07-05 09:07:09 +00:00
ld a, [sBox5] ; sBox11
2014-05-22 22:13:20 +00:00
ld [hli], a
2015-07-05 09:07:09 +00:00
ld a, [sBox6] ; sBox12
2014-05-22 22:13:20 +00:00
ld [hli], a
ret
SAVCheckRandomID: ; 73ad1 (1c:7ad1)
2014-05-22 22:13:20 +00:00
;checks if Sav file is the same by checking player's name 1st letter ($a598)
; and the two random numbers generated at game beginning
;(which are stored at wPlayerID)s
2014-05-22 22:13:20 +00:00
ld a,$0a
2015-07-05 09:07:09 +00:00
ld [MBC1SRamEnable],a
2014-05-22 22:13:20 +00:00
ld a,$01
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode],a
ld [MBC1SRamBank],a
2015-07-05 09:07:09 +00:00
ld a,[sPlayerName]
2014-05-22 22:13:20 +00:00
and a
jr z,.next
2015-07-05 09:07:09 +00:00
ld hl,sPlayerName
ld bc, sMainDataCheckSum - sPlayerName
2014-05-22 22:13:20 +00:00
call SAVCheckSum
ld c,a
2015-07-05 09:07:09 +00:00
ld a,[sMainDataCheckSum]
2014-05-22 22:13:20 +00:00
cp c
jr nz,.next
2015-07-05 09:07:09 +00:00
ld hl,sMainData + 98 ; player ID
2014-05-22 22:13:20 +00:00
ld a,[hli]
ld h,[hl]
ld l,a
ld a,[wPlayerID]
2014-05-22 22:13:20 +00:00
cp l
jr nz,.next
ld a,[wPlayerID + 1]
2014-05-22 22:13:20 +00:00
cp h
.next
ld a,$00
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode],a
2015-07-05 09:07:09 +00:00
ld [MBC1SRamEnable],a
2014-05-22 22:13:20 +00:00
ret
SaveHallOfFameTeams: ; 73b0d (1c:7b0d)
2015-07-15 02:46:52 +00:00
ld a, [wNumHoFTeams]
2014-05-22 22:13:20 +00:00
dec a
2015-07-15 02:46:52 +00:00
cp HOF_TEAM_CAPACITY
2014-05-22 22:13:20 +00:00
jr nc, .asm_73b28
ld hl, sHallOfFame
ld bc, HOF_TEAM
2014-05-22 22:13:20 +00:00
call AddNTimes
ld e, l
ld d, h
2015-08-13 05:14:31 +00:00
ld hl, wHallOfFame
ld bc, HOF_TEAM
jr HallOfFame_Copy
2014-05-22 22:13:20 +00:00
.asm_73b28
ld hl, sHallOfFame + HOF_TEAM
ld de, sHallOfFame
2015-07-15 02:46:52 +00:00
ld bc, HOF_TEAM * (HOF_TEAM_CAPACITY - 1)
call HallOfFame_Copy
2015-08-13 05:14:31 +00:00
ld hl, wHallOfFame
2015-07-15 02:46:52 +00:00
ld de, sHallOfFame + HOF_TEAM * (HOF_TEAM_CAPACITY - 1)
ld bc, HOF_TEAM
jr HallOfFame_Copy
2014-05-22 22:13:20 +00:00
LoadHallOfFameTeams: ; 73b3f (1c:7b3f)
ld hl, sHallOfFame
ld bc, HOF_TEAM
2015-07-19 03:49:52 +00:00
ld a, [wHoFTeamIndex]
2014-05-22 22:13:20 +00:00
call AddNTimes
2015-08-13 05:14:31 +00:00
ld de, wHallOfFame
ld bc, HOF_TEAM
2014-05-22 22:13:20 +00:00
; fallthrough
HallOfFame_Copy: ; 73b51 (1c:7b51)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
2014-05-22 22:13:20 +00:00
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
2014-05-22 22:13:20 +00:00
call CopyData
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
2015-02-08 06:18:42 +00:00
ClearSAV: ; 73b6a (1c:7b6a)
2014-09-14 18:29:18 +00:00
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ld a, $1
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
2014-05-22 22:13:20 +00:00
xor a
call PadSRAM_FF
ld a, $1
call PadSRAM_FF
ld a, $2
call PadSRAM_FF
ld a, $3
call PadSRAM_FF
xor a
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBankingMode], a
ld [MBC1SRamEnable], a
2014-05-22 22:13:20 +00:00
ret
PadSRAM_FF: ; 73b8f (1c:7b8f)
2014-09-14 18:29:18 +00:00
ld [MBC1SRamBank], a
2014-05-22 22:13:20 +00:00
ld hl, $a000
ld bc, $2000
ld a, $ff
jp FillMemory