begin load_save.c

This commit is contained in:
DizzyEggg 2017-09-04 18:26:39 +02:00
parent 7ba62bcac8
commit 92892d140a
17 changed files with 234 additions and 185 deletions

View File

@ -307,7 +307,7 @@ c2_copyright_1: @ 816CEAC
bl sub_815355C bl sub_815355C
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
bl InitSaveBlockPointersWithRandomOffset bl SetSaveBlocksPointers
bl sub_808447C bl sub_808447C
bl ResetSaveCounters bl ResetSaveCounters
movs r0, 0 movs r0, 0

View File

@ -52672,8 +52672,8 @@ SetBerryPowder: @ 802467C
.pool .pool
thumb_func_end SetBerryPowder thumb_func_end SetBerryPowder
thumb_func_start sub_8024690 thumb_func_start ApplyNewEncyprtionKeyToBerryPowder
sub_8024690: @ 8024690 ApplyNewEncyprtionKeyToBerryPowder: @ 8024690
push {lr} push {lr}
adds r1, r0, 0 adds r1, r0, 0
ldr r0, =gSaveBlock2Ptr ldr r0, =gSaveBlock2Ptr
@ -52681,11 +52681,11 @@ sub_8024690: @ 8024690
movs r2, 0xFA movs r2, 0xFA
lsls r2, 1 lsls r2, 1
adds r0, r2 adds r0, r2
bl apply_u32_xor_crypto bl ApplyNewEncyprtionKeyToWord
pop {r0} pop {r0}
bx r0 bx r0
.pool .pool
thumb_func_end sub_8024690 thumb_func_end ApplyNewEncyprtionKeyToBerryPowder
thumb_func_start sub_80246AC thumb_func_start sub_80246AC
sub_80246AC: @ 80246AC sub_80246AC: @ 80246AC

View File

