pokecrystal-board/engine/save.asm
2015-08-19 10:17:58 -07:00

1176 lines
17 KiB
NASM

Function14a1a: ; 14a1a
call Function1d6e
callba Function5e9a
call SpeechTextBox
call UpdateSprites
callba Function4cf45
ld hl, UnknownText_0x15283
call SaveTheGame_yesorno
jr nz, .refused
call CheckForExistingSaveFile
jr c, .refused
call SetWRAMStateForSave
call _SavingDontTurnOffThePower
call ClearWRAMStateAfterSave
call ExitMenu
and a
ret
.refused
call ExitMenu
call Functiond90
callba Function4cf45
scf
ret
Function14a58: ; 14a58
call SetWRAMStateForSave
callba Function14056
callba Function1050d9
call SavePartyData
call Function14e13
call LoadSavedPartyData
call Function14e8b
callba Function44725
callba Function1406a
call ClearWRAMStateAfterSave
ret
; 14a83
Function14a83: ; 14a83 (5:4a83)
push de
ld hl, UnknownText_0x152a1
call MenuTextBox
call YesNoBox
call ExitMenu
jr c, .refused
call CheckForExistingSaveFile
jr c, .refused
call SetWRAMStateForSave
call SavingDontTurnOffThePower
call Function14e0c
pop de
ld a, e
ld [wCurBox], a
call Function15021
call SavedTheGame
call ClearWRAMStateAfterSave
and a
ret
.refused
pop de
ret
Function14ab2: ; 14ab2
call CheckForExistingSaveFile
jr c, .refused
call SetWRAMStateForSave
call _SavingDontTurnOffThePower
call ClearWRAMStateAfterSave
and a
.refused
ret
; 14ac2
Function14ac2: ; 14ac2
call SetWRAMStateForSave
push de
call Function14e0c
pop de
ld a, e
ld [wCurBox], a
call Function15021
call ClearWRAMStateAfterSave
ret
; 14ad5
Function14ad5: ; 14ad5
call SetWRAMStateForSave
push de
call Function14e0c
pop de
ld a, e
ld [wCurBox], a
ld a, $1
ld [wcfcd], a
callba Function14056
callba Function1050d9
call Function14da9
call SaveOptionsSelection
call SavePlayerData
call SavePartyData
call Function14e13
call Function14e2d
call LoadSavedOptions
call LoadSavedPlayerData
call LoadSavedPartyData
call Function14e8b
callba Function44725
callba Function106187
callba Function1406a
call Function15021
call ClearWRAMStateAfterSave
ld de, SFX_SAVE
call PlaySFX
ld c, $18
call DelayFrames
ret
; 14b34
Function14b34: ; 14b34
ld hl, UnknownText_0x152a6
call MenuTextBox
call YesNoBox
call ExitMenu
jr c, .asm_14b52
call CheckForExistingSaveFile
jr c, .asm_14b52
call SetWRAMStateForSave
call _SavingDontTurnOffThePower
call ClearWRAMStateAfterSave
and a
ret
.asm_14b52
scf
ret
; 14b54
SetWRAMStateForSave: ; 14b54
ld a, $1
ld [wc2cd], a
ret
; 14b5a
ClearWRAMStateAfterSave: ; 14b5a
xor a
ld [wc2cd], a
ret
; 14b5f
Function14b5f: ; 14b5f
ld a, $1
call GetSRAMBank
ld hl, $bdd9
ld de, $be3b
ld bc, $0b1a
.loop
ld a, [hld]
ld [de], a
dec de
dec bc
ld a, c
or b
jr nz, .loop
ld hl, OverworldMap
ld de, $b2c0
ld bc, 7 * 14
call CopyBytes
call CloseSRAM
ret
; 14b85
Function14b85: ; 14b85
call Function14c10
ret
; 14b89
CheckForExistingSaveFile: ; 14b89
ld a, [wcfcd]
and a
jr z, .getridofpreviousplayersave
call Function14bcb
jr z, .yoursavefile
ld hl, UnknownText_0x15297
call SaveTheGame_yesorno
jr nz, .refused
jr .getridofpreviousplayersave
.yoursavefile
ld hl, UnknownText_0x15292
call SaveTheGame_yesorno
jr nz, .refused
jr .ok
.getridofpreviousplayersave
call GetRidOfPreviousPlayersSave
.ok
and a
ret
.refused
scf
ret
; 14baf
SaveTheGame_yesorno: ; 14baf
ld b, BANK(UnknownText_0x15283)
call MapTextbox
call LoadMenuTextBox
lb bc, 0, 7
call PlaceYesNoBox
ld a, [wcfa9]
dec a
call WriteBackup
push af
call Functiond90
pop af
and a
ret
; 14bcb
Function14bcb: ; 14bcb
ld a, $1
call GetSRAMBank
ld hl, $a009
ld a, [hli]
ld c, [hl]
ld b, a
call CloseSRAM
ld a, [PlayerID]
cp b
ret nz
ld a, [PlayerID + 1]
cp c
ret
; 14be3
_SavingDontTurnOffThePower: ; 14be3
call SavingDontTurnOffThePower
SavedTheGame: ; 14be6
call Function14c10
; wait 32 frames
ld c, $20
call DelayFrames
; copy the original text speed setting to the stack
ld a, [Options]
push af
; set text speed super slow
ld a, 3
ld [Options], a
; <PLAYER> saved the game!
ld hl, UnknownText_0x1528d
call PrintText
; restore the original text speed setting
pop af
ld [Options], a
ld de, SFX_SAVE
call WaitPlaySFX
call WaitSFX
; wait 30 frames
ld c, $1e
call DelayFrames
ret
; 14c10
Function14c10: ; 14c10
ld a, 1
ld [wcfcd], a
callba Function14056
callba Function1050d9
call Function14da9
call SaveOptionsSelection
call SavePlayerData
call SavePartyData
call Function14e0c
call Function14e13
call Function14e2d
call LoadSavedOptions
call LoadSavedPlayerData
call LoadSavedPartyData
call Function14e8b
call Function14c6b
callba Function44725
callba Function106187
callba Function1406a
ld a, $1
call GetSRAMBank
ld a, [$be45]
cp $4
jr nz, .asm_14c67
xor a
ld [$be45], a
.asm_14c67
call CloseSRAM
ret
; 14c6b
Function14c6b: ; 14c6b
call Function14c90
ld a, $0
call GetSRAMBank
ld a, [$bf10]
ld e, a
ld a, [$bf11]
ld d, a
or e
jr z, .asm_14c84
ld a, e
sub l
ld a, d
sbc h
jr c, .asm_14c8c
.asm_14c84
ld a, l
ld [$bf10], a
ld a, h
ld [$bf11], a
.asm_14c8c
call CloseSRAM
ret
; 14c90
Function14c90: ; 14c90
ld hl, wc000
.asm_14c93
ld a, [hl]
or a
ret nz
inc hl
jr .asm_14c93
; 14c99
SavingDontTurnOffThePower: ; 14c99
; Prevent joypad interrupts
xor a
ld [hJoypadReleased], a
ld [hJoypadPressed], a
ld [hJoypadSum], a
ld [hJoypadDown], a
; Save the text speed setting to the stack
ld a, [Options]
push af
; Set the text speed to super slow
ld a, $3
ld [Options], a
; SAVING... DON'T TURN OFF THE POWER.
ld hl, UnknownText_0x15288
call PrintText
; Restore the text speed setting
pop af
ld [Options], a
; Wait for 16 frames
ld c, $10
call DelayFrames
ret
; 14cbb
GetRidOfPreviousPlayersSave: ; 14cbb
call Function151fb
call Function14d06
call Function14ce2
call Function14cf4
call Function14d68
call Function14d5c
ld a, $0
call GetSRAMBank
xor a
ld [$bf10], a
ld [$bf11], a
call CloseSRAM
ld a, $1
ld [wd4b4], a
ret
; 14ce2
Function14ce2: ; 14ce2
ld a, $1
call GetSRAMBank
ld hl, $b260
ld bc, $0060
xor a
call ByteFill
jp CloseSRAM
; 14cf4
Function14cf4: ; 14cf4
ld a, $0
call GetSRAMBank
ld hl, $abe4
ld bc, $004c
xor a
call ByteFill
jp CloseSRAM
; 14d06
Function14d06: ; 14d06
ld a, $1
call GetSRAMBank
ld hl, $b2c0
ld bc, $0b7c
xor a
call ByteFill
jp CloseSRAM
; 14d18
Function14d18: ; 14d18
; copy Unknown_14d2c to SRA4:a007
ld a, $4
call GetSRAMBank
ld hl, Unknown_14d2c
ld de, $a007
ld bc, 48
call CopyBytes
jp CloseSRAM
; 14d2c
Unknown_14d2c: ; 14d2c
db $0d, $02, $00, $05, $00, $00
db $22, $02, $01, $05, $00, $00
db $03, $04, $05, $08, $03, $05
db $0e, $06, $03, $02, $00, $00
db $39, $07, $07, $04, $00, $05
db $04, $07, $01, $05, $00, $00
db $0f, $05, $14, $07, $05, $05
db $11, $0c, $0c, $06, $06, $04
; 14d5c
Function14d5c: ; 14d5c
ld a, $1
call GetSRAMBank
xor a
ld [$be45], a
jp CloseSRAM
; 14d68
Function14d68: ; 14d68
call Function1509a
ret
; 14d6c
Function14d6c: ; 14d6c
ld a, $4
call GetSRAMBank
ld a, [$a60b]
ld b, $0
and a
jr z, .ok
ld b, $2
.ok
ld a, b
ld [$a60b], a
call CloseSRAM
ret
; 14d83
Function14d83: ; 14d83
ld a, $4
call GetSRAMBank
xor a
ld [$a60c], a
ld [$a60d], a
call CloseSRAM
ret
; 14d93
Function14d93: ; 14d93
ld a, $7
call GetSRAMBank
xor a
ld [$a000], a
call CloseSRAM
ret
; 14da0
Function14da0: ; 14da0
ld a, [wd4b4]
and a
ret nz
call GetRidOfPreviousPlayersSave
ret
; 14da9
Function14da9: ; 14da9
ld a, $1
call GetSRAMBank
ld a, 99
ld [$a008], a
ld a, " "
ld [$ad0f], a
jp CloseSRAM
; 14dbb
SaveOptionsSelection: ; 14dbb
; Copy Options to SRA1:a000
ld a, $1
call GetSRAMBank
ld hl, Options
ld de, $a000
ld bc, OptionsEnd - Options
call CopyBytes
ld a, [Options]
and $ef
ld [$a000], a
jp CloseSRAM
; 14dd7
SavePlayerData: ; 14dd7
; Copy 2122 bytes starting at PlayerID to SRA1:a009
ld a, $1
call GetSRAMBank
ld hl, PlayerID
ld de, $a009
ld bc, VisitedSpawns - PlayerID
call CopyBytes
ld hl, VisitedSpawns
ld de, $a833
ld bc, PartyCount - VisitedSpawns
call CopyBytes
jp CloseSRAM
; 14df7
SavePartyData: ; 14df7
; Copy your party to SRA1:a865.
ld a, $1
call GetSRAMBank
ld hl, PartyCount
ld de, $a865
ld bc, wdff5 - PartyCount
call CopyBytes
call CloseSRAM
ret
; 14e0c
Function14e0c: ; 14e0c
call Function150d8
call Function150f9
ret
; 14e13
Function14e13: ; 14e13
ld hl, $a009
ld bc, $0b7a
ld a, $1
call GetSRAMBank
call Function15273
ld a, e
ld [$ad0d], a
ld a, d
ld [$ad0e], a
call CloseSRAM
ret
; 14e2d
Function14e2d: ; 14e2d
ld a, $0
call GetSRAMBank
ld a, 99
ld [$b208], a
ld a, " "
ld [$bf0f], a
call CloseSRAM
ret
; 14e40
LoadSavedOptions: ; 14e40
ld a, $0
call GetSRAMBank
ld hl, Options
ld de, $b200
ld bc, OptionsEnd - Options
call CopyBytes
call CloseSRAM
ret
; 14e55
LoadSavedPlayerData: ; 14e55
ld a, $0
call GetSRAMBank
ld hl, PlayerID
ld de, $b209
ld bc, VisitedSpawns - PlayerID
call CopyBytes
ld hl, VisitedSpawns
ld de, $ba33
ld bc, PartyCount - VisitedSpawns
call CopyBytes
call CloseSRAM
ret
; 14e76
LoadSavedPartyData: ; 14e76
ld a, $0
call GetSRAMBank
ld hl, PartyCount
ld de, $ba65
ld bc, wdff5 - PartyCount
call CopyBytes
call CloseSRAM
ret
; 14e8b
Function14e8b: ; 14e8b
ld hl, $b209
ld bc, $0b7a
ld a, $0
call GetSRAMBank
call Function15273
ld a, e
ld [$bf0d], a
ld a, d
ld [$bf0e], a
call CloseSRAM
ret
; 14ea5
TryLoadSaveFile: ; 14ea5 (5:4ea5)
call Function15028
jr nz, .trytowrite
call Function14fd7
call Function1500c
call Function15021
callba Function44745
callba Function10619d
callba Function1050ea
call Function14e2d
call LoadSavedOptions
call LoadSavedPlayerData
call LoadSavedPartyData
call Function14e8b
and a
ret
.trytowrite
call Function1507c
jr nz, .corrupt
call Function15046
call Function15067
call Function15021
callba Function44745
callba Function10619d
callba Function1050ea
call Function14da9
call SaveOptionsSelection
call SavePlayerData
call SavePartyData
call Function14e13
and a
ret
.corrupt
ld a, [Options]
push af
set 4, a
ld [Options], a
ld hl, UnknownText_0x1529c
call PrintText
pop af
ld [Options], a
scf
ret
Function14f1c: ; 14f1c
xor a
ld [wcfcd], a
call Function14f84
ld a, [wcfcd]
and a
jr z, .asm_14f46
ld a, $1
call GetSRAMBank
ld hl, $a044
ld de, StartDay
ld bc, $0008
call CopyBytes
ld hl, $a3da
ld de, StatusFlags
ld a, [hl]
ld [de], a
call CloseSRAM
ret
.asm_14f46
call Function14faf
ld a, [wcfcd]
and a
jr z, .asm_14f6c
ld a, $0
call GetSRAMBank
ld hl, $b244
ld de, StartDay
ld bc, 8
call CopyBytes
ld hl, $b5da
ld de, StatusFlags
ld a, [hl]
ld [de], a
call CloseSRAM
ret
.asm_14f6c
ld hl, DefaultOptions
ld de, Options
ld bc, OptionsEnd - Options
call CopyBytes
call Function67e
ret
; 14f7c
DefaultOptions: ; 14f7c
db $03 ; mid text speed
db $00
db $00 ; frame 0
db $01
db $40 ; gb printer: normal brightness
db $01 ; menu account on
db $00
db $00
; 14f84
Function14f84: ; 14f84
ld a, $1
call GetSRAMBank
ld a, [$a008]
cp 99
jr nz, .nope
ld a, [$ad0f]
cp " "
jr nz, .nope
ld hl, $a000
ld de, Options
ld bc, OptionsEnd - Options
call CopyBytes
call CloseSRAM
ld a, $1
ld [wcfcd], a
.nope
call CloseSRAM
ret
; 14faf
Function14faf: ; 14faf
ld a, $0
call GetSRAMBank
ld a, [$b208]
cp 99
jr nz, .nope
ld a, [$bf0f]
cp " "
jr nz, .nope
ld hl, $b200
ld de, Options
ld bc, OptionsEnd - Options
call CopyBytes
ld a, $2
ld [wcfcd], a
.nope
call CloseSRAM
ret
; 14fd7
Function14fd7: ; 14fd7 (5:4fd7)
ld a, $1
call GetSRAMBank
ld hl, $a009
ld de, PlayerID
ld bc, VisitedSpawns - PlayerID
call CopyBytes
ld hl, $a833
ld de, VisitedSpawns
ld bc, PartyCount - VisitedSpawns
call CopyBytes
call CloseSRAM
ld a, $1
call GetSRAMBank
ld a, [$be45]
cp $4
jr nz, .asm_15008
ld a, $3
ld [$be45], a
.asm_15008
call CloseSRAM
ret
Function1500c: ; 1500c
ld a, $1
call GetSRAMBank
ld hl, $a865
ld de, PartyCount
ld bc, wdff5 - PartyCount
call CopyBytes
call CloseSRAM
ret
; 15021
Function15021: ; 15021 (5:5021)
call Function150d8
call Function1517d
ret
Function15028: ; 15028 (5:5028)
ld hl, $a009
ld bc, $b7a
ld a, $1
call GetSRAMBank
call Function15273
ld a, [$ad0d]
cp e
jr nz, .asm_15040
ld a, [$ad0e]
cp d
.asm_15040
push af
call CloseSRAM
pop af
ret
Function15046: ; 15046 (5:5046)
ld a, $0
call GetSRAMBank
ld hl, $b209
ld de, PlayerID
ld bc, VisitedSpawns - PlayerID
call CopyBytes
ld hl, $ba33
ld de, VisitedSpawns
ld bc, PartyCount - VisitedSpawns
call CopyBytes
call CloseSRAM
ret
Function15067: ; 15067 (5:5067)
ld a, $0
call GetSRAMBank
ld hl, $ba65
ld de, PartyCount
ld bc, wdff5 - PartyCount
call CopyBytes
call CloseSRAM
ret
Function1507c: ; 1507c (5:507c)
ld hl, $b209
ld bc, $b7a
ld a, $0
call GetSRAMBank
call Function15273
ld a, [$bf0d]
cp e
jr nz, .asm_15094
ld a, [$bf0e]
cp d
.asm_15094
push af
call CloseSRAM
pop af
ret
Function1509a: ; 1509a
ld a, $1
call GetSRAMBank
ld hl, PlayerGender
ld de, $be3d
ld bc, wd479 - PlayerGender
call CopyBytes
ld hl, wd479
ld a, [hli]
ld [$a60e], a
ld a, [hli]
ld [$a60f], a
jp CloseSRAM
; 150b9
Function150b9: ; 150b9 (5:50b9)
ld a, $1
call GetSRAMBank
ld hl, $be3d
ld de, PlayerGender
ld bc, wd479 - PlayerGender
call CopyBytes
ld hl, wd479
ld a, [$a60e]
ld [hli], a
ld a, [$a60f]
ld [hli], a
jp CloseSRAM
Function150d8: ; 150d8
ld a, [wCurBox]
cp NUM_BOXES
jr c, .asm_150e3
xor a
ld [wCurBox], a
.asm_150e3
ld e, a
ld d, 0
ld hl, Unknown_1522d
rept 5
add hl, de
endr
ld a, [hli]
push af
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
pop af
ret
; 150f9
Function150f9: ; 150f9
push hl
push af
push de
ld a, $1
call GetSRAMBank
ld hl, sBoxCount
ld de, wc608
ld bc, $01e0
call CopyBytes
call CloseSRAM
pop de
pop af
push af
push de
call GetSRAMBank
ld hl, wc608
ld bc, $01e0
call CopyBytes
call CloseSRAM
ld a, $1
call GetSRAMBank
ld hl, $aef0
ld de, wc608
ld bc, $01e0
call CopyBytes
call CloseSRAM
pop de
pop af
ld hl, $01e0
add hl, de
ld e, l
ld d, h
push af
push de
call GetSRAMBank
ld hl, wc608
ld bc, $01e0
call CopyBytes
call CloseSRAM
ld a, $1
call GetSRAMBank
ld hl, $b0d0
ld de, wc608
ld bc, $008e
call CopyBytes
call CloseSRAM
pop de
pop af
ld hl, $01e0
add hl, de
ld e, l
ld d, h
call GetSRAMBank
ld hl, wc608
ld bc, $008e
call CopyBytes
call CloseSRAM
pop hl
ret
; 1517d
Function1517d: ; 1517d (5:517d)
push hl
ld l, e
ld h, d
push af
push hl
call GetSRAMBank
ld de, wc608
ld bc, $1e0
call CopyBytes
call CloseSRAM
ld a, $1
call GetSRAMBank
ld hl, wc608
ld de, $ad10
ld bc, $1e0
call CopyBytes
call CloseSRAM
pop hl
pop af
ld de, $1e0
add hl, de
push af
push hl
call GetSRAMBank
ld de, wc608
ld bc, $1e0
call CopyBytes
call CloseSRAM
ld a, $1
call GetSRAMBank
ld hl, wc608
ld de, $aef0
ld bc, $1e0
call CopyBytes
call CloseSRAM
pop hl
pop af
ld de, $1e0
add hl, de
call GetSRAMBank
ld de, wc608
ld bc, $8e
call CopyBytes
call CloseSRAM
ld a, $1
call GetSRAMBank
ld hl, wc608
ld de, $b0d0
ld bc, $8e
call CopyBytes
call CloseSRAM
pop hl
ret
Function151fb: ; 151fb
ld hl, Unknown_1522d
ld c, $e
.outerloop
push bc
ld a, [hli]
call GetSRAMBank
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
xor a
ld [de], a
inc de
ld a, -1
ld [de], a
inc de
ld bc, $044c
.loop
xor a
ld [de], a
inc de
dec bc
ld a, b
or c
jr nz, .loop
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, -1
ld [de], a
inc de
xor a
ld [de], a
call CloseSRAM
pop bc
dec c
jr nz, .outerloop
ret
; 1522d
Unknown_1522d: ; 1522d
; dbww bank, address, address
dbww $02, $a000, $a44e ; 2, $a000, $a44e
dbww $02, $a450, $a89e ; 2, $a450, $a89e
dbww $02, $a8a0, $acee ; 2, $a8a0, $acee
dbww $02, $acf0, $b13e ; 2, $acf0, $b13e
dbww $02, $b140, $b58e ; 2, $b140, $b5de
dbww $02, $b590, $b9de ; 2, $b590, $b9de
dbww $02, $b9e0, $be2e ; 2, $b9e0, $be2e
dbww $03, $a000, $a44e ; 3, $a000, $a44e
dbww $03, $a450, $a89e ; 3, $a450, $a89e
dbww $03, $a8a0, $acee ; 3, $a8a0, $acee
dbww $03, $acf0, $b13e ; 3, $acf0, $b13e
dbww $03, $b140, $b58e ; 3, $b140, $b58e
dbww $03, $b590, $b9de ; 3, $b590, $b9de
dbww $03, $b9e0, $be2e ; 3, $b9e0, $be2e
; 15273
Function15273: ; 15273
ld de, 0
.loop
ld a, [hli]
add e
ld e, a
ld a, 0
adc d
ld d, a
dec bc
ld a, b
or c
jr nz, .loop
ret
; 15283
UnknownText_0x15283: ; 0x15283
; Would you like to save the game?
text_jump UnknownText_0x1c454b
db "@"
; 0x15288
UnknownText_0x15288: ; 0x15288
; SAVING… DON'T TURN OFF THE POWER.
text_jump UnknownText_0x1c456d
db "@"
; 0x1528d
UnknownText_0x1528d: ; 0x1528d
; saved the game.
text_jump UnknownText_0x1c4590
db "@"
; 0x15292
UnknownText_0x15292: ; 0x15292
; There is already a save file. Is it OK to overwrite?
text_jump UnknownText_0x1c45a3
db "@"
; 0x15297
UnknownText_0x15297: ; 0x15297
; There is another save file. Is it OK to overwrite?
text_jump UnknownText_0x1c45d9
db "@"
; 0x1529c
UnknownText_0x1529c: ; 0x1529c
; The save file is corrupted!
text_jump UnknownText_0x1c460d
db "@"
; 0x152a1
UnknownText_0x152a1: ; 0x152a1
; When you change a #MON BOX, data will be saved. OK?
text_jump UnknownText_0x1c462a
db "@"
; 0x152a6
UnknownText_0x152a6: ; 0x152a6
; Each time you move a #MON, data will be saved. OK?
text_jump UnknownText_0x1c465f
db "@"
; 0x152ab