summaryrefslogtreecommitdiff
path: root/engine/save.asm
diff options
context:
space:
mode:
authorU-Fish-PC\Daniel <corrnondacqb@yahoo.com>2014-05-22 18:13:20 -0400
committerU-Fish-PC\Daniel <corrnondacqb@yahoo.com>2014-05-22 18:13:20 -0400
commit15427f532085846ab6b51719be687951a094cb6c (patch)
treeedea9b189e91641a12dd521756894df84aeeace7 /engine/save.asm
parentea3ba4cde3706b7c77efb705555ec0c86321cbe2 (diff)
Pull a lot of engine out of main.asm
Diffstat (limited to 'engine/save.asm')
-rwxr-xr-xengine/save.asm698
1 files changed, 698 insertions, 0 deletions
diff --git a/engine/save.asm b/engine/save.asm
new file mode 100755
index 00000000..bf2ec037
--- /dev/null
+++ b/engine/save.asm
@@ -0,0 +1,698 @@
+LoadSAV: ; 735e8 (1c:75e8)
+;(if carry -> write
+;"the file data is destroyed")
+ call ClearScreen
+ call LoadFontTilePatterns
+ call LoadTextBoxTilePatterns
+ call LoadSAVCheckSum
+ jr c, .badsum
+ call LoadSAVCheckSum1
+ jr c, .badsum
+ call LoadSAVCheckSum2
+ jr c, .badsum
+ ld a, $2 ; good checksum
+ jr .goodsum
+.badsum
+ ld hl, $d730
+ push hl
+ set 6, [hl]
+ ld hl, FileDataDestroyedText
+ call PrintText
+ ld c, $64
+ call DelayFrames
+ pop hl
+ res 6, [hl]
+ ld a, $1 ; bad checksum
+.goodsum
+ ld [$d088], a ; checksum flag
+ ret
+
+FileDataDestroyedText: ; 7361e (1c:761e)
+ TX_FAR _FileDataDestroyedText
+ db "@"
+
+LoadSAVCheckSum: ; 73623 (1c:7623)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld [$4000], a
+ ld hl, $a598 ; hero name located in SRAM
+ ld bc, $f8b ; but here checks the full SAV
+ call SAVCheckSum
+ ld c, a
+ ld a, [$b523] ; SAV's checksum
+ cp c
+ jp z, .Func_73652
+ ld hl, $a598
+ ld bc, $f8b
+ call SAVCheckSum
+ ld c, a
+ ld a, [$b523] ; SAV's checksum
+ cp c
+ jp nz, SAVBadCheckSum
+
+.Func_73652 ; 73652 (1c:7652)
+ ld hl, $a598
+ ld de, W_PLAYERNAME ; $d158
+ ld bc, $b
+ call CopyData
+ ld hl, $a5a3
+ ld de, wPokedexOwned ; $d2f7
+ ld bc, $789
+ call CopyData
+ ld hl, W_CURMAPTILESET ; $d367
+ set 7, [hl]
+ ld hl, $ad2c
+ ld de, wSpriteStateData1
+ ld bc, $200
+ call CopyData
+ ld a, [$b522]
+ ld [$ffd7], a
+ ld hl, $b0c0
+ ld de, W_NUMINBOX ; $da80
+ ld bc, $462
+ call CopyData
+ and a
+ jp SAVGoodChecksum
+
+LoadSAVCheckSum1: ; 73690 (1c:7690)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld [$4000], a
+ ld hl, $a598 ; hero name located in SRAM
+ ld bc, $f8b ; but here checks the full SAV
+ call SAVCheckSum
+ ld c, a
+ ld a, [$b523] ; SAV's checksum
+ cp c
+ jr nz, SAVBadCheckSum
+ ld hl, $b0c0
+ ld de, W_NUMINBOX ; $da80
+ ld bc, $462
+ call CopyData
+ and a
+ jp SAVGoodChecksum
+
+LoadSAVCheckSum2: ; 736bd (1c:76bd)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld [$4000], a
+ ld hl, $a598 ; hero name located in SRAM
+ ld bc, $f8b ; but here checks the full SAV
+ call SAVCheckSum
+ ld c, a
+ ld a, [$b523] ; SAV's checksum
+ cp c
+ jp nz, SAVBadCheckSum
+ ld hl, $af2c
+ ld de, W_NUMINPARTY ; $d163
+ ld bc, $194
+ call CopyData
+ ld hl, $a5a3
+ ld de, wPokedexOwned ; $d2f7
+ ld bc, wPokedexSeenEnd - wPokedexOwned
+ call CopyData
+ and a
+ jp SAVGoodChecksum
+
+SAVBadCheckSum: ; 736f7 (1c:76f7)
+ scf
+
+SAVGoodChecksum: ; 736f8 (1c:76f8)
+ ld a, $0
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+Func_73701: ; 0x73701
+ call LoadSAVCheckSum
+ call LoadSAVCheckSum1
+ jp LoadSAVCheckSum2
+
+SaveSAV: ;$770a
+ callba PrintSaveScreenText
+ ld hl,WouldYouLikeToSaveText
+ call SaveSAVConfirm
+ and a ;|0 = Yes|1 = No|
+ ret nz
+ ld a,[$d088]
+ dec a
+ jr z,.save
+ call SAVCheckRandomID
+ jr z,.save
+ ld hl,OlderFileWillBeErasedText
+ call SaveSAVConfirm
+ and a
+ ret nz
+.save ;$772d
+ call SaveSAVtoSRAM ;$7848
+ FuncCoord 1,13
+ ld hl,Coord
+ ld bc,$0412
+ call ClearScreenArea ; clear area 4x12 starting at 13,1
+ FuncCoord 1,14
+ ld hl,Coord
+ ld de,NowSavingString
+ call PlaceString
+ ld c,$78
+ call DelayFrames
+ ld hl,GameSavedText
+ call PrintText
+ ld a, (SFX_02_5d - SFX_Headers_02) / 3 ;sound for saved game
+ call PlaySoundWaitForCurrent
+ call WaitForSoundToFinish
+ ld c,$1e
+ jp DelayFrames
+
+NowSavingString:
+ db "Now saving...@"
+
+SaveSAVConfirm: ; 73768 (1c:7768)
+ call PrintText
+ FuncCoord 0, 7
+ ld hl,Coord
+ ld bc,$0801 ;arrow's coordinates |b = Y|c = X|
+ ld a,$14 ;one line shifting ($28 = 2 lines)
+ ld [$d125],a
+ call DisplayTextBoxID ;handle Yes/No KeyPress
+ ld a,[$cc26]
+ 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)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld [$4000], a
+ ld hl, W_PLAYERNAME ; $d158
+ ld de, $a598
+ ld bc, $b
+ call CopyData
+ ld hl, wPokedexOwned ; $d2f7
+ ld de, $a5a3
+ ld bc, $789
+ call CopyData
+ ld hl, wSpriteStateData1 ; OAM?
+ ld de, $ad2c
+ ld bc, $200
+ call CopyData
+ ld hl, W_NUMINBOX ; $da80
+ ld de, $b0c0
+ ld bc, $462
+ call CopyData
+ ld a, [$ffd7]
+ ld [$b522], a
+ ld hl, $a598
+ ld bc, $f8b
+ call SAVCheckSum
+ ld [$b523], a
+ xor a
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+SaveSAVtoSRAM1: ; 737e2 (1c:77e2)
+; stored pokémon
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld [$4000], a
+ ld hl, W_NUMINBOX ; $da80
+ ld de, $b0c0
+ ld bc, $462
+ call CopyData
+ ld hl, $a598
+ ld bc, $f8b
+ call SAVCheckSum
+ ld [$b523], a
+ xor a
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+SaveSAVtoSRAM2: ; 7380f (1c:780f)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld [$4000], a
+ ld hl, W_NUMINPARTY ; $d163
+ ld de, $af2c
+ ld bc, $194
+ call CopyData
+ ld hl, wPokedexOwned ; pokédex only
+ ld de, $a5a3
+ ld bc, wPokedexSeenEnd - wPokedexOwned
+ call CopyData
+ ld hl, $a598
+ ld bc, $f8b
+ call SAVCheckSum
+ ld [$b523], a
+ xor a
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+SaveSAVtoSRAM: ; 73848 (1c:7848)
+ ld a, $2
+ ld [$d088], a
+ call SaveSAVtoSRAM0
+ call SaveSAVtoSRAM1
+ jp SaveSAVtoSRAM2
+
+SAVCheckSum: ; 73856 (1c:7856)
+;Check Sum (result[1 byte] is complemented)
+ ld d, $0
+.loop
+ ld a, [hli]
+ add d
+ ld d, a
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+ ld a, d
+ cpl
+ ret
+
+Func_73863: ; 73863 (1c:7863)
+ ld hl, $a000
+ ld de, $ba4d
+ ld b, $6
+.asm_7386b
+ push bc
+ push de
+ ld bc, $462
+ call SAVCheckSum
+ pop de
+ ld [de], a
+ inc de
+ pop bc
+ dec b
+ jr nz, .asm_7386b
+ ret
+
+Func_7387b: ; 7387b (1c:787b)
+ ld hl, PointerTable_73895 ; $7895
+ ld a, [$d5a0]
+ and $7f
+ cp $6
+ ld b, $2
+ jr c, .asm_7388c
+ inc b
+ sub $6
+.asm_7388c
+ ld e, a
+ ld d, $0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+PointerTable_73895: ; 73895 (1c:7895)
+ dw $A000
+ dw $A462
+ dw $A8C4
+ dw $AD26
+ dw $B188
+ dw $B5EA
+
+Func_738a1:: ; 738a1 (1c:78a1)
+ ld hl, WhenYouChangeBoxText
+ call PrintText
+ call YesNoChoice
+ ld a, [wCurrentMenuItem] ; $cc26
+ and a
+ ret nz
+ ld hl, $d5a0
+ bit 7, [hl]
+ call z, Func_73a29
+ call Func_7393f
+ call UpdateSprites
+ ld hl, $fff6
+ set 1, [hl]
+ call HandleMenuInput
+ ld hl, $fff6
+ res 1, [hl]
+ bit 1, a
+ ret nz
+ call Func_7387b
+ ld e, l
+ ld d, h
+ ld hl, W_NUMINBOX ; $da80
+ call Func_7390e
+ ld a, [wCurrentMenuItem] ; $cc26
+ set 7, a
+ ld [$d5a0], a
+ call Func_7387b
+ ld de, W_NUMINBOX ; $da80
+ call Func_7390e
+ ld hl, W_MAPTEXTPTR ; $d36c
+ ld de, wWhichTrade ; $cd3d
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ call Func_3f05
+ call SaveSAVtoSRAM
+ ld hl, wWhichTrade ; $cd3d
+ call Func_3f0f
+ ld a, (SFX_02_5d - SFX_Headers_02) / 3
+ call PlaySoundWaitForCurrent
+ call WaitForSoundToFinish
+ ret
+
+WhenYouChangeBoxText: ; 73909 (1c:7909)
+ TX_FAR _WhenYouChangeBoxText
+ db "@"
+
+Func_7390e: ; 7390e (1c:790e)
+ push hl
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld a, b
+ ld [$4000], a
+ ld bc, $462
+ call CopyData
+ pop hl
+ xor a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ ld hl, $a000
+ ld bc, $1a4c
+ call SAVCheckSum
+ ld [$ba4c], a
+ call Func_73863
+ xor a
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+Func_7393f: ; 7393f (1c:793f)
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ ld a, $3
+ ld [wMenuWatchedKeys], a ; $cc29
+ ld a, $b
+ ld [wMaxMenuItem], a ; $cc28
+ ld a, $1
+ ld [wTopMenuItemY], a ; $cc24
+ ld a, $c
+ ld [wTopMenuItemX], a ; $cc25
+ xor a
+ ld [$cc37], a
+ ld a, [$d5a0]
+ and $7f
+ ld [wCurrentMenuItem], a ; $cc26
+ ld [wLastMenuItem], a ; $cc2a
+ ld hl, wTileMap
+ ld b, $2
+ ld c, $9
+ call TextBoxBorder
+ ld hl, ChooseABoxText
+ call PrintText
+ FuncCoord 11, 0 ; $c3ab
+ ld hl, Coord
+ ld b, $c
+ ld c, $7
+ call TextBoxBorder
+ ld hl, $fff6
+ set 2, [hl]
+ ld de, BoxNames ; $79d9
+ FuncCoord 13, 1 ; $c3c1
+ ld hl, Coord
+ call PlaceString
+ ld hl, $fff6
+ res 2, [hl]
+ ld a, [$d5a0]
+ and $7f
+ cp $9
+ jr c, .asm_739a6
+ sub $9
+ FuncCoord 8, 2 ; $c3d0
+ ld hl, Coord
+ ld [hl], $f7
+ add $f6
+ jr .asm_739a8
+.asm_739a6
+ add $f7
+.asm_739a8
+ FuncCoord 9, 2 ; $c3d1
+ ld [Coord], a
+ FuncCoord 1, 2 ; $c3c9
+ ld hl, Coord
+ ld de, BoxNoText
+ call PlaceString
+ call Func_73a84
+ FuncCoord 18, 1 ; $c3c6
+ ld hl, Coord
+ ld de, wWhichTrade ; $cd3d
+ ld bc, $14
+ ld a, $c
+.asm_739c2
+ push af
+ ld a, [de]
+ and a
+ jr z, .asm_739c9
+ ld [hl], $78
+.asm_739c9
+ add hl, bc
+ inc de
+ pop af
+ dec a
+ jr nz, .asm_739c2
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
+ 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.@"
+
+Func_73a29: ; 73a29 (1c:7a29)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld a, $2
+ ld [$4000], a
+ call Func_73a4b
+ ld a, $3
+ ld [$4000], a
+ call Func_73a4b
+ xor a
+ ld [$6000], a
+ ld [$0], 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
+ call SAVCheckSum
+ ld [$ba4c], a
+ call Func_73863
+ ret
+
+Func_73a7f: ; 73a7f (1c:7a7f)
+ xor a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ ret
+
+Func_73a84: ; 73a84 (1c:7a84)
+ ld hl, wWhichTrade ; $cd3d
+ push hl
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ ld a, $2
+ ld [$4000], a
+ call Func_73ab8
+ ld a, $3
+ ld [$4000], a
+ call Func_73ab8
+ xor a
+ ld [$6000], a
+ ld [$0], a
+ pop hl
+ ld a, [$d5a0]
+ and $7f
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [W_NUMINBOX] ; $da80
+ ld [hl], a
+ ret
+
+Func_73ab8: ; 73ab8 (1c:7ab8)
+ ld a, [$a000]
+ ld [hli], a
+ ld a, [$a462]
+ ld [hli], a
+ ld a, [$a8c4]
+ ld [hli], a
+ ld a, [$ad26]
+ ld [hli], a
+ ld a, [$b188]
+ ld [hli], a
+ ld a, [$b5ea]
+ ld [hli], a
+ ret
+
+SAVCheckRandomID: ;$7ad1
+;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 $d359-d35a)
+ ld a,$0a
+ ld [$0000],a
+ ld a,$01
+ ld [$6000],a
+ ld [$4000],a
+ ld a,[$a598]
+ and a
+ jr z,.next
+ ld hl,$a598
+ ld bc,$0f8b
+ call SAVCheckSum
+ ld c,a
+ ld a,[$b523]
+ cp c
+ jr nz,.next
+ ld hl,$a605
+ ld a,[hli]
+ ld h,[hl]
+ ld l,a
+ ld a,[$d359]
+ cp l
+ jr nz,.next
+ ld a,[$d35a]
+ cp h
+.next
+ ld a,$00
+ ld [$6000],a
+ ld [$0000],a
+ ret
+
+Func_73b0d: ; 73b0d (1c:7b0d)
+ ld a, [$d5a2]
+ dec a
+ cp $32
+ jr nc, .asm_73b28
+ ld hl, $a598
+ ld bc, $60
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld hl, $cc5b
+ ld bc, $60
+ jr CopyToSRAM0
+.asm_73b28
+ ld hl, $a5f8
+ ld de, $a598
+ ld bc, $1260
+ call CopyToSRAM0
+ ld hl, $cc5b
+ ld de, $b7f8
+ ld bc, $60
+ jr CopyToSRAM0
+
+Func_73b3f: ; 73b3f (1c:7b3f)
+ ld hl, $a598
+ ld bc, $60
+ ld a, [wWhichTrade] ; $cd3d
+ call AddNTimes
+ ld de, $cc5b
+ ld bc, $60
+ ; fallthrough
+CopyToSRAM0: ; 73b51 (1c:7b51)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ xor a
+ ld [$4000], a
+ call CopyData
+ xor a
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+Func_73b6a: ; 73b6a (1c:7b6a)
+ ld a, $a
+ ld [$0], a
+ ld a, $1
+ ld [$6000], a
+ 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
+ ld [$6000], a
+ ld [$0], a
+ ret
+
+PadSRAM_FF: ; 73b8f (1c:7b8f)
+ ld [$4000], a
+ ld hl, $a000
+ ld bc, $2000
+ ld a, $ff
+ jp FillMemory