summaryrefslogtreecommitdiff
path: root/src/code_8095824.c
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2022-03-01 19:40:00 -0800
committerSeth Barberee <seth.barberee@gmail.com>2022-03-11 10:14:30 -0800
commita5c90b097045a50df6ecb7cc37ce50f3fc9f142f (patch)
treecce54799cd907434a72dca593f4c30836156a0b8 /src/code_8095824.c
parent30fea2d6f303e0e57b62032f56da86c8223ef1f7 (diff)
decomp some more saving functions
Diffstat (limited to 'src/code_8095824.c')
-rw-r--r--src/code_8095824.c165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/code_8095824.c b/src/code_8095824.c
new file mode 100644
index 0000000..b366574
--- /dev/null
+++ b/src/code_8095824.c
@@ -0,0 +1,165 @@
+#include "global.h"
+#include "pokemon.h"
+#include "code_8094F88.h"
+
+extern struct unkStruct_203B484 *gUnknown_203B484;
+extern struct unkStruct_203B480 *gUnknown_203B480;
+extern struct unkStruct_203B48C *gUnknown_203B48C;
+
+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 xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC);
+extern void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
+extern void SavePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet);
+extern void RestorePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet);
+
+void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
+void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
+extern u32 sub_8095324(u32);
+
+u32 sub_80954B4(void)
+{
+ if(sub_8095324(3) != 0)
+ return 1;
+ else
+ return 0;
+}
+
+u32 sub_80954CC(u8 *a, u32 b)
+{
+ struct unkStruct_8094924 backup;
+ struct PokemonStruct *temp;
+ s32 index;
+
+ xxx_init_struct_8094924_restore_809485C(&backup, a, b);
+ for(index = 0; index < 0x20; index++)
+ {
+ sub_8095774(&backup, &gUnknown_203B480[index]);
+ }
+ RestoreIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20);
+ temp = &gUnknown_203B484->unk4;
+ memset(temp, 0, sizeof(struct PokemonStruct));
+ RestoreIntegerBits(&backup, &temp->unk0, 2);
+ RestoreIntegerBits(&backup, &temp->unk2, 1);
+ RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7);
+ xxx_restore_poke_sub_4_8090314(&backup, &temp->unk4);
+ RestoreIntegerBits(&backup, &temp->speciesNum, 9);
+ xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]);
+ xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[1]);
+ RestoreIntegerBits(&backup, &temp->IQ, 0xA);
+ RestoreIntegerBits(&backup, &temp->pokeHP, 0xA);
+ RestoreIntegerBits(&backup, &temp->offense.att[0], 8);
+ RestoreIntegerBits(&backup, &temp->offense.att[1], 8);
+ RestoreIntegerBits(&backup, &temp->offense.def[0], 8);
+ RestoreIntegerBits(&backup, &temp->offense.def[1], 8);
+ RestoreIntegerBits(&backup, &temp->unk1C, 0x18);
+ RestoreIntegerBits(&backup, &temp->IQSkills, 0x18);
+ RestoreIntegerBits(&backup, &temp->unk24, 4);
+ RestoreHeldItem(&backup, &temp->heldItem);
+ RestorePokemonMoves(&backup, temp->moves);
+ RestoreIntegerBits(&backup, temp->name, 0x50);
+
+ RestoreIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20);
+ for(index = 0; index < 0x20; index++)
+ {
+ RestoreIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+u32 sub_8095624(u8 *a, u32 b)
+{
+ struct unkStruct_8094924 backup;
+ struct PokemonStruct *temp;
+ s32 index;
+
+ xxx_init_struct_8094924_save_809486C(&backup, a, b);
+ for(index = 0; index < 0x20; index++)
+ {
+ sub_8095824(&backup, &gUnknown_203B480[index]);
+ }
+ SaveIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20);
+ temp = &gUnknown_203B484->unk4;
+ SaveIntegerBits(&backup, &temp->unk0, 2);
+ SaveIntegerBits(&backup, &temp->unk2, 1);
+ SaveIntegerBits(&backup, &temp->unkHasNextStage, 7);
+ xxx_save_poke_sub_4_80902F4(&backup, &temp->unk4);
+ SaveIntegerBits(&backup, &temp->speciesNum, 9);
+ xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]);
+ xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[1]);
+ SaveIntegerBits(&backup, &temp->IQ, 0xA);
+ SaveIntegerBits(&backup, &temp->pokeHP, 0xA);
+ SaveIntegerBits(&backup, &temp->offense.att[0], 8);
+ SaveIntegerBits(&backup, &temp->offense.att[1], 8);
+ SaveIntegerBits(&backup, &temp->offense.def[0], 8);
+ SaveIntegerBits(&backup, &temp->offense.def[1], 8);
+ SaveIntegerBits(&backup, &temp->unk1C, 0x18);
+ SaveIntegerBits(&backup, &temp->IQSkills, 0x18);
+ SaveIntegerBits(&backup, &temp->unk24, 4);
+ SaveHeldItem(&backup, &temp->heldItem);
+ SavePokemonMoves(&backup, temp->moves);
+ SaveIntegerBits(&backup, temp->name, 0x50);
+
+ SaveIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20);
+ for(index = 0; index < 0x20; index++)
+ {
+ SaveIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
+{
+ u8 temp;
+
+ RestoreIntegerBits(a, &b->unk0, 4);
+ xxx_restore_poke_sub_4_8090314(a, &b->unk4);
+ RestoreIntegerBits(a, &b->unk8, 0x18);
+ RestoreIntegerBits(a, &b->unkC, 0x9);
+ RestoreIntegerBits(a, &b->unk10, 0x20);
+ RestoreIntegerBits(a, &b->unk14, 0x50);
+ RestoreIntegerBits(a, &b->unk20, 0x8);
+ RestoreIntegerBits(a, &b->unk21, 0x8);
+ RestoreIntegerBits(a, &b->unk22, 0x8);
+ RestoreIntegerBits(a, &b->unk24, 0x20);
+ RestoreIntegerBits(a, &b->unk28, 0x20);
+ RestoreIntegerBits(a, &b->unk2C, 0x8);
+
+ RestoreIntegerBits(a, &temp, 1);
+ b->unk2D = temp & 1;
+}
+
+void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
+{
+ u8 neg1;
+ u8 zero;
+ u8 *puVar2;
+ neg1 = -1;
+ zero = 0;
+
+ SaveIntegerBits(a, &b->unk0, 4);
+ xxx_save_poke_sub_4_80902F4(a, &b->unk4);
+ SaveIntegerBits(a, &b->unk8, 0x18);
+ SaveIntegerBits(a, &b->unkC, 0x9);
+ SaveIntegerBits(a, &b->unk10, 0x20);
+ SaveIntegerBits(a, &b->unk14, 0x50);
+ SaveIntegerBits(a, &b->unk20, 0x8);
+ SaveIntegerBits(a, &b->unk21, 0x8);
+ SaveIntegerBits(a, &b->unk22, 0x8);
+ SaveIntegerBits(a, &b->unk24, 0x20);
+ SaveIntegerBits(a, &b->unk28, 0x20);
+ SaveIntegerBits(a, &b->unk2C, 0x8);
+
+ if(b->unk2D != 0)
+ puVar2 = &neg1;
+ else
+ puVar2 = &zero;
+ SaveIntegerBits(a, puVar2, 1);
+}
+
+void sub_80958E4(u32 *a, u32 b)
+{
+ *a = b;
+}