@ -5,97 +5,9 @@
.text .text
thumb_func_start CheckForFlashMemory
@ void CheckForFlashMemory()
CheckForFlashMemory: @ 8076B68
push {lr}
bl IdentifyFlash
lsls r0, 16
cmp r0, 0
bne _08076B84
ldr r1, =gFlashMemoryPresent
movs r0, 0x1
str r0, [r1]
bl StartFlashMemoryTimer
b _08076B8A
.pool
_08076B84:
ldr r1, =gFlashMemoryPresent
movs r0, 0
str r0, [r1]
_08076B8A:
pop {r0}
bx r0
.pool
thumb_func_end CheckForFlashMemory
thumb_func_start ClearSav2 thumb_func_start MoveSaveBlocks_ResetHeap
ClearSav2: @ 8076B94 MoveSaveBlocks_ResetHeap: @ 8076C2C
push {lr}
sub sp, 0x4
mov r1, sp
movs r0, 0
strh r0, [r1]
ldr r1, =gUnknown_02024A54
ldr r2, =0x010007d6
mov r0, sp
bl CpuSet
add sp, 0x4
pop {r0}
bx r0
.pool
thumb_func_end ClearSav2
thumb_func_start ClearSav1
ClearSav1: @ 8076BB8
push {lr}
sub sp, 0x4
mov r1, sp
movs r0, 0
strh r0, [r1]
ldr r1, =gUnknown_02025A00
ldr r2, =0x01001f04
mov r0, sp
bl CpuSet
add sp, 0x4
pop {r0}
bx r0
.pool
thumb_func_end ClearSav1
thumb_func_start InitSaveBlockPointersWithRandomOffset
@ void InitSaveBlockPointersWithRandomOffset(u8 offset)
InitSaveBlockPointersWithRandomOffset: @ 8076BDC
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
ldr r5, =gSaveBlock1Ptr
bl Random
adds r4, r0
movs r0, 0x7C
ands r4, r0
ldr r1, =gSaveBlock2Ptr
ldr r0, =gUnknown_02024A54
adds r0, r4, r0
str r0, [r1]
ldr r0, =gUnknown_02025A00
adds r0, r4, r0
str r0, [r5]
ldr r1, =gUnknown_03005D94
ldr r0, =gUnknown_02029808
adds r4, r0
str r4, [r1]
bl SetBagItemsPointers
bl SetDecorationInventoriesPointers
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end InitSaveBlockPointersWithRandomOffset
thumb_func_start saveblock_randomize_and_relocate
saveblock_randomize_and_relocate: @ 8076C2C
push {r4-r7,lr} push {r4-r7,lr}
mov r7, r10 mov r7, r10
mov r6, r9 mov r6, r9
@ -126,7 +38,7 @@ saveblock_randomize_and_relocate: @ 8076C2C
ldr r0, =0x02000f2c ldr r0, =0x02000f2c
adds r2, r7, 0 adds r2, r7, 0
bl memcpy bl memcpy
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
mov r8, r0 mov r8, r0
ldr r1, [r0] ldr r1, [r0]
ldr r0, =0x000083d0 ldr r0, =0x000083d0
@ -141,7 +53,7 @@ saveblock_randomize_and_relocate: @ 8076C2C
adds r1, r0 adds r1, r0
ldrb r0, [r4, 0xD] ldrb r0, [r4, 0xD]
adds r0, r1 adds r0, r1
bl InitSaveBlockPointersWithRandomOffset bl SetSaveBlocksPointers
ldr r1, =gSaveBlock2Ptr ldr r1, =gSaveBlock2Ptr
ldr r0, [r1] ldr r0, [r1]
adds r1, r4, 0 adds r1, r4, 0
@ -173,7 +85,7 @@ saveblock_randomize_and_relocate: @ 8076C2C
lsrs r0, 16 lsrs r0, 16
adds r4, r0 adds r4, r0
adds r0, r4, 0 adds r0, r4, 0
bl saveblock_apply_crypto bl ApplyNewEncyprtionKeyToAllEncryptedData
ldr r1, =gSaveBlock2Ptr ldr r1, =gSaveBlock2Ptr
ldr r0, [r1] ldr r0, [r1]
adds r0, 0xAC adds r0, 0xAC
@ -187,7 +99,7 @@ saveblock_randomize_and_relocate: @ 8076C2C
pop {r0} pop {r0}
bx r0 bx r0
.pool .pool
thumb_func_end saveblock_randomize_and_relocate thumb_func_end MoveSaveBlocks_ResetHeap
thumb_func_start sav2_x1_query_bit1 thumb_func_start sav2_x1_query_bit1
sav2_x1_query_bit1: @ 8076D24 sav2_x1_query_bit1: @ 8076D24
@ -713,8 +625,8 @@ ApplyNewEncyprtionKeyToHword: @ 8077100
.pool .pool
thumb_func_end ApplyNewEncyprtionKeyToHword thumb_func_end ApplyNewEncyprtionKeyToHword
thumb_func_start apply_u32_xor_crypto thumb_func_start ApplyNewEncyprtionKeyToWord
apply_u32_xor_crypto: @ 8077118 ApplyNewEncyprtionKeyToWord: @ 8077118
ldr r2, =gSaveBlock2Ptr ldr r2, =gSaveBlock2Ptr
ldr r3, [r2] ldr r3, [r2]
adds r3, 0xAC adds r3, 0xAC
@ -725,24 +637,24 @@ apply_u32_xor_crypto: @ 8077118
str r2, [r0] str r2, [r0]
bx lr bx lr
.pool .pool
thumb_func_end apply_u32_xor_crypto thumb_func_end ApplyNewEncyprtionKeyToWord
thumb_func_start saveblock_apply_crypto thumb_func_start ApplyNewEncyprtionKeyToAllEncryptedData
saveblock_apply_crypto: @ 8077130 ApplyNewEncyprtionKeyToAllEncryptedData: @ 8077130
push {r4,r5,lr} push {r4,r5,lr}
adds r4, r0, 0 adds r4, r0, 0
bl sub_8084864 bl ApplyNewEncyprtionKeyToGameStats
adds r0, r4, 0 adds r0, r4, 0
bl ApplyNewEncyprtionKeyToBagItems_ bl ApplyNewEncyprtionKeyToBagItems_
adds r0, r4, 0 adds r0, r4, 0
bl sub_8024690 bl ApplyNewEncyprtionKeyToBerryPowder
ldr r5, =gSaveBlock1Ptr ldr r5, =gSaveBlock1Ptr
ldr r0, [r5] ldr r0, [r5]
movs r1, 0x92 movs r1, 0x92
lsls r1, 3 lsls r1, 3
adds r0, r1 adds r0, r1
adds r1, r4, 0 adds r1, r4, 0
bl apply_u32_xor_crypto bl ApplyNewEncyprtionKeyToWord
ldr r0, [r5] ldr r0, [r5]
ldr r1, =0x00000494 ldr r1, =0x00000494
adds r0, r1 adds r0, r1
@ -752,6 +664,6 @@ saveblock_apply_crypto: @ 8077130
pop {r0} pop {r0}
bx r0 bx r0
.pool .pool
thumb_func_end saveblock_apply_crypto thumb_func_end ApplyNewEncyprtionKeyToAllEncryptedData
.align 2, 0 @ Don't pad with nop. .align 2, 0 @ Don't pad with nop.

View File

