From aa939e0955ec683efb5dd963430eace695a26af9 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 6 Mar 2022 14:41:40 -0600 Subject: All saving functions decomped - poke_sub_4 was determined to be Dungeon Index/Floor - Clean up code that references these functions --- src/code_8097DD0.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/code_8097DD0.c (limited to 'src/code_8097DD0.c') diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c new file mode 100644 index 0000000..e5d4966 --- /dev/null +++ b/src/code_8097DD0.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "code_8092334.h" +#include "pokemon.h" + +struct unkStruct_203B494 +{ + // size: 0xC8? + u32 unk0; // 32 bit bitfield, I think + s32 numAdventures; + s32 unk8; + s32 unkC; + struct unkPokeSubStruct_4 dungeonLocation; + s16 unk14; + s16 unk16; + s16 unk18; + u32 unk1C[0xE]; + u32 unk54[0xE]; + u32 unk8C[0xD]; + s32 unkC0; +}; + +extern struct unkStruct_203B494 *gUnknown_203B494; + +extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +void ReadExclusivePokemon(struct unkStruct_8094924 *r0); +void ReadGameOptions(struct unkStruct_8094924 *param_1); +void ReadPlayTime(struct unkStruct_8094924 *r0); +void WriteExclusivePokemon(struct unkStruct_8094924 *r0); +void WriteGameOptions(struct unkStruct_8094924 *param_1); +void WritePlayTime(struct unkStruct_8094924 *r0); + +extern void sub_8097944(void); + +void sub_8097C18(struct unkStruct_8094924 *r0) +{ + sub_8097944(); + SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + xxx_save_poke_sub_4_80902F4(r0, &gUnknown_203B494->dungeonLocation); +} + +void sub_8097CC0(struct unkStruct_8094924 *r0) +{ + RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + xxx_restore_poke_sub_4_8090314(r0, &gUnknown_203B494->dungeonLocation); +} + +u32 sub_8097D60(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + WriteGameOptions(&backup); + WritePlayTime(&backup); + sub_8097C18(&backup); + WriteExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_8097D98(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + ReadGameOptions(&backup); + ReadPlayTime(&backup); + sub_8097CC0(&backup); + ReadExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} -- cgit v1.2.3 From 57f540b320ae8439fe4b42c6149641b877c7ea73 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 21 Mar 2022 17:48:40 -0700 Subject: fix a few nonmatchings and code cleanup --- src/code_8097DD0.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/code_8097DD0.c') diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index e5d4966..abbb02e 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -9,7 +9,7 @@ struct unkStruct_203B494 s32 numAdventures; s32 unk8; s32 unkC; - struct unkPokeSubStruct_4 dungeonLocation; + struct DungeonLocation dungeonLocation; s16 unk14; s16 unk16; s16 unk18; @@ -21,8 +21,8 @@ struct unkStruct_203B494 extern struct unkStruct_203B494 *gUnknown_203B494; -extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); -extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); void ReadExclusivePokemon(struct unkStruct_8094924 *r0); void ReadGameOptions(struct unkStruct_8094924 *param_1); void ReadPlayTime(struct unkStruct_8094924 *r0); @@ -46,7 +46,7 @@ void sub_8097C18(struct unkStruct_8094924 *r0) SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - xxx_save_poke_sub_4_80902F4(r0, &gUnknown_203B494->dungeonLocation); + SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); } void sub_8097CC0(struct unkStruct_8094924 *r0) @@ -62,7 +62,7 @@ void sub_8097CC0(struct unkStruct_8094924 *r0) RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - xxx_restore_poke_sub_4_8090314(r0, &gUnknown_203B494->dungeonLocation); + RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); } u32 sub_8097D60(u8 *r0, u32 size) -- cgit v1.2.3