summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_8094F88.c31
-rw-r--r--src/code_8095824.c165
-rw-r--r--src/code_80972F4.c200
-rw-r--r--src/friend_rescue_1.c3
-rw-r--r--src/load_screen.c15
5 files changed, 379 insertions, 35 deletions
diff --git a/src/code_8094F88.c b/src/code_8094F88.c
index 5bd3a29..0ca6de9 100644
--- a/src/code_8094F88.c
+++ b/src/code_8094F88.c
@@ -1,33 +1,18 @@
#include "global.h"
+#include "pokemon.h"
+#include "code_8094F88.h"
#include "memory.h"
-struct unkStruct_203B480
-{
- //size of 48
- u8 unk0;
- u8 fill1[0x22 - 1];
- u8 unk22;
- u8 fill23[0x2D - 0x23];
- u8 unk2D;
-};
-
-struct unkStruct_203B48C
-{
- s32 unk0;
- s32 unk4[0x20];
-};
-
extern struct unkStruct_203B480 gUnknown_2038C88;
-extern u8 gUnknown_2039288;
-extern u32 gUnknown_20392E8;
+extern struct unkStruct_203B480 *gUnknown_203B480;
+extern struct unkStruct_203B484 gUnknown_2039288;
+extern struct unkStruct_203B484 *gUnknown_203B484;
extern struct unkStruct_203B48C gUnknown_20393C0;
-extern u8 *gUnknown_203B484;
+extern struct unkStruct_203B48C *gUnknown_203B48C;
extern u32 *gUnknown_203B488;
+extern u32 gUnknown_20392E8;
-extern struct unkStruct_203B480 *gUnknown_203B480;
-
-extern struct unkStruct_203B48C *gUnknown_203B48C; // def a pointer
void sub_80950BC(void)
@@ -43,7 +28,7 @@ struct unkStruct_203B480 *sub_80950F8(void)
return &gUnknown_2038C88;
}
-u8 *sub_8095100(void)
+struct unkStruct_203B484 *sub_8095100(void)
{
return &gUnknown_2039288;
}
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;
+}
diff --git a/src/code_80972F4.c b/src/code_80972F4.c
new file mode 100644
index 0000000..7e87832
--- /dev/null
+++ b/src/code_80972F4.c
@@ -0,0 +1,200 @@
+#include "global.h"
+#include "pokemon.h"
+#include "wonder_mail.h"
+
+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 sub_80015C0(u32, u32);
+
+struct unkStruct_8097270
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ struct unkPokeSubStruct_4 unk4;
+ u32 unk8;
+ u16 unkC;
+ u16 unkE;
+ u8 unk10;
+ u8 unk11;
+ u8 unk12;
+ u8 unk13;
+};
+
+struct subStruct_203B490
+{
+ // size: 0xC
+ struct unkPokeSubStruct_4 unk0;
+ u32 unk4;
+ u32 unk8;
+};
+
+
+struct unkStruct_203B490
+{
+ // size: 0x330?
+
+ struct unkStruct_8097270 unk0[4];
+ struct unkStruct_8097270 unk50[8];
+ struct unkStruct_8097270 unkF0[8];
+ u8 unk190[0x28];
+ u8 unk1B8[0x78];
+ struct subStruct_203B490 unk230[16];
+ u8 unk2F0[0x38];
+ u8 unk328;
+};
+extern struct unkStruct_203B490 *gUnknown_203B490;
+
+void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b);
+void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b);
+extern s32 sub_8096EB0(void);
+
+bool8 sub_8096F50(struct WonderMail *r0)
+{
+ s32 index;
+ s32 temp2;
+ struct subStruct_203B490 *temp;
+
+ temp2 = sub_8096EB0();
+
+
+ for(index = 0; index < 0x10; index++)
+ {
+ temp = &gUnknown_203B490->unk230[index];
+ if(temp->unk0.unk4 == r0->dungeon)
+ if(temp->unk0.unk5 == r0->floor)
+ if(temp->unk4 == r0->unk8)
+ if(temp->unk8 == temp2)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u32 sub_8096FA0(u8 *r0, u32 size)
+{
+ s32 index;
+ struct unkStruct_8094924 backup;
+ u32 temp;
+
+ xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
+ for(index = 0; index < 4; index++)
+ {
+ sub_80971EC(&backup, &gUnknown_203B490->unk0[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_80971EC(&backup, &gUnknown_203B490->unk50[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]);
+ }
+ for(index = 0; index < 0x38; index++)
+ {
+ RestoreIntegerBits(&backup, &temp, 1);
+ if(temp & 1)
+ gUnknown_203B490->unk2F0[index] = 1;
+ else
+ gUnknown_203B490->unk2F0[index] = 0;
+ }
+ RestoreIntegerBits(&backup, &temp, 1);
+ if(temp & 1)
+ gUnknown_203B490->unk328 = 1;
+ else
+ gUnknown_203B490->unk328 = 0;
+
+ RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140);
+ RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
+ for(index = 0; index < 0x10; index++)
+ {
+ RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
+ RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
+ xxx_restore_poke_sub_4_8090314(&backup, &gUnknown_203B490->unk230[index].unk0);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+u32 sub_80970D8(u8 *r0, u32 size)
+{
+ s32 index;
+ struct unkStruct_8094924 backup;
+ u32 temp;
+
+ xxx_init_struct_8094924_save_809486C(&backup, r0, size);
+ for(index = 0; index < 4; index++)
+ {
+ sub_8097270(&backup, &gUnknown_203B490->unk0[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_8097270(&backup, &gUnknown_203B490->unk50[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_8097270(&backup, &gUnknown_203B490->unkF0[index]);
+ }
+ for(index = 0; index < 0x38; index++)
+ {
+ if(gUnknown_203B490->unk2F0[index] != 0)
+ temp = -1;
+ else
+ temp = 0;
+ SaveIntegerBits(&backup, &temp, 1);
+ }
+ if(gUnknown_203B490->unk328 != 0)
+ temp = -1;
+ else
+ temp = 0;
+ SaveIntegerBits(&backup, &temp, 1);
+ SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140);
+ SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
+ for(index = 0; index < 0x10; index++)
+ {
+ SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
+ SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
+ xxx_save_poke_sub_4_80902F4(&backup, &gUnknown_203B490->unk230[index].unk0);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b)
+{
+ RestoreIntegerBits(a, &b->unk0, 4);
+ RestoreIntegerBits(a, &b->unk1, 3);
+ RestoreIntegerBits(a, &b->unk2, 4);
+ RestoreIntegerBits(a, &b->unkC, 9);
+ RestoreIntegerBits(a, &b->unkE, 9);
+ RestoreIntegerBits(a, &b->unk10, 8);
+ RestoreIntegerBits(a, &b->unk11, 4);
+ RestoreIntegerBits(a, &b->unk12, 8);
+ RestoreIntegerBits(a, &b->unk13, 6);
+ RestoreIntegerBits(a, &b->unk8, 0x18);
+ xxx_restore_poke_sub_4_8090314(a, &b->unk4);
+}
+
+void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b)
+{
+ SaveIntegerBits(a, &b->unk0, 4);
+ SaveIntegerBits(a, &b->unk1, 3);
+ SaveIntegerBits(a, &b->unk2, 4);
+ SaveIntegerBits(a, &b->unkC, 9);
+ SaveIntegerBits(a, &b->unkE, 9);
+ SaveIntegerBits(a, &b->unk10, 8);
+ SaveIntegerBits(a, &b->unk11, 4);
+ SaveIntegerBits(a, &b->unk12, 8);
+ SaveIntegerBits(a, &b->unk13, 6);
+ SaveIntegerBits(a, &b->unk8, 0x18);
+ xxx_save_poke_sub_4_80902F4(a, &b->unk4);
+}
+
+void sub_80972F4(void)
+{
+ sub_80015C0(0, 0x2B);
+ sub_80015C0(0, 0x2C);
+ sub_80015C0(0, 0x2D);
+}
+
+void nullsub_128(void)
+{}
diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c
index 325cf4e..f7a74ef 100644
--- a/src/friend_rescue_1.c
+++ b/src/friend_rescue_1.c
@@ -8,6 +8,7 @@
#include "friend_rescue.h"
#include "sub_8095228.h"
#include "item.h"
+#include "code_8094F88.h"
extern struct TeamInventory *gTeamInventory_203B460;
extern u8 *gUnknown_203B484;
@@ -488,7 +489,7 @@ void sub_8033DBC(void)
sub_80951FC(&temp.unk0);
temp2 = sub_8095228(sub_809539C(1, temp.unk10));
temp2->unk0 = 7;
- MemoryFill8((u8 *)gUnknown_203B484, 0, 0x5C);
+ MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
SetFriendRescueMenuState(0x40);
break;
case 24:
diff --git a/src/load_screen.c b/src/load_screen.c
index 1c224f5..775e974 100644
--- a/src/load_screen.c
+++ b/src/load_screen.c
@@ -9,17 +9,10 @@
#include "pokemon.h"
#include "save.h"
#include "code_800D090.h"
+#include "code_8094F88.h"
extern const struct FileArchive gTitleMenuFileArchive;
-struct unkStruct_203B484
-{
- u8 fill0[0xC];
- /* 0xC */ s16 speciesIndex;
- u8 fillE[0x50 - 0xE];
- /* 0x50 */ u8 helperName[10];
-};
-
struct LoadScreen
{
// size: 0x27c
@@ -373,9 +366,9 @@ void DrawLoadScreenText(void)
if (iVar2 == 0xf1207){
// NOTE: very hacky match here but needed var here to match
temp2 = gUnknown_203B484;
- if(temp2->speciesIndex != SPECIES_NONE) {
- sub_808D930(speciesHelper,temp2->speciesIndex);
- sub_80922B4(nameHelper,temp2->helperName,POKEMON_NAME_LENGTH);
+ if(temp2->unk4.speciesNum != SPECIES_NONE) {
+ sub_808D930(speciesHelper,temp2->unk4.speciesNum);
+ sub_80922B4(nameHelper,temp2->unk4.name,POKEMON_NAME_LENGTH);
sprintf_2(gLoadScreen->formattedHelperInfo,gHelperInfoPlaceholder,nameHelper,speciesHelper); // %s (%s)
}
else