@ -133,7 +133,7 @@ _0817764E:
bls _081775FC bls _081775FC
_08177658: _08177658:
movs r7, 0 movs r7, 0
ldr r1, =gUnknown_03005D94 ldr r1, =gPokemonStoragePtr
mov r9, r1 mov r9, r1
_0817765E: _0817765E:
movs r6, 0 movs r6, 0
@ -233,7 +233,7 @@ _0817773C:
ldr r1, =gSpecialVar_0x8006 ldr r1, =gSpecialVar_0x8006
movs r0, 0x1 movs r0, 0x1
strh r0, [r1] strh r0, [r1]
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
ldr r1, [sp] ldr r1, [sp]
lsls r0, r1, 2 lsls r0, r1, 2
adds r0, r1 adds r0, r1

View File

@ -238,8 +238,8 @@ _08084854:
.pool .pool
thumb_func_end sav12_xor_set thumb_func_end sav12_xor_set
thumb_func_start sub_8084864 thumb_func_start ApplyNewEncyprtionKeyToGameStats
sub_8084864: @ 8084864 ApplyNewEncyprtionKeyToGameStats: @ 8084864
push {r4-r6,lr} push {r4-r6,lr}
adds r5, r0, 0 adds r5, r0, 0
movs r4, 0 movs r4, 0
@ -251,7 +251,7 @@ _0808486C:
ldr r0, [r6] ldr r0, [r6]
adds r0, r1 adds r0, r1
adds r1, r5, 0 adds r1, r5, 0
bl apply_u32_xor_crypto bl ApplyNewEncyprtionKeyToWord
adds r0, r4, 0x1 adds r0, r4, 0x1
lsls r0, 24 lsls r0, 24
lsrs r4, r0, 24 lsrs r4, r0, 24
@ -261,7 +261,7 @@ _0808486C:
pop {r0} pop {r0}
bx r0 bx r0
.pool .pool
thumb_func_end sub_8084864 thumb_func_end ApplyNewEncyprtionKeyToGameStats
thumb_func_start CopyFieldObjectTemplatesToSav1 thumb_func_start CopyFieldObjectTemplatesToSav1
@ void CopyFieldObjectTemplatesToSav1() @ void CopyFieldObjectTemplatesToSav1()
@ -3713,7 +3713,7 @@ _0808644C:
bl overworld_bg_setup bl overworld_bg_setup
bl script_env_1_init bl script_env_1_init
bl script_env_2_disable bl script_env_2_disable
bl saveblock_randomize_and_relocate_ bl MoveSaveBlocks_ResetHeap_
bl sub_80867D8 bl sub_80867D8
b _08086506 b _08086506
_08086462: _08086462:
@ -3838,7 +3838,7 @@ _08086570:
bl mli0_load_map bl mli0_load_map
b _08086622 b _08086622
_0808657C: _0808657C:
bl saveblock_randomize_and_relocate_ bl MoveSaveBlocks_ResetHeap_
bl sub_80867D8 bl sub_80867D8
b _08086622 b _08086622
_08086586: _08086586:
@ -3941,7 +3941,7 @@ _0808664C:
beq _0808668A beq _0808668A
b _0808668E b _0808668E
_08086656: _08086656:
bl saveblock_randomize_and_relocate_ bl MoveSaveBlocks_ResetHeap_
bl sub_80867D8 bl sub_80867D8
movs r0, 0 movs r0, 0
bl sub_8086988 bl sub_8086988
@ -4006,7 +4006,7 @@ _080866B4:
.4byte _0808679A .4byte _0808679A
_080866EC: _080866EC:
bl sub_808631C bl sub_808631C
bl saveblock_randomize_and_relocate_ bl MoveSaveBlocks_ResetHeap_
bl sub_80867D8 bl sub_80867D8
b _08086792 b _08086792
_080866FA: _080866FA:
@ -4106,14 +4106,14 @@ _080867B4:
bx r0 bx r0
thumb_func_end do_load_map_stuff_loop thumb_func_end do_load_map_stuff_loop
thumb_func_start saveblock_randomize_and_relocate_ thumb_func_start MoveSaveBlocks_ResetHeap_
saveblock_randomize_and_relocate_: @ 80867C8 MoveSaveBlocks_ResetHeap_: @ 80867C8
push {lr} push {lr}
bl sub_81BE6AC bl sub_81BE6AC
bl saveblock_randomize_and_relocate bl MoveSaveBlocks_ResetHeap
pop {r0} pop {r0}
bx r0 bx r0
thumb_func_end saveblock_randomize_and_relocate_ thumb_func_end MoveSaveBlocks_ResetHeap_
thumb_func_start sub_80867D8 thumb_func_start sub_80867D8
sub_80867D8: @ 80867D8 sub_80867D8: @ 80867D8

View File

@ -3065,7 +3065,7 @@ _08036758:
thumb_func_start sub_8036760 thumb_func_start sub_8036760
sub_8036760: @ 8036760 sub_8036760: @ 8036760
push {lr} push {lr}
bl saveblock_randomize_and_relocate bl MoveSaveBlocks_ResetHeap
bl sub_8056F28 bl sub_8056F28
bl dp11_init bl dp11_init
bl init_uns_table_pokemon_copy bl init_uns_table_pokemon_copy

