summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_8092334.c8
-rw-r--r--src/exclusive_pokemon_1.c24
-rw-r--r--src/friend_area_1.c8
-rw-r--r--src/game_options.c40
-rw-r--r--src/items.c61
-rw-r--r--src/play_time.c16
-rw-r--r--src/pokemon.c61
-rw-r--r--src/pokemon_3.c273
-rw-r--r--src/pokemon_mid.c186
-rw-r--r--src/rescue_team_info.c17
-rw-r--r--src/save.c18
11 files changed, 606 insertions, 106 deletions
diff --git a/src/code_8092334.c b/src/code_8092334.c
index d03f888..16d2424 100644
--- a/src/code_8092334.c
+++ b/src/code_8092334.c
@@ -19,7 +19,7 @@ s16 sub_8094828(u16 r0, u8 itemIndex)
}
}
-void sub_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
+void xxx_init_struct_8094924_restore_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
{
r0->unk0 = r1;
r0->unk8 = 0;
@@ -27,7 +27,7 @@ void sub_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
r0->unk4 = &r1[size];
}
-void sub_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
+void xxx_init_struct_8094924_save_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
{
r0->unk0 = r1;
r0->unk8 = 0;
@@ -41,7 +41,7 @@ void nullsub_102(struct unkStruct_8094924 *r0)
}
-void sub_809488C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
+void SaveIntegerBits(struct unkStruct_8094924 *r0, void *r1, s32 size)
{
s32 r5;
u8 *r6;
@@ -115,7 +115,7 @@ void sub_80948E4(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
"\tbx r0");
}
-void sub_8094924(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
+void RestoreIntegerBits(struct unkStruct_8094924 *r0, void *r1, s32 size)
{
s32 r6;
u8 *r2;
diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c
index 37b4dfe..48b5ec5 100644
--- a/src/exclusive_pokemon_1.c
+++ b/src/exclusive_pokemon_1.c
@@ -4,7 +4,7 @@
extern struct ExclusivePokemonData *gUnknown_203B498;
extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON];
-void sub_8094924(u32 *, u8 *, u32);
+void RestoreIntegerBits(u32 *, void *, u32);
void sub_80980B4(s16);
void sub_8097FA8(u8);
void sub_8098170(s32);
@@ -13,7 +13,7 @@ void sub_8097FF8(void);
u8 sub_8098100(u8);
u8 sub_8098134(s16);
u8 sub_80981A0(s32);
-void sub_809488C(u32 *, u8 *, s32);
+void SaveIntegerBits(u32 *, void *, s32);
bool8 IsExclusivePokemonUnlocked(s16 pokeID)
{
@@ -59,21 +59,21 @@ void WriteExclusivePokemon(u32 *r0)
zero = 0;
- sub_809488C(r0, (u8 *)gUnknown_203B498, 1);
+ SaveIntegerBits(r0, (u8 *)gUnknown_203B498, 1);
for(iVar2 = 0; iVar2 < 424; iVar2++)
{
stack_0 = sub_8098134(iVar2);
- sub_809488C(r0, &stack_0, 1);
+ SaveIntegerBits(r0, &stack_0, 1);
}
for(iVar2 = 0; iVar2 < 64; iVar2++)
{
stack_1 = sub_8098100(iVar2);
- sub_809488C(r0, &stack_1, 1);
+ SaveIntegerBits(r0, &stack_1, 1);
}
for(iVar2 = 0; iVar2 < 31; iVar2++)
{
stack_2 = sub_80981A0(iVar2);
- sub_809488C(r0, &stack_2, 1);
+ SaveIntegerBits(r0, &stack_2, 1);
}
for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++)
{
@@ -81,7 +81,7 @@ void WriteExclusivePokemon(u32 *r0)
puVar2 = &neg_1;
else
puVar2 = &zero;
- sub_809488C(r0, puVar2, 1);
+ SaveIntegerBits(r0, puVar2, 1);
}
}
@@ -94,28 +94,28 @@ void ReadExclusivePokemon(u32 *r0)
u8 stack_3;
memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData));
- sub_8094924(r0, (u8 *)gUnknown_203B498, 1);
+ RestoreIntegerBits(r0, gUnknown_203B498, 1);
for(iVar2 = 0; iVar2 < 424; iVar2++)
{
- sub_8094924(r0, &stack_0, 1);
+ RestoreIntegerBits(r0, &stack_0, 1);
if(stack_0)
sub_80980B4(iVar2);
}
for(iVar2 = 0; iVar2 < 64; iVar2++)
{
- sub_8094924(r0, &stack_1, 1);
+ RestoreIntegerBits(r0, &stack_1, 1);
if(stack_1)
sub_8097FA8(iVar2);
}
for(iVar2 = 0; iVar2 < 31; iVar2++)
{
- sub_8094924(r0, &stack_2, 1);
+ RestoreIntegerBits(r0, &stack_2, 1);
if(stack_2)
sub_8098170(iVar2);
}
for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++)
{
- sub_8094924(r0, &stack_3, 1);
+ RestoreIntegerBits(r0, &stack_3, 1);
do; while(0); // do/while needed for matching - jiang
diff --git a/src/friend_area_1.c b/src/friend_area_1.c
index ff1da5d..c7dee3f 100644
--- a/src/friend_area_1.c
+++ b/src/friend_area_1.c
@@ -10,14 +10,14 @@ u32 SaveFriendAreas(u8 *r0, u32 size)
u32 temp;
s32 counter;
- sub_809486C(&unk, r0, size);
+ xxx_init_struct_8094924_save_809486C(&unk, r0, size);
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
{
if(gFriendAreas[counter] != 0)
temp = -1;
else
temp = 0;
- sub_809488C(&unk, (u8*)&temp, 1);
+ SaveIntegerBits(&unk, (u8*)&temp, 1);
}
nullsub_102(&unk);
return unk.unk8;
@@ -29,10 +29,10 @@ u32 ReadSavedFriendAreas(u8 *r0, s32 size)
u32 temp;
s32 counter;
- sub_809485C(&unk, r0, size);
+ xxx_init_struct_8094924_restore_809485C(&unk, r0, size);
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
{
- sub_8094924(&unk, (u8*)&temp, 1);
+ RestoreIntegerBits(&unk, &temp, 1);
// It's setting whether we have the friend area or not
if(temp & 1)
gFriendAreas[counter] = 1;
diff --git a/src/game_options.c b/src/game_options.c
index c5a92df..cfb95b7 100644
--- a/src/game_options.c
+++ b/src/game_options.c
@@ -76,7 +76,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
neg_1 = -1;
zero = 0;
- sub_809488C(param_1, &gUnknown_203B46C->unk8, 2);
+ SaveIntegerBits(param_1, &gUnknown_203B46C->unk8, 2);
if(gUnknown_203B46C->unk9 != 0)
{
@@ -86,7 +86,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unkA != 0)
{
@@ -96,7 +96,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->playerGender != 0)
{
@@ -106,7 +106,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk0 != 0)
{
@@ -116,7 +116,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk1 != 0)
{
@@ -126,7 +126,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk2 != 0)
{
@@ -136,7 +136,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk3 != 0)
{
@@ -146,43 +146,43 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
- sub_809488C(param_1, puVar2, 1);
+ SaveIntegerBits(param_1, puVar2, 1);
- sub_809488C(param_1, &gUnknown_203B46C->unk4, 3);
- sub_809488C(param_1, &gUnknown_203B46C->unkC, 2);
+ SaveIntegerBits(param_1, &gUnknown_203B46C->unk4, 3);
+ SaveIntegerBits(param_1, &gUnknown_203B46C->unkC, 2);
}
void ReadGameOptions(struct unkStruct_8094924 *param_1)
{
u8 byteArray[4];
- sub_8094924(param_1, byteArray, 2);
+ RestoreIntegerBits(param_1, byteArray, 2);
gUnknown_203B46C->unk8 = byteArray[0] & 3;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk9 = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unkA = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->playerGender = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk0 = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk1 = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk2 = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 1);
+ RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk3 = byteArray[0] & 1;
- sub_8094924(param_1, byteArray, 3);
+ RestoreIntegerBits(param_1, byteArray, 3);
gUnknown_203B46C->unk4 = byteArray[0] & 7;
- sub_8094924(param_1, byteArray, 2);
+ RestoreIntegerBits(param_1, byteArray, 2);
gUnknown_203B46C->unkC = byteArray[0] & 3;
sub_8094C14();
diff --git a/src/items.c b/src/items.c
index 337e622..3ced8fe 100644
--- a/src/items.c
+++ b/src/items.c
@@ -1160,78 +1160,78 @@ bool8 xxx_insert_unk250_8091C1C(u8 itemIndex) {
return TRUE;
}
-s32 sub_8091C68(u8* unk0, u32 size)
+s32 SaveTeamInventory(u8* unk0, u32 size)
{
struct unkStruct_8094924 unk;
s32 i;
- sub_809486C(&unk, unk0, size);
+ xxx_init_struct_8094924_save_809486C(&unk, unk0, size);
for (i = 0; i < INVENTORY_SIZE; i++) {
- sub_8091E28(&unk, (u8*)&gTeamInventory_203B460->teamItems[i]);
+ SaveItemSlot(&unk, &gTeamInventory_203B460->teamItems[i]);
}
for (i = 0; i < NUMBER_OF_ITEM_IDS; i++) {
- sub_809488C(&unk, (u8*)&gTeamInventory_203B460->teamStorage[i], 10);
+ SaveIntegerBits(&unk, &gTeamInventory_203B460->teamStorage[i], 10);
}
for (i = 0; i < 8; i++) {
- sub_8091DE0(&unk, (u8*)&gTeamInventory_203B460->unk230[i]);
+ SaveHeldItem(&unk, &gTeamInventory_203B460->unk230[i]);
}
for (i = 0; i < 4; i++) {
- sub_8091DE0(&unk, (u8*)&gTeamInventory_203B460->unk250[i]);
+ SaveHeldItem(&unk, &gTeamInventory_203B460->unk250[i]);
}
- sub_809488C(&unk, (u8*)&gTeamInventory_203B460->teamMoney, 24);
- sub_809488C(&unk, (u8*)&gTeamInventory_203B460->teamSavings, 24);
+ SaveIntegerBits(&unk, &gTeamInventory_203B460->teamMoney, 24);
+ SaveIntegerBits(&unk, &gTeamInventory_203B460->teamSavings, 24);
nullsub_102(&unk);
return unk.unk8;
}
-s32 sub_8091D14(u8 *unk0, u32 size)
+s32 RestoreTeamInventory(u8 *unk0, u32 size)
{
struct unkStruct_8094924 unk;
s32 i;
- sub_809485C(&unk, unk0, size);
+ xxx_init_struct_8094924_restore_809485C(&unk, unk0, size);
for (i = 0; i < 20; i++) {
- sub_8091E00(&unk, (u8*)&gTeamInventory_203B460->teamItems[i]);
+ RestoreItemSlot(&unk, &gTeamInventory_203B460->teamItems[i]);
}
for (i = 0; i < 240; i++) {
- sub_8094924(&unk, (u8*)&gTeamInventory_203B460->teamStorage[i], 10);
+ RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamStorage[i], 10);
}
for (i = 0; i < 8; i++) {
- sub_8091DC0(&unk, (u8*)&gTeamInventory_203B460->unk230[i]);
+ RestoreHeldItem(&unk, &gTeamInventory_203B460->unk230[i]);
}
for (i = 0; i < 4; i++) {
- sub_8091DC0(&unk, (u8*)&gTeamInventory_203B460->unk250[i]);
+ RestoreHeldItem(&unk, &gTeamInventory_203B460->unk250[i]);
}
- sub_8094924(&unk, (u8*)&gTeamInventory_203B460->teamMoney, 24);
- sub_8094924(&unk, (u8*)&gTeamInventory_203B460->teamSavings, 24);
+ RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamMoney, 24);
+ RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamSavings, 24);
nullsub_102(&unk);
return unk.unk8;
}
-void sub_8091DC0(struct unkStruct_8094924 *a1, u8 *a2)
+void RestoreHeldItem(struct unkStruct_8094924 *a1, struct HeldItem *item)
{
- sub_8094924(a1, a2, 8);
- sub_8094924(a1, a2 + 1, 7);
+ RestoreIntegerBits(a1, &item->itemIndex, 8);
+ RestoreIntegerBits(a1, &item->numItems, 7);
}
-void sub_8091DE0(struct unkStruct_8094924 *a1, u8 *a2)
+void SaveHeldItem(struct unkStruct_8094924 *a1, struct HeldItem *item)
{
- sub_809488C(a1, a2, 8);
- sub_809488C(a1, a2 + 1, 7);
+ SaveIntegerBits(a1, &item->itemIndex, 8);
+ SaveIntegerBits(a1, &item->numItems, 7);
}
-void sub_8091E00(struct unkStruct_8094924 *a1, u8 *a2)
+void RestoreItemSlot(struct unkStruct_8094924 *a1, struct ItemSlot *slot)
{
- sub_8094924(a1, a2, 8);
- sub_8094924(a1, a2 + 1, 7);
- sub_8094924(a1, a2 + 2, 8);
+ RestoreIntegerBits(a1, &slot->unk0, 8);
+ RestoreIntegerBits(a1, &slot->numItems, 7);
+ RestoreIntegerBits(a1, &slot->itemIndex, 8);
}
-void sub_8091E28(struct unkStruct_8094924 *a1, u8 *a2)
+void SaveItemSlot(struct unkStruct_8094924 *a1, struct ItemSlot *slot)
{
- sub_809488C(a1, a2, 8);
- sub_809488C(a1, a2 + 1, 7);
- sub_809488C(a1, a2 + 2, 8);
+ SaveIntegerBits(a1, &slot->unk0, 8);
+ SaveIntegerBits(a1, &slot->numItems, 7);
+ SaveIntegerBits(a1, &slot->itemIndex, 8);
}
u32 sub_8091E50(u8 index)
@@ -1465,6 +1465,7 @@ s32 sub_8091E94(s32 a1, s32 a2, s32 a3)
"\tbx r1\n");
#endif
}
+
void ClearAllItems_8091FB4() {
s32 i;
diff --git a/src/play_time.c b/src/play_time.c
index 8b2e567..97a9754 100644
--- a/src/play_time.c
+++ b/src/play_time.c
@@ -77,16 +77,16 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut
void WritePlayTime(struct unkStruct_8094924 *r0)
{
- sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
- sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
- sub_809488C(r0, (&(gPlayTimeRef->minutes)), 6);
- sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
+ SaveIntegerBits(r0, &gPlayTimeRef->frames, 6);
+ SaveIntegerBits(r0, &gPlayTimeRef->seconds, 6);
+ SaveIntegerBits(r0, &gPlayTimeRef->minutes, 6);
+ SaveIntegerBits(r0, &gPlayTimeRef->hours, 14);
}
void ReadPlayTime(struct unkStruct_8094924 *r0)
{
- sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
- sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
- sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
- sub_8094924(r0, (u8*)(&(gPlayTimeRef->hours)), 14);
+ RestoreIntegerBits(r0, &gPlayTimeRef->frames, 6);
+ RestoreIntegerBits(r0, &gPlayTimeRef->seconds, 6);
+ RestoreIntegerBits(r0, &gPlayTimeRef->minutes, 6);
+ RestoreIntegerBits(r0, &gPlayTimeRef->hours, 14);
}
diff --git a/src/pokemon.c b/src/pokemon.c
index a9ca120..1b9003b 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -45,3 +45,64 @@ void InitializeRecruitedPokemon(void)
gRecruitedPokemonRef->team[iVar3].unk0 = 0;
}
}
+
+// void sub_808CE74(s32 _species, u8 a2, u8* a3)
+// {
+// struct PokemonStruct pokemon;
+// u8 name_buffer[20];
+// u8 friend_area;
+// s32 i;
+// register s16 species asm("r7") = (s16)_species;
+// s32 cond = a2 << 24;
+
+// pokemon.unk0 = 3;
+// if (cond) {
+// pokemon.unk2 = 1;
+// pokemon.unk4.unk4 = 64;
+// }
+// else {
+// pokemon.unk2 = 1;
+// pokemon.unk4.unk4 = 65;
+// }
+// pokemon.unkHasNextStage = 1;
+// pokemon.pokeHP = GetBaseHP(species);
+// pokemon.offense.att[0] = GetPokemonAttSpatt(species, 0);
+// pokemon.offense.att[1] = GetPokemonAttSpatt(species, 1);
+// pokemon.offense.def[0] = GetPokemonDefSpdef(species, 0);
+// pokemon.offense.def[1] = GetPokemonDefSpdef(species, 1);
+// pokemon.IQ = 1;
+// pokemon.unkC[0].unk0 = 0;
+// pokemon.unkC[1].unk0 = 0;
+// sub_808EC94((u8*)&pokemon.unk20, 0);
+// pokemon.speciesNum = species;
+// pokemon.heldItem.itemIndex = 0;
+// pokemon.heldItem.numItems = 0;
+// pokemon.unk1C = 0;
+// pokemon.unk24 = 0;
+// pokemon.unk4.unk5 = 0;
+// sub_808E490(pokemon.unk2C, species);
+
+// // mostly incorrect below this:
+// if (!a3) {
+// CopySpeciesNametoBuffer(name_buffer, species);
+// BoundedCopyStringtoBuffer(pokemon.name, name_buffer, 10);
+// }
+// else {
+// s32 j;
+// for (j = 0; j < 10; j++) {
+// pokemon.name[j] = a3[j];
+// }
+// }
+// friend_area = gMonsterParameters[species].friend_area;
+// for (i = 0; i < 413; i++) {
+// if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) {
+// u8 species_friend_area = sub_80923D4(i);
+// if (species_friend_area == friend_area) {
+// gRecruitedPokemonRef->pokemon[i] = pokemon;
+// gFriendAreas[species_friend_area] = 1;
+// sub_80980B4(species);
+// break;
+// }
+// }
+// }
+// }
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 72005ed..b4cb938 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -48,6 +48,20 @@ extern bool8 sub_808ECD0(u8 *, u32);
extern void sub_808EC30(u8 *, u32);
extern void AddSprite(u16 *, u32, u32, u32);
+extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
+extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
+extern void xxx_save_poke_sub_2c_8094108(struct unkStruct_8094924*, struct unkPokeSubStruct_2C*);
+void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
+void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
+void xxx_restore_poke_sub_2c_8094128(struct unkStruct_8094924*, struct unkPokeSubStruct_2C*);
+
+extern void sub_8094184(struct unkStruct_8094924*, void*);
+extern void sub_809449C(struct unkStruct_8094924*, void*);
+extern void sub_808F448(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
+extern void sub_80941FC(struct unkStruct_8094924*, void*);
+extern void sub_809447C(struct unkStruct_8094924*, void*);
+extern void sub_808F428(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
+
bool8 sub_808E668(s16 a1, s16* a2, s16* a3)
{
@@ -94,7 +108,7 @@ bool8 HasRecruitedMon(s16 species_) {
s32 i = 0;
struct PokemonStruct *pokemon = gRecruitedPokemonRef->pokemon;
- for (i = 0; i < 413; i++) {
+ for (i = 0; i < NUM_SPECIES; i++) {
if (((u8)pokemon->unk0 & 1)) {
if(pokemon->speciesNum == species)
return TRUE;
@@ -641,3 +655,260 @@ void sub_808ED00() {
}
}
+s32 SaveRecruitedPokemon(u8 *a1, s32 a2)
+{
+ u16 buffer[6];
+ struct unkStruct_8094924 backup;
+ u8 data_u8;
+ s16 data_s16;
+ s32 count;
+ s32 i;
+
+ xxx_init_struct_8094924_save_809486C(&backup, a1, a2);
+
+ for (i = 0; i < 6; i++) {
+ buffer[i] = -1;
+ }
+
+ data_s16 = 1;
+ data_s16 = -data_s16;
+ count = 0;
+ for (i = 0; i < NUM_SPECIES; i++) {
+#ifdef NONMATCHING
+ struct PokemonStruct* pokemon = &gRecruitedPokemonRef->pokemon[i];
+#else
+ struct PokemonStruct* pokemon;
+ register struct unkStruct_203B45C** recruited asm("r2") = &gRecruitedPokemonRef;
+
+ pokemon = &(*recruited)->pokemon[i];
+#endif
+ if (pokemon->unk0 & 1) {
+ if (pokemon->unk0 & 2) {
+ buffer[count++] = i;
+ }
+ if (pokemon->unk2) {
+ data_s16 = i;
+ }
+ }
+ else {
+ pokemon->unkHasNextStage = 0;
+ }
+ SavePokemonStruct(&backup, pokemon);
+ }
+
+ for (i = 0; i < 4; i++) {
+ if ((u8)i[gRecruitedPokemonRef->team].unk0 & 1) {
+ data_u8 = 0xff;
+ }
+ else {
+ data_u8 = 0;
+ }
+ SaveIntegerBits(&backup, &data_u8, 1);
+ SavePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]);
+ }
+
+ for (i = 0; i < 6; i++) {
+ SaveIntegerBits(&backup, (u8*)&buffer[i], 16);
+ }
+ SaveIntegerBits(&backup, (u8*)&data_s16, 16);
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
+{
+ struct unkStruct_8094924 backup;
+ u8 data_u8; // same as saverecruitedpokemon
+ s16 data_s16; // same as saverecruitedpokemon
+ s32 i;
+
+ xxx_init_struct_8094924_restore_809485C(&backup, a1, a2);
+ for (i = 0; i < NUM_SPECIES; i++) {
+ RestorePokemonStruct(&backup, &gRecruitedPokemonRef->pokemon[i]);
+ }
+
+ for (i = 0; i < 4; i++) {
+ RestoreIntegerBits(&backup, &data_u8, 1);
+ RestorePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]);
+ if (data_u8 & 1) {
+ gRecruitedPokemonRef->team[i].unk0 = 3;
+ }
+ else {
+ gRecruitedPokemonRef->team[i].unk0 = 0;
+ }
+ }
+
+ for (i = 0; i < 6; i++) {
+ RestoreIntegerBits(&backup, &data_s16, 16);
+ if ((u16)data_s16 < NUM_SPECIES) {
+ gRecruitedPokemonRef->pokemon[data_s16].unk0 |= 2;
+ }
+ }
+ RestoreIntegerBits(&backup, &data_s16, 16);
+ if ((u16)data_s16 < NUM_SPECIES) {
+ gRecruitedPokemonRef->pokemon[data_s16].unk2 = 1;
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon)
+{
+ SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7);
+ SaveIntegerBits(a1, &pokemon->speciesNum, 9);
+ xxx_save_poke_sub_4_80902F4(a1, &pokemon->unk4);
+ xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]);
+ xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[1]);
+ SaveIntegerBits(a1, &pokemon->IQ, 10);
+ SaveIntegerBits(a1, &pokemon->pokeHP, 10);
+ SaveIntegerBits(a1, &pokemon->offense.att[0], 8);
+ SaveIntegerBits(a1, &pokemon->offense.att[1], 8);
+ SaveIntegerBits(a1, &pokemon->offense.def[0], 8);
+ SaveIntegerBits(a1, &pokemon->offense.def[1], 8);
+ SaveIntegerBits(a1, &pokemon->unk1C, 24);
+ SaveIntegerBits(a1, &pokemon->unk20, 24);
+ SaveIntegerBits(a1, &pokemon->unk24, 4);
+ SaveHeldItem(a1, &pokemon->heldItem);
+ xxx_save_poke_sub_2c_8094108(a1, pokemon->unk2C);
+ SaveIntegerBits(a1, pokemon->name, 80);
+}
+
+void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon)
+{
+ memset(pokemon, 0, sizeof(struct PokemonStruct));
+ pokemon->unk0 = 0;
+ pokemon->unk2 = 0;
+ RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7);
+ if (pokemon->unkHasNextStage) {
+ pokemon->unk0 |= 1;
+ }
+ RestoreIntegerBits(a1, &pokemon->speciesNum, 9);
+ xxx_restore_poke_sub_4_8090314(a1, &pokemon->unk4);
+ xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[0]);
+ xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[1]);
+ RestoreIntegerBits(a1, &pokemon->IQ, 10);
+ RestoreIntegerBits(a1, &pokemon->pokeHP, 10);
+ RestoreIntegerBits(a1, &pokemon->offense.att[0], 8);
+ RestoreIntegerBits(a1, &pokemon->offense.att[1], 8);
+ RestoreIntegerBits(a1, &pokemon->offense.def[0], 8);
+ RestoreIntegerBits(a1, &pokemon->offense.def[1], 8);
+ RestoreIntegerBits(a1, &pokemon->unk1C, 24);
+ RestoreIntegerBits(a1, &pokemon->unk20, 24);
+ RestoreIntegerBits(a1, &pokemon->unk24, 4);
+ RestoreHeldItem(a1, &pokemon->heldItem);
+ xxx_restore_poke_sub_2c_8094128(a1, pokemon->unk2C);
+ RestoreIntegerBits(a1, pokemon->name, 80);
+}
+
+s32 SavePokemonStruct2(u8* a1, s32 size)
+{
+ struct unkStruct_8094924 backup;
+ s32 i;
+ u8 data_u8_neg1;
+ u8 data_u8_zero;
+
+ xxx_init_struct_8094924_save_809486C(&backup, a1, size);
+ data_u8_neg1 = -1;
+ data_u8_zero = 0;
+
+ for (i = 0; i < 4; i++) {
+ struct PokemonStruct2* pokemon2 = &gRecruitedPokemonRef->pokemon2[i];
+ SaveIntegerBits(&backup, &pokemon2->unk0, 2);
+
+ SaveIntegerBits(&backup, pokemon2->unk2 ? &data_u8_neg1 : &data_u8_zero, 1);
+ SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
+
+ xxx_save_poke_sub_4_80902F4(&backup, &pokemon2->unk4);
+ SaveIntegerBits(&backup, &pokemon2->IQ, 10);
+ SaveIntegerBits(&backup, &pokemon2->unkA, 16);
+ SaveIntegerBits(&backup, &pokemon2->unkC, 16);
+ SaveIntegerBits(&backup, &pokemon2->speciesNum, 9);
+ SaveIntegerBits(&backup, &pokemon2->unk10, 10);
+ SaveIntegerBits(&backup, &pokemon2->unk12, 10);
+ SaveIntegerBits(&backup, &pokemon2->offense.att[0], 8);
+ SaveIntegerBits(&backup, &pokemon2->offense.att[1], 8);
+ SaveIntegerBits(&backup, &pokemon2->offense.def[0], 8);
+ SaveIntegerBits(&backup, &pokemon2->offense.def[1], 8);
+ SaveIntegerBits(&backup, &pokemon2->unk18, 24);
+ sub_8094184(&backup, &pokemon2->unk1C);
+ SaveItemSlot(&backup, &pokemon2->itemSlot);
+ sub_809449C(&backup, &pokemon2->unk44);
+ sub_809449C(&backup, &pokemon2->unk48);
+ SaveIntegerBits(&backup, &pokemon2->unk4C, 24);
+ SaveIntegerBits(&backup, &pokemon2->unk50, 4);
+ sub_808F448(&backup, &pokemon2->unk54);
+ SaveIntegerBits(&backup, &pokemon2->name, 80);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+s32 RestorePokemonStruct2(u8* a1, s32 size)
+{
+ struct unkStruct_8094924 backup;
+ s32 i;
+
+ xxx_init_struct_8094924_restore_809485C(&backup, a1, size);
+ for (i = 0; i < 4; i++) {
+ struct PokemonStruct2* pokemon2 = &gRecruitedPokemonRef->pokemon2[i];
+ u8 unk2;
+
+ memset(pokemon2, 0, sizeof(struct PokemonStruct2));
+
+ RestoreIntegerBits(&backup, &pokemon2->unk0, 2);
+
+ RestoreIntegerBits(&backup, &unk2, 1);
+ if (unk2 & 1) {
+ pokemon2->unk2 = TRUE;
+ }
+ else {
+ pokemon2->unk2 = FALSE;
+ }
+ RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
+
+ xxx_restore_poke_sub_4_8090314(&backup, &pokemon2->unk4);
+ RestoreIntegerBits(&backup, &pokemon2->IQ, 10);
+ RestoreIntegerBits(&backup, &pokemon2->unkA, 16);
+ RestoreIntegerBits(&backup, &pokemon2->unkC, 16);
+ RestoreIntegerBits(&backup, &pokemon2->speciesNum, 9);
+ RestoreIntegerBits(&backup, &pokemon2->unk10, 10);
+ RestoreIntegerBits(&backup, &pokemon2->unk12, 10);
+ RestoreIntegerBits(&backup, &pokemon2->offense.att[0], 8);
+ RestoreIntegerBits(&backup, &pokemon2->offense.att[1], 8);
+ RestoreIntegerBits(&backup, &pokemon2->offense.def[0], 8);
+ RestoreIntegerBits(&backup, &pokemon2->offense.def[1], 8);
+ RestoreIntegerBits(&backup, &pokemon2->unk18, 24);
+ sub_80941FC(&backup, &pokemon2->unk1C);
+ RestoreItemSlot(&backup, &pokemon2->itemSlot);
+ sub_809447C(&backup, &pokemon2->unk44);
+ sub_809447C(&backup, &pokemon2->unk48);
+ RestoreIntegerBits(&backup, &pokemon2->unk4C, 24);
+ RestoreIntegerBits(&backup, &pokemon2->unk50, 4);
+ sub_808F428(&backup, &pokemon2->unk54);
+ RestoreIntegerBits(&backup, &pokemon2->name, 80);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC)
+{
+ RestoreIntegerBits(a1, &unkC->unk0, 7);
+}
+
+void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC)
+{
+ SaveIntegerBits(a1, &unkC->unk0, 7);
+}
+
+void sub_808F428(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2)
+{
+ RestoreIntegerBits(a1, &a2->unk0, 10);
+ RestoreIntegerBits(a1, &a2->unk2, 5);
+}
+
+void sub_808F448(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2)
+{
+ SaveIntegerBits(a1, &a2->unk0, 10);
+ SaveIntegerBits(a1, &a2->unk2, 5);
+} \ No newline at end of file
diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c
index 56d49fe..d4a3bee 100644
--- a/src/pokemon_mid.c
+++ b/src/pokemon_mid.c
@@ -2,6 +2,7 @@
#include "pokemon.h"
#include "item.h"
#include "file_system.h"
+#include "subStruct_203B240.h"
extern struct gPokemon *gMonsterParameters;
extern const char gUnknown_8107600[];
@@ -16,6 +17,7 @@ extern s16 gUnknown_810ACB8; // 0x14d
extern s16 gUnknown_810ACBA; // 0x14d
extern s16 gUnknown_810ACBC; // 0x14d
extern s16 gUnknown_810ACBE; // 0x14d
+extern char* gFormattedStatusNames[];
// wram data:
extern u16 gLevelCurrentPokeId;
@@ -30,10 +32,12 @@ extern u32 ReturnIntFromChar(u8 r0);
extern void CopyStringtoBuffer(char *r0, char *r1);
extern void sub_8093F50(void*, void*);
extern void sub_80943A0(void*, s32);
-extern void xxx_unk_to_pokemonstruct_808DF44(struct PokemonStruct*, struct unkStruct_808DE50*);
+extern void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct*, struct PokemonStruct2*);
extern u8* sub_8092B18(s16);
extern u8* sub_808E07C(u8* a1, u16* a2);
extern u8* sub_8092B54(s32);
+extern void sub_8092AD4(struct unkPokeSubStruct_2C*, u16);
+extern u32 sub_8097DF0(char *, struct subStruct_203B240 **);
struct unkStruct_8107654 {
s16 unk0;
@@ -48,6 +52,103 @@ extern struct FileArchive gMonsterFileArchive;
extern const char gUnknown_8107684[];
extern struct unkStruct_203B45C *gRecruitedPokemonRef;
+
+bool8 sub_808D6E8()
+{
+ s32 i;
+ s32 count = 0;
+ s32 size_count = 0;
+ for (i = 0; i < NUM_SPECIES; i++) {
+ struct PokemonStruct* pokemon = &gRecruitedPokemonRef->pokemon[i];
+ if ((1 & pokemon->unk0) && ((pokemon->unk0 >> 1) % 2)) {
+ size_count += GetPokemonSize(pokemon->speciesNum);
+ count++;
+ }
+ }
+ if ((size_count < 6) && (count < 4)) {
+ return 1;
+ }
+ return 0;
+}
+
+// this one is surprisingly frustrating
+NAKED
+bool8 sub_808D750(s16 index_) {
+ asm_unified(
+"\tpush {r4-r7,lr}\n"
+"\tmov r7, r9\n"
+"\tmov r6, r8\n"
+"\tpush {r6,r7}\n"
+"\tlsls r0, 16\n"
+"\tasrs r0, 16\n"
+"\tmov r8, r0\n"
+"\tmovs r6, 0\n"
+"\tmovs r5, 0\n"
+"\tmovs r4, 0\n"
+"\tldr r0, _0808D7C8\n"
+"\tmov r9, r0\n"
+"\tmovs r7, 0x1\n"
+"_0808D76A:\n"
+"\tmovs r0, 0x58\n"
+"\tadds r1, r4, 0\n"
+"\tmuls r1, r0\n"
+"\tmov r2, r9\n"
+"\tldr r0, [r2]\n"
+"\tadds r1, r0, r1\n"
+"\tldrh r2, [r1]\n"
+"\tadds r0, r7, 0\n"
+"\tands r0, r2\n"
+"\tcmp r0, 0\n"
+"\tbeq _0808D798\n"
+"\tlsrs r0, r2, 1\n"
+"\tands r0, r7\n"
+"\tcmp r0, 0\n"
+"\tbeq _0808D798\n"
+"\tmovs r2, 0x8\n"
+"\tldrsh r0, [r1, r2]\n"
+"\tbl GetPokemonSize\n"
+"\tlsls r0, 24\n"
+"\tlsrs r0, 24\n"
+"\tadds r5, r0\n"
+"\tadds r6, 0x1\n"
+"_0808D798:\n"
+"\tadds r4, 0x1\n"
+"\tmovs r0, 0xCE\n"
+"\tlsls r0, 1\n"
+"\tcmp r4, r0\n"
+"\tble _0808D76A\n"
+"\tcmp r6, 0x3\n"
+"\tbgt _0808D7CC\n"
+"\tldr r2, _0808D7C8\n"
+"\tmovs r0, 0x58\n"
+"\tmov r1, r8\n"
+"\tmuls r1, r0\n"
+"\tldr r0, [r2]\n"
+"\tadds r1, r0, r1\n"
+"\tmovs r2, 0x8\n"
+"\tldrsh r0, [r1, r2]\n"
+"\tbl GetPokemonSize\n"
+"\tlsls r0, 24\n"
+"\tlsrs r0, 24\n"
+"\tadds r5, r0\n"
+"\tcmp r5, 0x6\n"
+"\tbgt _0808D7CC\n"
+"\tmovs r0, 0x1\n"
+"\tb _0808D7CE\n"
+"\t.align 2, 0\n"
+"_0808D7C8: .4byte gRecruitedPokemonRef\n"
+"_0808D7CC:\n"
+"\tmovs r0, 0\n"
+"_0808D7CE:\n"
+"\tpop {r3,r4}\n"
+"\tmov r8, r3\n"
+"\tmov r9, r4\n"
+"\tpop {r4-r7}\n"
+"\tpop {r1}\n"
+"\tbx r1\n"
+ );
+}
+
// bool8 sub_808D750(s16 index_) {
// s32 i;
// register s32 index asm("r8") = index_;
@@ -410,12 +511,12 @@ bool8 IsPokemonDialogueSpriteAvail(s16 index, s32 r1)
return (gMonsterParameters[index].dialogue_sprites >> r1) & 1;
}
-void xxx_pokemonstruct_index_to_unk_808DE30(void* r0, u32 r1)
+void xxx_pokemonstruct_index_to_pokemon2_808DE30(void* r0, u32 r1)
{
- xxx_pokemonstruct_to_unk_808DE50(r0, &gRecruitedPokemonRef->pokemon[r1], r1);
+ xxx_pokemonstruct_to_pokemon2_808DE50(r0, &gRecruitedPokemonRef->pokemon[r1], r1);
}
-void xxx_pokemonstruct_to_unk_808DE50(struct unkStruct_808DE50 * a1, struct PokemonStruct *pokemon, s32 a3)
+void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct PokemonStruct *pokemon, s32 a3)
{
s32 i;
struct HeldItem* held;
@@ -465,15 +566,15 @@ void xxx_pokemonstruct_to_unk_808DE50(struct unkStruct_808DE50 * a1, struct Poke
a1->unk48 = somestruct2_80943A0;
}
-void xxx_unk_to_pokemonstruct_index_808DF2C(s32 a1, struct unkStruct_808DE50* a2)
+void xxx_pokemon2_to_pokemonstruct_index_808DF2C(s32 a1, struct PokemonStruct2* a2)
{
- xxx_unk_to_pokemonstruct_808DF44(&a1[gRecruitedPokemonRef->pokemon], a2);
+ xxx_pokemon2_to_pokemonstruct_808DF44(&a1[gRecruitedPokemonRef->pokemon], a2);
}
extern void sub_8093FA8(struct unkPokeSubStruct_2C*, struct unkPokeSubStruct_2C*);
-void xxx_unk_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct unkStruct_808DE50* a2)
+void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct PokemonStruct2* a2)
{
s32 i;
@@ -507,7 +608,7 @@ void xxx_unk_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct unkS
}
}
-void sub_808DFDC(s32 a1, struct unkStruct_808DE50* a2)
+void sub_808DFDC(s32 a1, struct PokemonStruct2* a2)
{
// transfer item from unk to pokemon at index
struct PokemonStruct* pokemon = &gRecruitedPokemonRef->pokemon[a1];
@@ -770,4 +871,71 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
}
return count;
#endif
-} \ No newline at end of file
+}
+
+
+s32 sub_808E400(s32 _species, s16* _a2, s32 _a3, s32 _a4)
+{
+ // this is horrible
+ s32 i;
+ register s32 species asm("r9") = (s16)_species;
+ s32 a3 = (u8)_a3;
+ s32 a4 = (u8)_a4;
+ s32 count = 0;
+ register s16* a2 asm("r6");
+ i = 1;
+ a2 = _a2;
+ for (i = 1; i <= SPECIES_RAYQUAZA_CUTSCENE; i++) {
+ register s32 current asm("r8") = (s16)i;
+ if (species != GetPokemonEvolveFrom(i)) {
+ continue;
+ }
+ if (!a3 && (GetPokemonSize(species) != GetPokemonSize(i))) {
+ continue;
+ }
+ if (!a4 && ((s16)i == SPECIES_SHEDINJA)) {
+ continue;
+ }
+ *a2++ = current;
+ count++;
+ }
+ return count;
+}
+
+void sub_808E490(struct unkPokeSubStruct_2C* a1, s16 species)
+{
+ u16 buffer[0x10];
+ s32 i;
+ s32 count = sub_808E0AC(buffer, species, 1, 999);
+ if (count == 0) {
+ count = 1;
+ buffer[0] = 408;
+ }
+
+ i = 0;
+ if (i < count) {
+ while (i < count) {
+ sub_8092AD4(&a1[i], buffer[i]);
+ i++;
+ }
+ i = count;
+ }
+ while (i < 4) {
+ a1[i].unk0 = 0;
+ i++;
+ }
+}
+
+char* sub_808E4FC(s32 a1)
+{
+ struct subStruct_203B240 *result[4];
+ sub_8097DF0(gFormattedStatusNames[a1], result);
+ return result[0]->unk0;
+}
+
+char* sub_808E51C(s32 a1)
+{
+ struct subStruct_203B240 *result[4];
+ sub_8097DF0(gFormattedStatusNames[a1], result);
+ return result[0]->unk4;
+}
diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c
index 61c0184..ccae32c 100644
--- a/src/rescue_team_info.c
+++ b/src/rescue_team_info.c
@@ -18,6 +18,7 @@ bool32 sub_8092040(u8 param_1)
{
s32 index;
+ // NUMBER_OF_ITEM_IDS == 0xf0
if (param_1 >= 0xF0)
return TRUE;
else {
@@ -138,9 +139,9 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
neg1 = -1;
zero = 0;
- sub_809486C(&auStack36, param_1, size);
- sub_809488C(&auStack36, gRescueTeamInfoRef->teamName, 0x58);
- sub_809488C(&auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
+ xxx_init_struct_8094924_save_809486C(&auStack36, param_1, size);
+ SaveIntegerBits(&auStack36, gRescueTeamInfoRef->teamName, 0x58);
+ SaveIntegerBits(&auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
gRescueTeamInfoRef->unk10 = sub_80023E4(0);
if (gRescueTeamInfoRef->unk10 != 0)
@@ -151,7 +152,7 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
{
puVar2 = &zero;
}
- sub_809488C(&auStack36,puVar2,1);
+ SaveIntegerBits(&auStack36,puVar2,1);
nullsub_102(&auStack36);
return auStack36.unk8;
}
@@ -161,10 +162,10 @@ u32 ReadRescueTeamInfo(u8 *param_1, u32 size)
struct unkStruct_8094924 auStack32;
u8 byteArray[4];
- sub_809485C(&auStack32, param_1, size);
- sub_8094924(&auStack32, gRescueTeamInfoRef->teamName, 0x58);
- sub_8094924(&auStack32, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
- sub_8094924(&auStack32, byteArray, 1);
+ xxx_init_struct_8094924_restore_809485C(&auStack32, param_1, size);
+ RestoreIntegerBits(&auStack32, gRescueTeamInfoRef->teamName, 0x58);
+ RestoreIntegerBits(&auStack32, &gRescueTeamInfoRef->teamRankPts, 0x20);
+ RestoreIntegerBits(&auStack32, byteArray, 1);
gRescueTeamInfoRef->unk10 = byteArray[0] & 1;
nullsub_102(&auStack32);
return auStack32.unk8;
diff --git a/src/save.c b/src/save.c
index 9ad7670..cef5b27 100644
--- a/src/save.c
+++ b/src/save.c
@@ -152,11 +152,9 @@ extern void sub_8014114();
extern void sub_80141B4(const char *r0, u32 r1, u8 *r2, u16 r3);
extern u32 sub_80144A4(u32 *a);
extern u32 SaveRecruitedPokemon(u8 *, u32);
-extern u32 ReadRecruitedPokemon(void* a, s32 b);
-extern u32 sub_808F154(u8 *, u32);
-extern u32 sub_808F2B0(void* a, s32 b);
-extern u32 sub_8091C68(u8 *, u32);
-extern u32 sub_8091D14(void* a, s32 b);
+extern u32 RestoreRecruitedPokemon(void* a, s32 b);
+extern u32 SavePokemonStruct2(u8 *, u32);
+extern u32 RestorePokemonStruct2(void* a, s32 b);
extern u32 sub_80921C4(u8 *, u32);
extern u8 *sub_8095100(void);
extern u32 *sub_8095108(void);
@@ -365,17 +363,17 @@ u32 ReadSaveFromPak(u32 *a)
}
if (!r7)
{
- r1 = ReadRecruitedPokemon(r4, 0x4650);
+ r1 = RestoreRecruitedPokemon(r4, 0x4650);
if (r1 != r5->savedRecruitedPokemon) {
r7 = 3;
}
r4 += 0x4650;
- r1 = sub_808F2B0(r4, 0x258);
+ r1 = RestorePokemonStruct2(r4, 0x258);
if (r1 != r5->unk428) {
r7 = 3;
}
r4 += 0x258;
- r1 = sub_8091D14(r4, 0x1D8);
+ r1 = RestoreTeamInventory(r4, 0x1D8);
if (r1 != r5->unk430) {
r7 = 3;
}
@@ -488,9 +486,9 @@ u32 WriteSavetoPak(s32 *param_1,u32 param_2)
iVar1->savedRecruitedPokemon = SaveRecruitedPokemon(array_ptr,0x4650);
array_ptr += 0x4650;
- iVar1->unk428 = sub_808F154(array_ptr,0x258);
+ iVar1->unk428 = SavePokemonStruct2(array_ptr,0x258);
array_ptr += 0x258;
- iVar1->unk430 = sub_8091C68(array_ptr,0x1D8);
+ iVar1->unk430 = SaveTeamInventory(array_ptr,0x1D8);
array_ptr += 0x1D8;
iVar1->savedRescueTeamInfo = SaveRescueTeamInfo(array_ptr,0x10);
array_ptr += 0x10;