summaryrefslogtreecommitdiff
path: root/src/code_8097DD0.c
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2022-03-06 14:41:40 -0600
committerSeth Barberee <seth.barberee@gmail.com>2022-03-11 10:14:32 -0800
commitaa939e0955ec683efb5dd963430eace695a26af9 (patch)
tree34639fb9579dc71c33e5a209ecfa8c60c01230ac /src/code_8097DD0.c
parenta5c90b097045a50df6ecb7cc37ce50f3fc9f142f (diff)
All saving functions decomped
- poke_sub_4 was determined to be Dungeon Index/Floor - Clean up code that references these functions
Diffstat (limited to 'src/code_8097DD0.c')
-rw-r--r--src/code_8097DD0.c90
1 files changed, 90 insertions, 0 deletions
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;
+}