View File

@ -20562,7 +20562,7 @@ nullsub_98: @ 80D1D08
thumb_func_start get_preferred_box thumb_func_start get_preferred_box
@ char get_preferred_box() @ char get_preferred_box()
get_preferred_box: @ 80D1D0C get_preferred_box: @ 80D1D0C
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
ldrb r0, [r0] ldrb r0, [r0]
bx lr bx lr
@ -20576,7 +20576,7 @@ sub_80D1D18: @ 80D1D18
lsrs r1, r0, 24 lsrs r1, r0, 24
cmp r1, 0xD cmp r1, 0xD
bhi _080D1D28 bhi _080D1D28
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
strb r1, [r0] strb r1, [r0]
_080D1D28: _080D1D28:
@ -20597,7 +20597,7 @@ get_pokemon_data_from_any_box: @ 80D1D30
bhi _080D1D6C bhi _080D1D6C
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D1D6C bhi _080D1D6C
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -20635,7 +20635,7 @@ set_pokemon_data_from_any_box: @ 80D1D74
bhi _080D1DAC bhi _080D1DAC
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D1DAC bhi _080D1DAC
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -20665,7 +20665,7 @@ get_pokemon_data_from_selected_box: @ 80D1DB8
adds r2, r1, 0 adds r2, r1, 0
lsls r3, 24 lsls r3, 24
lsrs r3, 24 lsrs r3, 24
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
ldrb r0, [r0] ldrb r0, [r0]
adds r1, r3, 0 adds r1, r3, 0
@ -20683,7 +20683,7 @@ set_pokemon_data_from_selected_box: @ 80D1DD8
adds r3, r2, 0 adds r3, r2, 0
lsls r4, 24 lsls r4, 24
lsrs r4, 24 lsrs r4, 24
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
ldrb r0, [r0] ldrb r0, [r0]
adds r1, r4, 0 adds r1, r4, 0
@ -20707,7 +20707,7 @@ sub_80D1DFC: @ 80D1DFC
bhi _080D1E38 bhi _080D1E38
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D1E38 bhi _080D1E38
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -20745,7 +20745,7 @@ sub_80D1E44: @ 80D1E44
bhi _080D1E84 bhi _080D1E84
cmp r2, 0x1D cmp r2, 0x1D
bhi _080D1E84 bhi _080D1E84
ldr r6, =gUnknown_03005D94 ldr r6, =gPokemonStoragePtr
lsls r1, r0, 2 lsls r1, r0, 2
adds r1, r0 adds r1, r0
lsls r0, r1, 4 lsls r0, r1, 4
@ -20786,7 +20786,7 @@ sub_80D1E90: @ 80D1E90
bhi _080D1EC6 bhi _080D1EC6
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D1EC6 bhi _080D1EC6
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -20822,7 +20822,7 @@ sub_80D1ED0: @ 80D1ED0
bhi _080D1F10 bhi _080D1F10
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D1F10 bhi _080D1F10
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -20860,7 +20860,7 @@ sub_80D1F18: @ 80D1F18
bhi _080D1F4E bhi _080D1F4E
cmp r1, 0x1D cmp r1, 0x1D
bhi _080D1F4E bhi _080D1F4E
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
lsls r3, r1, 2 lsls r3, r1, 2
adds r3, r1 adds r3, r1
@ -20895,7 +20895,7 @@ sub_80D1F58: @ 80D1F58
bhi _080D1F8E bhi _080D1F8E
cmp r2, 0x1D cmp r2, 0x1D
bhi _080D1F8E bhi _080D1F8E
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r1, [r0] ldr r1, [r0]
lsls r3, r2, 2 lsls r3, r2, 2
adds r3, r2 adds r3, r2
@ -20950,7 +20950,7 @@ sub_80D1F98: @ 80D1F98
bhi _080D2004 bhi _080D2004
cmp r6, 0x1D cmp r6, 0x1D
bhi _080D2004 bhi _080D2004
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r7, 2 lsls r0, r7, 2
adds r0, r7 adds r0, r7
lsls r1, r0, 4 lsls r1, r0, 4
@ -20995,7 +20995,7 @@ sub_80D2018: @ 80D2018
bhi _080D2048 bhi _080D2048
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D2048 bhi _080D2048
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -21028,7 +21028,7 @@ sub_80D2054: @ 80D2054
bhi _080D2088 bhi _080D2088
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D2088 bhi _080D2088
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -21062,7 +21062,7 @@ get_pokemon_by_box_and_pos: @ 80D2094
bhi _080D20C8 bhi _080D20C8
cmp r4, 0x1D cmp r4, 0x1D
bhi _080D20C8 bhi _080D20C8
ldr r2, =gUnknown_03005D94 ldr r2, =gPokemonStoragePtr
lsls r0, r3, 2 lsls r0, r3, 2
adds r0, r3 adds r0, r3
lsls r1, r0, 4 lsls r1, r0, 4
@ -21095,7 +21095,7 @@ sav3_get_box_name: @ 80D20D0
movs r0, 0 movs r0, 0
b _080D20EC b _080D20EC
_080D20DE: _080D20DE:
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
lsls r1, r2, 3 lsls r1, r2, 3
adds r1, r2 adds r1, r2
ldr r2, =0x00008344 ldr r2, =0x00008344
@ -21118,7 +21118,7 @@ sub_80D20F8: @ 80D20F8
movs r0, 0 movs r0, 0
b _080D2112 b _080D2112
_080D2106: _080D2106:
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
ldr r2, =0x000083c2 ldr r2, =0x000083c2
adds r0, r2 adds r0, r2
@ -21141,7 +21141,7 @@ sub_80D2120: @ 80D2120
bhi _080D213E bhi _080D213E
cmp r1, 0x10 cmp r1, 0x10
bhi _080D213E bhi _080D213E
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
ldr r0, [r0] ldr r0, [r0]
ldr r3, =0x000083c2 ldr r3, =0x000083c2
adds r0, r3 adds r0, r3
@ -21271,7 +21271,7 @@ sub_80D2218: @ 80D2218
push {r7} push {r7}
sub sp, 0x4 sub sp, 0x4
movs r2, 0 movs r2, 0
ldr r0, =gUnknown_03005D94 ldr r0, =gPokemonStoragePtr
mov r8, r0 mov r8, r0
movs r7, 0x4 movs r7, 0x4
_080D2228: _080D2228:
@ -21321,7 +21321,7 @@ sub_80D2270: @ 80D2270
bhi _080D22C8 bhi _080D22C8
cmp r2, 0x1D cmp r2, 0x1D
bhi _080D22C8 bhi _080D22C8
ldr r6, =gUnknown_03005D94 ldr r6, =gPokemonStoragePtr
lsls r1, r0, 2 lsls r1, r0, 2
adds r1, r0 adds r1, r0
lsls r0, r1, 4 lsls r0, r1, 4
@ -21371,7 +21371,7 @@ sub_80D22D0: @ 80D22D0
push {r6,r7} push {r6,r7}
movs r7, 0 movs r7, 0
movs r0, 0 movs r0, 0
ldr r1, =gUnknown_03005D94 ldr r1, =gPokemonStoragePtr
mov r9, r1 mov r9, r1
_080D22E0: _080D22E0:
lsls r1, r0, 2 lsls r1, r0, 2
@ -21428,7 +21428,7 @@ sub_80D233C: @ 80D233C
push {r6,r7} push {r6,r7}
movs r7, 0 movs r7, 0
movs r0, 0 movs r0, 0
ldr r1, =gUnknown_03005D94 ldr r1, =gPokemonStoragePtr
mov r9, r1 mov r9, r1
_080D234C: _080D234C:
lsls r1, r0, 2 lsls r1, r0, 2
@ -21490,7 +21490,7 @@ sub_80D23A8: @ 80D23A8
strh r0, [r1, 0x2] strh r0, [r1, 0x2]
movs r0, 0 movs r0, 0
mov r8, r0 mov r8, r0
ldr r7, =gUnknown_03005D94 ldr r7, =gPokemonStoragePtr
movs r5, 0x4 movs r5, 0x4
_080D23C0: _080D23C0:
movs r6, 0 movs r6, 0

