summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adventure_log.c4
-rw-r--r--src/code_80972F4.c4
-rw-r--r--src/code_8097670.c59
-rw-r--r--src/code_8097DD0.c90
-rw-r--r--src/friend_area_action_menu_1.c6
-rw-r--r--src/friend_list_menu.c6
-rw-r--r--src/save.c4
7 files changed, 146 insertions, 27 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c
index cb20682..9480361 100644
--- a/src/adventure_log.c
+++ b/src/adventure_log.c
@@ -54,7 +54,7 @@ extern bool8 sub_8013938(void *);
extern void sub_8013660(void *);
extern void PlayMenuSoundEffect(u32);
extern u32 GetKeyPress(void *);
-extern u8 sub_8097710(u8);
+extern bool8 sub_8097710(u8);
extern s16 sub_80978B8();
extern s16 sub_8097880();
@@ -225,7 +225,7 @@ void DisplayAdventureLog(void)
do {
uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter;
temp = uVar6; // Having another var in middle gets close (does a u8 cast)
- if(sub_8097710(temp) != 0){
+ if(sub_8097710(temp)){
switch(temp) {
case 0xc:
gUnknown_202DE30 = sub_80978B8();
diff --git a/src/code_80972F4.c b/src/code_80972F4.c
index 7e87832..c0fa1a3 100644
--- a/src/code_80972F4.c
+++ b/src/code_80972F4.c
@@ -61,8 +61,8 @@ bool8 sub_8096F50(struct WonderMail *r0)
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->unk0.dungeonIndex == r0->dungeon)
+ if(temp->unk0.dungeonFloor == r0->floor)
if(temp->unk4 == r0->unk8)
if(temp->unk8 == temp2)
return TRUE;
diff --git a/src/code_8097670.c b/src/code_8097670.c
index 75a788a..a918ac9 100644
--- a/src/code_8097670.c
+++ b/src/code_8097670.c
@@ -1,10 +1,5 @@
#include "global.h"
-
-struct unkDungeonStruct
-{
- u8 index;
- u8 floor;
-};
+#include "pokemon.h"
struct unkStruct_203B494
{
@@ -13,12 +8,12 @@ struct unkStruct_203B494
s32 numAdventures;
s32 unk8;
s32 unkC;
- struct unkDungeonStruct dungeonLocation;
+ struct unkPokeSubStruct_4 dungeonLocation;
s16 unk14;
s16 unk16;
s16 unk18;
u32 unk1C[0xE];
- u8 fill54[0x8C - 0x54];
+ u32 unk54[0xE];
u32 unk8C[0xD];
s32 unkC0;
};
@@ -26,6 +21,7 @@ struct unkStruct_203B494
extern struct unkStruct_203B494 *gUnknown_203B494;
extern struct unkStruct_203B494 gUnknown_2039778;
extern const u8 *gAdventureLogText[];
+s16 GetBaseSpeciesNoUnown(s16 index);
void sub_8097670(void)
{
@@ -37,13 +33,13 @@ struct unkStruct_203B494 *sub_8097680(void)
return &gUnknown_2039778;
}
-void SetDungeonLocationInfo(struct unkDungeonStruct *r0)
+void SetDungeonLocationInfo(struct unkPokeSubStruct_4 *r0)
{
- gUnknown_203B494->dungeonLocation.index = r0->index;
- gUnknown_203B494->dungeonLocation.floor = r0->floor;
+ gUnknown_203B494->dungeonLocation.dungeonIndex = r0->dungeonIndex;
+ gUnknown_203B494->dungeonLocation.dungeonFloor = r0->dungeonFloor;
}
-struct unkDungeonStruct *GetDungeonLocationInfo(void)
+struct unkPokeSubStruct_4 *GetDungeonLocationInfo(void)
{
return &gUnknown_203B494->dungeonLocation;
}
@@ -76,12 +72,12 @@ void sub_80976F8(u8 r0)
gUnknown_203B494->unk0 |= (1 << r0);
}
-u8 sub_8097710(u8 r0)
+bool8 sub_8097710(u8 r0)
{
if(gUnknown_203B494->unk0 & (1 << r0))
- return 1;
+ return TRUE;
else
- return 0;
+ return FALSE;
}
const u8 *GetAdventureLogLine(u8 index)
@@ -187,3 +183,36 @@ s16 sub_80978B8(void)
{
return gUnknown_203B494->unkC0;
}
+
+void sub_80978C8(s16 pokeIndex)
+{
+ s32 iVar2;
+ struct unkStruct_203B494 *preload;
+ s32 baseSpecies;
+
+ baseSpecies = GetBaseSpeciesNoUnown(pokeIndex);
+ preload = gUnknown_203B494;
+ iVar2 = baseSpecies;
+ if (baseSpecies < 0) {
+ iVar2 = baseSpecies + 0x1f;
+ }
+ preload->unk54[iVar2 >> 5] |= 1 << (baseSpecies + (iVar2 >> 5) * -0x20);
+}
+
+bool8 sub_8097900(s16 pokeIndex)
+{
+ s32 iVar2;
+ struct unkStruct_203B494 *preload;
+ s32 baseSpecies;
+
+ baseSpecies = GetBaseSpeciesNoUnown(pokeIndex);
+ preload = gUnknown_203B494;
+ iVar2 = baseSpecies;
+ if (baseSpecies < 0) {
+ iVar2 = baseSpecies + 0x1f;
+ }
+ if(preload->unk1C[iVar2 >> 5] & (1 << (baseSpecies + (iVar2 >> 5) * -0x20)))
+ return TRUE;
+ else
+ return FALSE;
+}
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;
+}
diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c
index 1abd973..3f1bb5f 100644
--- a/src/friend_area_action_menu_1.c
+++ b/src/friend_area_action_menu_1.c
@@ -79,7 +79,7 @@ void sub_8027A5C(void)
}
static inline bool8 sub_8027A78_sub(void) {
- if (gUnknown_203B2BC->unk18->unk4.unk4 == 0x44 || gUnknown_203B2BC->unk18->unk4.unk4 == 0x45)
+ if (gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x45)
return TRUE;
else
return FALSE;
@@ -270,7 +270,7 @@ u32 sub_8027D9C(struct PokemonStruct *r0)
if(r0->unk2 == 0)
{
var1 = 0;
- if(r0->unk4.unk4 == 0x41)
+ if(r0->unk4.dungeonIndex == 0x41)
var1 = 1;
if(var1 != 0)
{
@@ -291,7 +291,7 @@ u32 sub_8027DCC(struct PokemonStruct *r0)
if(r0->unk2 == 0)
{
var1 = 0;
- if(r0->unk4.unk4 == 0x41)
+ if(r0->unk4.dungeonIndex == 0x41)
var1 = 1;
if(var1 != 0)
{
diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c
index 9310665..142aeca 100644
--- a/src/friend_list_menu.c
+++ b/src/friend_list_menu.c
@@ -113,7 +113,7 @@ void sub_8026A94(void)
static inline bool8 sub_8026AB0_sub(void) {
- if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45)
+ if (gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x45)
return TRUE;
else
return FALSE;
@@ -344,7 +344,7 @@ u32 sub_8026E88(struct PokemonStruct *r0)
u8 iVar3;
if(r0->unk2 == 0)
{
- iVar3 = (r0->unk4.unk4 == 0x41);
+ iVar3 = (r0->unk4.dungeonIndex == 0x41);
if(iVar3 != 0)
if(sub_80023E4(0x8) == 0)
return 0;
@@ -361,7 +361,7 @@ u32 sub_8026EB8(struct PokemonStruct *r0)
if(sub_808D3F8() != r0)
if(r0->unk2 == 0)
{
- iVar3 = (r0->unk4.unk4 == 0x41);
+ iVar3 = (r0->unk4.dungeonIndex == 0x41);
if(iVar3 != 0)
{
if(sub_80023E4(0x8) != 0)
diff --git a/src/save.c b/src/save.c
index 835c111..72a6496 100644
--- a/src/save.c
+++ b/src/save.c
@@ -171,7 +171,7 @@ extern void sub_800135C(void);
extern u32 GetGameOptions(void);
extern void InitializeGameOptions(u8 r0);
extern u8 *sub_80950F8(void);
-extern void sub_80958E4(u8 *a, u32 b);
+extern void sub_80958E4(u32 *a, u32 b);
extern u32 sub_80958F8(void);
extern void sub_8095900(void);
extern void sub_80972F4(void);
@@ -529,7 +529,7 @@ u32 sub_80121E0(u32 r0)
string = sub_8011C4C();
strncpy(r4->unk4, string, ARRAY_COUNT(r4->unk4));
- sub_80958E4((u8 *)r4 + 32, 0);
+ sub_80958E4(&r4->unk20, 0);
temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct));
MemoryFree(r4);
return temp3;