mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
begin load_save.c
This commit is contained in:
parent
7ba62bcac8
commit
92892d140a
@ -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
|
||||||
|
@ -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
|
||||||
|
118
asm/load_save.s
118
asm/load_save.s
@ -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.
|
||||||
|
@ -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
|
||||||
|
24
asm/rom4.s
24
asm/rom4.s
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
20
include/load_save.h
Normal 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
|
@ -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;
|
||||||
|
@ -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
104
src/load_save.c
Normal 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;
|
||||||
|
}*/
|
12
src/main.c
12
src/main.c
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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\
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user