View File

@ -29,7 +29,7 @@ sub_81700F8: @ 81700F8
bl sub_815355C bl sub_815355C
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
bl InitSaveBlockPointersWithRandomOffset bl SetSaveBlocksPointers
bl sub_808447C bl sub_808447C
bl ResetSaveCounters bl ResetSaveCounters
movs r0, 0 movs r0, 0

View File

@ -184,7 +184,8 @@ struct SaveBlock2
/*0xEE1*/ u8 field_EE1; /*0xEE1*/ u8 field_EE1;
/*0xEE2*/ u8 field_EE2[7]; /*0xEE2*/ u8 field_EE2[7];
/*0xEE9*/ u8 field_EE9; /*0xEE9*/ u8 field_EE9;
/*0xEEA*/ u8 field_EEA[22]; /*0xEEA*/ u8 field_EEA[66];
// sizeof=0xF2C
}; };
extern struct SaveBlock2 *gSaveBlock2Ptr; extern struct SaveBlock2 *gSaveBlock2Ptr;
@ -618,6 +619,23 @@ struct ContestWinner
u8 contestRank; u8 contestRank;
}; };
struct DaycareMon
{
struct BoxPokemon mon;
struct MailStruct mail;
u8 OT_name[OT_NAME_LENGTH + 1];
u8 monName[11];
u8 language;
u32 stepsTaken;
};
struct DaycareData
{
struct DaycareMon mons[2];
u32 offspringPersonality;
u8 stepCounter;
};
#define FLAGS_NUMBER 300 #define FLAGS_NUMBER 300
#define VARS_NUMBER 256 #define VARS_NUMBER 256
@ -686,33 +704,26 @@ struct SaveBlock1
/*0x????*/ u16 unk2B1C[6]; /*0x????*/ u16 unk2B1C[6];
/*0x????*/ u16 unk2B28[6]; /*0x????*/ u16 unk2B28[6];
/*0x????*/ u16 unk2B34[6]; /*0x????*/ u16 unk2B34[6];
/*0x????*/ u16 unk2B40[6]; /*0x????*/ u16 unk2B3A[3];
/*0x2BE0*/ struct MailStruct mail[16]; /*0x2BE0*/ struct MailStruct mail[16];
/*0x2E20*/ u8 additionalPhrases; // bitfield for 33 additional phrases in easy chat system /*0x2E20*/ u8 additionalPhrases[5]; // bitfield for 33 additional phrases in easy chat system
/*0x2E25*/ u8 unk2E25[3]; // possibly padding? /*0x2E25*/ u8 unk2E25[3]; // possibly padding?
/*0x2E28*/ OldMan oldMan; /*0x2E28*/ OldMan oldMan;
/*0x2e64*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff /*0x2e64*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2e8c*/ u8 filler_2E8C[0x4]; /*0x2e8c*/ u8 filler_2E8C[0x4];
/*0x2e90*/ struct ContestWinner contestWinners[13]; // 0 - 5 used in contest hall, 6 - 7 unused?, 8 - 12 museum /*0x2e90*/ struct ContestWinner contestWinners[13]; // 0 - 5 used in contest hall, 6 - 7 unused?, 8 - 12 museum
/*0x3030*/ struct DaycareData daycare;
// TODO: fix /*0x3150*/ struct LinkBattleRecord linkBattleRecords[5];
/*0x31A0*/ u8 filler_31A0[8];
/*0x????*/ struct BoxPokemon daycareData[2];
/*0x????*/ struct RecordMixing_UnknownStruct filler_303C;
/*0x????*/ u8 filler_30B4[0x2];
/*0x????*/ u8 filler_30B6;
/*0x????*/ u8 filler_30B7[1];
/*0x????*/ struct LinkBattleRecord linkBattleRecords[5];
/*0x????*/ u8 filler_3108[8];
/*0x31A8*/ u8 giftRibbons[52]; /*0x31A8*/ u8 giftRibbons[52];
/*0x31DC*/ struct Roamer roamer; /*0x31DC*/ struct Roamer roamer;
/*0x31F8*/ struct EnigmaBerry enigmaBerry; /*0x31F8*/ struct EnigmaBerry enigmaBerry;
/*0x3728*/ struct RamScript ramScript;
// TODO: fix /*0x3B14*/ struct RecordMixingGift recordMixingGift;
/*0x????*/ struct RamScript ramScript; /*0x3B24*/ u8 seen2[52];
/*0x????*/ struct RecordMixingGift recordMixingGift; /*0x3B58*/ u8 lilycoveLady[536]; // TODO: convert to a union
/*0x????*/ u8 unk3A8C[52]; //pokedex related /*0x3D70*/ u8 babyPhrase[24]; // TODO: convert to a struct
// sizeof: 0x3D88
}; };
extern struct SaveBlock1* gSaveBlock1Ptr; extern struct SaveBlock1* gSaveBlock1Ptr;

