diff --git a/include/friend_rescue.h b/include/friend_rescue.h index 941280550..4e9edeaa6 100644 --- a/include/friend_rescue.h +++ b/include/friend_rescue.h @@ -1,7 +1,29 @@ #ifndef GUARD_FRIEND_RESCUE_H #define GUARD_FRIEND_RESCUE_H +#include "code_8094F88.h" #include "item.h" +#include "pokemon.h" + +struct WonderMailStruct_203B2C0_sub +{ + struct unkStruct_203B480 mail; + struct PokemonStruct pokemon; +}; + +struct unkStruct_802F204 +{ + /* 0x0 */ u8 clientName[POKEMON_NAME_LENGTH]; // client name? + /* 0xA */ u8 name2[POKEMON_NAME_LENGTH]; // target name? + /* 0x14 */ s16 unk14; // poke species (client??) + /* 0x16 */ u8 unk16; + /* 0x18 */ s32 moneyReward; + /* 0x1C */ u8 itemRewards[3]; // MAX_ITEM_REWARDS + /* 0x1F */ u8 numItems; + /* 0x20 */ u8 friendAreaReward; + u8 fill21[0x24 - 0x21]; + /* 0x24 */ u32 teamRankPtsReward; +}; struct WonderMailStruct_203B33C { @@ -11,11 +33,12 @@ struct WonderMailStruct_203B33C u8 passwordBuffer[0x36]; u32 unk40; u32 status; - u16 unk48[(0xE0 - 0x48) / 2]; - s16 unkE0; - u8 unkE2[0x168 - 0xE2]; - s16 unk168; - u8 unk16A[0x218 - 0x16A]; + struct unkStruct_203B480 unk48; + struct unkStruct_203B480 unk78; + struct WonderMailStruct_203B2C0_sub unkA8; + struct WonderMailStruct_203B2C0_sub unk130; + struct unkStruct_203B480 unk1B8; + struct unkStruct_203B480 unk1E8; u8 unk218; u8 padding7[3]; u32 unk21C; @@ -24,12 +47,11 @@ struct WonderMailStruct_203B33C u8 padding6[0x6C]; u32 unk30C; u8 padding8[0x4C]; - u32 unk35C; - u8 padding5[0x5C]; + struct UnkTextStruct2 unk35C[4]; struct UnkTextStruct2 unk3BC[4]; struct ItemSlot unk41C; u32 unk420; // Is this supposed to be a File like 203B2C4? - u8 fill424[0x524 - 0x424]; + u8 unk424[0x100]; s32 unk524; u32 unk528; u8 unk52C; @@ -38,10 +60,7 @@ struct WonderMailStruct_203B33C u32 unk530; u32 unk534; s16 speciesNum; // A7 << 3 - u32 unk53C; - u32 unk540; // A8 << 4 - s16 unk544; - u8 filler546[0x564 - 0x546]; + struct unkStruct_802F204 unk53C; s32 unk564; }; diff --git a/include/main_menu.h b/include/main_menu.h index b79425064..9df4513b7 100644 --- a/include/main_menu.h +++ b/include/main_menu.h @@ -33,6 +33,16 @@ enum MainMenuScreens MENU_NO_SCREEN_CHANGE = 0xffdc }; +struct unkStruct_8035D94 +{ + + union { + u8 itemIndex_u8; + u32 itemIndex_u32; + } itemIndex; + u32 numItems; +}; + struct MainMenuSub { u8 unk2C; @@ -47,8 +57,7 @@ struct MainMenu /* 0x8 */ s32 lastMenu; u8 padding[0x20]; /* 0x2C */ struct MainMenuSub sub; - u8 unk30; - u32 unk34; + /* 0x30 */ struct unkStruct_8035D94 unk30; s16 unk38; u8 unk3A; u8 unk3B; @@ -63,5 +72,7 @@ void SetUpMenu(void); s32 UpdateMenu(void); void CleanUpMenu(void); bool8 sub_80363E0(void); +struct unkStruct_8035D94 *sub_8035D94(void); +void sub_8035DA0(void); #endif // GUARD_MAIN_MENU_H diff --git a/include/wonder_mail.h b/include/wonder_mail.h index d84cc7e55..ebe589b0e 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -55,8 +55,8 @@ struct WonderMailStruct_203B2C0 u8 unk3E; u32 unk40; u32 linkError; - u8 unk48[0x30]; - u8 unk78[0x30]; + struct unkStruct_203B480 unk48; + struct unkStruct_203B480 unk78; struct WonderMailStruct_203B2C0_sub unkA8; struct WonderMailStruct_203B2C0_sub unk130; u8 fill16A[0x218 - 0x1B8]; diff --git a/src/adventure_log.c b/src/adventure_log.c index 7c32727a2..8829b062b 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -40,7 +40,7 @@ const struct UnkTextStruct2 gUnknown_80E2008 = { // Adventure Log Text const u8 gAdventureLogHeaderText[] = "Adventure Log"; -const u8 gUnknown_80E2030[] = "~95~95~95~95~95~95~95~95~95~95~95~95~95~95~95 "; // string of ??????? +const u8 gAdventureLogTextPlaceholder[] = "~95~95~95~95~95~95~95~95~95~95~95~95~95~95~95 "; // string of ??????? const u8 fill_adven[] = "pksdir0"; void sub_8032084(); @@ -267,7 +267,7 @@ void DisplayAdventureLog(void) else { // Draw the ?????????? across the row - xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gUnknown_80E2030, gAdventureLog->unk34, 0); + xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0); } } sub_80073E0(gAdventureLog->unk34); diff --git a/src/code_8097670.c b/src/code_8097670.c index e2b37231d..433bd96a9 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -46,7 +46,7 @@ struct DungeonLocation *GetDungeonLocationInfo(void) void sub_80976A8(void) { - s32 iVar2; + s32 index; gUnknown_203B494->unk0 = 0; gUnknown_203B494->unk14 = 0; @@ -56,14 +56,14 @@ void sub_80976A8(void) gUnknown_203B494->unk8 = 0; gUnknown_203B494->unkC = 0; - for(iVar2 = 0; iVar2 < 0xE; iVar2++) + for(index = 0; index < 0xE; index++) { - gUnknown_203B494->unk1C[iVar2] = 0; + gUnknown_203B494->unk1C[index] = 0; } - for(iVar2 = 0; iVar2 < 0xD; iVar2++) + for(index = 0; index < 0xD; index++) { - gUnknown_203B494->unk8C[iVar2] = 0; + gUnknown_203B494->unk8C[index] = 0; } } diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 7803eb7f2..251fa9b10 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/dungeon.h" #include "item.h" #include "pokemon.h" #include "text.h" @@ -40,7 +41,7 @@ extern struct UnkTextStruct2 gUnknown_80DD370; extern u32 sub_8026F04(struct PokemonStruct *); extern void sub_8026074(u32); extern void PlaySound(u32); -bool8 sub_8026F38(struct PokemonStruct *r0); +bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0); extern bool8 sub_80023E4(u8); extern struct PokemonStruct *sub_808D3F8(void); extern struct PokemonStruct *sub_808D3BC(void); @@ -428,28 +429,28 @@ void sub_8026E08(u32 r0) u32 sub_8026E88(struct PokemonStruct *r0) { - u8 iVar3; - if(r0->isLeader == 0) + bool8 flag; + if(!r0->isLeader) { - iVar3 = (r0->dungeonLocation.dungeonIndex == 0x41); - if(iVar3 != 0) + flag = (r0->dungeonLocation.dungeonIndex == DUNGEON_JOIN_LOCATION_PARTNER); + if(flag) if(!sub_80023E4(0x8)) - return 0; + return FALSE; } else - return 0; - return 1; + return FALSE; + return TRUE; } -u32 sub_8026EB8(struct PokemonStruct *r0) +bool8 sub_8026EB8(struct PokemonStruct *r0) { - u8 iVar3; + bool8 flag; if(sub_808D3BC() != r0) if(sub_808D3F8() != r0) if(!r0->isLeader) { - iVar3 = (r0->dungeonLocation.dungeonIndex == 0x41); - if(iVar3 != 0) + flag = (r0->dungeonLocation.dungeonIndex == DUNGEON_JOIN_LOCATION_PARTNER); + if(flag) { if(sub_80023E4(0x8)) goto check; @@ -457,9 +458,9 @@ u32 sub_8026EB8(struct PokemonStruct *r0) else check: if(sub_8026F04(r0) != 3) - return 1; + return TRUE; } - return 0; + return FALSE; } @@ -469,13 +470,13 @@ u32 sub_8026F04(struct PokemonStruct *r0) return 0; else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) return 1; - else if(sub_8026F38(r0)) + else if(CanTakePokemonHeldItem(r0)) return 2; else return 3; } -bool8 sub_8026F38(struct PokemonStruct *r0) +bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0) { if(IsNotMoneyOrUsedTMItem(r0->heldItem.itemIndex)) { diff --git a/src/friend_list_menu_1.c b/src/friend_list_menu_1.c index c4663bb20..e98c19c78 100644 --- a/src/friend_list_menu_1.c +++ b/src/friend_list_menu_1.c @@ -83,7 +83,7 @@ extern void sub_801BEEC(s16); extern void sub_8023B7C(u32); extern void sub_8023DA4(void); -extern void sub_809401C(struct PokemonMove *, struct PokemonMove *); // TODO convert arg 0 to PokemonMove struct * +extern void sub_809401C(struct PokemonMove *, struct PokemonMove *); extern void sub_801EE10(u32, s16, struct PokemonMove *, u32, u32, u32); extern void sub_8093560(u32, struct PokemonMove *, u32 *); extern void sub_801F808(u32 *); diff --git a/src/friend_rescue.c b/src/friend_rescue.c index f1c2f756e..2121171f8 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -2,15 +2,13 @@ #include "text.h" #include "input.h" #include "item.h" -#include "team_inventory.h" -#include "friend_rescue.h" #include "pokemon.h" +#include "friend_rescue.h" #include "memory.h" extern void SetFriendRescueMenuState(u32); extern s32 sub_80144A4(s32 *); extern void sub_802F2C0(); -extern u8 sub_809539C(u32, u32); extern void sub_8095240(u8); extern u32 sub_802F298(); diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 89ff784c4..34c0ebf07 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -1,18 +1,19 @@ #include "global.h" -#include "constants/wonder_mail.h" #include "constants/communication_error_codes.h" +#include "constants/species.h" +#include "constants/wonder_mail.h" #include "text.h" -#include "pokemon.h" -#include "save.h" -#include "memory.h" #include "input.h" -#include "team_inventory.h" -#include "friend_rescue.h" #include "item.h" -#include "code_8094F88.h" +#include "team_inventory.h" +#include "pokemon.h" +#include "friend_rescue.h" +#include "memory.h" +#include "save.h" #include "menu.h" #include "rescue_password_menu.h" + extern struct TeamInventory *gTeamInventory_203B460; extern u8 *gUnknown_203B484; @@ -30,7 +31,6 @@ extern struct WonderMailStruct_203B33C *gUnknown_203B33C; extern u8 sub_801CF14(u32); extern u8 gUnknown_80E48A8[]; -extern struct MenuItem gUnknown_80E2440[]; extern u8 gUnknown_80E49C4[]; extern u8 gUnknown_80E4704[]; extern u8 gUnknown_80E48E8[]; @@ -38,7 +38,6 @@ extern u8 gUnknown_80E4928[]; extern u8 gUnknown_80E4964[]; extern u8 gUnknown_80E499C[]; extern u8 gUnknown_80E460C[]; -extern struct MenuItem gUnknown_80E2290[]; extern u8 gUnknown_80E31FC[]; @@ -46,13 +45,14 @@ extern u32 sub_80154F0(); extern void sub_80155F0(); extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); +extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, s32 *); extern u32 sub_801CA08(u32); extern void sub_801CBB8(void); extern void sub_801CB5C(u32); -extern void sub_8035CC0(u32 *, u32); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern void sub_801B3C0(struct ItemSlot *); extern u32 sub_801B410(void); extern void sub_801B450(void); @@ -87,6 +87,7 @@ extern void sub_8095274(u32); extern void sub_80951BC(struct unkStruct_203B480 *r0); extern u8 sub_800D588(void); extern s32 FindOpenMailSlot(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern u8 gUnknown_80E44A4[]; extern u8 gUnknown_80E4500[]; @@ -102,11 +103,255 @@ extern u8 gUnknown_80E4788[]; extern u8 gUnknown_80E47D8[]; extern u8 gUnknown_80E4480[]; extern u8 gUnknown_80E482C[]; +extern u8 gUnknown_80E25F4[]; +extern u8 gUnknown_80E2D7C[]; +extern u8 gUnknown_80E2E20[]; +extern u8 gUnknown_80E319C[]; +extern u8 gUnknown_80E311C[]; +extern u8 gUnknown_80E32C4[]; +extern u8 gUnknown_80E4314[]; +extern u8 gUnknown_80E41DC[]; +extern u8 gUnknown_80E2FEC[]; +extern u8 gUnknown_80E2898[]; +extern u8 gUnknown_80E2B54[]; +extern u8 gUnknown_80E29D0[]; +extern u8 gUnknown_80E3220[]; +extern u8 gUnknown_80E2A0C[]; +extern u8 gUnknown_80E2610[]; +extern u8 gUnknown_80E2640[]; +extern u8 gUnknown_80E2680[]; +extern u8 gUnknown_80E26B0[]; +extern u8 gUnknown_80E26F0[]; +extern u8 gUnknown_80E2728[]; +extern u8 gUnknown_80E3690[]; +extern u8 gUnknown_80E3818[]; +extern u8 gUnknown_80E3998[]; +extern u8 gUnknown_80E3B1C[]; +extern u8 gUnknown_80E367C[]; +extern u8 gUnknown_80E3BF8[]; +extern u8 gUnknown_80E3DE4[]; +extern u8 gUnknown_80E4014[]; +extern u8 gUnknown_80E3E98[]; +extern u8 gUnknown_80E4130[]; +extern u8 gUnknown_80E2E54[]; +extern u8 gUnknown_80E2EB4[]; +extern u8 gUnknown_80E2DD0[]; +extern u8 gUnknown_80E2FA0[]; +extern u8 gUnknown_80E2F14[]; +extern u8 gUnknown_80E2F44[]; +extern u8 gUnknown_80E30A4[]; +extern u8 gUnknown_80E2F78[]; +extern u8 gUnknown_80E360C[]; +extern u8 gUnknown_80E3644[]; +extern u8 gUnknown_80E35E8[]; +extern u8 gUnknown_80E35AC[]; +extern u8 gUnknown_80E355C[]; +extern u8 gUnknown_80E352C[]; +extern u8 gUnknown_80E34F0[]; +extern u8 gUnknown_80E34B0[]; +extern u8 gUnknown_80E3430[]; +extern u8 gUnknown_80E33D8[]; +extern u8 gUnknown_80E339C[]; +extern u8 gUnknown_80E3378[]; +extern u8 gUnknown_80E331C[]; +extern u8 gUnknown_80E3288[]; +extern u8 gUnknown_80E3248[]; +extern u8 gUnknown_80E31FC[]; +extern u8 gUnknown_80E276C[]; +extern u8 gUnknown_80E27A4[]; +extern u8 gUnknown_80E2CD4[]; +extern u8 gUnknown_80E3030[]; +extern u8 gUnknown_80E3078[]; +extern u8 gUnknown_80E31D8[]; +extern u8 gUnknown_80E2CE8[]; +extern u8 gUnknown_80E2B90[]; +extern u8 gUnknown_80E2AE4[]; +extern u8 gUnknown_80E2A80[]; +extern u8 gUnknown_80E2AA8[]; +extern u8 gUnknown_80E2D60[]; +extern u8 gUnknown_80E2BE0[]; +extern u8 gUnknown_80E2C48[]; +extern u8 gUnknown_80E29A0[]; +extern u8 gUnknown_80E2A5C[]; +extern u8 gUnknown_80E2904[]; +extern u8 gUnknown_80E2C94[]; +extern u8 gUnknown_80E2D30[]; +extern u8 gUnknown_80E296C[]; +extern u8 gUnknown_80E314C[]; +extern u8 gUnknown_80E2A1C[]; +extern u8 gUnknown_80E2840[]; +extern u8 gUnknown_80E2874[]; +extern u8 gUnknown_80E317C[]; +extern u8 gUnknown_80E28D8[]; +extern u8 gUnknown_80E2814[]; +extern u8 gUnknown_80E30D0[]; +extern struct MenuItem gUnknown_80E20B8; +extern struct MenuItem gUnknown_80E2108; +extern struct MenuItem gUnknown_80E20E0; +extern struct MenuItem gUnknown_80E2068; +extern struct MenuItem gUnknown_80E24F8; +extern struct MenuItem gUnknown_80E2554; +extern struct MenuItem gUnknown_80E22F0; +extern struct MenuItem gUnknown_80E236C; +extern struct MenuItem gUnknown_80E2440; +extern struct MenuItem gUnknown_80E2470; +extern struct MenuItem gUnknown_80E24B0; +extern struct MenuItem gUnknown_80E2130; +extern struct MenuItem gUnknown_80E2190; +extern struct MenuItem gUnknown_80E21B8; +extern struct MenuItem gUnknown_80E2268; +extern struct MenuItem gUnknown_80E2218; +extern struct MenuItem gUnknown_80E2240; +extern struct MenuItem gUnknown_80E2290; +extern struct MenuItem gUnknown_80E22D0; +extern struct MenuItem gUnknown_80E234C; +extern struct MenuItem gUnknown_80E24D8; +extern struct MenuItem gUnknown_80E2458; +extern struct MenuItem gUnknown_80E2408; +extern struct MenuItem gUnknown_80E23A8; +extern struct MenuItem gUnknown_80E22B4; + +extern struct UnkTextStruct2 gUnknown_80E231C; +extern struct UnkTextStruct2 gUnknown_80E23F0; +extern struct UnkTextStruct2 gUnknown_80E2334; + +extern struct MenuItem gUnknown_80E25B4; extern void nullsub_40(); extern void sub_8032828(); +extern u8 sub_800D588(void); +extern void sub_8011830(void); +extern u32 sub_8030894(void); +extern void sub_8031D70(u32, u32); +extern u32 sub_8023CE8(void); +extern void sub_80922B4(u8 *buffer, u8 *string, s32 size); +extern void sub_80306A8(u32, u32, u32, u32); +extern void sub_8023868(u32, u32, u32, u32); +extern u32 sub_801D008(void); +extern void sub_8023DA4(void); +extern void sub_8023C60(void); +extern void sub_8035CF4(u32 *, u32, u32); +extern s32 sub_8037B28(u32); +extern void sub_803092C(void); +extern void sub_801CCD8(void); +extern void sub_80151C0(u32, u8 *); +extern void sub_801C8C4(u32, u32, s32 * , u32); +extern void xxx_call_start_bg_music(void); +extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); +extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); +extern void sub_802F204(struct unkStruct_802F204 *, u32); +extern void nullsub_23(u32); +extern s32 sub_8037D64(u32, void *, void *); +extern s32 sub_80381F4(u32, void *, void *); +void sprintf_2(char *buffer, const char *text, ...); + +extern void SetFriendRescueMenuState(u32); +extern s32 sub_80144A4(s32 *); +extern void sub_802F2C0(); +extern void sub_8095240(u8); +extern u32 sub_802F298(); + +extern char gUnknown_202E5D8[0x50]; +extern char gAvailablePokemonNames[0x50]; + +extern struct WonderMailStruct_203B33C *gUnknown_203B33C; + +extern u8 sub_8039880(void); + +extern void sub_8035300(void); +extern void sub_8035404(u32); +extern void nullsub_41(void); +extern void nullsub_42(void); +extern void nullsub_43(void); +extern void nullsub_44(void); +extern void nullsub_45(void); +extern void nullsub_46(void); +extern void nullsub_47(void); +extern void nullsub_48(void); +extern void nullsub_49(void); +extern void nullsub_50(void); +extern void nullsub_51(void); +extern void sub_8035374(void); +extern void sub_80353BC(void); +extern void sub_8033A2C(void); +extern void sub_803477C(void); +extern void sub_80347AC(void); +extern void sub_80347C8(void); +extern void sub_80347E4(void); +extern void sub_8034804(void); +extern void sub_80344C0(void); +extern void sub_8034478(void); +extern void sub_80344A0(void); +extern void sub_803418C(void); +extern void sub_8034254(void); +extern void sub_8034310(void); +extern void sub_8034378(void); +extern void sub_80343C4(void); +extern void sub_8034404(void); +extern void sub_8034500(void); +extern void sub_8034590(void); +extern void sub_803464C(void); +extern void sub_80346A8(void); +extern void sub_80346D8(void); +extern void sub_8034700(void); +extern void sub_8034720(void); +extern void sub_803473C(void); +extern void sub_8033FB4(void); +extern void sub_8034074(void); +extern void sub_8034130(void); +extern void sub_8033FE4(void); +extern void sub_8033D74(void); +extern void sub_8033D94(void); +extern void sub_8033DBC(void); +extern void sub_8033F64(void); +extern void sub_8033C54(void); +extern void sub_8033CAC(void); +extern void sub_8033D48(void); +extern void sub_8035424(void); +extern void sub_8034970(void); +extern void sub_80351E0(void); +extern void sub_8034D74(void); +extern void sub_8034EF0(void); +extern void sub_8034F38(void); +extern void sub_80352A4(void); +extern void sub_8034EC8(void); +extern void sub_8033B8C(void); +extern void sub_80339C8(void); +extern void sub_80348C4(void); +extern void sub_803482C(void); +extern void sub_80349B0(void); +extern void sub_8034A70(void); +extern void sub_8034B2C(void); +extern void sub_80349E0(void); +extern void sub_8034B88(void); +extern void sub_8034C98(void); +extern void sub_8034C38(void); +extern void sub_8034D54(void); +extern void sub_8034F18(void); +extern void sub_8034F58(void); +extern void sub_8034F88(void); +extern void sub_8035018(void); +extern void sub_8035038(void); +extern void sub_8035094(void); +extern void sub_80350F4(void); +extern void sub_803517C(void); +extern void sub_8035210(void); +extern void sub_8035430(void); +extern void sub_8034848(void); + +extern void sub_803084C(void); +extern void sub_8031E10(void); +extern void sub_8023C60(void); +extern void sub_80155F0(void); +extern void sub_801CBB8(void); +extern void sub_802F2C0(void); +extern void sub_8030DE4(void); +extern void sub_802453C(void); +extern void sub_801B450(void); + + void SetFriendRescueMenuState(u32 newState) { gUnknown_203B33C->state = newState; @@ -343,7 +588,7 @@ void nullsub_41(void) void sub_8033CAC(void) { s32 temp; - u32 test_var; + u32 speciesNum; if(sub_80144A4(&temp) == 0) { if(gUnknown_203B33C->status == COMMS_GOOD) @@ -358,10 +603,10 @@ void sub_8033CAC(void) break; case 0x12: if(sub_800D588() != 0) - test_var = gUnknown_203B33C->unk168; + speciesNum = gUnknown_203B33C->unk130.pokemon.speciesNum; else - test_var = gUnknown_203B33C->unkE0; - if(test_var != 0) + speciesNum = gUnknown_203B33C->unkA8.pokemon.speciesNum; + if(speciesNum != SPECIES_NONE) SetFriendRescueMenuState(0x3F); else SetFriendRescueMenuState(0x40); @@ -455,7 +700,7 @@ void sub_8033DBC(void) switch(sub_8039068(mailMode, gUnknown_203B33C->passwordBuffer, &mail)) { case PASSWORD_ENTRY_INCORRECT_PASSWORD: - sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2290, 0, 4, 0, 0, 0x101); + sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2290, 0, 4, 0, 0, 0x101); SetFriendRescueMenuState(0x1B); break; case PASSWORD_ENTRY_NOT_SOS_MAIL: @@ -601,7 +846,7 @@ void sub_8034074(void) break; case 5: case 8: - sub_8035CC0(&gUnknown_203B33C->unk35C, 2); + sub_8035CC0(gUnknown_203B33C->unk35C, 2); sub_8030810(0x1); SetFriendRescueMenuState(0x1D); break; @@ -684,7 +929,7 @@ void sub_8034254(void) break; case 5: case 8: - sub_8035CC0(&gUnknown_203B33C->unk35C, 3); + sub_8035CC0(gUnknown_203B33C->unk35C, 3); sub_8023DA4(); SetFriendRescueMenuState(0x26); break; @@ -879,7 +1124,7 @@ void sub_8034590(void) break; case 5: case 8: - sub_8035CC0(&gUnknown_203B33C->unk35C, 2); + sub_8035CC0(gUnknown_203B33C->unk35C, 2); sub_8030810(0x1); SetFriendRescueMenuState(0x32); break; @@ -1052,7 +1297,7 @@ void sub_8034848(void) s32 temp; if(sub_80144A4(&temp) == 0) { - MemoryFill8((u8 *)&gUnknown_203B33C->unk41C, 0 , 4); + MemoryFill8((u8 *)&gUnknown_203B33C->unk41C, 0 , sizeof(struct ItemSlot)); gUnknown_203B33C->unk41C.itemIndex = ITEM_ID_NOTHING; gUnknown_203B33C->unk41C.numItems = 1; gUnknown_203B33C->unk41C.itemFlags = 0; @@ -1082,7 +1327,7 @@ void sub_80348C4(void) s32 temp; if(sub_80144A4(&temp) == 0) { - MemoryFill8((u8 *)&gUnknown_203B33C->unk41C, 0 , 4); + MemoryFill8((u8 *)&gUnknown_203B33C->unk41C, 0 , sizeof(struct ItemSlot)); gUnknown_203B33C->unk41C.itemIndex = ITEM_ID_NOTHING; gUnknown_203B33C->unk41C.numItems = 1; gUnknown_203B33C->unk41C.itemFlags = 0; @@ -1204,7 +1449,7 @@ void sub_8034A70(void) break; case 5: case 8: - sub_8035CC0(&gUnknown_203B33C->unk35C, 2); + sub_8035CC0(gUnknown_203B33C->unk35C, 2); sub_8030810(0x1); SetFriendRescueMenuState(0x5C); break; @@ -1309,7 +1554,7 @@ void sub_8034C98(void) break; case 5: case 8: - sub_8035CC0(&gUnknown_203B33C->unk35C, 3); + sub_8035CC0(gUnknown_203B33C->unk35C, 3); sub_801CB5C(0x1); SetFriendRescueMenuState(0x5F); break; @@ -1340,7 +1585,7 @@ void sub_8034D74(void) switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE, gUnknown_203B33C->passwordBuffer, &mail)) { case PASSWORD_ENTRY_INCORRECT_PASSWORD: - sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2440, 0, 4, 0, 0, 0x101); + sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2440, 0, 4, 0, 0, 0x101); SetFriendRescueMenuState(0x74); break; case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL: @@ -1444,16 +1689,16 @@ void sub_8034F58(void) void sub_8034F88(void) { s32 temp; - struct unkStruct_203B480 *temp2; + struct unkStruct_203B480 *mail; if(sub_80144A4(&temp) == 0) { switch(temp) { case 6: - temp2 = sub_8095228(gUnknown_203B33C->unk218); + mail = sub_8095228(gUnknown_203B33C->unk218); if(gUnknown_203B33C->unk41C.itemIndex != ITEM_ID_NOTHING) - temp2->unk20 = gUnknown_203B33C->unk41C; + mail->unk20 = gUnknown_203B33C->unk41C; gTeamInventory_203B460->teamStorage[gUnknown_203B33C->unk41C.itemIndex]--; SetFriendRescueMenuState(0x75); break; diff --git a/src/main_menu.c b/src/main_menu.c index af37d4408..08bb32df5 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -6,6 +6,7 @@ #include "adventure_log.h" #include "debug_menu.h" #include "ds_menus.h" +#include "pokemon.h" #include "friend_rescue.h" #include "load_screen.h" #include "main_menu.h" @@ -78,7 +79,6 @@ extern void CleanSaveMenu(void); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, s32 *); extern u8 sub_803D0D8(); -extern s32 CountMailType(u32); extern void sub_8012D60(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); extern void sub_8012E04(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); @@ -88,7 +88,6 @@ s32 sub_8035DB4(u32); void sub_803623C(void); bool8 SetMainMenuText(); void SetMainMenuItems(); -void sub_8035DA0(void); static const u8 sUnknown_80E5CE4[]; static const u8 sUnknown_80E5CE8[]; @@ -729,33 +728,35 @@ s32 sub_8035D74(void) return gMainMenu->unk3C; } - // Unused -NAKED -void sub_8035D80(void *r0) +void sub_8035D80(struct unkStruct_8035D94 *item) { - asm_unified( - "\tldr r1, _08035D90\n" - "\tldr r2, [r1]\n" - "\tldr r1, [r0, 0x4]\n" - "\tldr r0, [r0]\n" - "\tstr r0, [r2, 0x30]\n" - "\tstr r1, [r2, 0x34]\n" - "\tbx lr\n" - "\t.align 2, 0\n" -"_08035D90: .4byte gMainMenu"); + +#ifndef NONMATCHING + register u32 numItem asm("r1"); +#else + u32 numItem; +#endif + + u32 itemIndex; + struct MainMenu *preload; + + preload = gMainMenu; + numItem = item->numItems; + itemIndex = item->itemIndex.itemIndex_u32; + preload->unk30.itemIndex.itemIndex_u32 = itemIndex; + preload->unk30.numItems = numItem; } -u8 *sub_8035D94(void) +struct unkStruct_8035D94 *sub_8035D94(void) { return &gMainMenu->unk30; } - void sub_8035DA0(void) { - gMainMenu->unk30 = 0; - gMainMenu->unk34 = 0; + gMainMenu->unk30.itemIndex.itemIndex_u8 = ITEM_ID_NOTHING; + gMainMenu->unk30.numItems = 0; } s32 sub_8035DB4(u32 currMenu) diff --git a/src/other_menus.c b/src/other_menus.c index 641bcfb73..24c9759df 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/communication_error_codes.h" #include "input.h" #include "main_menu.h" #include "item.h" @@ -11,8 +12,8 @@ struct unkStruct_203B35C { // size: 0x504 u32 unk0; - u32 unk4; // link status? - u32 state; // state var? + u32 linkStatus; + u32 state; u8 fillC[0x1C - 0xC]; u32 unk1C; u8 fill20[0x15C - 0x20]; @@ -53,15 +54,6 @@ extern struct MenuItem gUnknown_80E6DF4[]; extern struct UnkTextStruct2 gUnknown_80E6D54; extern struct MenuItem gUnknown_80E6D6C[]; -struct unkStruct_8035D94 -{ - u8 unk0; - u8 fill[0x3]; - u32 unk4; -}; - -extern struct unkStruct_8035D94 *sub_8035D94(); - extern void sub_8037400(void); extern void ResetSprites(u32); extern void sub_8035CF4(u32 *,u32, u32); @@ -275,7 +267,7 @@ u32 sub_80370F0(void) sub_80371B8(); break; case 2: - if (((gUnknown_203B35C->unk0 < 2) && (gUnknown_203B35C->unk4 == 0)) && (sub_8037C10(0) == 0) ) { + if (((gUnknown_203B35C->unk0 < 2) && (gUnknown_203B35C->linkStatus == COMMS_GOOD)) && (sub_8037C10(0) == 0) ) { return 0x29; // TODO: what screen is this? } else { @@ -296,14 +288,14 @@ u32 sub_80370F0(void) void sub_80371B8(void) { - struct unkStruct_8035D94 *pbVar2; + struct unkStruct_8035D94 *item; struct MenuItem *MenuItems; struct UnkTextStruct2 *puVar5; puVar5 = NULL; MenuItems = NULL; sub_8037400(); - if ((gUnknown_203B35C->unk0 < 2) &&(gUnknown_203B35C->unk4 == 0)) { + if ((gUnknown_203B35C->unk0 < 2) &&(gUnknown_203B35C->linkStatus == COMMS_GOOD)) { if (sub_8037C10(0) != 0) { sub_80376CC(); sub_8035CC0(gUnknown_203B35C->unk15C,0); @@ -317,7 +309,7 @@ void sub_80371B8(void) else { sub_80376CC(); sub_8035CC0(gUnknown_203B35C->unk15C, 0); - switch(gUnknown_203B35C->unk4) { + switch(gUnknown_203B35C->linkStatus) { case 0: puVar5 = &gUnknown_80E66BC; MenuItems = gUnknown_80E66D4; @@ -372,11 +364,9 @@ void sub_80371B8(void) } SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, puVar5, MenuItems, 0, 6, 0); sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1); - // TODO clean this if statement up... - if ((((gUnknown_203B35C->unk4 != 0) &&(gUnknown_203B35C->unk0 == 0)) && - (pbVar2 = sub_8035D94(), pbVar2->unk0 != 0)) && (pbVar2->unk4 != 0)) { - // We received something.. - gTeamInventory_203B460->teamStorage[pbVar2->unk0] += pbVar2->unk4; + if ((gUnknown_203B35C->linkStatus != COMMS_GOOD) && (gUnknown_203B35C->unk0 == 0) && + (item = sub_8035D94(), item->itemIndex.itemIndex_u8 != ITEM_ID_NOTHING) && (item->numItems != 0)) { + gTeamInventory_203B460->teamStorage[item->itemIndex.itemIndex_u8] += item->numItems; } } } diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c index 3692ca696..1fff3fb27 100644 --- a/src/trade_items_menu.c +++ b/src/trade_items_menu.c @@ -2,6 +2,7 @@ #include "constants/communication_error_codes.h" #include "input.h" #include "item.h" +#include "main_menu.h" #include "team_inventory.h" #include "trade_items_menu.h" #include "memory.h" @@ -81,7 +82,6 @@ const struct MenuItem gUnknown_80E618C[3] = { extern void sub_8013AA0(u32 *); extern void sub_8035C1C(); -extern void sub_8035DA0(); extern s32 sub_80144A4(s32 *); extern u32 sub_801CA08(u32); extern void sub_801CBB8(); diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 759aa799e..8ed8eaf6f 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -584,18 +584,18 @@ void sub_8028348(void) sub_80141B4(gUnknown_80DE01C, 0 , 0, 0); break; case 6: - gUnknown_203B2C0->linkError = 0; + gUnknown_203B2C0->linkError = COMMS_GOOD; sub_8011830(); linkError = sub_8037B28(gUnknown_203B2C0->unk40); gUnknown_203B2C0->linkError = linkError; - if(linkError == 0) + if(linkError == COMMS_GOOD) { switch(gUnknown_203B2C0->unk40) { case 3: - MemoryFill8(gUnknown_203B2C0->unk48, 0, 0x30); - MemoryFill8(gUnknown_203B2C0->unk78, 0, 0x30); - gUnknown_203B2C0->linkError = sub_8037D64(gUnknown_203B2C0->unk40, gUnknown_203B2C0->unk48, gUnknown_203B2C0->unk78); + MemoryFill8((u8 *)&gUnknown_203B2C0->unk48, 0, sizeof(struct unkStruct_203B480)); + MemoryFill8((u8 *)&gUnknown_203B2C0->unk78, 0, sizeof(struct unkStruct_203B480)); + gUnknown_203B2C0->linkError = sub_8037D64(gUnknown_203B2C0->unk40, &gUnknown_203B2C0->unk48, &gUnknown_203B2C0->unk78); break; case 4: MemoryFill8((u8 *)&gUnknown_203B2C0->unkA8, 0, sizeof(struct WonderMailStruct_203B2C0_sub)); @@ -610,12 +610,12 @@ void sub_8028348(void) gUnknown_203B2C0->linkError = sub_8037D64(gUnknown_203B2C0->unk40, &gUnknown_203B2C0->unkA8, &gUnknown_203B2C0->unk130); break; } - if(gUnknown_203B2C0->linkError == 0) + if(gUnknown_203B2C0->linkError == COMMS_GOOD) { switch(gUnknown_203B2C0->unk40) { case 3: - gUnknown_203B2C0->linkError = sub_80381F4(3, gUnknown_203B2C0->unk48, gUnknown_203B2C0->unk78); + gUnknown_203B2C0->linkError = sub_80381F4(3, &gUnknown_203B2C0->unk48, &gUnknown_203B2C0->unk78); break; case 4: gUnknown_203B2C0->linkError = sub_80381F4(4, &gUnknown_203B2C0->unkA8, &gUnknown_203B2C0->unk130); @@ -1362,7 +1362,7 @@ void sub_80292EC(void) { return; } - if(gUnknown_203B2C0->linkError == 0) + if(gUnknown_203B2C0->linkError == COMMS_GOOD) { switch(gUnknown_203B2C0->unk538) {