diff options
Diffstat (limited to 'engine/save.asm')
-rwxr-xr-x | engine/save.asm | 525 |
1 files changed, 271 insertions, 254 deletions
diff --git a/engine/save.asm b/engine/save.asm index d3127f04..4fb2c4c8 100755 --- a/engine/save.asm +++ b/engine/save.asm @@ -1,14 +1,14 @@ -LoadSAV: ; 735e8 (1c:75e8) +LoadSAV: ;(if carry -> write ;"the file data is destroyed") call ClearScreen call LoadFontTilePatterns call LoadTextBoxTilePatterns - call LoadSAVCheckSum + call LoadSAV0 jr c, .badsum - call LoadSAVCheckSum1 + call LoadSAV1 jr c, .badsum - call LoadSAVCheckSum2 + call LoadSAV2 jr c, .badsum ld a, $2 ; good checksum jr .goodsum @@ -18,129 +18,132 @@ LoadSAV: ; 735e8 (1c:75e8) set 6, [hl] ld hl, FileDataDestroyedText call PrintText - ld c, $64 + ld c, 100 call DelayFrames pop hl res 6, [hl] ld a, $1 ; bad checksum .goodsum - ld [wd088], a ; checksum flag + ld [wSaveFileStatus], a ret -FileDataDestroyedText: ; 7361e (1c:761e) +FileDataDestroyedText: TX_FAR _FileDataDestroyedText db "@" -LoadSAVCheckSum: ; 73623 (1c:7623) +LoadSAV0: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a ld [MBC1SRamBank], a - ld hl, $a598 ; hero name located in SRAM - ld bc, $f8b ; but here checks the full SAV + ld hl, sPlayerName ; hero name located in SRAM + ld bc, sMainDataCheckSum - sPlayerName ; but here checks the full SAV call SAVCheckSum ld c, a - ld a, [$b523] ; SAV's checksum + ld a, [sMainDataCheckSum] ; SAV's checksum cp c - jp z, .Func_73652 - ld hl, $a598 - ld bc, $f8b + jp z, .checkSumsMatched + +; If the computed checksum didn't match the saved on, try again. + ld hl, sPlayerName + ld bc, sMainDataCheckSum - sPlayerName call SAVCheckSum ld c, a - ld a, [$b523] ; SAV's checksum + ld a, [sMainDataCheckSum] ; SAV's checksum cp c jp nz, SAVBadCheckSum -.Func_73652 ; 73652 (1c:7652) - ld hl, $a598 - ld de, wPlayerName ; wd158 - ld bc, $b +.checkSumsMatched + ld hl, sPlayerName + ld de, wPlayerName + ld bc, NAME_LENGTH call CopyData - ld hl, $a5a3 - ld de, wPokedexOwned - ld bc, $789 + ld hl, sMainData + ld de, wMainDataStart + ld bc, wMainDataEnd - wMainDataStart call CopyData - ld hl, W_CURMAPTILESET + ld hl, wCurMapTileset set 7, [hl] - ld hl, $ad2c - ld de, wSpriteStateData1 - ld bc, $200 + ld hl, sSpriteData + ld de, wSpriteDataStart + ld bc, wSpriteDataEnd - wSpriteDataStart call CopyData - ld a, [$b522] + ld a, [sTilesetType] ld [hTilesetType], a - ld hl, $b0c0 - ld de, W_NUMINBOX - ld bc, wBoxMonNicksEnd - W_NUMINBOX + ld hl, sCurBoxData + ld de, wBoxDataStart + ld bc, wBoxDataEnd - wBoxDataStart call CopyData and a jp SAVGoodChecksum -LoadSAVCheckSum1: ; 73690 (1c:7690) +LoadSAV1: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a ld [MBC1SRamBank], a - ld hl, $a598 ; hero name located in SRAM - ld bc, $f8b ; but here checks the full SAV + ld hl, sPlayerName ; hero name located in SRAM + ld bc, sMainDataCheckSum - sPlayerName ; but here checks the full SAV call SAVCheckSum ld c, a - ld a, [$b523] ; SAV's checksum + ld a, [sMainDataCheckSum] ; SAV's checksum cp c jr nz, SAVBadCheckSum - ld hl, $b0c0 - ld de, W_NUMINBOX - ld bc, wBoxMonNicksEnd - W_NUMINBOX + ld hl, sCurBoxData + ld de, wBoxDataStart + ld bc, wBoxDataEnd - wBoxDataStart call CopyData and a jp SAVGoodChecksum -LoadSAVCheckSum2: ; 736bd (1c:76bd) +LoadSAV2: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a ld [MBC1SRamBank], a - ld hl, $a598 ; hero name located in SRAM - ld bc, $f8b ; but here checks the full SAV + ld hl, sPlayerName ; hero name located in SRAM + ld bc, sMainDataCheckSum - sPlayerName ; but here checks the full SAV call SAVCheckSum ld c, a - ld a, [$b523] ; SAV's checksum + ld a, [sMainDataCheckSum] ; SAV's checksum cp c jp nz, SAVBadCheckSum - ld hl, $af2c - ld de, wPartyCount ; wPartyCount - ld bc, $194 + ld hl, sPartyData + ld de, wPartyDataStart + ld bc, wPartyDataEnd - wPartyDataStart call CopyData - ld hl, $a5a3 - ld de, wPokedexOwned ; wPokedexOwned + ld hl, sMainData + ld de, wPokedexOwned ld bc, wPokedexSeenEnd - wPokedexOwned call CopyData and a jp SAVGoodChecksum -SAVBadCheckSum: ; 736f7 (1c:76f7) +SAVBadCheckSum: scf -SAVGoodChecksum: ; 736f8 (1c:76f8) +SAVGoodChecksum: ld a, $0 ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a ret -Func_73701: ; 0x73701 - call LoadSAVCheckSum - call LoadSAVCheckSum1 - jp LoadSAVCheckSum2 +LoadSAVIgnoreBadCheckSum: +; unused function that loads save data and ignores bad checksums + call LoadSAV0 + call LoadSAV1 + jp LoadSAV2 -SaveSAV: ;$770a +SaveSAV: callba PrintSaveScreenText ld hl,WouldYouLikeToSaveText call SaveSAVConfirm and a ;|0 = Yes|1 = No| ret nz - ld a,[wd088] + ld a,[wSaveFileStatus] dec a jr z,.save call SAVCheckRandomID @@ -149,135 +152,135 @@ SaveSAV: ;$770a call SaveSAVConfirm and a ret nz -.save ;$772d - call SaveSAVtoSRAM ;$7848 - hlCoord 1, 13 - ld bc,$0412 - call ClearScreenArea ; clear area 4x12 starting at 13,1 - hlCoord 1, 14 +.save + call SaveSAVtoSRAM + coord hl, 1, 13 + lb bc, 4, 18 + call ClearScreenArea + coord hl, 1, 14 ld de,NowSavingString call PlaceString - ld c,$78 + ld c,120 call DelayFrames ld hl,GameSavedText call PrintText - ld a, (SFX_02_5d - SFX_Headers_02) / 3 ;sound for saved game + ld a, SFX_SAVE call PlaySoundWaitForCurrent call WaitForSoundToFinish - ld c,$1e + ld c,30 jp DelayFrames NowSavingString: db "Now saving...@" -SaveSAVConfirm: ; 73768 (1c:7768) +SaveSAVConfirm: call PrintText - hlCoord 0, 7 - ld bc,$0801 + coord hl, 0, 7 + lb bc, 8, 1 ld a,TWO_OPTION_MENU ld [wTextBoxID],a call DisplayTextBoxID ; yes/no menu ld a,[wCurrentMenuItem] ret -WouldYouLikeToSaveText: ; 0x7377d +WouldYouLikeToSaveText: TX_FAR _WouldYouLikeToSaveText db "@" -GameSavedText: ; 73782 (1c:7782) +GameSavedText: TX_FAR _GameSavedText db "@" -OlderFileWillBeErasedText: ; 73787 (1c:7787) +OlderFileWillBeErasedText: TX_FAR _OlderFileWillBeErasedText db "@" -SaveSAVtoSRAM0: ; 7378c (1c:778c) +SaveSAVtoSRAM0: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a ld [MBC1SRamBank], a ld hl, wPlayerName - ld de, $a598 - ld bc, $b + ld de, sPlayerName + ld bc, NAME_LENGTH call CopyData - ld hl, wPokedexOwned - ld de, $a5a3 - ld bc, W_NUMINBOX - wPokedexOwned + ld hl, wMainDataStart + ld de, sMainData + ld bc, wMainDataEnd - wMainDataStart call CopyData - ld hl, wSpriteStateData1 - ld de, $ad2c - ld bc, $200 + ld hl, wSpriteDataStart + ld de, sSpriteData + ld bc, wSpriteDataEnd - wSpriteDataStart call CopyData - ld hl, W_NUMINBOX - ld de, $b0c0 - ld bc, wBoxMonNicksEnd - W_NUMINBOX + ld hl, wBoxDataStart + ld de, sCurBoxData + ld bc, wBoxDataEnd - wBoxDataStart call CopyData ld a, [hTilesetType] - ld [$b522], a - ld hl, $a598 - ld bc, $f8b + ld [sTilesetType], a + ld hl, sPlayerName + ld bc, sMainDataCheckSum - sPlayerName call SAVCheckSum - ld [$b523], a + ld [sMainDataCheckSum], a xor a ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a ret -SaveSAVtoSRAM1: ; 737e2 (1c:77e2) +SaveSAVtoSRAM1: ; stored pokémon ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a ld [MBC1SRamBank], a - ld hl, W_NUMINBOX - ld de, $b0c0 - ld bc, wBoxMonNicksEnd - W_NUMINBOX + ld hl, wBoxDataStart + ld de, sCurBoxData + ld bc, wBoxDataEnd - wBoxDataStart call CopyData - ld hl, $a598 - ld bc, $f8b + ld hl, sPlayerName + ld bc, sMainDataCheckSum - sPlayerName call SAVCheckSum - ld [$b523], a + ld [sMainDataCheckSum], a xor a ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a ret -SaveSAVtoSRAM2: ; 7380f (1c:780f) +SaveSAVtoSRAM2: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a ld [MBC1SRamBank], a - ld hl, wPartyCount - ld de, $af2c - ld bc, wPokedexOwned - wPartyCount + ld hl, wPartyDataStart + ld de, sPartyData + ld bc, wPartyDataEnd - wPartyDataStart call CopyData ld hl, wPokedexOwned ; pokédex only - ld de, $a5a3 + ld de, sMainData ld bc, wPokedexSeenEnd - wPokedexOwned call CopyData - ld hl, $a598 - ld bc, $f8b + ld hl, sPlayerName + ld bc, sMainDataCheckSum - sPlayerName call SAVCheckSum - ld [$b523], a + ld [sMainDataCheckSum], a xor a ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a ret -SaveSAVtoSRAM: ; 73848 (1c:7848) +SaveSAVtoSRAM: ld a, $2 - ld [wd088], a + ld [wSaveFileStatus], a call SaveSAVtoSRAM0 call SaveSAVtoSRAM1 jp SaveSAVtoSRAM2 -SAVCheckSum: ; 73856 (1c:7856) +SAVCheckSum: ;Check Sum (result[1 byte] is complemented) - ld d, $0 + ld d, 0 .loop ld a, [hli] add d @@ -290,35 +293,37 @@ SAVCheckSum: ; 73856 (1c:7856) cpl ret -Func_73863: ; 73863 (1c:7863) - ld hl, $a000 - ld de, $ba4d - ld b, $6 -.asm_7386b +CalcIndividualBoxCheckSums: + ld hl, sBox1 ; sBox7 + ld de, sBank2IndividualBoxChecksums ; sBank3IndividualBoxChecksums + ld b, NUM_BOXES / 2 +.loop push bc push de - ld bc, $462 + ld bc, wBoxDataEnd - wBoxDataStart call SAVCheckSum pop de ld [de], a inc de pop bc dec b - jr nz, .asm_7386b + jr nz, .loop ret -Func_7387b: ; 7387b (1c:787b) - ld hl, PointerTable_73895 ; $7895 - ld a, [wd5a0] +GetBoxSRAMLocation: +; in: a = box num +; out: b = box SRAM bank, hl = pointer to start of box + ld hl, BoxSRAMPointerTable + ld a, [wCurrentBoxNum] and $7f - cp $6 - ld b, $2 - jr c, .asm_7388c + cp NUM_BOXES / 2 + ld b, 2 + jr c, .next inc b - sub $6 -.asm_7388c + sub NUM_BOXES / 2 +.next ld e, a - ld d, $0 + ld d, 0 add hl, de add hl, de ld a, [hli] @@ -326,45 +331,45 @@ Func_7387b: ; 7387b (1c:787b) ld l, a ret -PointerTable_73895: ; 73895 (1c:7895) - dw $A000 - dw $A462 - dw $A8C4 - dw $AD26 - dw $B188 - dw $B5EA +BoxSRAMPointerTable: + dw sBox1 ; sBox7 + dw sBox2 ; sBox8 + dw sBox3 ; sBox9 + dw sBox4 ; sBox10 + dw sBox5 ; sBox11 + dw sBox6 ; sBox12 -ChangeBox:: ; 738a1 (1c:78a1) +ChangeBox:: ld hl, WhenYouChangeBoxText call PrintText call YesNoChoice ld a, [wCurrentMenuItem] and a ret nz ; return if No was chosen - ld hl, wd5a0 - bit 7, [hl] - call z, Func_73a29 - call Func_7393f + ld hl, wCurrentBoxNum + 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 call UpdateSprites ld hl, hFlags_0xFFF6 set 1, [hl] call HandleMenuInput ld hl, hFlags_0xFFF6 res 1, [hl] - bit 1, a + bit 1, a ; pressed b ret nz - call Func_7387b + call GetBoxSRAMLocation ld e, l ld d, h - ld hl, W_NUMINBOX - call Func_7390e + ld hl, wBoxDataStart + call CopyBoxToOrFromSRAM ; copy old box from WRAM to SRAM ld a, [wCurrentMenuItem] set 7, a - ld [wd5a0], a - call Func_7387b - ld de, W_NUMINBOX - call Func_7390e - ld hl, W_MAPTEXTPTR + ld [wCurrentBoxNum], a + call GetBoxSRAMLocation + ld de, wBoxDataStart + call CopyBoxToOrFromSRAM ; copy new box from SRAM to WRAM + ld hl, wMapTextPtr ld de, wChangeBoxSavedMapTextPointer ld a, [hli] ld [de], a @@ -375,16 +380,17 @@ ChangeBox:: ; 738a1 (1c:78a1) call SaveSAVtoSRAM ld hl, wChangeBoxSavedMapTextPointer call SetMapTextPointer - ld a, (SFX_02_5d - SFX_Headers_02) / 3 + ld a, SFX_SAVE call PlaySoundWaitForCurrent call WaitForSoundToFinish ret -WhenYouChangeBoxText: ; 73909 (1c:7909) +WhenYouChangeBoxText: TX_FAR _WhenYouChangeBoxText db "@" -Func_7390e: ; 7390e (1c:790e) +CopyBoxToOrFromSRAM: +; copy an entire box from hl to de with b as the SRAM bank push hl ld a, SRAM_ENABLE ld [MBC1SRamEnable], a @@ -392,99 +398,102 @@ Func_7390e: ; 7390e (1c:790e) ld [MBC1SRamBankingMode], a ld a, b ld [MBC1SRamBank], a - ld bc, $462 + ld bc, wBoxDataEnd - wBoxDataStart call CopyData pop hl + +; mark the memory that the box was copied from as am empty box xor a ld [hli], a dec a ld [hl], a - ld hl, $a000 - ld bc, $1a4c + + ld hl, sBox1 ; sBox7 + ld bc, sBank2AllBoxesChecksum - sBox1 call SAVCheckSum - ld [$ba4c], a - call Func_73863 + ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum + call CalcIndividualBoxCheckSums xor a ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a ret -Func_7393f: ; 7393f (1c:793f) +DisplayChangeBoxMenu: xor a - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba - ld a, $3 - ld [wMenuWatchedKeys], a ; wMenuWatchedKeys - ld a, $b - ld [wMaxMenuItem], a ; wMaxMenuItem - ld a, $1 - ld [wTopMenuItemY], a ; wTopMenuItemY - ld a, $c - ld [wTopMenuItemX], a ; wTopMenuItemX + ld [H_AUTOBGTRANSFERENABLED], a + ld a, A_BUTTON | B_BUTTON + ld [wMenuWatchedKeys], a + ld a, 11 + ld [wMaxMenuItem], a + ld a, 1 + ld [wTopMenuItemY], a + ld a, 12 + ld [wTopMenuItemX], a xor a - ld [wcc37], a - ld a, [wd5a0] + ld [wMenuWatchMovingOutOfBounds], a + ld a, [wCurrentBoxNum] and $7f - ld [wCurrentMenuItem], a ; wCurrentMenuItem - ld [wLastMenuItem], a ; wLastMenuItem - ld hl, wTileMap - ld b, $2 - ld c, $9 + ld [wCurrentMenuItem], a + ld [wLastMenuItem], a + coord hl, 0, 0 + ld b, 2 + ld c, 9 call TextBoxBorder ld hl, ChooseABoxText call PrintText - hlCoord 11, 0 - ld b, $c - ld c, $7 + coord hl, 11, 0 + ld b, 12 + ld c, 7 call TextBoxBorder ld hl, hFlags_0xFFF6 set 2, [hl] - ld de, BoxNames ; $79d9 - hlCoord 13, 1 + ld de, BoxNames + coord hl, 13, 1 call PlaceString ld hl, hFlags_0xFFF6 res 2, [hl] - ld a, [wd5a0] + ld a, [wCurrentBoxNum] and $7f cp 9 - jr c, .asm_739a6 + jr c, .singleDigitBoxNum sub 9 - hlCoord 8, 2 + coord hl, 8, 2 ld [hl], "1" add "0" - jr .asm_739a8 -.asm_739a6 + jr .next +.singleDigitBoxNum add "1" -.asm_739a8 +.next Coorda 9, 2 - hlCoord 1, 2 + coord hl, 1, 2 ld de, BoxNoText call PlaceString - call Func_73a84 - hlCoord 18, 1 - ld de, wWhichTrade ; wWhichTrade - ld bc, $14 + call GetMonCountsForAllBoxes + coord hl, 18, 1 + ld de, wBoxMonCounts + ld bc, SCREEN_WIDTH ld a, $c -.asm_739c2 +.loop push af ld a, [de] - and a - jr z, .asm_739c9 - ld [hl], $78 -.asm_739c9 + and a ; is the box empty? + jr z, .skipPlacingPokeball + ld [hl], $78 ; place pokeball tile next to box name if box not empty +.skipPlacingPokeball add hl, bc inc de pop af dec a - jr nz, .asm_739c2 - ld a, $1 - ld [H_AUTOBGTRANSFERENABLED], a ; $ffba + jr nz, .loop + ld a, 1 + ld [H_AUTOBGTRANSFERENABLED], a ret -ChooseABoxText: ; 739d4 (1c:79d4) +ChooseABoxText: TX_FAR _ChooseABoxText db "@" -BoxNames: ; 739d9 (1c:79d9) +BoxNames: db "BOX 1" next "BOX 2" next "BOX 3" @@ -498,54 +507,57 @@ BoxNames: ; 739d9 (1c:79d9) next "BOX11" next "BOX12@" -BoxNoText: ; 73a21 (1c:7a21) +BoxNoText: db "BOX No.@" -Func_73a29: ; 73a29 (1c:7a29) +EmptyAllSRAMBoxes: +; marks all boxes in SRAM as empty (initialisation for the first time the +; player changes the box) ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 ld [MBC1SRamBankingMode], a - ld a, $2 + ld a, 2 ld [MBC1SRamBank], a - call Func_73a4b - ld a, $3 + call EmptySRAMBoxesInBank + ld a, 3 ld [MBC1SRamBank], a - call Func_73a4b + call EmptySRAMBoxesInBank xor a ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a ret -Func_73a4b: ; 73a4b (1c:7a4b) - ld hl, $a000 - call Func_73a7f - ld hl, $a462 - call Func_73a7f - ld hl, $a8c4 - call Func_73a7f - ld hl, $ad26 - call Func_73a7f - ld hl, $b188 - call Func_73a7f - ld hl, $b5ea - call Func_73a7f - ld hl, $a000 - ld bc, $1a4c +EmptySRAMBoxesInBank: +; marks every box in the current SRAM bank as empty + ld hl, sBox1 ; sBox7 + call EmptySRAMBox + ld hl, sBox2 ; sBox8 + call EmptySRAMBox + ld hl, sBox3 ; sBox9 + call EmptySRAMBox + ld hl, sBox4 ; sBox10 + call EmptySRAMBox + ld hl, sBox5 ; sBox11 + call EmptySRAMBox + ld hl, sBox6 ; sBox12 + call EmptySRAMBox + ld hl, sBox1 ; sBox7 + ld bc, sBank2AllBoxesChecksum - sBox1 call SAVCheckSum - ld [$ba4c], a - call Func_73863 + ld [sBank2AllBoxesChecksum], a ; sBank3AllBoxesChecksum + call CalcIndividualBoxCheckSums ret -Func_73a7f: ; 73a7f (1c:7a7f) +EmptySRAMBox: xor a ld [hli], a dec a ld [hl], a ret -Func_73a84: ; 73a84 (1c:7a84) - ld hl, wWhichTrade ; wWhichTrade +GetMonCountsForAllBoxes: + ld hl, wBoxMonCounts push hl ld a, SRAM_ENABLE ld [MBC1SRamEnable], a @@ -553,58 +565,61 @@ Func_73a84: ; 73a84 (1c:7a84) ld [MBC1SRamBankingMode], a ld a, $2 ld [MBC1SRamBank], a - call Func_73ab8 + call GetMonCountsForBoxesInBank ld a, $3 ld [MBC1SRamBank], a - call Func_73ab8 + call GetMonCountsForBoxesInBank xor a ld [MBC1SRamBankingMode], a ld [MBC1SRamEnable], a pop hl - ld a, [wd5a0] + +; copy the count for the current box from WRAM + ld a, [wCurrentBoxNum] and $7f ld c, a - ld b, $0 + ld b, 0 add hl, bc - ld a, [W_NUMINBOX] ; wda80 + ld a, [wNumInBox] ld [hl], a + ret -Func_73ab8: ; 73ab8 (1c:7ab8) - ld a, [$a000] +GetMonCountsForBoxesInBank: + ld a, [sBox1] ; sBox7 ld [hli], a - ld a, [$a462] + ld a, [sBox2] ; sBox8 ld [hli], a - ld a, [$a8c4] + ld a, [sBox3] ; sBox9 ld [hli], a - ld a, [$ad26] + ld a, [sBox4] ; sBox10 ld [hli], a - ld a, [$b188] + ld a, [sBox5] ; sBox11 ld [hli], a - ld a, [$b5ea] + ld a, [sBox6] ; sBox12 ld [hli], a ret -SAVCheckRandomID: ;$7ad1 +SAVCheckRandomID: ;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) +;(which are stored at wPlayerID)s ld a,$0a - ld [$0000],a + ld [MBC1SRamEnable],a ld a,$01 ld [MBC1SRamBankingMode],a ld [MBC1SRamBank],a - ld a,[$a598] + ld a,[sPlayerName] and a jr z,.next - ld hl,$a598 - ld bc,$0f8b + ld hl,sPlayerName + ld bc, sMainDataCheckSum - sPlayerName call SAVCheckSum ld c,a - ld a,[$b523] + ld a,[sMainDataCheckSum] cp c jr nz,.next - ld hl,$a605 + ld hl,sMainData + 98 ; player ID ld a,[hli] ld h,[hl] ld l,a @@ -616,43 +631,45 @@ SAVCheckRandomID: ;$7ad1 .next ld a,$00 ld [MBC1SRamBankingMode],a - ld [$0000],a + ld [MBC1SRamEnable],a ret -SaveHallOfFameTeams: ; 73b0d (1c:7b0d) - ld a, [wd5a2] +SaveHallOfFameTeams: + ld a, [wNumHoFTeams] dec a - cp NUM_HOF_TEAMS - jr nc, .asm_73b28 + cp HOF_TEAM_CAPACITY + jr nc, .shiftHOFTeams ld hl, sHallOfFame ld bc, HOF_TEAM call AddNTimes ld e, l ld d, h - ld hl, wcc5b + ld hl, wHallOfFame ld bc, HOF_TEAM jr HallOfFame_Copy -.asm_73b28 +.shiftHOFTeams +; if the space designated for HOF teams is full, then shift all HOF teams to the next slot, making space for the new HOF team +; this deletes the last HOF team though ld hl, sHallOfFame + HOF_TEAM ld de, sHallOfFame - ld bc, HOF_TEAM * (NUM_HOF_TEAMS - 1) + ld bc, HOF_TEAM * (HOF_TEAM_CAPACITY - 1) call HallOfFame_Copy - ld hl, wcc5b - ld de, sHallOfFame + HOF_TEAM * (NUM_HOF_TEAMS - 1) + ld hl, wHallOfFame + ld de, sHallOfFame + HOF_TEAM * (HOF_TEAM_CAPACITY - 1) ld bc, HOF_TEAM jr HallOfFame_Copy -LoadHallOfFameTeams: ; 73b3f (1c:7b3f) +LoadHallOfFameTeams: ld hl, sHallOfFame ld bc, HOF_TEAM - ld a, [wWhichTrade] ; wWhichTrade + ld a, [wHoFTeamIndex] call AddNTimes - ld de, wcc5b + ld de, wHallOfFame ld bc, HOF_TEAM ; fallthrough -HallOfFame_Copy: ; 73b51 (1c:7b51) +HallOfFame_Copy: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 @@ -665,7 +682,7 @@ HallOfFame_Copy: ; 73b51 (1c:7b51) ld [MBC1SRamEnable], a ret -ClearSAV: ; 73b6a (1c:7b6a) +ClearSAV: ld a, SRAM_ENABLE ld [MBC1SRamEnable], a ld a, $1 @@ -683,7 +700,7 @@ ClearSAV: ; 73b6a (1c:7b6a) ld [MBC1SRamEnable], a ret -PadSRAM_FF: ; 73b8f (1c:7b8f) +PadSRAM_FF: ld [MBC1SRamBank], a ld hl, $a000 ld bc, $2000 |