20
include/load_save.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef GUARD_LOAD_SAVE_H
#define GUARD_LOAD_SAVE_H
extern bool32 gFlashMemoryPresent;
void CheckForFlashMemory(void);
void MoveSaveBlocks_ResetHeap(void);
bool32 GetSecretBase2Field_9(void);
void ClearSecretBase2Field_9(void);
void SetSecretBase2Field_9(void);
void SetSecretBase2Field_9_AndHideBG(void);
void ClearSecretBase2Field_9_2(void);
void SavePlayerParty(void);
void LoadPlayerParty(void);
void SaveSerializedGame(void);
void LoadSerializedGame(void);
void LoadPlayerBag(void);
void SavePlayerBag(void);
#endif // GUARD_LOAD_SAVE_H

View File

@ -261,6 +261,14 @@ struct Pokemon
extern struct Pokemon gPlayerParty[6]; extern struct Pokemon gPlayerParty[6];
extern struct Pokemon gEnemyParty[6]; extern struct Pokemon gEnemyParty[6];
struct PokemonStorage
{
/*0x0000*/ u8 currentBox;
/*0x0001*/ struct BoxPokemon boxes[14][30];
/*0x8344*/ u8 boxNames[14][9];
/*0x83C2*/ u8 boxWallpapers[14];
};
struct BaseStats struct BaseStats
{ {
/* 0x00 */ u8 baseHP; /* 0x00 */ u8 baseHP;

View File

@ -74,6 +74,7 @@ SECTIONS {
asm/daycare.o(.text); asm/daycare.o(.text);
asm/egg_hatch.o(.text); asm/egg_hatch.o(.text);
asm/rom_8072304.o(.text); asm/rom_8072304.o(.text);
src/load_save.o(.text);
asm/load_save.o(.text); asm/load_save.o(.text);
asm/trade.o(.text); asm/trade.o(.text);
asm/berry_blender.o(.text); asm/berry_blender.o(.text);

104
src/load_save.c Normal file
View File

@ -0,0 +1,104 @@
#include "global.h"
#include "gba/flash_internal.h"
#include "load_save.h"
#include "main.h"
#include "pokemon.h"
#include "rng.h"
#include "malloc.h"
extern u8 gPlayerPartyCount;
extern struct PokemonStorage* gPokemonStoragePtr;
extern void* gUnknown_0203CF5C;
extern u8 gHeap[0x1C000];
extern bool16 IdentifyFlash(void);
extern void SetBagItemsPointers(void);
extern void SetDecorationInventoriesPointers(void);
extern void InitHeap(void *heapStart, u32 heapSize);
void ApplyNewEncyprtionKeyToAllEncryptedData(u32 encryptionKey);
#define SAVEBLOCK_MOVE_RANGE 128
EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0};
EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
EWRAM_DATA struct SaveBlock1 gSaveblock1 = {0};
EWRAM_DATA u8 gSaveblock1_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
EWRAM_DATA struct PokemonStorage gPokemonStorage = {0};
EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
void CheckForFlashMemory(void)
{
if (!IdentifyFlash())
{
gFlashMemoryPresent = TRUE;
InitFlashTimer();
}
else
gFlashMemoryPresent = FALSE;
}
void ClearSav2(void)
{
CpuFill16(0, &gSaveblock2, sizeof(struct SaveBlock2) + sizeof(gSaveblock2_DMA));
}
void ClearSav1(void)
{
CpuFill16(0, &gSaveblock1, sizeof(struct SaveBlock1) + sizeof(gSaveblock1_DMA));
}
void SetSaveBlocksPointers(u16 offset)
{
struct SaveBlock1** sav1_LocalVar = &gSaveBlock1Ptr;
offset = (offset + Random()) & (SAVEBLOCK_MOVE_RANGE - 4);
gSaveBlock2Ptr = (void*)(&gSaveblock2) + offset;
*sav1_LocalVar = (void*)(&gSaveblock1) + offset;
gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset;
SetBagItemsPointers();
SetDecorationInventoriesPointers();
}
/*
void MoveSaveBlocks_ResetHeap(void)
{
void *vblankCB, *hblankCB;
u32 encryptionKey;
// save interrupt functions and turn them off
vblankCB = gMain.vblankCallback;
hblankCB = gMain.hblankCallback;
gMain.vblankCallback = NULL;
gMain.hblankCallback = NULL;
gUnknown_0203CF5C = NULL;
// copy saveblocks' content
memcpy(gHeap, gSaveBlock2Ptr, sizeof(struct SaveBlock2));
memcpy(gHeap + sizeof(struct SaveBlock2), gSaveBlock1Ptr, sizeof(struct SaveBlock1));
memcpy(gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1), gPokemonStoragePtr, sizeof(struct PokemonStorage));
// change saveblocks' pointers
// argument is a sum of the individual trainerId bytes
SetSaveBlocksPointers(gHeap[10] + gHeap[11] + gHeap[12] + gHeap[13]);
// restore saveblock data since the pointers changed
memcpy(gSaveBlock2Ptr, gHeap, sizeof(struct SaveBlock2));
memcpy(gSaveBlock1Ptr, gHeap + sizeof(struct SaveBlock2), sizeof(struct SaveBlock1));
memcpy(gPokemonStoragePtr, gHeap + sizeof(struct SaveBlock2) + sizeof(struct SaveBlock1), sizeof(struct PokemonStorage));
// heap was destroyed in the copying process, so reset it
InitHeap(gHeap, sizeof(gHeap));
// restore interrupt functions
gMain.hblankCallback = hblankCB;
gMain.vblankCallback = vblankCB;
// create a new encryption key
encryptionKey = (Random() << 0x10) + (Random());
ApplyNewEncyprtionKeyToAllEncryptedData(encryptionKey);
gSaveBlock2Ptr->encryptionKey = encryptionKey;
}*/

View File

@ -34,9 +34,9 @@ extern struct SoundInfo gSoundInfo;
extern u32 gFlashMemoryPresent; extern u32 gFlashMemoryPresent;
extern u32 IntrMain[]; extern u32 IntrMain[];
extern u8 gHeap[]; extern u8 gHeap[];
extern struct SaveBlock2 gUnknown_02024A54; extern struct SaveBlock2 gSaveblock2;
extern char *gUnknown_03005D94; extern char *gPokemonStoragePtr;
extern char gUnknown_02029808[]; extern char gPokemonStorage[];
extern u32 gBattleTypeFlags; extern u32 gBattleTypeFlags;
extern u8 gUnknown_03002748; extern u8 gUnknown_03002748;
extern u32 *gUnknown_0203CF5C; extern u32 *gUnknown_0203CF5C;
@ -185,8 +185,8 @@ static void InitMainCallbacks(void)
gMain.vblankCounter2 = 0; gMain.vblankCounter2 = 0;
gMain.callback1 = NULL; gMain.callback1 = NULL;
SetMainCallback2(c2_copyright_1); SetMainCallback2(c2_copyright_1);
gSaveBlock2Ptr = &gUnknown_02024A54; gSaveBlock2Ptr = &gSaveblock2;
gUnknown_03005D94 = gUnknown_02029808; gPokemonStoragePtr = gPokemonStorage;
} }
static void CallCallbacks(void) static void CallCallbacks(void)
@ -368,7 +368,7 @@ static void VBlankIntr(void)
gMain.intrCheck |= INTR_FLAG_VBLANK; gMain.intrCheck |= INTR_FLAG_VBLANK;
} }
void StartFlashMemoryTimer(void) void InitFlashTimer(void)
{ {
SetFlashTimerIntr(2, gIntrTable + 0x7); SetFlashTimerIntr(2, gIntrTable + 0x7);
} }

