diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/adventure_log.c | 4 | ||||
-rw-r--r-- | src/code_80972F4.c | 4 | ||||
-rw-r--r-- | src/code_8097670.c | 59 | ||||
-rw-r--r-- | src/code_8097DD0.c | 90 | ||||
-rw-r--r-- | src/friend_area_action_menu_1.c | 6 | ||||
-rw-r--r-- | src/friend_list_menu.c | 6 | ||||
-rw-r--r-- | src/save.c | 4 |
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) @@ -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; |