diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2016-12-12 02:08:36 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-12-11 23:08:36 -0800 |
commit | 36214115534dd9329b5c02d78595967e671b6caf (patch) | |
tree | 953d530079418c9e69679ecc74bde7df367089b9 | |
parent | cd1db96498c4ac9ec940611a114a604800e12c2a (diff) |
decompile load_save.c (#125)
* start decompiling load_save.c
* almost finish decompiling load_save.c
* finish decompiling load_save.c
* i cannot hex math
* formatting
-rw-r--r-- | asm/cable_club.s | 8 | ||||
-rw-r--r-- | asm/load_save.s | 444 | ||||
-rw-r--r-- | asm/record_mixing.s | 4 | ||||
-rw-r--r-- | asm/rom6.s | 2 | ||||
-rw-r--r-- | asm/script_pokemon_util_80C4BF0.s | 2 | ||||
-rw-r--r-- | asm/trade.s | 4 | ||||
-rw-r--r-- | data/specials.inc | 6 | ||||
-rw-r--r-- | include/asm.inc.h | 8 | ||||
-rw-r--r-- | include/global.h | 11 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/load_save.c | 165 | ||||
-rw-r--r-- | src/new_game.c | 2 | ||||
-rw-r--r-- | src/rom4.c | 6 | ||||
-rw-r--r-- | src/save.c | 16 | ||||
-rw-r--r-- | src/start_menu.c | 4 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
16 files changed, 207 insertions, 479 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s index 8d11915cb..2a45d386b 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -1602,8 +1602,8 @@ _08083954: .4byte sub_8083958 sub_8083958: @ 8083958 push {lr} bl call_map_music_set_to_zero - bl copy_player_party_from_sav1 - bl copy_bags_and_unk_data_to_save_blocks + bl LoadPlayerParty + bl SavePlayerData bl sub_810FEFC ldr r0, _08083990 @ =gSpecialVar_0x8004 ldrh r0, [r0] @@ -1643,8 +1643,8 @@ sub_80839A4: @ 80839A4 cmp r1, 0x5 bne _080839C0 _080839B8: - bl copy_player_party_from_sav1 - bl copy_bags_and_unk_data_to_save_blocks + bl LoadPlayerParty + bl SavePlayerData _080839C0: movs r0, 0x7F bl copy_saved_warp2_bank_and_enter_x_to_warp1 diff --git a/asm/load_save.s b/asm/load_save.s deleted file mode 100644 index 09a9ea969..000000000 --- a/asm/load_save.s +++ /dev/null @@ -1,444 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start CheckForFlashMemory -CheckForFlashMemory: @ 80479CC - push {lr} - bl IdentifyFlash - lsls r0, 16 - cmp r0, 0 - bne _080479E8 - ldr r1, _080479E4 @ =gUnknown_3004820 - movs r0, 0x1 - str r0, [r1] - bl InitFlashTimer - b _080479EE - .align 2, 0 -_080479E4: .4byte gUnknown_3004820 -_080479E8: - ldr r1, _080479F4 @ =gUnknown_3004820 - movs r0, 0 - str r0, [r1] -_080479EE: - pop {r0} - bx r0 - .align 2, 0 -_080479F4: .4byte gUnknown_3004820 - thumb_func_end CheckForFlashMemory - - thumb_func_start sub_80479F8 -sub_80479F8: @ 80479F8 - ldr r0, _08047A00 @ =gSaveBlock2 - ldrb r0, [r0, 0x9] - bx lr - .align 2, 0 -_08047A00: .4byte gSaveBlock2 - thumb_func_end sub_80479F8 - - thumb_func_start sub_8047A04 -sub_8047A04: @ 8047A04 - ldr r1, _08047A0C @ =gSaveBlock2 - movs r0, 0 - strb r0, [r1, 0x9] - bx lr - .align 2, 0 -_08047A0C: .4byte gSaveBlock2 - thumb_func_end sub_8047A04 - - thumb_func_start sub_8047A10 -sub_8047A10: @ 8047A10 - ldr r1, _08047A18 @ =gSaveBlock2 - movs r0, 0x1 - strb r0, [r1, 0x9] - bx lr - .align 2, 0 -_08047A18: .4byte gSaveBlock2 - thumb_func_end sub_8047A10 - - thumb_func_start sub_8047A1C -sub_8047A1C: @ 8047A1C - push {lr} - movs r0, 0 - bl gpu_sync_bg_hide - ldr r1, _08047A30 @ =gSaveBlock2 - movs r0, 0x1 - strb r0, [r1, 0x9] - pop {r0} - bx r0 - .align 2, 0 -_08047A30: .4byte gSaveBlock2 - thumb_func_end sub_8047A1C - - thumb_func_start sub_8047A34 -sub_8047A34: @ 8047A34 - ldr r1, _08047A3C @ =gSaveBlock2 - movs r0, 0 - strb r0, [r1, 0x9] - bx lr - .align 2, 0 -_08047A3C: .4byte gSaveBlock2 - thumb_func_end sub_8047A34 - - thumb_func_start sub_8047A40 -sub_8047A40: @ 8047A40 - push {r4-r6,lr} - ldr r2, _08047A78 @ =gSaveBlock1 - ldr r0, _08047A7C @ =gPlayerPartyCount - ldrb r1, [r0] - movs r3, 0x8D - lsls r3, 2 - adds r0, r2, r3 - strb r1, [r0] - movs r6, 0 - movs r0, 0x8E - lsls r0, 2 - adds r5, r2, r0 - movs r4, 0 -_08047A5A: - ldr r1, _08047A80 @ =gPlayerParty - adds r1, r4, r1 - adds r0, r5, 0 - movs r2, 0x64 - bl memcpy - adds r5, 0x64 - adds r4, 0x64 - adds r6, 0x1 - cmp r6, 0x5 - ble _08047A5A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08047A78: .4byte gSaveBlock1 -_08047A7C: .4byte gPlayerPartyCount -_08047A80: .4byte gPlayerParty - thumb_func_end sub_8047A40 - - thumb_func_start copy_player_party_from_sav1 -copy_player_party_from_sav1: @ 8047A84 - push {r4-r6,lr} - ldr r0, _08047AC0 @ =gPlayerPartyCount - ldr r1, _08047AC4 @ =gSaveBlock1 - movs r2, 0x8D - lsls r2, 2 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - ldr r4, _08047AC8 @ =gPlayerParty - movs r5, 0 - movs r0, 0xFA - lsls r0, 1 - adds r6, r4, r0 -_08047A9E: - ldr r1, _08047AC4 @ =gSaveBlock1 - adds r1, r5, r1 - movs r2, 0x8E - lsls r2, 2 - adds r1, r2 - adds r0, r4, 0 - movs r2, 0x64 - bl memcpy - adds r4, 0x64 - adds r5, 0x64 - cmp r4, r6 - ble _08047A9E - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08047AC0: .4byte gPlayerPartyCount -_08047AC4: .4byte gSaveBlock1 -_08047AC8: .4byte gPlayerParty - thumb_func_end copy_player_party_from_sav1 - - thumb_func_start sub_8047ACC -sub_8047ACC: @ 8047ACC - push {r4-r7,lr} - ldr r0, _08047AFC @ =gSaveBlock1 - ldr r4, _08047B00 @ =gMapObjects - movs r1, 0x9E - lsls r1, 4 - adds r3, r0, r1 - movs r2, 0xF -_08047ADA: - adds r1, r3, 0 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r4, 0x24 - adds r3, 0x24 - subs r2, 0x1 - cmp r2, 0 - bge _08047ADA - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08047AFC: .4byte gSaveBlock1 -_08047B00: .4byte gMapObjects - thumb_func_end sub_8047ACC - - thumb_func_start save_deserialize_npcs -save_deserialize_npcs: @ 8047B04 - push {r4-r7,lr} - ldr r0, _08047B34 @ =gSaveBlock1 - movs r1, 0x9E - lsls r1, 4 - adds r4, r0, r1 - ldr r3, _08047B38 @ =gMapObjects - movs r2, 0xF -_08047B12: - adds r1, r3, 0 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r4, 0x24 - adds r3, 0x24 - subs r2, 0x1 - cmp r2, 0 - bge _08047B12 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08047B34: .4byte gSaveBlock1 -_08047B38: .4byte gMapObjects - thumb_func_end save_deserialize_npcs - - thumb_func_start save_serialize_game -save_serialize_game: @ 8047B3C - push {lr} - bl sub_8047A40 - bl sub_8047ACC - pop {r0} - bx r0 - thumb_func_end save_serialize_game - - thumb_func_start save_deserialize_game -save_deserialize_game: @ 8047B4C - push {lr} - bl copy_player_party_from_sav1 - bl save_deserialize_npcs - pop {r0} - bx r0 - thumb_func_end save_deserialize_game - - thumb_func_start copy_bags_and_unk_data_from_save_blocks -copy_bags_and_unk_data_from_save_blocks: @ 8047B5C - push {r4-r7,lr} - ldr r0, _08047C0C @ =gSaveBlock1 - movs r1, 0xAC - lsls r1, 3 - adds r3, r0, r1 - ldr r1, _08047C10 @ =gUnknown_020291F4 - movs r2, 0x13 -_08047B6A: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047B6A - ldr r1, _08047C10 @ =gUnknown_020291F4 - ldr r0, _08047C0C @ =gSaveBlock1 - movs r2, 0xB6 - lsls r2, 3 - adds r3, r0, r2 - adds r1, 0x50 - movs r2, 0x13 -_08047B82: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047B82 - ldr r1, _08047C10 @ =gUnknown_020291F4 - ldr r0, _08047C0C @ =gSaveBlock1 - movs r5, 0xC0 - lsls r5, 3 - adds r3, r0, r5 - adds r1, 0xA0 - movs r2, 0xF -_08047B9A: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047B9A - ldr r1, _08047C10 @ =gUnknown_020291F4 - ldr r0, _08047C0C @ =gSaveBlock1 - movs r6, 0xC8 - lsls r6, 3 - adds r3, r0, r6 - adds r1, 0xE0 - movs r2, 0x3F -_08047BB2: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047BB2 - ldr r1, _08047C10 @ =gUnknown_020291F4 - ldr r0, _08047C0C @ =gSaveBlock1 - movs r7, 0xE8 - lsls r7, 3 - adds r3, r0, r7 - movs r0, 0xF0 - lsls r0, 1 - adds r1, r0 - movs r2, 0x2D -_08047BCE: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047BCE - ldr r0, _08047C10 @ =gUnknown_020291F4 - ldr r4, _08047C0C @ =gSaveBlock1 - movs r1, 0xA6 - lsls r1, 2 - adds r3, r0, r1 - ldr r2, _08047C14 @ =0x00002b4c - mov r12, r2 - movs r2, 0xF -_08047BE8: - adds r1, r3, 0 - mov r5, r12 - adds r0, r4, r5 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r4, 0x24 - adds r3, 0x24 - subs r2, 0x1 - cmp r2, 0 - bge _08047BE8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08047C0C: .4byte gSaveBlock1 -_08047C10: .4byte gUnknown_020291F4 -_08047C14: .4byte 0x00002b4c - thumb_func_end copy_bags_and_unk_data_from_save_blocks - - thumb_func_start copy_bags_and_unk_data_to_save_blocks -copy_bags_and_unk_data_to_save_blocks: @ 8047C18 - push {r4-r7,lr} - ldr r0, _08047CCC @ =gSaveBlock1 - ldr r3, _08047CD0 @ =gUnknown_020291F4 - movs r2, 0xAC - lsls r2, 3 - adds r1, r0, r2 - movs r2, 0x13 -_08047C26: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047C26 - ldr r1, _08047CCC @ =gSaveBlock1 - ldr r0, _08047CD0 @ =gUnknown_020291F4 - adds r3, r0, 0 - adds r3, 0x50 - movs r5, 0xB6 - lsls r5, 3 - adds r1, r5 - movs r2, 0x13 -_08047C40: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047C40 - ldr r1, _08047CCC @ =gSaveBlock1 - ldr r0, _08047CD0 @ =gUnknown_020291F4 - adds r3, r0, 0 - adds r3, 0xA0 - movs r6, 0xC0 - lsls r6, 3 - adds r1, r6 - movs r2, 0xF -_08047C5A: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047C5A - ldr r1, _08047CCC @ =gSaveBlock1 - ldr r0, _08047CD0 @ =gUnknown_020291F4 - adds r3, r0, 0 - adds r3, 0xE0 - movs r7, 0xC8 - lsls r7, 3 - adds r1, r7 - movs r2, 0x3F -_08047C74: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047C74 - ldr r1, _08047CCC @ =gSaveBlock1 - ldr r0, _08047CD0 @ =gUnknown_020291F4 - movs r2, 0xF0 - lsls r2, 1 - adds r3, r0, r2 - movs r5, 0xE8 - lsls r5, 3 - adds r1, r5 - movs r2, 0x2D -_08047C90: - ldm r3!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bge _08047C90 - ldr r0, _08047CCC @ =gSaveBlock1 - ldr r4, _08047CD0 @ =gUnknown_020291F4 - ldr r6, _08047CD4 @ =0x00002b4c - adds r3, r0, r6 - movs r7, 0xA6 - lsls r7, 2 - mov r12, r7 - movs r2, 0xF -_08047CAA: - adds r1, r3, 0 - mov r5, r12 - adds r0, r4, r5 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r4, 0x24 - adds r3, 0x24 - subs r2, 0x1 - cmp r2, 0 - bge _08047CAA - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08047CCC: .4byte gSaveBlock1 -_08047CD0: .4byte gUnknown_020291F4 -_08047CD4: .4byte 0x00002b4c - thumb_func_end copy_bags_and_unk_data_to_save_blocks - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/record_mixing.s b/asm/record_mixing.s index 1c981d167..ce0121a40 100644 --- a/asm/record_mixing.s +++ b/asm/record_mixing.s @@ -496,7 +496,7 @@ _080BA038: .4byte _080BA074 .4byte _080BA08E _080BA050: - bl sub_8047A1C + bl SetSecretBase2Field_9_AndHideBG bl sub_8125E2C b _080BA086 _080BA05A: @@ -504,7 +504,7 @@ _080BA05A: lsls r0, 24 cmp r0, 0 beq _080BA09C - bl sub_8047A34 + bl ClearSecretBase2Field_9_2 ldrh r0, [r4, 0x8] adds r0, 0x1 movs r1, 0 diff --git a/asm/rom6.s b/asm/rom6.s index ad1e71be5..a4006ace5 100644 --- a/asm/rom6.s +++ b/asm/rom6.s @@ -3921,7 +3921,7 @@ _0810D1B4: movs r0, 0x1 bl sav12_xor_set _0810D1D4: - bl sub_8047A10 + bl SetSecretBase2Field_9 ldr r0, _0810D1EC @ =gSaveBlock2 ldrb r0, [r0, 0x8] cmp r0, 0 diff --git a/asm/script_pokemon_util_80C4BF0.s b/asm/script_pokemon_util_80C4BF0.s index 5d99fa2b2..b60c9444a 100644 --- a/asm/script_pokemon_util_80C4BF0.s +++ b/asm/script_pokemon_util_80C4BF0.s @@ -1311,7 +1311,7 @@ SetBattleTowerPlayerParty: @ 80C55C8 ldrb r4, [r0] cmp r4, 0 bne _080C55E4 - bl copy_player_party_from_sav1 + bl LoadPlayerParty ldr r0, _080C55E0 @ =gScriptResult strh r4, [r0] b _080C55EE diff --git a/asm/trade.s b/asm/trade.s index ae857d1c3..6a6b6ae30 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -11765,7 +11765,7 @@ _0804DF48: .4byte 0x0000043c _0804DF4C: .4byte gUnknown_03004828 _0804DF50: .4byte gSystemText_Saving _0804DF54: - bl sub_8047A1C + bl SetSecretBase2Field_9_AndHideBG movs r0, 0x15 bl sav12_xor_increment bl sub_8125D80 @@ -11803,7 +11803,7 @@ _0804DF9C: lsrs r1, r0, 24 cmp r1, 0 beq _0804DFC0 - bl sub_8047A34 + bl ClearSecretBase2Field_9_2 ldr r0, _0804DFB8 @ =gMain ldr r1, _0804DFBC @ =0x0000043c adds r0, r1 diff --git a/data/specials.inc b/data/specials.inc index 852372ce0..5d5ed3f07 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -39,8 +39,8 @@ gSpecials:: .4byte sub_8083614 .4byte GetLinkPartnerNames .4byte sub_810DB28 - .4byte sub_8047A40 - .4byte copy_player_party_from_sav1 + .4byte SavePlayerParty + .4byte LoadPlayerParty .4byte sub_80C5568 .4byte sub_8083BDC .4byte FieldObjectInteractionGetBerryTreeData @@ -331,7 +331,7 @@ gSpecials:: .4byte sub_80FA148 .4byte sub_810F8FC .4byte sub_80BC50C - .4byte copy_bags_and_unk_data_from_save_blocks + .4byte LoadPlayerData .4byte sub_8081924 .4byte sub_810F950 .4byte sub_810F908 diff --git a/include/asm.inc.h b/include/asm.inc.h index f533d8729..1cae90e98 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -38,10 +38,10 @@ void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s void CheckForFlashMemory(void); int sub_80479F8(); void sub_8047A04(); -void sub_8047A1C(void); -void sub_8047A34(void); -void save_serialize_game(void); -void save_deserialize_game(); +void SetSecretBase2Field_9_AndHideBG(void); +void ClearSecretBase2Field_9_2(void); +void SaveSerializedGame(void); +void LoadSerializedGame(void); // asm/berry_blender.o void sub_80516C4(u8, u16); diff --git a/include/global.h b/include/global.h index ce2267642..be35f1299 100644 --- a/include/global.h +++ b/include/global.h @@ -169,6 +169,11 @@ struct EasyChatPair u16 words[2]; }; /*size = 0x8*/ +struct SaveBlock1_2B4C_Struct +{ + u8 filler[0x24]; +}; + struct SaveBlock1 { /*0x00*/ struct Coords16 pos; @@ -230,7 +235,9 @@ struct SaveBlock1 /*0x2B0D*/ u8 outbreakPokemonProbability; /*0x2B0E*/ u8 filler_2B0E[0xE]; /*0x2B1C*/ u16 unk2B1C[4]; - /*0x2B24*/ u8 filler_2B24[0x2B0]; + /*0x2B24*/ u8 filler_2B24[0x28]; + /*0x2B4C*/ struct SaveBlock1_2B4C_Struct unkSave[16]; + /*0x2D8C*/ u8 filler_2D8C[0x48]; /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff /*0x2DFC*/ u8 filler_2DFC[0x100]; /*0x2EFC*/ struct SB1_2EFC_Struct sb1_2EFC_struct[5]; @@ -284,7 +291,7 @@ struct SaveBlock2 { /*0x00*/ u8 playerName[8]; /*0x08*/ u8 playerGender; // MALE, FEMALE - /*0x09*/ u8 sb2_field_9; + /*0x09*/ u8 specialSaveWarp; /*0x0A*/ u8 playerTrainerId[4]; /*0x0E*/ u16 playTimeHours; /*0x10*/ u8 playTimeMinutes; diff --git a/ld_script.txt b/ld_script.txt index 716e0563e..119690d73 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -60,7 +60,7 @@ SECTIONS { asm/daycare.o(.text); asm/egg_hatch.o(.text); asm/rom_804373C.o(.text); - asm/load_save.o(.text); + src/load_save.o(.text); asm/trade.o(.text); asm/berry_blender.o(.text); src/play_time.o(.text); diff --git a/src/load_save.c b/src/load_save.c new file mode 100644 index 000000000..6f12718f0 --- /dev/null +++ b/src/load_save.c @@ -0,0 +1,165 @@ +#include "global.h" +#include "main.h" +#include "rom4.h" +#include "pokemon.h" + +extern u8 gPlayerPartyCount; +extern u32 gUnknown_3004820; + +struct LoadedSaveData +{ + struct ItemSlot items[20]; + struct ItemSlot keyItems[20]; + struct ItemSlot pokeBalls[16]; + struct ItemSlot TMsHMs[64]; + struct ItemSlot berries[46]; + struct SaveBlock1_2B4C_Struct unknownSaveData[16]; +}; + +extern struct LoadedSaveData gLoadedSaveData[]; + +extern u16 IdentifyFlash(void); +extern void gpu_sync_bg_hide(); + +void CheckForFlashMemory(void) +{ + if(!IdentifyFlash()) + { + gUnknown_3004820 = 1; + InitFlashTimer(); + } + else + gUnknown_3004820 = 0; +} + +u8 GetSecretBase2Field_9(void) +{ + return gSaveBlock2.specialSaveWarp; +} + +void ClearSecretBase2Field_9(void) +{ + gSaveBlock2.specialSaveWarp = 0; +} + +void SetSecretBase2Field_9(void) +{ + gSaveBlock2.specialSaveWarp = 1; +} + +void SetSecretBase2Field_9_AndHideBG(void) // note: no other function sets specialSaveWarp to values other than 0 or 1, hence clear and set distinctions. +{ + gpu_sync_bg_hide(0); // the function doesn't use the parameter passed to it, but this is necessary to match. + gSaveBlock2.specialSaveWarp = 1; +} + +void ClearSecretBase2Field_9_2(void) // duplicate function +{ + gSaveBlock2.specialSaveWarp = 0; +} + +void SavePlayerParty(void) +{ + int i; + + gSaveBlock1.playerPartyCount = gPlayerPartyCount; + + for (i = 0; i < 6; i++) + gSaveBlock1.playerParty[i] = gPlayerParty[i]; +} + +void LoadPlayerParty(void) +{ + int i; + + gPlayerPartyCount = gSaveBlock1.playerPartyCount; + + for (i = 0; i < 6; i++) + gPlayerParty[i] = gSaveBlock1.playerParty[i]; +} + +void SaveMapObjects(void) +{ + int i; + + for(i = 0; i < 16; i++) + gSaveBlock1.mapObjects[i] = gMapObjects[i]; +} + +void LoadMapObjects(void) +{ + int i; + + for(i = 0; i < 16; i++) + gMapObjects[i] = gSaveBlock1.mapObjects[i]; +} + +void SaveSerializedGame(void) +{ + SavePlayerParty(); + SaveMapObjects(); +} + +void LoadSerializedGame(void) +{ + LoadPlayerParty(); + LoadMapObjects(); +} + +void LoadPlayerData(void) +{ + int i; + + // load player items. + for(i = 0; i < 20; i++) + gLoadedSaveData->items[i] = gSaveBlock1.bagPocket_Items[i]; + + // load player key items. + for(i = 0; i < 20; i++) + gLoadedSaveData->keyItems[i] = gSaveBlock1.bagPocket_KeyItems[i]; + + // load player pokeballs. + for(i = 0; i < 16; i++) + gLoadedSaveData->pokeBalls[i] = gSaveBlock1.bagPocket_PokeBalls[i]; + + // load player TMs and HMs. + for(i = 0; i < 64; i++) + gLoadedSaveData->TMsHMs[i] = gSaveBlock1.bagPocket_TMHM[i]; + + // load player berries. + for(i = 0; i < 46; i++) + gLoadedSaveData->berries[i] = gSaveBlock1.bagPocket_Berries[i]; + + // load misc data. + for(i = 0; i < 16; i++) + gLoadedSaveData->unknownSaveData[i] = gSaveBlock1.unkSave[i]; +} + +void SavePlayerData(void) +{ + int i; + + // save player items. + for(i = 0; i < 20; i++) + gSaveBlock1.bagPocket_Items[i] = gLoadedSaveData->items[i]; + + // save player key items. + for(i = 0; i < 20; i++) + gSaveBlock1.bagPocket_KeyItems[i] = gLoadedSaveData->keyItems[i]; + + // save player pokeballs. + for(i = 0; i < 16; i++) + gSaveBlock1.bagPocket_PokeBalls[i] = gLoadedSaveData->pokeBalls[i]; + + // save player TMs and HMs. + for(i = 0; i < 64; i++) + gSaveBlock1.bagPocket_TMHM[i] = gLoadedSaveData->TMsHMs[i]; + + // save player berries. + for(i = 0; i < 46; i++) + gSaveBlock1.bagPocket_Berries[i] = gLoadedSaveData->berries[i]; + + // save misc data. + for(i = 0; i < 16; i++) + gSaveBlock1.unkSave[i] = gLoadedSaveData->unknownSaveData[i]; +} diff --git a/src/new_game.c b/src/new_game.c index c36337409..d63e50236 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -102,7 +102,7 @@ void NewGameInitData(void) sub_8052DE4(); memset(&gSaveBlock1, 0, sizeof(gSaveBlock1)); sub_80A2B18(); - gSaveBlock2.sb2_field_9 = 0; + gSaveBlock2.specialSaveWarp = 0; set_player_trainer_id(); PlayTimeCounter_Reset(); sub_8052D78(); diff --git a/src/rom4.c b/src/rom4.c index a3b0b221d..19f59001b 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -454,7 +454,7 @@ void sub_80537CC(u8 a1) warp_set(&gSaveBlock1.warp1, warp->group, warp->map, -1, warp->x, warp->y); } -void gpu_sync_bg_hide(void) +void gpu_sync_bg_hide() { gSaveBlock1.warp1 = gSaveBlock1.warp2; } @@ -1262,9 +1262,9 @@ void CB2_ContinueSavedGame(void) PlayTimeCounter_Start(); ScriptContext1_Init(); ScriptContext2_Disable(); - if (sub_80479F8() == 1) + if (GetSecretBase2Field_9() == 1) { - sub_8047A04(); + ClearSecretBase2Field_9(); sub_8053778(); warp_in(); SetMainCallback2(CB2_LoadMap); diff --git a/src/save.c b/src/save.c index a26e0da98..88f19f15c 100644 --- a/src/save.c +++ b/src/save.c @@ -550,27 +550,27 @@ u8 sub_8125C3C(u8 a1) sav12_xor_increment(10); for (i = 0; i < 2; i++) sub_81253C8(28 + i, gHallOfFameSaveSectionLocations[i].data, gHallOfFameSaveSectionLocations[i].size); - save_serialize_game(); + SaveSerializedGame(); save_write_to_flash(0xFFFF, gSaveSectionLocations); break; case 0: default: - save_serialize_game(); + SaveSerializedGame(); save_write_to_flash(0xFFFF, gSaveSectionLocations); break; case 1: - save_serialize_game(); + SaveSerializedGame(); for (i = 0; i < 5; i++) save_write_to_flash(i, gSaveSectionLocations); break; case 2: - save_serialize_game(); + SaveSerializedGame(); save_write_to_flash(0, gSaveSectionLocations); break; case 4: for (i = 28; i < 32; i++) EraseFlashSector(i); - save_serialize_game(); + SaveSerializedGame(); save_write_to_flash(0xFFFF, gSaveSectionLocations); break; } @@ -592,7 +592,7 @@ u8 sub_8125D80(void) { if (gUnknown_3004820 != 1) return 1; - save_serialize_game(); + SaveSerializedGame(); sub_812546C(gSaveSectionLocations); return 0; } @@ -629,7 +629,7 @@ u8 sub_8125E2C(void) if (gUnknown_3004820 != 1) return 1; - save_serialize_game(); + SaveSerializedGame(); sub_81254C8(gSaveSectionLocations); sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); return 0; @@ -669,7 +669,7 @@ u8 sub_8125EC8(u8 a1) case 0: default: result = sub_812587C(0xFFFF, gSaveSectionLocations); - save_deserialize_game(); + LoadSerializedGame(); gSaveFileStatus = result; gUnknown_03005EBC = 0; break; diff --git a/src/start_menu.c b/src/start_menu.c index 06eb28909..ee941b715 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -811,14 +811,14 @@ static void Task_8071B64(u8 taskId) (*step)++; break; case 1: - sub_8047A1C(); + SetSecretBase2Field_9_AndHideBG(); sub_8125E2C(); (*step)++; break; case 2: if(!sub_8125E6C()) break; - sub_8047A34(); + ClearSecretBase2Field_9_2(); (*step)++; break; case 3: diff --git a/sym_ewram.txt b/sym_ewram.txt index 842903712..0ef21b938 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -310,7 +310,7 @@ gSaveBlock2: @ 2024EA4 gSaveBlock1: @ 2025734 .space 0x3AC0 -gUnknown_020291F4: @ 20291F4 +gLoadedSaveData: @ items .space 0x4D8 gUnknown_020296CC: @ 20296CC |