View File

@ -5,7 +5,7 @@
extern struct SaveSectionOffsets gSaveSectionOffsets[0xE]; extern struct SaveSectionOffsets gSaveSectionOffsets[0xE];
extern struct SaveSectionLocation gRamSaveSectionLocations[0xE]; extern struct SaveSectionLocation gRamSaveSectionLocations[0xE];
extern void *gUnknown_03005D94; extern void *gPokemonStoragePtr;
extern u8 gDecompressionBuffer[]; extern u8 gDecompressionBuffer[];
extern u32 gFlashMemoryPresent; extern u32 gFlashMemoryPresent;
extern u16 gUnknown_03006294; extern u16 gUnknown_03006294;
@ -593,7 +593,7 @@ void UpdateSaveAddresses(void)
for(i = 5; i < 14; i++) for(i = 5; i < 14; i++)
{ {
gRamSaveSectionLocations[i].data = gUnknown_03005D94 + gSaveSectionOffsets[i].toAdd; gRamSaveSectionLocations[i].data = gPokemonStoragePtr + gSaveSectionOffsets[i].toAdd;
gRamSaveSectionLocations[i].size = gSaveSectionOffsets[i].size; gRamSaveSectionLocations[i].size = gSaveSectionOffsets[i].size;
} }
} }
@ -630,7 +630,7 @@ _081531AC:\n\
bge _081531AC\n\ bge _081531AC\n\
movs r4, 0x5\n\ movs r4, 0x5\n\
ldr r1, =gRamSaveSectionLocations\n\ ldr r1, =gRamSaveSectionLocations\n\
ldr r5, =gUnknown_03005D94\n\ ldr r5, =gPokemonStoragePtr\n\
ldr r0, =gSaveSectionOffsets\n\ ldr r0, =gSaveSectionOffsets\n\
adds r3, r1, 0\n\ adds r3, r1, 0\n\
adds r3, 0x28\n\ adds r3, 0x28\n\

View File

@ -251,7 +251,7 @@ gSaveBlock1Ptr: @ 3005D8C
gSaveBlock2Ptr: @ 3005D90 gSaveBlock2Ptr: @ 3005D90
.space 0x4 .space 0x4
gUnknown_03005D94: @ 3005D94 gPokemonStoragePtr: @ 3005D94
.space 0x4 .space 0x4
gUnknown_03005D98: @ 3005D98 gUnknown_03005D98: @ 3005D98

View File

@ -662,14 +662,7 @@ gUnknown_02024A38: @ 2024A38
gUnknown_02024A4C: @ 2024A4C gUnknown_02024A4C: @ 2024A4C
.space 0x8 .space 0x8
gUnknown_02024A54: @ 2024A54 .include "src/load_save.o"
.space 0xFAC
gUnknown_02025A00: @ 2025A00
.space 0x3E08
gUnknown_02029808: @ 2029808
.space 0x8450
gUnknown_02031C58: @ 2031C58 gUnknown_02031C58: @ 2031C58
.space 0x528 .space 0x528