From dfedc6a896f37d19ee76574a2336e6136f2716a5 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 Mar 2023 20:25:08 -0700 Subject: [PATCH 01/11] feat: the great labeling of wonder mail --- asm/code_801C620.s | 2 +- asm/pelipper_board.s | 6 +- asm/wonder_mail_802C860.s | 26 +- include/code_8094F88.h | 6 +- include/mailbox.h | 16 +- include/menu_input.h | 4 +- include/pelipper_board.h | 31 ++ include/wonder_mail.h | 4 +- include/wonder_mail_3.h | 23 +- ld_script.txt | 2 + src/code_2.c | 8 +- src/code_8095824.c | 10 +- src/code_80958E8_1.c | 6 +- src/friend_rescue.c | 1 - src/friend_rescue_1.c | 9 +- src/load_screen.c | 2 +- src/mailbox.c | 66 ++-- src/mailbox_1.c | 76 ++-- src/menu_input.c | 8 +- src/pelipper_board.c | 117 +++--- src/pelipper_board_1.c | 87 ++--- src/pokemon_news.c | 741 ++++++++++++++++++++++++++++++++++++ src/thank_you_wonder_mail.c | 10 +- src/wonder_mail.c | 460 +++++++++++----------- src/wonder_mail_2.c | 735 ----------------------------------- src/wonder_mail_2_1.c | 46 +-- src/wonder_mail_2_mid.c | 22 +- src/wonder_mail_3.c | 96 ++--- src/wonder_mail_4.c | 7 +- src/wonder_mail_6.c | 3 +- src/wonder_mail_802DF88.c | 37 +- sym_ewram2.txt | 2 +- 32 files changed, 1368 insertions(+), 1301 deletions(-) create mode 100644 include/pelipper_board.h create mode 100644 src/pokemon_news.c diff --git a/asm/code_801C620.s b/asm/code_801C620.s index 3b7dbce38..314708ced 100644 --- a/asm/code_801C620.s +++ b/asm/code_801C620.s @@ -1371,7 +1371,7 @@ _0801D49C: b _0801D4B6 _0801D4AA: movs r0, 0 - bl sub_802C860 + bl InitializeJobListMenu b _0801D4B6 _0801D4B2: bl sub_801DCC4 diff --git a/asm/pelipper_board.s b/asm/pelipper_board.s index 30bfd2085..eed973567 100644 --- a/asm/pelipper_board.s +++ b/asm/pelipper_board.s @@ -22,7 +22,7 @@ CreatePelipperBoardMenu: adds r1, 0xC0 movs r0, 0x2 str r0, [r1] - bl sub_802C4A4 + bl HasNoPelipperBoardJobs lsls r0, 24 cmp r0, 0 beq _0802EB66 @@ -93,7 +93,7 @@ _0802EBB6: str r0, [r1, 0x64] b _0802EC0A .align 2, 0 -_0802EBDC: .4byte gUnknown_203B308 +_0802EBDC: .4byte gPelipperBoard _0802EBE0: .4byte gPelipperBoard_BulletinBoard _0802EBE4: .4byte gPelipperBoard_JobList _0802EBE8: @@ -202,7 +202,7 @@ _0802ECA2: pop {r0} bx r0 .align 2, 0 -_0802ECA8: .4byte gUnknown_203B308 +_0802ECA8: .4byte gPelipperBoard _0802ECAC: .4byte gUnknown_80D4990 _0802ECB0: .4byte gUnknown_80D4970 thumb_func_end sub_802EC10 diff --git a/asm/wonder_mail_802C860.s b/asm/wonder_mail_802C860.s index cc1000d2d..c4f3dd9ec 100644 --- a/asm/wonder_mail_802C860.s +++ b/asm/wonder_mail_802C860.s @@ -210,29 +210,29 @@ _0802CC1C: .4byte _0802CC30 .4byte _0802CC48 _0802CC30: - bl sub_802C620 + bl GetPelipperBoardSlotIndex ldr r1, _0802CC44 ldr r1, [r1] strb r0, [r1, 0xC] movs r0, 0x2 - bl sub_802C910 + bl SetJobListState b _0802CC6A .align 2, 0 _0802CC44: .4byte gUnknown_203B2F0 _0802CC48: - bl sub_802C620 + bl GetPelipperBoardSlotIndex ldr r1, _0802CC5C ldr r1, [r1] strb r0, [r1, 0xC] movs r0, 0x4 - bl sub_802C910 + bl SetJobListState b _0802CC6A .align 2, 0 _0802CC5C: .4byte gUnknown_203B2F0 _0802CC60: bl sub_802C688 movs r0, 0x5 - bl sub_802C910 + bl SetJobListState _0802CC6A: pop {r0} bx r0 @@ -306,22 +306,22 @@ _0802CCF4: _0802CD06: strb r1, [r0] movs r0, 0x1 - bl sub_802C910 + bl SetJobListState b _0802CD2E .align 2, 0 _0802CD10: .4byte 0x00000133 _0802CD14: .4byte gUnknown_203B2F0 _0802CD18: movs r0, 0x3 - bl sub_802C910 + bl SetJobListState b _0802CD2E _0802CD20: movs r0, 0x4 - bl sub_802C910 + bl SetJobListState b _0802CD2E _0802CD28: movs r0, 0x1 - bl sub_802C910 + bl SetJobListState _0802CD2E: add sp, 0x4 pop {r4} @@ -366,7 +366,7 @@ _0802CD7C: bne _0802CDB0 _0802CD80: movs r0, 0x1 - bl sub_802C910 + bl SetJobListState b _0802CDB0 _0802CD88: ldr r0, [r4] @@ -379,11 +379,11 @@ _0802CD88: beq _0802CDAA bl sub_802C688 movs r0, 0x5 - bl sub_802C910 + bl SetJobListState b _0802CDB0 _0802CDAA: movs r0, 0x1 - bl sub_802C910 + bl SetJobListState _0802CDB0: add sp, 0x4 pop {r4} @@ -401,7 +401,7 @@ sub_802CDB8: bhi _0802CDD0 bl sub_802DF24 movs r0, 0x1 - bl sub_802C910 + bl SetJobListState _0802CDD0: pop {r0} bx r0 diff --git a/include/code_8094F88.h b/include/code_8094F88.h index 0a0057ab5..e4a4b6e77 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -20,7 +20,7 @@ struct unkStruct_203B480 struct Item unk20; u32 unk24; u32 unk28; - s8 unk2C; + s8 rescuesAllowed; u8 unk2D; u8 padding4[0x30 - 0x2E]; }; @@ -39,13 +39,13 @@ struct unkStruct_203B48C bool8 sub_80951FC(struct unkStruct_203B480 *param_1); struct unkStruct_203B480 * sub_8095228(u8 index); -void sub_8095240(u8 index); +void DeleteMailAtIndex(u8 index); void sub_8095274(u32 param_1); bool8 sub_8095298(s32 param_1); void sub_80952C4(void); bool8 sub_80952F0(u8 mailType, u32 param_2); s32 CountMailType(u8 mailType); -u32 sub_8095350(void); +u32 CountAllMail(void); s32 sub_8095374(void); s32 sub_809539C(u8 mailType, u32 param_2); s32 sub_80953D4(u8 mailType); diff --git a/include/mailbox.h b/include/mailbox.h index 79e4d1e41..53c2fa6f0 100644 --- a/include/mailbox.h +++ b/include/mailbox.h @@ -12,7 +12,6 @@ struct unkStruct_203B304 u32 fallbackState; u8 mailboxIndex; u8 mailIndex; - u8 fillA[0xC - 0xA]; u32 unkC; u8 fill10[0x50 - 0x10]; u8 unk50; @@ -28,4 +27,19 @@ struct unkStruct_203B304 extern void SetMailboxState(u32); extern s32 GetNumAcceptedJobs(void); +enum MailBoxStates { + INITIALIZE_MAILBOX, + MAIN_MAILBOX_MENU, + // 2 is ??? + MAILBOX_EXIT = 3, + MAIL_MENU = 4, + MAIL_MENU_1 = 5, + MAIL_ACTION_MENU = 6, + MAIL_INFO = 7, + JOB_LIST_MENU = 8, + PKMN_NEWS_MENU = 0x9, + PKMN_NEWS_MENU_1 = 0xA, + DISPLAY_SEL_PKMN_NEWS = 0xB, +}; + #endif // GUARD_MAILBOX_H diff --git a/include/menu_input.h b/include/menu_input.h index bf14abb22..e0c72c9bd 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -5,8 +5,8 @@ void sub_8012C60(u32 x, u32 y, u32 param_3, u32 param_4, u32 param_5); void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2); void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2); void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2); -void sub_8012D60(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 param_5, s32 index); -void sub_8012E04(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 param_5, s32 index); +void sub_8012D60(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); +void sub_8012E04(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index); void sub_8012EA4(struct MenuStruct *param_1, bool8 r1); void sub_8012EBC(struct MenuStruct *param_1); bool8 sub_8012FD8(struct MenuStruct *param_1); diff --git a/include/pelipper_board.h b/include/pelipper_board.h new file mode 100644 index 000000000..e20f24878 --- /dev/null +++ b/include/pelipper_board.h @@ -0,0 +1,31 @@ + +// Guessing based off of 203B304 +struct unkStruct_203B308 +{ + // size: 0xB6 << 1 + u32 state; + u32 unk4; + u8 jobIndex; + u32 unkC; + u8 fill10[0x50 - 0x10]; + u8 unk50; + u8 fill51[0x64 - 0x51]; + u32 menuAction1; + u32 menuAction2; + struct MenuStruct unk6C; + struct MenuItem unkBC[8]; + u16 unkFC[8]; + struct UnkTextStruct2 unk10C[4]; +}; +extern struct unkStruct_203B308 *gPelipperBoard; + + +enum PelipperBoardStates { + INITIALIZE_PELIPPER_BOARD, + MAIN_PELIPPER_BOARD_MENU, + // 2 is ??? + PELIPPER_BOARD_EXIT = 3, + PELIPPER_JOB_INFO = 7, + PELIPPER_JOB_LIST_MENU, +}; + diff --git a/include/wonder_mail.h b/include/wonder_mail.h index eb83c7801..255bfb4b2 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -77,7 +77,7 @@ struct WonderMailStruct_203B2C0 u32 unk534; s32 unk538; // A7 << 3 u32 unk53C; - u32 unk540; // A8 << 4 + u32 mailCount; // A8 << 4 s16 speciesNum; }; @@ -113,6 +113,6 @@ struct WonderMailStruct_203B2C4 struct unkStruct_802F204 unk53C; }; -void sub_8028B04(u32 r0); +void SetFriendRescueCounterState(u32 r0); #endif diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h index 3d161c449..004d5af4f 100644 --- a/include/wonder_mail_3.h +++ b/include/wonder_mail_3.h @@ -39,7 +39,7 @@ struct unkStruct_203B2F8 bool8 unk9; u8 dungeonID; u8 unkB; - struct unkSubStruct_203B2F8 *unkC; + struct unkSubStruct_203B2F8 *mail; u8 jobSlotIndex; u8 fill11[0x14 - 0x11]; u32 unk14; @@ -60,3 +60,24 @@ struct unkStruct_203B2F8 u32 unk1E4; }; extern struct unkStruct_203B2F8 *gUnknown_203B2F8; + +enum WonderMailRescueStates +{ + INITIAL_WONDER_MAIL_CHECK, + // 1 is ?? + WONDER_MAIL_EXIT = 2, + DUPLICATE_WONDER_MAIL = 3, + DUPLICATE_WONDER_MAIL_1, + // 5 is ?? + // 6 is ?? + // 7 is ?? + RECEIVE_WONDER_MAIL = 8, + // 9 is ?? + JOB_LIST_FULL = 0xA, + DRAW_JOB_LIST = 0xB, + DRAW_JOB_LIST_1 = 0xC, + // 0xD is ?? + // 0xE is ?? + // 0xF is ?? + // 0x10 is ?? +}; diff --git a/ld_script.txt b/ld_script.txt index e46f2abee..ea1261c46 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -132,6 +132,7 @@ SECTIONS { src/wonder_mail.o(.text); src/thank_you_wonder_mail.o(.text); src/wonder_mail_2.o(.text); + src/pokemon_news.o(.text); src/wonder_mail_2_mid.o(.text); src/wonder_mail_2_1.o(.text); asm/wonder_mail_802C860.o(.text); @@ -429,6 +430,7 @@ SECTIONS { src/wonder_mail.o(.rodata); src/thank_you_wonder_mail.o(.rodata); src/wonder_mail_2.o(.rodata); + src/pokemon_news.o(.rodata); src/wonder_mail_2_1.o(.rodata); src/wonder_mail_3.o(.rodata); src/wonder_mail_802DF88.o(.rodata); diff --git a/src/code_2.c b/src/code_2.c index 028bc65d6..feb41013a 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -16,6 +16,7 @@ #include "exclusive_pokemon.h" #include "pokemon.h" #include "rescue_team_info.h" +#include "code_8094F88.h" extern void sub_801180C(void); extern void NDS_LoadOverlay_GroundMain(void); @@ -42,7 +43,6 @@ extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); extern void sub_80095CC(u32, u32); extern s32 sub_80953D4(u8); -extern void sub_8095240(u8); extern void nullsub_33(void); extern u32 sub_80009D0(u32); @@ -174,9 +174,9 @@ void GameLoop(void) CloseFile(gTitlePaletteFile); switch (nextMenu) { case 2: { - s32 tmp5 = sub_80953D4(7); - if (tmp5 != -1) { - sub_8095240(tmp5); + s32 mailIndex = sub_80953D4(7); + if (mailIndex != -1) { + DeleteMailAtIndex(mailIndex); tmp3 = sub_80009D0(2); } else { tmp3 = sub_80009D0(1); diff --git a/src/code_8095824.c b/src/code_8095824.c index 1167f8ef7..b46bb19c8 100644 --- a/src/code_8095824.c +++ b/src/code_8095824.c @@ -48,7 +48,7 @@ struct unkStruct_203B480 * sub_8095228(u8 index) return ptr; } -void sub_8095240(u8 index) +void DeleteMailAtIndex(u8 index) { struct unkStruct_203B480 *unused; @@ -120,7 +120,7 @@ s32 CountMailType(u8 mailType) return total; } -u32 sub_8095350(void) +u32 CountAllMail(void) { struct unkStruct_203B480 *ptr; u32 total = 0; @@ -205,7 +205,7 @@ void sub_809542C(struct unkStruct_809542C *param_1) PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct()); CopyStringtoBuffer(gUnknown_203B480->playerName, buffer); gUnknown_203B480->unk24 = sub_8011C34(); - gUnknown_203B480->unk2C = GetRescuesAllowed(gUnknown_203B480->dungeon.id); + gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeon.id); } void sub_8095494(struct unkStruct_809542C *param_1, u8 index) @@ -331,7 +331,7 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) RestoreIntegerBits(a, &b->unk20.id, 0x8); RestoreIntegerBits(a, &b->unk24, 0x20); RestoreIntegerBits(a, &b->unk28, 0x20); - RestoreIntegerBits(a, &b->unk2C, 0x8); + RestoreIntegerBits(a, &b->rescuesAllowed, 0x8); RestoreIntegerBits(a, &temp, 1); b->unk2D = temp & 1; @@ -356,7 +356,7 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) SaveIntegerBits(a, &b->unk20.id, 0x8); SaveIntegerBits(a, &b->unk24, 0x20); SaveIntegerBits(a, &b->unk28, 0x20); - SaveIntegerBits(a, &b->unk2C, 0x8); + SaveIntegerBits(a, &b->rescuesAllowed, 0x8); if(b->unk2D != 0) puVar2 = &neg1; diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index 147c93d57..c75b0a26b 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -242,7 +242,7 @@ bool8 sub_8096A08(u8 dungeon, s32 param_2) return FALSE; } -bool8 sub_8096A78(struct WonderMail *mail) +bool8 AcceptJob(struct WonderMail *mail) { s32 index; @@ -347,7 +347,7 @@ void sub_8096BD0(void) sub_8096D24(); } -bool8 sub_8096C08(u8 *param_1) +bool8 sub_8096C08(u8 *jobIndex) { s32 index; struct WonderMail *mail; @@ -357,7 +357,7 @@ bool8 sub_8096C08(u8 *param_1) if(mail->mailType > 4 && mail->unk2 == 4) { - param_1[0] = index; + *jobIndex = index; return TRUE; } } diff --git a/src/friend_rescue.c b/src/friend_rescue.c index 00ae69dce..d40d300f3 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -9,7 +9,6 @@ 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]; diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 25fe93abc..2dc55973f 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -13,6 +13,7 @@ #include "menu.h" #include "rescue_password_menu.h" #include "menu_input.h" +#include "code_8094F88.h" extern struct TeamInventory *gTeamInventory_203B460; @@ -21,7 +22,6 @@ extern u8 *gUnknown_203B484; 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]; @@ -246,7 +246,6 @@ void sprintfStatic(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]; @@ -1933,7 +1932,7 @@ void nullsub_49(void) void sub_80352A4(void) { - u8 uVar1; + u8 mailIndex; char *monName; if ( sub_802F298() == 3) { @@ -1941,8 +1940,8 @@ void sub_80352A4(void) CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER); monName = GetMonSpecies(MONSTER_PELIPPER); strcpy(gAvailablePokemonNames, monName); - uVar1 = sub_809539C(6, gUnknown_203B33C->unk420); - sub_8095240(uVar1); + mailIndex = sub_809539C(6, gUnknown_203B33C->unk420); + DeleteMailAtIndex(mailIndex); SetFriendRescueMenuState(0x70); } } diff --git a/src/load_screen.c b/src/load_screen.c index 23af94777..7df515718 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -237,7 +237,7 @@ u32 UpdateLoadScreenMenu(void) nextMenu = 2; // MENU_??? break; case MENU_AWAITING_RESCUE: - sub_8095240(0); + DeleteMailAtIndex(0); nextMenu = 4; // MENU_??? break; case MENU_DELETE_SAVE_PROMPT: diff --git a/src/mailbox.c b/src/mailbox.c index 490341886..1ee5a293d 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -82,7 +82,7 @@ extern void CreateMailAcceptedStatusBox(u32); extern struct WonderMail * GetMailboxSlotInfo(u32); extern void sub_803B35C(struct WonderMail *, u32 *); extern void sub_802DE84(u32 *); -extern void sub_802C860(u32); +extern void InitializeJobListMenu(u32); extern void sub_802B640(u32, u32, u32); extern void sub_802B7D0(u32); extern void sub_802B9FC(u8); @@ -92,7 +92,7 @@ u32 sub_802DFB0(void) gUnknown_203B304 = MemoryAlloc(sizeof(struct unkStruct_203B304), 8); gUnknown_203B304->unk64 = 0; gUnknown_203B304->unk68 = 0; - SetMailboxState(0); + SetMailboxState(INITIALIZE_MAILBOX); return 1; } @@ -100,36 +100,36 @@ u32 sub_802DFD8(void) { switch(gUnknown_203B304->state) { - case 0: - SetMailboxState(1); + case INITIALIZE_MAILBOX: + SetMailboxState(MAIN_MAILBOX_MENU); break; - case 1: + case MAIN_MAILBOX_MENU: HandleMailboxMenu(); break; case 2: nullsub_133(); break; - case 4: - case 5: + case MAIL_MENU: + case MAIL_MENU_1: sub_802E578(); break; - case 6: + case MAIL_ACTION_MENU: HandleMailActionMenu(); break; - case 7: + case MAIL_INFO: sub_802E73C(); break; - case 8: + case JOB_LIST_MENU: sub_802E758(); break; - case 9: - case 0xA: + case PKMN_NEWS_MENU: + case PKMN_NEWS_MENU_1: sub_802E774(); break; - case 0xB: + case DISPLAY_SEL_PKMN_NEWS: sub_802E7D0(); break; - case 3: + case MAILBOX_EXIT: default: return 3; } @@ -154,20 +154,20 @@ void SetMailboxState(u32 newState) void sub_802E0A0(void) { - s32 iVar1; + s32 index; sub_8006518(gUnknown_203B304->unk10C); switch(gUnknown_203B304->state) { - case 1: - for(iVar1 = 0; iVar1 < 4; iVar1++) + case MAIN_MAILBOX_MENU: + for(index = 0; index < 4; index++) { - gUnknown_203B304->unk10C[iVar1] = gUnknown_80E0284; + gUnknown_203B304->unk10C[index] = gUnknown_80E0284; } CreateMailboxMenu(); gUnknown_203B304->unk10C[2] = gUnknown_80E029C; sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC); break; - case 6: + case MAIL_ACTION_MENU: CreateMailActionMenu(); gUnknown_203B304->unk10C[2] = gUnknown_80E02B4; sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC); @@ -175,9 +175,9 @@ void sub_802E0A0(void) gUnknown_203B304->unk10C[3] = gUnknown_80E02CC; break; default: - for(iVar1 = 0; iVar1 < 4; iVar1++) + for(index = 0; index < 4; index++) { - gUnknown_203B304->unk10C[iVar1] = gUnknown_80E0284; + gUnknown_203B304->unk10C[index] = gUnknown_80E0284; } break; } @@ -189,41 +189,41 @@ void sub_802E1AC(void) { switch(gUnknown_203B304->state) { - case 1: + case MAIN_MAILBOX_MENU: sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, gUnknown_203B304->unkFC, gUnknown_203B304->unk64, 2); break; - case 4: + case MAIL_MENU: sub_802BD14(0, 0, 4); break; - case 5: + case MAIL_MENU_1: sub_802BE94(1); break; - case 6: + case MAIL_ACTION_MENU: CreateMailMenu(); CreateMailAcceptedStatusBox(3); sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, 0, gUnknown_203B304->unk68, 2); break; - case 7: + case MAIL_INFO: sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC); gUnknown_203B304->unkC = 3; gUnknown_203B304->unk50 = 0; sub_802DE84(&gUnknown_203B304->unkC); break; - case 8: - sub_802C860(0); + case JOB_LIST_MENU: + InitializeJobListMenu(0); break; - case 9: + case PKMN_NEWS_MENU: sub_802B640(0, 0, 8); break; - case 0xA: + case PKMN_NEWS_MENU_1: sub_802B7D0(1); break; - case 0xB: + case DISPLAY_SEL_PKMN_NEWS: sub_802B9FC(gUnknown_203B304->mailIndex); break; - case 0: + case INITIALIZE_MAILBOX: case 2: - case 3: + case MAILBOX_EXIT: break; } } diff --git a/src/mailbox_1.c b/src/mailbox_1.c index e42d7d45d..a482b8ef0 100644 --- a/src/mailbox_1.c +++ b/src/mailbox_1.c @@ -28,7 +28,7 @@ extern void sub_802DF24(void); extern struct WonderMail *GetMailboxSlotInfo(u8); extern u8 HasNoMailinMailbox(void); extern u32 sub_802BDEC(u32); -extern void sub_8096A78(struct WonderMail *); +extern void AcceptJob(struct WonderMail *); extern void sub_8096C80(void); extern void sub_8096D24(void); extern void ResetMailboxSlot(u8); @@ -52,21 +52,23 @@ void HandleMailboxMenu(void) } switch(menuAction) { + // Check Mail case 2: if(!HasNoMailinMailbox()) - SetMailboxState(4); + SetMailboxState(MAIL_MENU); else sub_8012EA4(&gUnknown_203B304->unk6C, 1); break; + // Job List case 3: if(!HasNoAcceptedJobs()) - SetMailboxState(8); + SetMailboxState(JOB_LIST_MENU); else sub_8012EA4(&gUnknown_203B304->unk6C, 1); break; case 4: if(!HasNoPKMNNews()) - SetMailboxState(9); + SetMailboxState(PKMN_NEWS_MENU); else sub_8012EA4(&gUnknown_203B304->unk6C, 1); break; @@ -74,37 +76,37 @@ void HandleMailboxMenu(void) SetMailboxState(2); break; case 1: - SetMailboxState(3); + SetMailboxState(MAILBOX_EXIT); break; } } void sub_802E578(void) { - struct WonderMail *return_var; + struct WonderMail *mail; switch(sub_802BDEC(1)) { case 3: gUnknown_203B304->mailboxIndex = sub_802BE74(); - SetMailboxState(6); + SetMailboxState(MAIL_ACTION_MENU); break; case 4: gUnknown_203B304->mailboxIndex = sub_802BE74(); - return_var = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - if(return_var->mailType == 1) + mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); + if(mail->mailType == 1) { - gUnknown_203B304->mailIndex = return_var->dungeon.floor; - gUnknown_203B304->fallbackState = 5; - SetMailboxState(0xB); + gUnknown_203B304->mailIndex = mail->dungeon.floor; + gUnknown_203B304->fallbackState = MAIL_MENU_1; + SetMailboxState(DISPLAY_SEL_PKMN_NEWS); } else - SetMailboxState(7); + SetMailboxState(MAIL_INFO); break; case 2: sub_802BEDC(); - SetMailboxState(1); + SetMailboxState(MAIN_MAILBOX_MENU); break; case 0: case 1: @@ -115,7 +117,7 @@ void sub_802E578(void) void HandleMailActionMenu(void) { s32 menuAction = 0; - struct WonderMail *return_var; + struct WonderMail *mail; sub_802BDEC(0); @@ -130,9 +132,11 @@ void HandleMailActionMenu(void) case 3: case 4: break; + + // Accept case 5: PlaySound(0x133); - sub_8096A78(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex)); + AcceptJob(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex)); sub_8096C80(); sub_8096D24(); ResetMailboxSlot(gUnknown_203B304->mailboxIndex); @@ -140,37 +144,43 @@ void HandleMailActionMenu(void) if(HasNoMailinMailbox()) { sub_802BEDC(); - SetMailboxState(1); + SetMailboxState(MAIN_MAILBOX_MENU); } else - SetMailboxState(5); + SetMailboxState(MAIL_MENU_1); break; + + // Info case 8: - SetMailboxState(7); + SetMailboxState(MAIL_INFO); break; + + // Store case 6: PlaySound(0x133); - return_var = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - ReceivePKMNNews(return_var->dungeon.floor); + mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); + ReceivePKMNNews(mail->dungeon.floor); ResetMailboxSlot(gUnknown_203B304->mailboxIndex); sub_8096078(); if(HasNoMailinMailbox()) { sub_802BEDC(); - SetMailboxState(1); + SetMailboxState(MAIN_MAILBOX_MENU); } else - SetMailboxState(5); + SetMailboxState(MAIL_MENU_1); break; + + // Read case 7: PlayMenuSoundEffect(0); - return_var = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - gUnknown_203B304->mailIndex = return_var->dungeon.floor; - gUnknown_203B304->fallbackState = 5; - SetMailboxState(0xB); + mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); + gUnknown_203B304->mailIndex = mail->dungeon.floor; + gUnknown_203B304->fallbackState = MAIL_MENU_1; + SetMailboxState(DISPLAY_SEL_PKMN_NEWS); break; case 1: - SetMailboxState(5); + SetMailboxState(MAIL_MENU_1); break; } } @@ -182,7 +192,7 @@ void sub_802E73C(void) case 2: case 3: sub_802DF24(); - SetMailboxState(5); + SetMailboxState(MAIL_MENU_1); case 0: case 1: break; @@ -196,7 +206,7 @@ void sub_802E758(void) case 2: case 3: sub_802C8F4(); - SetMailboxState(1); + SetMailboxState(MAIN_MAILBOX_MENU); case 0: case 1: break; @@ -213,12 +223,12 @@ void sub_802E774(void) case 3: case 4: gUnknown_203B304->mailIndex = GetPokemonNewsIndex(); - gUnknown_203B304->fallbackState = 0xA; - SetMailboxState(0xB); + gUnknown_203B304->fallbackState = PKMN_NEWS_MENU_1; + SetMailboxState(DISPLAY_SEL_PKMN_NEWS); break; case 2: sub_802B81C(); - SetMailboxState(1); + SetMailboxState(MAIN_MAILBOX_MENU); break; } } diff --git a/src/menu_input.c b/src/menu_input.c index 979aee9f5..0cf69b78b 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -192,7 +192,7 @@ void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2) "\tbx r0"); } -void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5, +void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 menuAction, s32 index) { const u8 *textPtr; @@ -214,7 +214,7 @@ void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 if(textPtr) { while (textPtr != 0) { - if ((0 <= param_5) && (param_5 == menuItems->menuAction)) { + if ((0 <= menuAction) && (menuAction == menuItems->menuAction)) { menuIndex = counter; } if (*menuItems->text == '*') { @@ -237,7 +237,7 @@ void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 param_1->menuAction = -1; } -void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5, +void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 menuAction, s32 index) { const u8 *textPtr; @@ -253,7 +253,7 @@ void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 if (textPtr) { menuItemPtr = menuItems; while (textPtr != NULL) { - if ((0 <= param_5) && (param_5 == menuItemPtr->menuAction)) { + if ((0 <= menuAction) && (menuAction == menuItemPtr->menuAction)) { menuIndex = counter; } if (*menuItemPtr->text == '*') { diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 92c2b1b30..a1da2381e 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -4,27 +4,8 @@ #include "menu.h" #include "input.h" #include "menu_input.h" +#include "pelipper_board.h" -// Guessing based off of 203B304 -struct unkStruct_203B308 -{ - // size: 0xB6 << 1 - u32 state; - u32 unk4; - u8 jobIndex; - u8 fill9[0xC - 9]; - u32 unkC; - u8 fill10[0x50 - 0x10]; - u8 unk50; - u8 fill51[0x64 - 0x51]; - u32 unk64; - u32 unk68; - struct MenuStruct unk6C; - struct MenuItem unkBC[8]; - u16 unkFC[8]; - struct UnkTextStruct2 unk10C[4]; -}; -extern struct unkStruct_203B308 *gUnknown_203B308; extern void SetPelipperBoardState(u32); const struct UnkTextStruct2 gUnknown_80E0330 = @@ -86,31 +67,31 @@ extern void sub_802EC10(void); extern void sub_802C10C(u32, u32, u32); extern void sub_802C28C(u32); -extern void sub_802C39C(void); +extern void DrawPelipperBoardJobMenu(void); extern void CreatePelipperAcceptedStatusBox(u32); extern struct WonderMail *GetPelipperBoardSlotInfo(u32); extern void sub_803B35C(struct WonderMail *, u32 *); extern void sub_802DE84(u32 *); -extern void sub_802C860(u32); +extern void InitializeJobListMenu(u32); u32 sub_802E864(void) { - gUnknown_203B308 = MemoryAlloc(sizeof(struct unkStruct_203B308), 8); - gUnknown_203B308->unk64 = 0; - gUnknown_203B308->unk68 = 0; - gUnknown_203B308->unk4 = 0; - SetPelipperBoardState(0); + gPelipperBoard = MemoryAlloc(sizeof(struct unkStruct_203B308), 8); + gPelipperBoard->menuAction1 = 0; + gPelipperBoard->menuAction2 = 0; + gPelipperBoard->unk4 = 0; + SetPelipperBoardState(INITIALIZE_PELIPPER_BOARD); return 1; } u32 sub_802E890(void) { - switch(gUnknown_203B308->state) + switch(gPelipperBoard->state) { - case 0: - SetPelipperBoardState(1); + case INITIALIZE_PELIPPER_BOARD: + SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU); break; - case 1: + case MAIN_PELIPPER_BOARD_MENU: sub_802ECB4(); break; case 2: @@ -123,13 +104,13 @@ u32 sub_802E890(void) case 6: sub_802EDBC(); break; - case 7: + case PELIPPER_JOB_INFO: sub_802EEA0(); break; - case 8: + case PELIPPER_JOB_LIST_MENU: sub_802EEBC(); break; - case 3: + case PELIPPER_BOARD_EXIT: default: return 3; } @@ -138,64 +119,64 @@ u32 sub_802E890(void) u32 sub_802E90C(void) { - return gUnknown_203B308->unk4; + return gPelipperBoard->unk4; } void sub_802E918(void) { - if(gUnknown_203B308 != NULL) + if(gPelipperBoard != NULL) { - MemoryFree(gUnknown_203B308); - gUnknown_203B308 = NULL; + MemoryFree(gPelipperBoard); + gPelipperBoard = NULL; } } void SetPelipperBoardState(u32 newState) { - gUnknown_203B308->state = newState; + gPelipperBoard->state = newState; sub_802E94C(); sub_802EA58(); } void sub_802E94C(void) { - s32 iVar1; - sub_8006518(gUnknown_203B308->unk10C); - switch(gUnknown_203B308->state) + s32 index; + sub_8006518(gPelipperBoard->unk10C); + switch(gPelipperBoard->state) { - case 1: - for(iVar1 = 0; iVar1 < 4; iVar1++) + case MAIN_PELIPPER_BOARD_MENU: + for(index = 0; index < 4; index++) { - gUnknown_203B308->unk10C[iVar1] = gUnknown_80E0330; + gPelipperBoard->unk10C[index] = gUnknown_80E0330; } CreatePelipperBoardMenu(); - gUnknown_203B308->unk10C[2] = gUnknown_80E0348; - sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->unkBC); + gPelipperBoard->unk10C[2] = gUnknown_80E0348; + sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->unkBC); break; case 6: sub_802EC10(); - gUnknown_203B308->unk10C[2] = gUnknown_80E0360; - sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->unkBC); - gUnknown_203B308->unk10C[2].unkC = 6; - gUnknown_203B308->unk10C[3] = gUnknown_80E0378; + gPelipperBoard->unk10C[2] = gUnknown_80E0360; + sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->unkBC); + gPelipperBoard->unk10C[2].unkC = 6; + gPelipperBoard->unk10C[3] = gUnknown_80E0378; break; default: - for(iVar1 = 0; iVar1 < 4; iVar1++) + for(index = 0; index < 4; index++) { - gUnknown_203B308->unk10C[iVar1] = gUnknown_80E0330; + gPelipperBoard->unk10C[index] = gUnknown_80E0330; } break; } ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B308->unk10C, 1, 1); + sub_800641C(gPelipperBoard->unk10C, 1, 1); } void sub_802EA58(void) { - switch(gUnknown_203B308->state) + switch(gPelipperBoard->state) { - case 1: - sub_8012D60(&gUnknown_203B308->unk6C, gUnknown_203B308->unkBC, 0, gUnknown_203B308->unkFC, gUnknown_203B308->unk64, 2); + case MAIN_PELIPPER_BOARD_MENU: + sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->unkBC, 0, gPelipperBoard->unkFC, gPelipperBoard->menuAction1, 2); break; case 4: sub_802C10C(0, 0, 4); @@ -204,22 +185,22 @@ void sub_802EA58(void) sub_802C28C(1); break; case 6: - sub_802C39C(); + DrawPelipperBoardJobMenu(); CreatePelipperAcceptedStatusBox(3); - sub_8012D60(&gUnknown_203B308->unk6C, gUnknown_203B308->unkBC, 0, 0, gUnknown_203B308->unk68, 2); + sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->unkBC, 0, 0, gPelipperBoard->menuAction2, 2); break; - case 7: - sub_803B35C(GetPelipperBoardSlotInfo(gUnknown_203B308->jobIndex), &gUnknown_203B308->unkC); - gUnknown_203B308->unkC = 3; - gUnknown_203B308->unk50 = 0; - sub_802DE84(&gUnknown_203B308->unkC); + case PELIPPER_JOB_INFO: + sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC); + gPelipperBoard->unkC = 3; + gPelipperBoard->unk50 = 0; + sub_802DE84(&gPelipperBoard->unkC); break; - case 8: - sub_802C860(0); + case PELIPPER_JOB_LIST_MENU: + InitializeJobListMenu(0); break; - case 0: + case INITIALIZE_PELIPPER_BOARD: case 2: - case 3: + case PELIPPER_BOARD_EXIT: break; } } diff --git a/src/pelipper_board_1.c b/src/pelipper_board_1.c index 74b9d3ff8..2ae3924ab 100644 --- a/src/pelipper_board_1.c +++ b/src/pelipper_board_1.c @@ -8,26 +8,7 @@ #include "team_inventory.h" #include "wonder_mail.h" #include "menu_input.h" - -struct unkStruct_203B308 -{ - // size: 0xB6 << 1 - u32 state; - u32 unk4; - u8 jobIndex; - u8 fill9[0xC - 9]; - u32 unkC; - u8 fill10[0x50 - 0x10]; - u8 unk50; - u8 fill51[0x64 - 0x51]; - u32 unk64; - u32 unk68; - struct MenuStruct unk6C; - struct MenuItem unkBC[8]; - u16 unkFC[8]; - struct UnkTextStruct2 unk10C[4]; -}; -extern struct unkStruct_203B308 *gUnknown_203B308; +#include "pelipper_board.h" extern u8 gPelipperBoard_Accepted[]; extern u8 gPelipperStatusSlash[]; @@ -40,10 +21,10 @@ extern void sub_802C8F4(void); extern u32 sub_802DEE0(void); extern void sub_802DF24(void); extern struct WonderMail *GetPelipperBoardSlotInfo(u8); -extern u8 sub_802C4A4(void); +extern u8 HasNoPelipperBoardJobs(void); extern void sub_8096C80(void); extern void sub_8096D24(void); -extern void sub_8096A78(struct WonderMail*); +extern void AcceptJob(struct WonderMail*); extern void ResetPelipperBoardSlot(u8); extern void sub_80965F4(void); extern void sub_802C2D4(void); @@ -57,31 +38,33 @@ void sub_802ECB4(void) { s32 menuAction = 0; - if(!sub_8012FD8(&gUnknown_203B308->unk6C)) + if(!sub_8012FD8(&gPelipperBoard->unk6C)) { - sub_8013114(&gUnknown_203B308->unk6C, &menuAction); - if(menuAction != 1) gUnknown_203B308->unk64 = menuAction; + sub_8013114(&gPelipperBoard->unk6C, &menuAction); + if(menuAction != 1) gPelipperBoard->menuAction1 = menuAction; } switch(menuAction) { + // Bulletin Board case 2: - if(!sub_802C4A4()) + if(!HasNoPelipperBoardJobs()) SetPelipperBoardState(4); else - sub_8012EA4(&gUnknown_203B308->unk6C, 1); + sub_8012EA4(&gPelipperBoard->unk6C, 1); break; + // Job List case 3: if(!HasNoAcceptedJobs()) - SetPelipperBoardState(8); + SetPelipperBoardState(PELIPPER_JOB_LIST_MENU); else - sub_8012EA4(&gUnknown_203B308->unk6C, 1); + sub_8012EA4(&gPelipperBoard->unk6C, 1); break; case 5: SetPelipperBoardState(2); break; case 1: - SetPelipperBoardState(3); + SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; } } @@ -91,16 +74,16 @@ void sub_802ED4C(void) switch(sub_802C1E4(1)) { case 3: - gUnknown_203B308->jobIndex = sub_802C26C(); + gPelipperBoard->jobIndex = sub_802C26C(); SetPelipperBoardState(6); break; case 4: - gUnknown_203B308->jobIndex = sub_802C26C(); + gPelipperBoard->jobIndex = sub_802C26C(); SetPelipperBoardState(7); break; case 2: sub_802C2D4(); - SetPelipperBoardState(1); + SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU); break; case 0: case 1: @@ -114,55 +97,57 @@ void sub_802EDBC(void) s32 menuAction = 0; sub_802C1E4(0); - if(!sub_8012FD8(&gUnknown_203B308->unk6C)) + if(!sub_8012FD8(&gPelipperBoard->unk6C)) { - sub_8013114(&gUnknown_203B308->unk6C, &menuAction); - if(menuAction != 1) gUnknown_203B308->unk68 = menuAction; + sub_8013114(&gPelipperBoard->unk6C, &menuAction); + if(menuAction != 1) gPelipperBoard->menuAction2 = menuAction; } switch(menuAction) { + // Accept case 4: PlaySound(0x133); - mail = GetPelipperBoardSlotInfo(gUnknown_203B308->jobIndex); + mail = GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex); switch(mail->mailType) { case 2: - gUnknown_203B308->unk4 = 1; - ResetPelipperBoardSlot(gUnknown_203B308->jobIndex); + gPelipperBoard->unk4 = 1; + ResetPelipperBoardSlot(gPelipperBoard->jobIndex); sub_80965F4(); sub_802C2D4(); - SetPelipperBoardState(3); + SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; case 3: - gUnknown_203B308->unk4 = 2; - ResetPelipperBoardSlot(gUnknown_203B308->jobIndex); + gPelipperBoard->unk4 = 2; + ResetPelipperBoardSlot(gPelipperBoard->jobIndex); sub_80965F4(); sub_802C2D4(); - SetPelipperBoardState(3); + SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; case 4: - gUnknown_203B308->unk4 = 3; - ResetPelipperBoardSlot(gUnknown_203B308->jobIndex); + gPelipperBoard->unk4 = 3; + ResetPelipperBoardSlot(gPelipperBoard->jobIndex); sub_80965F4(); sub_802C2D4(); - SetPelipperBoardState(3); + SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; default: - sub_8096A78(mail); + AcceptJob(mail); sub_8096C80(); sub_8096D24(); - if(sub_802C4A4()) + if(HasNoPelipperBoardJobs()) { sub_802C2D4(); - SetPelipperBoardState(1); + SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU); } else SetPelipperBoardState(5); break; } break; + // Info case 5: - SetPelipperBoardState(7); + SetPelipperBoardState(PELIPPER_JOB_INFO); break; case 1: SetPelipperBoardState(5); @@ -191,7 +176,7 @@ void sub_802EEBC(void) case 2: case 3: sub_802C8F4(); - SetPelipperBoardState(1); + SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU); case 0: case 1: break; diff --git a/src/pokemon_news.c b/src/pokemon_news.c new file mode 100644 index 000000000..457c92fbf --- /dev/null +++ b/src/pokemon_news.c @@ -0,0 +1,741 @@ +#include "constants/input.h" +#include "global.h" +#include "file_system.h" +#include "input.h" +#include "pokemon.h" +#include "pokemon_mail.h" +#include "memory.h" +#include "text.h" +#include "menu.h" +#include "save.h" +#include "menu_input.h" + +struct unkStruct_203B2CC +{ + // size: 0xD4; + u8 receivedNewsletters[NUM_POKEMON_NEWS]; + + u32 unk38; + u8 fill3C[0x50 - 0x3C]; + + s16 unk50; + s16 unk52; + s16 unk54; + s16 unk56; + + u16 unk58; + u16 numPKMNNews; + + u8 fill5C[0x6C - 0x5C]; + + u32 unk6C; + + struct UnkTextStruct2 *unk70; + struct UnkTextStruct2 unk74[4]; +}; +extern struct unkStruct_203B2CC *gUnknown_203B2CC; + +struct unkStruct_203B2D4 +{ + // size: 0x94 + /* 0x0 */ s32 state; + /* 0x4 */ u8 currMailIndex; + s32 unk8; + s32 unkC; + const u8 *unk10[4]; + u32 unk20; + u32 unk24; + struct UnkTextStruct2 unk28[4]; + u32 unk88; + u8 fill8C[0x94 - 0x8C]; +}; +extern struct unkStruct_203B2D4 *gUnknown_203B2D4; + +struct unkStruct_203B2D8 +{ + // size: 0xA4 + u8 unk0[4]; + u32 unk4; + u8 fill8[0x1C - 0x8]; + s16 unk1C; + s16 unk1E; + s16 unk20; + s16 unk22; + s16 fill24; + /* 0x26 */ s16 emptyMailSlots; + u8 fill28[0x38 - 0x28]; + u32 unk38; + struct UnkTextStruct2 *unk3C; + struct UnkTextStruct2 unk40[4]; + u8 unkA0[4]; +}; +extern struct unkStruct_203B2D8 *gUnknown_203B2D8; +extern struct GameOptions *gGameOptionsRef; + +const struct UnkTextStruct2 gUnknown_80DFBD0 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 }; + +const struct UnkTextStruct2 gUnknown_80DFBEC = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x00, 0x02, 0x00, + 0x18, 0x0E, + 0x0E, 0x00, + gUnknown_80DFBE8 +}; + +ALIGNED(4) const u8 gUnknown_80DFC04[] = "News List"; +ALIGNED(4) static const char wonder_mail_2_fill1[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80DFC18 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 }; + +const struct UnkTextStruct2 gUnknown_80DFC34 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x00, 0x02, 0x00, + 0x1A, 0x10, + 0x10, 0x00, + gUnkData_80DFC30 +}; + +ALIGNED(4) const u8 gUnknown_80DFC4C[] = "She"; +ALIGNED(4) const u8 gUnknown_80DFC50[] = "He"; +ALIGNED(4) static const char wonder_mail_2_fill2[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80DFC5C = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DFC74 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x00, 0x02, 0x00, + 0x18, 0x0E, + 0x0E, 0x00, + NULL +}; + +ALIGNED(4) const u8 gMailboxText[] = "Mailbox"; +ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80DFC9C = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DFCB4 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x00, 0x02, 0x00, + 0x18, 0x0E, + 0x0E, 0x00, + NULL +}; + +ALIGNED(4) const u8 gBulletinBoardText[] = "Bulletin Board"; +ALIGNED(4) static const char wonder_mail_2_fill4[] = "pksdir0"; + +extern u8 HasNoPKMNNews(void); +extern u8 CheckPKMNNewsSlot(u8 r0); +extern u16 gUnknown_203B2D0; +extern u16 gUnknown_203B2D2; +extern u16 gUnknown_203B2DC; +extern s32 GetNumPKMNNews(void); +extern void sub_802B880(void); +extern void CreatePKMNNewsMenu(void); +extern void sub_8013818(void *, u32, u32, u32); +extern u8 sub_80138B8(void *, u32); +extern void PlayMenuSoundEffect(u32); +extern s32 GetKeyPress(u32 *); +extern void sub_8013660(u32 *); +extern void AddMenuCursorSprite(u32 *); +extern void sub_802BCC4(void); +extern void sub_802BB14(u32); +extern void sub_801317C(u32 *); +extern u8 HasNoMailinMailbox(void); +extern void sub_802BF30(void); +extern void CreateMailMenu(void); +extern s32 CountEmptyMailSlots(void); +extern void sub_8013848(u32 *, s32, u32, u32); +void sub_802BB28(void); +extern void sub_802BB98(void); +extern void sub_802BC08(void); +extern void sub_802BB28(void); +extern void sub_8013E54(void); +extern s32 sub_8012A64(u32 *, u32); +extern char gUnknown_202E5D8[0x50]; +extern char gAvailablePokemonNames[0x50]; +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_802BC7C(void); +extern void sub_80073E0(u32); +extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); +extern void sub_803B6B0(u32, u32, u32, u32); +extern s32 sub_8013800(u32 *, s32); +extern void sub_8013984(u32 *); +extern struct PokemonStruct *sub_808D3BC(void); +extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); + +u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2) +{ + + if(HasNoPKMNNews()) + { + return 0; + } + else + { + if(gUnknown_203B2CC == NULL) + { + gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 8); + } + gUnknown_203B2CC->unk6C = r0; + gUnknown_203B2CC->unk70 = &gUnknown_203B2CC->unk74[r0]; + + sub_8006518(gUnknown_203B2CC->unk74); + + gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBEC; + + if(r1 != NULL) + { + gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C].unk08 = *r1; + } + + sub_8012D08(gUnknown_203B2CC->unk70, r2); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2CC->unk74, 1, 1); + + sub_8013818(&gUnknown_203B2CC->unk38, GetNumPKMNNews(), r2, r0); + + gUnknown_203B2CC->unk50 = gUnknown_203B2D0; + gUnknown_203B2CC->unk56 = gUnknown_203B2D2; + + sub_8013984(&gUnknown_203B2CC->unk38); + sub_802B880(); + CreatePKMNNewsMenu(); + + return 1; + } +} + +u32 sub_802B720(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(&gUnknown_203B2CC->unk38); + return 0; + } + else + { + switch(GetKeyPress(&gUnknown_203B2CC->unk38)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + case INPUT_START_BUTTON: + PlayMenuSoundEffect(4); + return 4; + } + if(sub_80138B8(&gUnknown_203B2CC->unk38, 1) != 0) + { + sub_802B880(); + CreatePKMNNewsMenu(); + return 1; + } + else + return 0; + } +} + +u8 GetPokemonNewsIndex(void) +{ + return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50]; +} + +void sub_802B7D0(u8 r0) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2CC->unk74, 0, 0); + + gUnknown_203B2CC->numPKMNNews = GetNumPKMNNews(); + sub_8013984(&gUnknown_203B2CC->unk38); + sub_802B880(); + CreatePKMNNewsMenu(); + + if(r0 != 0) + { + AddMenuCursorSprite(&gUnknown_203B2CC->unk38); + } +} + +void sub_802B81C(void) +{ + if(gUnknown_203B2CC != NULL) + { + gUnknown_203B2D0 = gUnknown_203B2CC->unk50; + + gUnknown_203B2D2 = gUnknown_203B2CC->unk56; + + gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBD0; + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2CC->unk74, 1, 1); + + MemoryFree(gUnknown_203B2CC); + gUnknown_203B2CC = NULL; + } +} + +NAKED +void sub_802B880(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0802B8D0\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x52\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x6C]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x82\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x6C]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x84\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x74\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"\t_0802B8D0: .4byte gUnknown_203B2CC"); +} + +void CreatePKMNNewsMenu(void) +{ + s32 index; + s32 y; + s32 new_index; + u8 mailIndex; + + + sub_8008C54(gUnknown_203B2CC->unk6C); + sub_80073B8(gUnknown_203B2CC->unk6C); + xxx_call_draw_string(0xA, 0, gUnknown_80DFC04, gUnknown_203B2CC->unk6C, 0); + sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C); + for(index = 0; index < gUnknown_203B2CC->unk52; index++) + { + y = sub_8013800(&gUnknown_203B2CC->unk38, index); + new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + index; + mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index]; + sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C); + sub_802BC7C(); + xxx_format_and_draw(0x15, y, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0); + } + sub_80073E0(gUnknown_203B2CC->unk6C); +} + +s32 GetNumPKMNNews(void) +{ + s32 index; + s32 newsCount; + + newsCount = 0; + + for(index = 0; index < NUM_POKEMON_NEWS; index++) + { + if(CheckPKMNNewsSlot(index)) + { + gUnknown_203B2CC->receivedNewsletters[newsCount] = index; + newsCount++; + } + } + return newsCount; +} + +bool8 HasNoPKMNNews(void) +{ + s32 index; + + for(index = 0; index < NUM_POKEMON_NEWS; index++) + { + if(CheckPKMNNewsSlot(index)) + { + return FALSE; + } + } + return TRUE; +} + +u32 sub_802B9FC(u8 mailIndex) +{ + gUnknown_203B2D4 = MemoryAlloc(sizeof(struct unkStruct_203B2D4), 8); + gUnknown_203B2D4->currMailIndex = mailIndex; + sub_801317C(&gUnknown_203B2D4->unk88); + gUnknown_203B2D4->unk24 = 0; + gUnknown_203B2D4->unk28[0] = gUnknown_80DFC34; + gUnknown_203B2D4->unk28[1] = gUnknown_80DFC18; + gUnknown_203B2D4->unk28[2] = gUnknown_80DFC18; + gUnknown_203B2D4->unk28[3] = gUnknown_80DFC18; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2D4->unk28, 1, 1); + gUnknown_203B2D4->unk8 = 0; + sub_802BCC4(); + sub_802BC7C(); + sub_802BB14(0); + return 1; +} + +u32 sub_802BA8C(void) +{ + switch(gUnknown_203B2D4->state) + { + case 0: + sub_802BB98(); + break; + case 1: + sub_802BC08(); + break; + case 3: + return 3; + case 2: + default: + return 2; + + } + return 0; +} + +void sub_802BACC(void) +{ + if(gUnknown_203B2D4 != NULL) + { + gUnknown_203B2D4->unk28[gUnknown_203B2D4->unk24] = gUnknown_80DFC18; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2D4->unk28, 1, 1); + MemoryFree(gUnknown_203B2D4); + gUnknown_203B2D4 = NULL; + } +} + +void sub_802BB14(u32 newState) +{ + gUnknown_203B2D4->state = newState; + sub_802BB28(); +} + +void sub_802BB28(void) +{ + switch(gUnknown_203B2D4->state) + { + case 0: + case 1: + sub_8008C54(gUnknown_203B2D4->unk24); + sub_80073B8(gUnknown_203B2D4->unk24); + xxx_format_and_draw(0xA, 0, GetPokemonMailHeadline(gUnknown_203B2D4->currMailIndex), gUnknown_203B2D4->unk24, 0); + xxx_format_and_draw(0x6, 0x14, gUnknown_203B2D4->unk10[gUnknown_203B2D4->unk8], gUnknown_203B2D4->unk24, 0); + sub_80073E0(gUnknown_203B2D4->unk24); + gUnknown_203B2D4->unk8++; + break; + case 2: + case 3: + break; + } +} + +void sub_802BB98(void) +{ + if(gUnknown_203B2D4->unkC != 0) + { + if(gUnknown_203B2D4->unk20 & 8) + sub_8013E54(); + gUnknown_203B2D4->unk20++; + } + switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24)) + { + case 1: + PlayMenuSoundEffect(0); + if(gUnknown_203B2D4->unkC != 0) + sub_802BB14(1); + else + sub_802BB14(3); + break; + case 2: + PlayMenuSoundEffect(1); + sub_802BB14(2); + break; + } +} + +void sub_802BC08(void) +{ + if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC) + { + if(gUnknown_203B2D4->unk20 & 8) + sub_8013E54(); + gUnknown_203B2D4->unk20++; + } + switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24)) + { + case 1: + PlayMenuSoundEffect(0); + if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC) + sub_802BB14(1); + else + sub_802BB14(3); + break; + case 2: + PlayMenuSoundEffect(1); + sub_802BB14(2); + break; + } +} + +void sub_802BC7C(void) +{ + PrintPokeNameToBuffer(gAvailablePokemonNames, sub_808D3BC()); + if(gGameOptionsRef->playerGender == FEMALE) + { + strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC4C); // She + } + else + { + strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC50); // He + } +} + +void sub_802BCC4(void) +{ + const char *mailTextPtr; + + mailTextPtr = GetPokemonMailText(gUnknown_203B2D4->currMailIndex); + gUnknown_203B2D4->unkC = 0; + gUnknown_203B2D4->unk10[0] = mailTextPtr; + + // Count all the {EXTRA_MSG}'s + while (*mailTextPtr != '\0') { + if (*mailTextPtr == '#') { + if ((mailTextPtr[1] == 'P') || (mailTextPtr[1] == 'p')) { + gUnknown_203B2D4->unkC++; + gUnknown_203B2D4->unk10[gUnknown_203B2D4->unkC] = mailTextPtr + 2; + } + mailTextPtr += 2; + } + else { + mailTextPtr++; + } + } +} + +u32 sub_802BD14(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) +{ + + if (HasNoMailinMailbox()) { + return 0; + } + else + { + if (gUnknown_203B2D8 == NULL) { + gUnknown_203B2D8 = MemoryAlloc(sizeof(struct unkStruct_203B2D8),8); + } + gUnknown_203B2D8->unk38 = param_1; + gUnknown_203B2D8->unk3C = &gUnknown_203B2D8->unk40[param_1]; + sub_8006518(gUnknown_203B2D8->unk40); + gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC74; + gUnknown_203B2D8->unk3C->unk14 = gUnknown_203B2D8->unkA0; + if (param_2 != NULL) { + gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38].unk08 = *param_2; + } + sub_8012D34(gUnknown_203B2D8->unk3C,param_3); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2D8->unk40,1,1); + sub_8013848(&gUnknown_203B2D8->unk4,CountEmptyMailSlots(),param_3,param_1); + gUnknown_203B2D8->unk1C = gUnknown_203B2DC; + sub_8013984(&gUnknown_203B2D8->unk4); + sub_802BF30(); + CreateMailMenu(); + return 1; + } +} + +u32 sub_802BDEC(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(&gUnknown_203B2D8->unk4); + return 0; + } + switch(GetKeyPress(&gUnknown_203B2D8->unk4)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + case INPUT_START_BUTTON: + PlayMenuSoundEffect(4); + return 4; + default: + if(sub_80138B8(&gUnknown_203B2D8->unk4, 1) != 0) + { + sub_802BF30(); + CreateMailMenu(); + return 1; + } + else + return 0; + } +} + +u8 sub_802BE74(void) { + return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + gUnknown_203B2D8->unk1C]; +} + +void sub_802BE94(u8 r0) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2D8->unk40, 0, 0); + + gUnknown_203B2D8->emptyMailSlots = CountEmptyMailSlots(); + sub_8013984(&gUnknown_203B2D8->unk4); + sub_802BF30(); + CreateMailMenu(); + + if(r0 != 0) + { + AddMenuCursorSprite(&gUnknown_203B2D8->unk4); + } +} + +void sub_802BEDC(void) +{ + if(gUnknown_203B2D8 != NULL) + { + gUnknown_203B2DC = gUnknown_203B2D8->unk1C; + gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2D8->unk40, 1, 1); + MemoryFree(gUnknown_203B2D8); + gUnknown_203B2D8 = NULL; + } +} + +NAKED +void sub_802BF30(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0802BF9C\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA0\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA2\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA3\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x1E\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0x18\n" + "\tbl sub_8009614\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x38]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x4E\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x38]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x50\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x40\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0802BF9C: .4byte gUnknown_203B2D8" + ); +} + diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index bdee3a07b..8924503d0 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -19,6 +19,7 @@ extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; #define THANK_YOU_MAIL_MAIN_MENU 0 #define ANYTHING_ELSE_THANK_YOU_MAIN_MENU 1 +#define EXIT_THANK_YOU_MAIL_PRE 2 #define EXIT_THANK_YOU_MAIL 3 #define NO_THANK_YOU_MAIL 4 #define SELECT_THANK_YOU_MAIL_COMMS 6 @@ -160,7 +161,6 @@ extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32); extern void sub_8030810(u32); extern u32 sub_8031DCC(void); extern void sub_8031E00(void); -extern void sub_8095240(u8); extern u32 sub_802F298(); extern u8 sub_801CF14(u32); extern u32 sub_8030768(u32); @@ -424,7 +424,7 @@ u32 ThankYouMailPelipperCallback(void) case ANYTHING_ELSE_THANK_YOU_MAIN_MENU: HandleThankYouMailPelipperMainMenu(); break; - case 2: + case EXIT_THANK_YOU_MAIL_PRE: sub_802AAC8(); break; case EXIT_THANK_YOU_MAIL: @@ -1250,7 +1250,7 @@ void sub_802AB98(void) CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER); monName = GetMonSpecies(MONSTER_PELIPPER); strcpy(gAvailablePokemonNames, monName); - sub_8095240(sub_809539C(6, gUnknown_203B2C4->unk430)); + DeleteMailAtIndex(sub_809539C(6, gUnknown_203B2C4->unk430)); SetThankYouMailMenuState(0x24); break; default: @@ -1294,7 +1294,7 @@ void UpdateThankYouMailText(void) break; ResetUnusedInputStruct(); sub_800641C(0,1,1); - sub_80306A8(5,0,0,6); + sub_80306A8(WONDER_MAIL_TYPE_THANK_YOU,0,0,6); break; case 0x11: sub_8006518(gUnknown_203B2C4->unk35C); @@ -1484,7 +1484,7 @@ void UpdateThankYouMailText(void) // May I help you with anything else? sub_8014248(gUnknown_80DF928,0,1,gThankYouMailMainMenuItems,0,4,0,&gUnknown_203B2C4->faceFile,0xc); break; - case 2: + case EXIT_THANK_YOU_MAIL_PRE: // Please come see me anytime sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d); break; diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 2cc3c97f4..cebf0efde 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -12,19 +12,18 @@ #include "team_inventory.h" #include "rescue_password_menu.h" #include "menu_input.h" +#include "code_8094F88.h" extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern u32 sub_80144A4(s32 *r0); extern void sub_8011C28(u32); -extern void sub_8095240(u8); extern void sub_809927C(u8); extern bool8 HasNoWonderMailType(u32); extern u32 sub_8031050(); extern void sub_80310B4(); -extern u32 sub_8095350(); -extern u8 sub_80A2824(u8); +extern bool8 sub_80A2824(u8); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; @@ -77,7 +76,6 @@ extern void sub_8023868(u32, u32, u32, u32); extern void sub_80306A8(u32, u32, u32, u32); extern s32 sub_8037B28(u32); extern void sub_8011830(void); -extern u32 sub_8095350(); extern void sub_8031D70(u8, u32); extern void sub_80151C0(u32, u8 *); extern void xxx_call_start_bg_music(void); @@ -98,7 +96,7 @@ extern void sub_8029944(void); extern void sub_80299AC(void); extern void sub_80299D8(void); extern void sub_8029A6C(void); -extern void sub_8028CE0(void); +extern void ExitFriendRescueCounterMenu(void); extern void sub_8028BF0(void); extern void sub_8029A18(void); extern void sub_80295A8(void); @@ -149,6 +147,42 @@ extern const u8 DontSendPokemon_80DDB80[]; extern const u8 SendPokemon_80DDB98[]; extern const u8 SendWOPokemon[]; +enum FriendRescueStates { + INITIALIZE_FRIEND_RESCUE = 0, + FRIEND_RESCUE_MAIN = 1, + FRIEND_RESCUE_EXIT_PRE = 2, + FRIEND_RESCUE_COUNTER_EXIT = 3, + FRIEND_RESCUE_COMMUNICATING_PRE = 5, + FRIEND_RESCUE_COMMUNICATING = 6, + FRIEND_RESCUE_ERROR = 7, + NO_MAIL_ROOM = 9, + NO_SOS_MAIL = 0xC, + NO_AOK_MAIL = 0xE, + NO_MAIL = 0x10, + PROMPT_DELETE_ALL_MAIL = 0x12, + CONFIRM_DELETE_ALL_MAIL_1 = 0x13, + CONFIRM_DELETE_ALL_MAIL_2 = 0x14, + DELETE_ALL_MAIL_SAVE_PRE = 0x15, + NO_SOS_MAIL_TO_SEND = 0x1A, + CANT_GO_TO_DUNGEON = 0x1C, + FRIEND_RESCUE_FAILED = 0x1D, + PROMPT_CHOOSE_SOS_MAIL = 0x1E, + RECEIVED_FRIEND_SOS_MAIL = 0x23, + RECEIVED_FRIEND_SOS_MAIL_SAVE_PRE = 0x24, + RECEIVED_FRIEND_SOS_MAIL_SAVE_COMPLETE = 0x25, + PROMPT_SOS_MAIL_PASSWORD = 0x26, + NO_AOK_MAIL_TO_SEND = 0x2F, + NO_POKEMON_IN_FRIEND_AREA = 0x31, + PROMPT_SELECT_HELPER_POKEMON = 0x32, + SELECT_HELPER_POKEMON = 0x33, + CONFIRM_SEND_HELPER_POKEMON = 0x36, + SENT_AOK_MAIL = 0x37, + SENT_AOK_MAIL_SAVE_PRE = 0x38, + SENT_AOK_MAIL_SAVE_COMPLETE = 0x39, + AOK_PASSWORD_DISPLAY = 0x3A, + DEFAULT_FALLBACK_STATE = 0x3D +}; + const struct MenuItem gUnknown_80DD970[] = { {"Receive SOS Mail", 0x0}, @@ -275,8 +309,8 @@ u32 sub_8027F88(void) for(counter = 0; counter < PASSWORD_BUFFER_SIZE; counter++){ gUnknown_203B2C0->passwordBuffer[counter] = 0; } - gUnknown_203B2C0->fallbackState = 0x3D; - sub_8028B04(0); // Set initial state to 0? + gUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; + SetFriendRescueCounterState(INITIALIZE_FRIEND_RESCUE); return 1; } @@ -293,16 +327,16 @@ u32 sub_8028078(void) case 0x3b: sub_8029AF4(); break; - case 0x38: + case SENT_AOK_MAIL_SAVE_PRE: sub_8029A88(); break; - case 0x37: + case SENT_AOK_MAIL: sub_8029AB0(); break; - case 0x32: + case PROMPT_SELECT_HELPER_POKEMON: sub_80297B8(); break; - case 0x33: + case SELECT_HELPER_POKEMON: sub_80297D4(); break; case 0x34: @@ -311,10 +345,10 @@ u32 sub_8028078(void) case 0x35: sub_8029944(); break; - case 0x31: + case NO_POKEMON_IN_FRIEND_AREA: sub_80299AC(); break; - case 0x36: + case CONFIRM_SEND_HELPER_POKEMON: sub_80299D8(); break; case 0x30: @@ -341,16 +375,16 @@ u32 sub_8028078(void) case 0x2f: sub_802979C(); break; - case 9: + case NO_MAIL_ROOM: sub_8029358(); break; - case 0x23: + case RECEIVED_FRIEND_SOS_MAIL: sub_8029374(); break; - case 0x24: + case RECEIVED_FRIEND_SOS_MAIL_SAVE_PRE: sub_802939C(); break; - case 0x26: + case PROMPT_SOS_MAIL_PASSWORD: sub_80293D8(); break; case 0x27: @@ -362,32 +396,32 @@ u32 sub_8028078(void) case 4: sub_80292A4(); break; - case 6: + case FRIEND_RESCUE_COMMUNICATING: sub_80292EC(); break; - case 7: + case FRIEND_RESCUE_ERROR: sub_802933C(); break; - case 5: + case FRIEND_RESCUE_COMMUNICATING_PRE: sub_802958C(); break; case 8: sub_8029208(); break; - case 0x1a: - sub_8028DE8(1); + case NO_SOS_MAIL_TO_SEND: + sub_8028DE8(FRIEND_RESCUE_MAIN); break; case 0x1b: sub_8028F80(); break; - case 0x1c: - case 0x1d: + case CANT_GO_TO_DUNGEON: + case FRIEND_RESCUE_FAILED: sub_8028FC0(); break; case 0x22: sub_8028FDC(); break; - case 0x1e: + case PROMPT_CHOOSE_SOS_MAIL: sub_80290D4(); break; case 0x20: @@ -407,20 +441,20 @@ u32 sub_8028078(void) break; case 0xd: case 0xf: - sub_8028DE8(10); + sub_8028DE8(0xA); break; case 0x11: sub_8028E08(); break; - case 0xc: - case 0xe: - case 0x10: + case NO_SOS_MAIL: + case NO_AOK_MAIL: + case NO_MAIL: sub_8028DE8(0x19); break; - case 0x12: + case PROMPT_DELETE_ALL_MAIL: sub_8028E24(); break; - case 0x13: + case CONFIRM_DELETE_ALL_MAIL_1: sub_8028E54(); break; case 0x17: @@ -432,25 +466,25 @@ u32 sub_8028078(void) case 0x19: sub_8028ED4(); break; - case 0x14: + case CONFIRM_DELETE_ALL_MAIL_2: sub_8028F04(); break; - case 0x15: + case DELETE_ALL_MAIL_SAVE_PRE: sub_8028F30(); break; case 0x16: sub_8028F58(); break; - case 0: - case 1: + case INITIALIZE_FRIEND_RESCUE: + case FRIEND_RESCUE_MAIN: sub_8028BF0(); break; - case 2: - case 0x25: - case 0x39: - sub_8028CE0(); + case FRIEND_RESCUE_EXIT_PRE: + case RECEIVED_FRIEND_SOS_MAIL_SAVE_COMPLETE: + case SENT_AOK_MAIL_SAVE_COMPLETE: + ExitFriendRescueCounterMenu(); break; - case 3: + case FRIEND_RESCUE_COUNTER_EXIT: return 3; } return 0; @@ -496,13 +530,13 @@ void sub_8028348(void) case 0x3C: sub_80141B4(gUnknown_80DDBA8, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x3A: + case AOK_PASSWORD_DISPLAY: sub_80141B4(gUnknown_80DDBFC, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x38: sub_80141B4(gUnknown_80DDC30, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x37: + case SENT_AOK_MAIL: switch(gUnknown_203B2C0->unk534) { // 0x0 - 0x9 included here too... @@ -515,18 +549,14 @@ void sub_8028348(void) break; } break; - case 0x39: + case SENT_AOK_MAIL_SAVE_COMPLETE: sub_80141B4(gUnknown_80DDC30, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x32: + case PROMPT_SELECT_HELPER_POKEMON: sub_80141B4(gUnknown_80DDCBC, 0, 0,0x101); break; - case 0x33: - if(sub_8023CE8() != 0) - { - break; - } - else + case SELECT_HELPER_POKEMON: + if(sub_8023CE8() == 0) { ResetUnusedInputStruct(); sub_800641C(0, 1, 1); @@ -539,10 +569,10 @@ void sub_8028348(void) sub_8023DA4(); sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); break; - case 0x31: + case NO_POKEMON_IN_FRIEND_AREA: sub_8014248(gUnknown_80DDD2C, 0, 0xA, gUnknown_80DDAA0, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 0x36: + case CONFIRM_SEND_HELPER_POKEMON: sub_8014248(gUnknown_80DDD88, 0, 8, gUnknown_80DDA80, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; case 0x2D: @@ -552,18 +582,14 @@ void sub_8028348(void) sub_80141B4(gUnknown_80DDDD8, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x2A: - if(sub_8030894() != 0) - { - break; - } - else + if(sub_8030894() == 0) { ResetUnusedInputStruct(); sub_800641C(0, 1, 1); - sub_80306A8(4, 0, 0, 6); + sub_80306A8(WONDER_MAIL_TYPE_AOK, 0, 0, 6); } break; - case 0x2F: + case NO_AOK_MAIL_TO_SEND: sub_80141B4(gUnknown_80DDE20, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x30: @@ -572,17 +598,17 @@ void sub_8028348(void) case 0x2E: sub_8014248(gUnknown_80DDEC0, 0, 0x11, gUnknown_80DDB60, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 9: + case NO_MAIL_ROOM: sub_80141B4(gUnknown_80DDF2C, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 4: sub_8014248(gUnknown_80DDFB8, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 5: + case FRIEND_RESCUE_COMMUNICATING_PRE: nullsub_23(0); sub_80141B4(gUnknown_80DE01C, 0 , 0, 0); break; - case 6: + case FRIEND_RESCUE_COMMUNICATING: gUnknown_203B2C0->linkError = COMMS_GOOD; sub_8011830(); linkError = sub_8037B28(gUnknown_203B2C0->unk40); @@ -628,7 +654,7 @@ void sub_8028348(void) xxx_call_start_bg_music(); } break; - case 0x23: + case RECEIVED_FRIEND_SOS_MAIL: switch(gUnknown_203B2C0->unk534) { // 0x0 - 0x9 included here too... @@ -641,10 +667,10 @@ void sub_8028348(void) break; } break; - case 0x25: + case RECEIVED_FRIEND_SOS_MAIL_SAVE_COMPLETE: sub_80141B4(gUnknown_80DE0C0, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x26: + case PROMPT_SOS_MAIL_PASSWORD: sub_80141B4(gUnknown_80DE124, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x27: @@ -664,33 +690,30 @@ void sub_8028348(void) break; } break; - case 0x1A: + case NO_SOS_MAIL_TO_SEND: sub_80141B4(gUnknown_80DE1E4, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x1B: sub_80141B4(gUnknown_80DE280, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x1C: + case CANT_GO_TO_DUNGEON: sub_80141B4(gUnknown_80DE2B0, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x1D: + case FRIEND_RESCUE_FAILED: sub_80141B4(gUnknown_80DE368, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x22: sub_8014248(gUnknown_80DDDBC, 0, 8, gUnknown_80DDA64, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 0x1E: + case PROMPT_CHOOSE_SOS_MAIL: sub_80141B4(gUnknown_80DE430, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x1F: - if(sub_8030894() != 0) - { - break; - } - else + if(sub_8030894() == 0) { ResetUnusedInputStruct(); sub_800641C(0, 1, 1); + // SOS Mail sub_80306A8(2, 0, 0, 6); } break; @@ -702,7 +725,7 @@ void sub_8028348(void) sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); break; case 0xA: - gUnknown_203B2C0->unk540 = sub_8095350(); + gUnknown_203B2C0->mailCount = CountAllMail(); switch((u32)gUnknown_203B2C0->unk538) { case 5: @@ -722,25 +745,25 @@ void sub_8028348(void) case 0xD: sub_80141B4(gUnknown_80DE4B8, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0xC: + case NO_SOS_MAIL: sub_80141B4(gUnknown_80DE4F0, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0xF: sub_80141B4(gUnknown_80DE524, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0xE: + case NO_AOK_MAIL: sub_80141B4(gUnknown_80DE614, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x11: sub_80141B4(gUnknown_80DE648, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x10: + case NO_MAIL: sub_80141B4(gUnknown_80DE694, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x12: + case PROMPT_DELETE_ALL_MAIL: sub_8014248(gUnknown_80DE6D4, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 0x13: + case CONFIRM_DELETE_ALL_MAIL_1: sub_8014248(gUnknown_80DE754, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; case 0x17: @@ -752,31 +775,31 @@ void sub_8028348(void) case 0x19: sub_8014248(gUnknown_80DE808, 0, 8, gUnknown_80DDA64, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 0x14: + case CONFIRM_DELETE_ALL_MAIL_2: sub_80141B4(gUnknown_80DE830, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0x15: + case DELETE_ALL_MAIL_SAVE_PRE: sub_80141B4(gUnknown_80DE864, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x16: sub_80141B4(gUnknown_80DE7E8, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 0: + case INITIALIZE_FRIEND_RESCUE: sub_8014248(gUnknown_80DE8B4, 0, 0, gUnknown_80DD970, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 1: + case FRIEND_RESCUE_MAIN: sub_8014248(gUnknown_80DE918, 0, 0, gUnknown_80DD970, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; case 2: sub_80141B4(gUnknown_80DE93C, 0, &gUnknown_203B2C0->faceFile,0x10d); break; - case 3: + case FRIEND_RESCUE_COUNTER_EXIT: break; } } -void sub_8028B04(u32 state) +void SetFriendRescueCounterState(u32 state) { gUnknown_203B2C0->state = state; nullsub_130(); @@ -784,7 +807,7 @@ void sub_8028B04(u32 state) } // Wonder Mail Linking... -void sub_8028B1C(u32 errorCode) +void PrintFriendRescueCounterError(u32 errorCode) { switch(errorCode) { @@ -845,21 +868,21 @@ void sub_8028BF0(void) gUnknown_203B2C0->unk538 = 0; if(FindOpenMailSlot() != -1) { - sub_8028B04(8); + SetFriendRescueCounterState(8); } else { - sub_8028B04(9); + SetFriendRescueCounterState(NO_MAIL_ROOM); } break; case 1: if(CountMailType(2) != 0) { - sub_8028B04(30); + SetFriendRescueCounterState(PROMPT_CHOOSE_SOS_MAIL); } else { - sub_8028B04(26); + SetFriendRescueCounterState(NO_SOS_MAIL_TO_SEND); } break; case 2: @@ -867,18 +890,18 @@ void sub_8028BF0(void) gUnknown_203B2C0->unk538 = 2; if(CountMailType(WONDER_MAIL_TYPE_AOK) != 0) { - sub_8028B04(41); + SetFriendRescueCounterState(0x29); } else { - sub_8028B04(47); + SetFriendRescueCounterState(NO_AOK_MAIL_TO_SEND); } break; case 3: - sub_8028B04(11); + SetFriendRescueCounterState(11); break; case 10: - sub_8028B04(2); + SetFriendRescueCounterState(FRIEND_RESCUE_EXIT_PRE); break; default: break; @@ -886,7 +909,7 @@ void sub_8028BF0(void) } -void sub_8028CE0() +void ExitFriendRescueCounterMenu() { s32 temp; @@ -894,13 +917,13 @@ void sub_8028CE0() { return; } - sub_8028B04(3); + SetFriendRescueCounterState(FRIEND_RESCUE_COUNTER_EXIT); } void sub_8028CFC() { s32 temp; - u32 temp2; + u32 newMailCount; if(sub_80144A4(&temp) != 0) { @@ -910,15 +933,15 @@ void sub_8028CFC() { case 2: case 3: - temp2 = sub_8095350(); + newMailCount = CountAllMail(); sub_80310B4(); - if(temp2 != gUnknown_203B2C0->unk540) + if(newMailCount != gUnknown_203B2C0->mailCount) { - sub_8028B04(23); + SetFriendRescueCounterState(0x17); } else { - sub_8028B04(25); + SetFriendRescueCounterState(0x19); } break; default: @@ -939,43 +962,31 @@ void sub_8028D4C() { case 5: if(HasNoWonderMailType(2)) - { - sub_8028B04(12); - } + SetFriendRescueCounterState(NO_SOS_MAIL); else - { - sub_8028B04(13); - } + SetFriendRescueCounterState(0xD); break; case 6: if(HasNoWonderMailType(WONDER_MAIL_TYPE_AOK)) - { - sub_8028B04(14); - } + SetFriendRescueCounterState(NO_AOK_MAIL); else - { - sub_8028B04(15); - } + SetFriendRescueCounterState(0xF); break; case 7: if(HasNoWonderMailType(WONDER_MAIL_TYPE_NONE)) - { - sub_8028B04(16); - } + SetFriendRescueCounterState(NO_MAIL); else - { - sub_8028B04(17); - } + SetFriendRescueCounterState(0x11); break; case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: break; } } -void sub_8028DE8(u32 r0) +void sub_8028DE8(u32 newState) { s32 temp; @@ -983,7 +994,7 @@ void sub_8028DE8(u32 r0) { return; } - sub_8028B04(r0); + SetFriendRescueCounterState(newState); } void sub_8028E08() @@ -994,7 +1005,7 @@ void sub_8028E08() { return; } - sub_8028B04(18); + SetFriendRescueCounterState(PROMPT_DELETE_ALL_MAIL); } void sub_8028E24() @@ -1008,10 +1019,10 @@ void sub_8028E24() switch(temp) { case 8: - sub_8028B04(19); + SetFriendRescueCounterState(CONFIRM_DELETE_ALL_MAIL_1); break; case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: break; @@ -1029,10 +1040,10 @@ void sub_8028E54() switch(temp) { case 8: - sub_8028B04(20); + SetFriendRescueCounterState(CONFIRM_DELETE_ALL_MAIL_2); break; case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: break; @@ -1047,7 +1058,7 @@ void sub_8028E84() { return; } - sub_8028B04(24); + SetFriendRescueCounterState(0x18); sub_8011C28(1); PrepareSavePakWrite(MONSTER_NONE); } @@ -1063,7 +1074,7 @@ void sub_8028EAC() if(!WriteSavePak()) { FinishWriteSavePak(); - sub_8028B04(25); + SetFriendRescueCounterState(0x19); } } @@ -1077,11 +1088,11 @@ void sub_8028ED4() } switch(temp){ case 8: - sub_8028B04(11); + SetFriendRescueCounterState(0xB); break; case 9: case 10: - sub_8028B04(2); + SetFriendRescueCounterState(FRIEND_RESCUE_EXIT_PRE); break; default: break; @@ -1097,9 +1108,9 @@ void sub_8028F04() { for(counter = 0; counter <= 31; counter++) { - sub_8095240(counter); + DeleteMailAtIndex(counter); } - sub_8028B04(21); + SetFriendRescueCounterState(DELETE_ALL_MAIL_SAVE_PRE); } } @@ -1111,7 +1122,7 @@ void sub_8028F30() { return; } - sub_8028B04(22); + SetFriendRescueCounterState(0x16); sub_8011C28(1); PrepareSavePakWrite(MONSTER_NONE); } @@ -1127,7 +1138,7 @@ void sub_8028F58() if(!WriteSavePak()) { FinishWriteSavePak(); - sub_8028B04(2); + SetFriendRescueCounterState(FRIEND_RESCUE_EXIT_PRE); } } @@ -1141,7 +1152,7 @@ void sub_8028F80() } sub_809927C(gUnknown_203B2C0->mailIndex); gUnknown_203B2C0->unk53C = 1; - sub_8028B04(3); + SetFriendRescueCounterState(FRIEND_RESCUE_COUNTER_EXIT); } void sub_8028FC0() @@ -1152,7 +1163,7 @@ void sub_8028FC0() { return; } - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); } void sub_8028FDC(void) @@ -1168,25 +1179,22 @@ void sub_8028FDC(void) { case 8: mail = sub_8095228(gUnknown_203B2C0->mailIndex); - if(sub_80A2824(mail->dungeon.id) == 0) + if(!sub_80A2824(mail->dungeon.id)) { - sub_8028B04(0x1C); + SetFriendRescueCounterState(CANT_GO_TO_DUNGEON); + } + else if(mail->rescuesAllowed <= 0) + { + SetFriendRescueCounterState(FRIEND_RESCUE_FAILED); } else { - if(mail->unk2C <= 0) - { - sub_8028B04(0x1D); - } - else - { - sub_8028B04(0x1B); - } + SetFriendRescueCounterState(0x1B); } break; case 9: case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: break; @@ -1199,11 +1207,11 @@ void sub_8029044(void) { case 2: sub_803084C(); - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; case 3: gUnknown_203B2C0->mailIndex = sub_80307EC(); - sub_8028B04(32); + SetFriendRescueCounterState(0x20); break; case 4: gUnknown_203B2C0->fallbackState = 0x1F; @@ -1212,7 +1220,7 @@ void sub_8029044(void) ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->mailIndex, 0); - sub_8028B04(33); + SetFriendRescueCounterState(0x21); break; } } @@ -1224,7 +1232,7 @@ void sub_80290D4(void) { return; } - sub_8028B04(31); + SetFriendRescueCounterState(0x1F); } void sub_80290F0(void) @@ -1240,21 +1248,21 @@ void sub_80290F0(void) { case 11: sub_803084C(); - sub_8028B04(34); + SetFriendRescueCounterState(0x22); break; case 12: - gUnknown_203B2C0->fallbackState = 0x3D; + gUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->mailIndex, 0); - sub_8028B04(33); + SetFriendRescueCounterState(0x21); break; case 4: case 10: sub_8035CC0(gUnknown_203B2C0->unk35C, 2); sub_8030810(1); - sub_8028B04(31); + SetFriendRescueCounterState(0x1F); break; default: break; @@ -1271,14 +1279,14 @@ void sub_80291AC(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_803092C(); - if(gUnknown_203B2C0->fallbackState == 0x3D) + if(gUnknown_203B2C0->fallbackState == DEFAULT_FALLBACK_STATE) { sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); - sub_8028B04(0x20); + SetFriendRescueCounterState(0x20); } else { - sub_8028B04(gUnknown_203B2C0->fallbackState); + SetFriendRescueCounterState(gUnknown_203B2C0->fallbackState); } default: break; @@ -1301,10 +1309,10 @@ void sub_8029208(void) switch(gUnknown_203B2C0->unk538) { case 0: - sub_8028B04(4); + SetFriendRescueCounterState(4); break; case 2: - sub_8028B04(0x30); + SetFriendRescueCounterState(0x30); break; default: return; @@ -1315,17 +1323,17 @@ void sub_8029208(void) switch(gUnknown_203B2C0->unk538) { case 0: - sub_8028B04(0x26); + SetFriendRescueCounterState(PROMPT_SOS_MAIL_PASSWORD); break; case 2: - sub_8028B04(0x3A); + SetFriendRescueCounterState(AOK_PASSWORD_DISPLAY); break; default: return; } break; case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } } @@ -1344,12 +1352,12 @@ void sub_80292A4(void) { case 0: case 2: - sub_8028B04(5); + SetFriendRescueCounterState(FRIEND_RESCUE_COMMUNICATING_PRE); break; } break; case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } } @@ -1366,17 +1374,17 @@ void sub_80292EC(void) switch(gUnknown_203B2C0->unk538) { case 0: - sub_8028B04(0x23); + SetFriendRescueCounterState(RECEIVED_FRIEND_SOS_MAIL); break; case 2: - sub_8028B04(0x37); + SetFriendRescueCounterState(SENT_AOK_MAIL); break; } } else { - sub_8028B1C(gUnknown_203B2C0->linkError); - sub_8028B04(0x7); + PrintFriendRescueCounterError(gUnknown_203B2C0->linkError); + SetFriendRescueCounterState(FRIEND_RESCUE_ERROR); } } @@ -1387,7 +1395,7 @@ void sub_802933C(void) { return; } - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); } void sub_8029358(void) @@ -1397,7 +1405,7 @@ void sub_8029358(void) { return; } - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); } void sub_8029374(void) @@ -1407,7 +1415,7 @@ void sub_8029374(void) { return; } - sub_8028B04(0x24); + SetFriendRescueCounterState(RECEIVED_FRIEND_SOS_MAIL_SAVE_PRE); sub_8011C28(1); PrepareSavePakWrite(MONSTER_NONE); } @@ -1426,11 +1434,11 @@ void sub_802939C(void) FinishWriteSavePak(); if(saveStatus == SAVE_COMPLETED) { - sub_8028B04(0x25); + SetFriendRescueCounterState(RECEIVED_FRIEND_SOS_MAIL_SAVE_COMPLETE); } else { - sub_8028B04(0x2); + SetFriendRescueCounterState(0x2); } } } @@ -1442,7 +1450,7 @@ void sub_80293D8(void) { return; } - sub_8028B04(0x27); + SetFriendRescueCounterState(0x27); } void sub_80293F4(void) @@ -1459,22 +1467,22 @@ void sub_80293F4(void) { case PASSWORD_ENTRY_INCORRECT_PASSWORD: sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile, 0xC); - sub_8028B04(40); + SetFriendRescueCounterState(0x28); break; case PASSWORD_ENTRY_NOT_SOS_MAIL: sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, &gUnknown_203B2C0->faceFile, 0x10d); - sub_8028B04(7); + SetFriendRescueCounterState(FRIEND_RESCUE_ERROR); break; case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL: sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->faceFile, 0x10d); - sub_8028B04(7); + SetFriendRescueCounterState(FRIEND_RESCUE_ERROR); break; case PASSWORD_ENTRY_SOS_MAIL_SUCCESS: sub_8095274(mail.unk10.unk10); mail.mailType = 2; sub_80951BC(&mail); sub_80141B4(gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->faceFile, 0x101); - sub_8028B04(35); + SetFriendRescueCounterState(0x23); break; case 23: case 24: @@ -1487,7 +1495,7 @@ void sub_80293F4(void) sub_80155F0(); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: break; @@ -1504,10 +1512,10 @@ void sub_802955C(void) switch(temp) { case 8: - sub_8028B04(0x26); + SetFriendRescueCounterState(PROMPT_SOS_MAIL_PASSWORD); break; case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } } @@ -1519,7 +1527,7 @@ void sub_802958C(void) { return; } - sub_8028B04(6); + SetFriendRescueCounterState(FRIEND_RESCUE_COMMUNICATING); } void sub_80295A8(void) @@ -1532,11 +1540,11 @@ void sub_80295A8(void) switch(temp) { case 8: - sub_8028B04(0x8); + SetFriendRescueCounterState(0x8); break; case 9: case 10: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } @@ -1548,11 +1556,11 @@ void sub_80295D8(void) { case 2: sub_803084C(); - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; case 3: gUnknown_203B2C0->mailIndex = sub_80307EC(); - sub_8028B04(0x2B); + SetFriendRescueCounterState(0x2B); break; case 4: gUnknown_203B2C0->fallbackState = 0x2A; @@ -1561,7 +1569,7 @@ void sub_80295D8(void) ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->mailIndex, 0); - sub_8028B04(0x2C); + SetFriendRescueCounterState(0x2C); break; } } @@ -1573,7 +1581,7 @@ void sub_8029668(void) { return; } - sub_8028B04(0x2A); + SetFriendRescueCounterState(0x2A); } void sub_8029684(void) @@ -1589,21 +1597,21 @@ void sub_8029684(void) { case 0xB: sub_803084C(); - sub_8028B04(0x2D); + SetFriendRescueCounterState(0x2D); break; case 0xC: - gUnknown_203B2C0->fallbackState = 0x3D; + gUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->mailIndex, 0); - sub_8028B04(0x2C); + SetFriendRescueCounterState(0x2C); break; case 0x4: case 0xA: sub_8035CC0(gUnknown_203B2C0->unk35C,2); sub_8030810(1); - sub_8028B04(0x2A); + SetFriendRescueCounterState(0x2A); break; } } @@ -1618,14 +1626,14 @@ void sub_8029740(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_803092C(); - if(gUnknown_203B2C0->fallbackState == 0x3D) + if(gUnknown_203B2C0->fallbackState == DEFAULT_FALLBACK_STATE) { sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); - sub_8028B04(0x2B); + SetFriendRescueCounterState(0x2B); } else { - sub_8028B04(gUnknown_203B2C0->fallbackState); + SetFriendRescueCounterState(gUnknown_203B2C0->fallbackState); } break; } @@ -1638,7 +1646,7 @@ void sub_802979C(void) { return; } - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); } void sub_80297B8(void) @@ -1648,7 +1656,7 @@ void sub_80297B8(void) { return; } - sub_8028B04(0x33); + SetFriendRescueCounterState(SELECT_HELPER_POKEMON); } void sub_80297D4(void) @@ -1657,21 +1665,21 @@ void sub_80297D4(void) { case 2: sub_8023C60(); - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); gUnknown_203B2C0->speciesNum = -1; break; case 3: gUnknown_203B2C0->speciesNum = sub_8023B44(); - sub_8028B04(0x34); + SetFriendRescueCounterState(0x34); break; case 4: - gUnknown_203B2C0->fallbackState = 0x33; + gUnknown_203B2C0->fallbackState = SELECT_HELPER_POKEMON; gUnknown_203B2C0->speciesNum = sub_8023B44(); sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8024458(gUnknown_203B2C0->speciesNum, 0); - sub_8028B04(0x35); + SetFriendRescueCounterState(0x35); break; } } @@ -1689,21 +1697,21 @@ void sub_8029884(void) { case 0xB: sub_8023C60(); - sub_8028B04(4); + SetFriendRescueCounterState(4); break; case 0xC: - gUnknown_203B2C0->fallbackState = 0x3D; + gUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8024458(gUnknown_203B2C0->speciesNum, 0); - sub_8028B04(0x35); + SetFriendRescueCounterState(0x35); break; case 0x4: case 0xA: sub_8035CC0(gUnknown_203B2C0->unk35C, 3); sub_8023B7C(1); - sub_8028B04(0x33); + SetFriendRescueCounterState(SELECT_HELPER_POKEMON); break; } } @@ -1727,14 +1735,14 @@ void sub_8029944(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_8023B7C(1); - if(gUnknown_203B2C0->fallbackState == 0x3D) + if(gUnknown_203B2C0->fallbackState == DEFAULT_FALLBACK_STATE) { sub_8035CF4(gUnknown_203B2C0->unk21C, 3, 1); - sub_8028B04(0x34); + SetFriendRescueCounterState(0x34); } else { - sub_8028B04(gUnknown_203B2C0->fallbackState); + SetFriendRescueCounterState(gUnknown_203B2C0->fallbackState); } } @@ -1750,10 +1758,10 @@ void sub_80299AC(void) switch(temp) { case 0x12: - sub_8028B04(4); + SetFriendRescueCounterState(4); break; case 0xA: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: break; @@ -1771,13 +1779,13 @@ void sub_80299D8(void) { case 8: - sub_8028B04(4); + SetFriendRescueCounterState(4); break; case 9: - sub_8028B04(0x32); + SetFriendRescueCounterState(PROMPT_SELECT_HELPER_POKEMON); break; case 0xA: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } } @@ -1794,18 +1802,18 @@ void sub_8029A18(void) case 0x11: if(sub_8024108(3) != 0) { - sub_8028B04(0x31); + SetFriendRescueCounterState(NO_POKEMON_IN_FRIEND_AREA); } else { - sub_8028B04(0x32); + SetFriendRescueCounterState(PROMPT_SELECT_HELPER_POKEMON); } break; case 0x12: - sub_8028B04(0x4); + SetFriendRescueCounterState(0x4); break; case 0xA: - sub_8028B04(1); + SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } } @@ -1817,7 +1825,7 @@ void sub_8029A6C(void) { return; } - sub_8028B04(0x2E); + SetFriendRescueCounterState(0x2E); } void sub_8029A88(void) @@ -1830,7 +1838,7 @@ void sub_8029A88(void) if(!WriteSavePak()) { FinishWriteSavePak(); - sub_8028B04(0x39); + SetFriendRescueCounterState(SENT_AOK_MAIL_SAVE_COMPLETE); } } @@ -1841,7 +1849,7 @@ void sub_8029AB0(void) { return; } - sub_8028B04(0x38); + SetFriendRescueCounterState(SENT_AOK_MAIL_SAVE_PRE); sub_8011C28(1); PrepareSavePakWrite(MONSTER_NONE); } @@ -1853,7 +1861,7 @@ void sub_8029AD8(void) { return; } - sub_8028B04(0x3B); + SetFriendRescueCounterState(0x3B); } void sub_8029AF4(void) @@ -1866,7 +1874,7 @@ void sub_8029AF4(void) sub_8031E10(); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); - sub_8028B04(0x3C); + SetFriendRescueCounterState(0x3C); break; case 1: sub_8031E00(); @@ -1881,5 +1889,5 @@ void sub_8029B34(void) { return; } - sub_8028B04(3); + SetFriendRescueCounterState(FRIEND_RESCUE_COUNTER_EXIT); } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 4c4b40e07..fef9a17c0 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -34,95 +34,6 @@ struct unkStruct_203B2C8 u32 fill13C; }; -struct unkStruct_203B2CC -{ - // size: 0xD4; - u8 receivedNewsletters[NUM_POKEMON_NEWS]; - - u32 unk38; - u8 fill3C[0x50 - 0x3C]; - - s16 unk50; - s16 unk52; - s16 unk54; - s16 unk56; - - u16 unk58; - u16 numPKMNNews; - - u8 fill5C[0x6C - 0x5C]; - - u32 unk6C; - - struct UnkTextStruct2 *unk70; - struct UnkTextStruct2 unk74[4]; -}; -extern struct unkStruct_203B2CC *gUnknown_203B2CC; - -struct unkStruct_203B2D4 -{ - // size: 0x94 - /* 0x0 */ s32 state; - /* 0x4 */ u8 currMailIndex; - s32 unk8; - s32 unkC; - const u8 *unk10[4]; - u32 unk20; - u32 unk24; - struct UnkTextStruct2 unk28[4]; - u32 unk88; - u8 fill8C[0x94 - 0x8C]; -}; -extern struct unkStruct_203B2D4 *gUnknown_203B2D4; - -struct unkStruct_203B2D8 -{ - // size: 0xA4 - u8 unk0[4]; - u32 unk4; - u8 fill8[0x1C - 0x8]; - s16 unk1C; - s16 unk1E; - s16 unk20; - s16 unk22; - s16 fill24; - /* 0x26 */ s16 emptyMailSlots; - u8 fill28[0x38 - 0x28]; - u32 unk38; - struct UnkTextStruct2 *unk3C; - struct UnkTextStruct2 unk40[4]; - u8 unkA0[4]; -}; -extern struct unkStruct_203B2D8 *gUnknown_203B2D8; - -extern struct GameOptions *gGameOptionsRef; - - -extern s32 GetNumPKMNNews(void); -extern void sub_802B880(void); -extern void sub_802B8D4(void); -extern void sub_8013818(void *, u32, u32, u32); -extern void sub_8012D08(struct UnkTextStruct2 *, s32); -extern void sub_8013984(u32 *); -extern u8 HasNoPKMNNews(void); -extern u8 CheckPKMNNewsSlot(u8 r0); -extern struct PokemonStruct *sub_808D3BC(void); -extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); -extern u16 gUnknown_203B2D0; -extern u16 gUnknown_203B2D2; -extern u16 gUnknown_203B2DC; -extern u8 sub_80138B8(void *, u32); -extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(u32 *); -extern void sub_8013660(u32 *); -extern void AddMenuCursorSprite(u32 *); - -extern void sub_802BB98(void); -extern void sub_802BC08(void); -extern void sub_802BB28(void); -extern void sub_8013E54(void); -extern s32 sub_8012A64(u32 *, u32); - extern struct unkStruct_203B2C8 *gUnknown_203B2C8; extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); @@ -148,26 +59,6 @@ extern void sub_803C37C(struct DungeonLocation *, u32, u8 *); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern bool8 sub_80023E4(u32); -extern void nullsub_131(void); -extern void sub_802ABF8(void); - -extern void sub_8008C54(u32); -extern void sub_80073B8(u32); -extern void sub_802BC7C(void); -extern void sub_80073E0(u32); -extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); -extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern void sub_803B6B0(u32, u32, u32, u32); -extern s32 sub_8013800(u32 *, s32); - -extern void sub_802BCC4(void); -extern void sub_802BB14(u32); -extern void sub_801317C(u32 *); -extern u8 HasNoMailinMailbox(void); -extern void sub_802BF30(void); -extern void CreateMailMenu(void); -extern s32 CountEmptyMailSlots(void); -extern void sub_8013848(u32 *, s32, u32, u32); ALIGNED(4) const char gRescueTeamNamePlaceholder[] = "????"; @@ -195,103 +86,6 @@ ALIGNED(4) const char gUnknown_80DFB14[] = _( ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0"; -const struct UnkTextStruct2 gUnknown_80DFBD0 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 }; - -const struct UnkTextStruct2 gUnknown_80DFBEC = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x00, 0x02, 0x00, - 0x18, 0x0E, - 0x0E, 0x00, - gUnknown_80DFBE8 -}; - -ALIGNED(4) const u8 gUnknown_80DFC04[] = "News List"; -ALIGNED(4) static const char wonder_mail_2_fill1[] = "pksdir0"; - -const struct UnkTextStruct2 gUnknown_80DFC18 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 }; - -const struct UnkTextStruct2 gUnknown_80DFC34 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x00, 0x02, 0x00, - 0x1A, 0x10, - 0x10, 0x00, - gUnkData_80DFC30 -}; - -ALIGNED(4) const u8 gUnknown_80DFC4C[] = "She"; -ALIGNED(4) const u8 gUnknown_80DFC50[] = "He"; -ALIGNED(4) static const char wonder_mail_2_fill2[] = "pksdir0"; - -const struct UnkTextStruct2 gUnknown_80DFC5C = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const struct UnkTextStruct2 gUnknown_80DFC74 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x00, 0x02, 0x00, - 0x18, 0x0E, - 0x0E, 0x00, - NULL -}; - -ALIGNED(4) const u8 gMailboxText[] = "Mailbox"; -ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0"; - -const struct UnkTextStruct2 gUnknown_80DFC9C = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const struct UnkTextStruct2 gUnknown_80DFCB4 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x00, 0x02, 0x00, - 0x18, 0x0E, - 0x0E, 0x00, - NULL -}; - -ALIGNED(4) const u8 gBulletinBoardText[] = "Bulletin Board"; -ALIGNED(4) static const char wonder_mail_2_fill4[] = "pksdir0"; - u32 sub_802B2D4(void) { s32 iVar1; @@ -477,532 +271,3 @@ void sub_802B624(void) sub_802B548(5); } } - -// Start of some Pokemon News related stuff -u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2) -{ - - if(HasNoPKMNNews()) - { - return 0; - } - else - { - if(gUnknown_203B2CC == NULL) - { - gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 8); - } - gUnknown_203B2CC->unk6C = r0; - gUnknown_203B2CC->unk70 = &gUnknown_203B2CC->unk74[r0]; - - sub_8006518(gUnknown_203B2CC->unk74); - - gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBEC; - - if(r1 != NULL) - { - gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C].unk08 = *r1; - } - - sub_8012D08(gUnknown_203B2CC->unk70, r2); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2CC->unk74, 1, 1); - - sub_8013818(&gUnknown_203B2CC->unk38, GetNumPKMNNews(), r2, r0); - - gUnknown_203B2CC->unk50 = gUnknown_203B2D0; - gUnknown_203B2CC->unk56 = gUnknown_203B2D2; - - sub_8013984(&gUnknown_203B2CC->unk38); - sub_802B880(); - sub_802B8D4(); - - return 1; - } -} - -u32 sub_802B720(u8 r0) -{ - if(r0 == 0) - { - sub_8013660(&gUnknown_203B2CC->unk38); - return 0; - } - else - { - switch(GetKeyPress(&gUnknown_203B2CC->unk38)) - { - case 2: - PlayMenuSoundEffect(1); - return 2; - case 1: - PlayMenuSoundEffect(0); - return 3; - case 4: - PlayMenuSoundEffect(4); - return 4; - } - if(sub_80138B8(&gUnknown_203B2CC->unk38, 1) != 0) - { - sub_802B880(); - sub_802B8D4(); - return 1; - } - else - return 0; - } -} - -u8 GetPokemonNewsIndex(void) -{ - return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50]; -} - -void sub_802B7D0(u8 r0) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2CC->unk74, 0, 0); - - gUnknown_203B2CC->numPKMNNews = GetNumPKMNNews(); - sub_8013984(&gUnknown_203B2CC->unk38); - sub_802B880(); - sub_802B8D4(); - - if(r0 != 0) - { - AddMenuCursorSprite(&gUnknown_203B2CC->unk38); - } -} - -void sub_802B81C(void) -{ - if(gUnknown_203B2CC != NULL) - { - gUnknown_203B2D0 = gUnknown_203B2CC->unk50; - - gUnknown_203B2D2 = gUnknown_203B2CC->unk56; - - gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBD0; - - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2CC->unk74, 1, 1); - - MemoryFree(gUnknown_203B2CC); - gUnknown_203B2CC = NULL; - } -} - -NAKED -void sub_802B880(void) -{ - asm_unified( - "\tpush {r4,lr}\n" - "\tldr r4, _0802B8D0\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x52\n" - "\tmovs r1, 0\n" - "\tldrsh r0, [r0, r1]\n" - "\tmovs r1, 0xC\n" - "\tbl sub_80095E4\n" - "\tadds r0, 0x2\n" - "\tlsls r0, 16\n" - "\tldr r2, [r4]\n" - "\tldr r3, [r2, 0x6C]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r1, r2, r1\n" - "\tadds r1, 0x82\n" - "\tasrs r3, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r2, 0x6C]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r2, r0\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x84\n" - "\tstrh r3, [r2]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x74\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"\t_0802B8D0: .4byte gUnknown_203B2CC"); -} - -void sub_802B8D4(void) -{ - s32 iVar2; - s32 y; - s32 new_index; - u8 mailIndex; - - - sub_8008C54(gUnknown_203B2CC->unk6C); - sub_80073B8(gUnknown_203B2CC->unk6C); - xxx_call_draw_string(0xA, 0, gUnknown_80DFC04, gUnknown_203B2CC->unk6C, 0); - sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C); - for(iVar2 = 0; iVar2 < gUnknown_203B2CC->unk52; iVar2++) - { - y = sub_8013800(&gUnknown_203B2CC->unk38, iVar2); - new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + iVar2; - mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index]; - sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C); - sub_802BC7C(); - xxx_format_and_draw(0x15, y, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0); - } - sub_80073E0(gUnknown_203B2CC->unk6C); -} - -s32 GetNumPKMNNews(void) -{ - s32 index; - s32 newsCount; - - newsCount = 0; - - for(index = 0; index < NUM_POKEMON_NEWS; index++) - { - if(CheckPKMNNewsSlot(index)) - { - gUnknown_203B2CC->receivedNewsletters[newsCount] = index; - newsCount++; - } - } - return newsCount; -} - -bool8 HasNoPKMNNews(void) -{ - s32 index; - - for(index = 0; index < NUM_POKEMON_NEWS; index++) - { - if(CheckPKMNNewsSlot(index)) - { - return FALSE; - } - } - return TRUE; -} - -u32 sub_802B9FC(u8 mailIndex) -{ - gUnknown_203B2D4 = MemoryAlloc(sizeof(struct unkStruct_203B2D4), 8); - gUnknown_203B2D4->currMailIndex = mailIndex; - sub_801317C(&gUnknown_203B2D4->unk88); - gUnknown_203B2D4->unk24 = 0; - gUnknown_203B2D4->unk28[0] = gUnknown_80DFC34; - gUnknown_203B2D4->unk28[1] = gUnknown_80DFC18; - gUnknown_203B2D4->unk28[2] = gUnknown_80DFC18; - gUnknown_203B2D4->unk28[3] = gUnknown_80DFC18; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D4->unk28, 1, 1); - gUnknown_203B2D4->unk8 = 0; - sub_802BCC4(); - sub_802BC7C(); - sub_802BB14(0); - return 1; -} - -u32 sub_802BA8C(void) -{ - switch(gUnknown_203B2D4->state) - { - case 0: - sub_802BB98(); - break; - case 1: - sub_802BC08(); - break; - case 3: - return 3; - case 2: - default: - return 2; - - } - return 0; -} - -void sub_802BACC(void) -{ - if(gUnknown_203B2D4 != NULL) - { - gUnknown_203B2D4->unk28[gUnknown_203B2D4->unk24] = gUnknown_80DFC18; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D4->unk28, 1, 1); - MemoryFree(gUnknown_203B2D4); - gUnknown_203B2D4 = NULL; - } -} - -void sub_802BB14(u32 newState) -{ - gUnknown_203B2D4->state = newState; - sub_802BB28(); -} - -void sub_802BB28(void) -{ - switch(gUnknown_203B2D4->state) - { - case 0: - case 1: - sub_8008C54(gUnknown_203B2D4->unk24); - sub_80073B8(gUnknown_203B2D4->unk24); - xxx_format_and_draw(0xA, 0, GetPokemonMailHeadline(gUnknown_203B2D4->currMailIndex), gUnknown_203B2D4->unk24, 0); - xxx_format_and_draw(0x6, 0x14, gUnknown_203B2D4->unk10[gUnknown_203B2D4->unk8], gUnknown_203B2D4->unk24, 0); - sub_80073E0(gUnknown_203B2D4->unk24); - gUnknown_203B2D4->unk8++; - break; - case 2: - case 3: - break; - } -} - -void sub_802BB98(void) -{ - if(gUnknown_203B2D4->unkC != 0) - { - if(gUnknown_203B2D4->unk20 & 8) - sub_8013E54(); - gUnknown_203B2D4->unk20++; - } - switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24)) - { - case 1: - PlayMenuSoundEffect(0); - if(gUnknown_203B2D4->unkC != 0) - sub_802BB14(1); - else - sub_802BB14(3); - break; - case 2: - PlayMenuSoundEffect(1); - sub_802BB14(2); - break; - } -} - -void sub_802BC08(void) -{ - if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC) - { - if(gUnknown_203B2D4->unk20 & 8) - sub_8013E54(); - gUnknown_203B2D4->unk20++; - } - switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24)) - { - case 1: - PlayMenuSoundEffect(0); - if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC) - sub_802BB14(1); - else - sub_802BB14(3); - break; - case 2: - PlayMenuSoundEffect(1); - sub_802BB14(2); - break; - } -} - -void sub_802BC7C(void) -{ - PrintPokeNameToBuffer(gAvailablePokemonNames, sub_808D3BC()); - if(gGameOptionsRef->playerGender == FEMALE) - { - strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC4C); // She - } - else - { - strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC50); // He - } -} - -void sub_802BCC4(void) -{ - const char *mailTextPtr; - - mailTextPtr = GetPokemonMailText(gUnknown_203B2D4->currMailIndex); - gUnknown_203B2D4->unkC = 0; - gUnknown_203B2D4->unk10[0] = mailTextPtr; - - // Count all the {EXTRA_MSG}'s - while (*mailTextPtr != '\0') { - if (*mailTextPtr == '#') { - if ((mailTextPtr[1] == 'P') || (mailTextPtr[1] == 'p')) { - gUnknown_203B2D4->unkC++; - gUnknown_203B2D4->unk10[gUnknown_203B2D4->unkC] = mailTextPtr + 2; - } - mailTextPtr += 2; - } - else { - mailTextPtr++; - } - } -} - -u32 sub_802BD14(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) -{ - - if (HasNoMailinMailbox()) { - return 0; - } - else - { - if (gUnknown_203B2D8 == NULL) { - gUnknown_203B2D8 = MemoryAlloc(sizeof(struct unkStruct_203B2D8),8); - } - gUnknown_203B2D8->unk38 = param_1; - gUnknown_203B2D8->unk3C = &gUnknown_203B2D8->unk40[param_1]; - sub_8006518(gUnknown_203B2D8->unk40); - gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC74; - gUnknown_203B2D8->unk3C->unk14 = gUnknown_203B2D8->unkA0; - if (param_2 != NULL) { - gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38].unk08 = *param_2; - } - sub_8012D34(gUnknown_203B2D8->unk3C,param_3); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D8->unk40,1,1); - sub_8013848(&gUnknown_203B2D8->unk4,CountEmptyMailSlots(),param_3,param_1); - gUnknown_203B2D8->unk1C = gUnknown_203B2DC; - sub_8013984(&gUnknown_203B2D8->unk4); - sub_802BF30(); - CreateMailMenu(); - return 1; - } -} - -u32 sub_802BDEC(u8 r0) -{ - if(r0 == 0) - { - sub_8013660(&gUnknown_203B2D8->unk4); - return 0; - } - switch(GetKeyPress(&gUnknown_203B2D8->unk4)) - { - case 2: - PlayMenuSoundEffect(1); - return 2; - case 1: - PlayMenuSoundEffect(0); - return 3; - case 4: - PlayMenuSoundEffect(4); - return 4; - default: - if(sub_80138B8(&gUnknown_203B2D8->unk4, 1) != 0) - { - sub_802BF30(); - CreateMailMenu(); - return 1; - } - else - return 0; - } -} - -u8 sub_802BE74(void) { - return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + gUnknown_203B2D8->unk1C]; -} - -void sub_802BE94(u8 r0) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D8->unk40, 0, 0); - - gUnknown_203B2D8->emptyMailSlots = CountEmptyMailSlots(); - sub_8013984(&gUnknown_203B2D8->unk4); - sub_802BF30(); - CreateMailMenu(); - - if(r0 != 0) - { - AddMenuCursorSprite(&gUnknown_203B2D8->unk4); - } -} - -void sub_802BEDC(void) -{ - if(gUnknown_203B2D8 != NULL) - { - gUnknown_203B2DC = gUnknown_203B2D8->unk1C; - gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D8->unk40, 1, 1); - MemoryFree(gUnknown_203B2D8); - gUnknown_203B2D8 = NULL; - } -} - -NAKED -void sub_802BF30(void) -{ - asm_unified( - "\tpush {r4,lr}\n" - "\tldr r4, _0802BF9C\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA0\n" - "\tmovs r2, 0\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA1\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA2\n" - "\tmovs r1, 0xC\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA3\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tmovs r1, 0x1E\n" - "\tldrsh r0, [r0, r1]\n" - "\tmovs r1, 0x18\n" - "\tbl sub_8009614\n" - "\tadds r0, 0x2\n" - "\tlsls r0, 16\n" - "\tldr r2, [r4]\n" - "\tldr r3, [r2, 0x38]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r1, r2, r1\n" - "\tadds r1, 0x4E\n" - "\tasrs r3, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r2, 0x38]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r2, r0\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x50\n" - "\tstrh r3, [r2]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x40\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0802BF9C: .4byte gUnknown_203B2D8" - ); -} diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 70664e93b..70aa44570 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -1,3 +1,4 @@ +#include "constants/input.h" #include "global.h" #include "constants/mailbox.h" #include "input.h" @@ -10,7 +11,7 @@ struct unkStruct_203B2E8 { // size: 0xA8 - u8 unk0[MAX_ACCEPTED_JOBS]; + u8 pelipperBoardSlots[MAX_ACCEPTED_JOBS]; u32 unk8; u8 fillC[0x20 - 0xC]; s16 unk20; @@ -146,7 +147,7 @@ extern void CreateRescueTitle(void *); extern void sub_8013984(u32 *); extern void sub_802C6DC(void); -extern void sub_802C750(void); +extern void DrawJobListMenu(void); extern void AddMenuCursorSprite(u32 *); extern u8 sub_80138B8(void *, u32); extern s32 GetKeyPress(void *); @@ -154,7 +155,7 @@ extern void PlayMenuSoundEffect(u32); extern void sub_8013660(void *); extern void sub_8013848(u32 *, s32, u32, u32); extern bool8 IsPelipperBoardSlotEmpty(u8); -extern void sub_802C910(u32); +extern void SetJobListState(u32); extern void sub_802CC00(void); extern void sub_802CC70(void); extern void sub_802CD38(void); @@ -167,7 +168,7 @@ extern void sub_802CBAC(void); s32 CountAcceptedJobs(void); bool8 HasNoAcceptedJobs(void); -s32 sub_802C474(void) +s32 CountPelipperBoardSlots(void) { s32 index; s32 counter = 0; @@ -175,14 +176,14 @@ s32 sub_802C474(void) { if(!IsPelipperBoardSlotEmpty(index)) { - gUnknown_203B2E0->unk0[counter] = index; + gUnknown_203B2E0->pelipperBoardSlots[counter] = index; counter++; } } return counter; } -bool8 sub_802C4A4(void) +bool8 HasNoPelipperBoardJobs(void) { s32 index; for(index = 0; index < MAX_ACCEPTED_JOBS; index++) @@ -218,7 +219,7 @@ bool8 sub_802C4C8(int param_1,struct UnkTextStruct2_sub *param_2,u32 param_3) gUnknown_203B2E8->unk20 = gUnknown_203B2EC; sub_8013984(&gUnknown_203B2E8->unk8); sub_802C6DC(); - sub_802C750(); + DrawJobListMenu(); return TRUE; } } @@ -232,20 +233,19 @@ u32 sub_802C598(u8 param_1) else { switch(GetKeyPress(&gUnknown_203B2E8->unk8)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; - break; } if (sub_80138B8(&gUnknown_203B2E8->unk8, 1) != '\0') { sub_802C6DC(); - sub_802C750(); + DrawJobListMenu(); return 1; } else { @@ -254,9 +254,9 @@ u32 sub_802C598(u8 param_1) } } -u8 sub_802C620(void) +u8 GetPelipperBoardSlotIndex(void) { - return gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + gUnknown_203B2E8->unk20]; + return gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + gUnknown_203B2E8->unk20]; } void sub_802C640(u8 r0) @@ -266,7 +266,7 @@ void sub_802C640(u8 r0) gUnknown_203B2E8->unk2A = CountAcceptedJobs(); sub_8013984(&gUnknown_203B2E8->unk8); sub_802C6DC(); - sub_802C750(); + DrawJobListMenu(); if(r0) AddMenuCursorSprite(&gUnknown_203B2E8->unk8); } @@ -344,7 +344,7 @@ void sub_802C6DC(void) } -void sub_802C750(void) +void DrawJobListMenu(void) { struct WonderMail *mail; int index; @@ -366,7 +366,7 @@ void sub_802C750(void) if(( index < gUnknown_203B2E8->unk22)) do { - mail = GetJobSlotInfo(gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + index]); + mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + index]); local.unk0[0] = gUnknown_203B2E8->unk3C; local.y = sub_8013800(&gUnknown_203B2E8->unk8,index); sub_803B35C(mail,local.unk0); @@ -384,7 +384,7 @@ s32 CountAcceptedJobs(void) { if(!IsJobSlotEmpty(index)) { - gUnknown_203B2E8->unk0[counter] = index; + gUnknown_203B2E8->pelipperBoardSlots[counter] = index; counter++; } } @@ -402,7 +402,7 @@ bool8 HasNoAcceptedJobs(void) return TRUE; } -bool8 sub_802C860(u32 r0) +bool8 InitializeJobListMenu(u32 r0) { if(HasNoAcceptedJobs()) { @@ -413,7 +413,7 @@ bool8 sub_802C860(u32 r0) gUnknown_203B2F0 = MemoryAlloc(sizeof(struct unkStruct_203B2F0), 0x8); gUnknown_203B2F0->unk68 = 0; gUnknown_203B2F0->unk0 = r0; - sub_802C910(0); + SetJobListState(0); return TRUE; } } @@ -451,7 +451,7 @@ void sub_802C8F4(void) } } -void sub_802C910(u32 newState) +void SetJobListState(u32 newState) { gUnknown_203B2F0->state = newState; sub_802C928(); @@ -494,12 +494,12 @@ void sub_802C9D8(void) sub_802C640(1); break; case 2: - sub_802C750(); + DrawJobListMenu(); sub_8012D60(&gUnknown_203B2F0->unk6C, gUnknown_203B2F0->unk10C, 0, 0, gUnknown_203B2F0->unk68, 2); break; case 3: sub_802CBAC(); - sub_802C750(); + DrawJobListMenu(); sub_8012EA4(&gUnknown_203B2F0->unk6C, 0); sub_8012D60(&gUnknown_203B2F0->unkBC, gUnknown_203B2F0->unk14C, 0, 0, 6, 3); break; diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 8f4db0157..84ae37cb5 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -13,15 +13,15 @@ bool8 IsMailSlotEmpty(u8); extern void sub_8013984(void *); extern void sub_8013848(u32 *, s32, u32, u32); -extern s32 sub_802C474(void); +extern s32 CountPelipperBoardSlots(void); extern void sub_802C328(void); -extern void sub_802C39C(void); +extern void DrawPelipperBoardJobMenu(void); extern void PlayMenuSoundEffect(u32); extern void sub_8013660(u32 *); extern s32 GetKeyPress(u32 *); extern bool8 sub_80138B8(u32 *, u32); extern void AddMenuCursorSprite(u32 *); -extern u8 sub_802C4A4(void); +extern u8 HasNoPelipperBoardJobs(void); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); @@ -68,7 +68,7 @@ struct unkStruct_203B2E0 s16 unk24; s16 unk26; s16 unk28; - s16 unk2A; + s16 pelipperBoardSlots; u8 fill22[0x3C - 0x2C]; s32 unk3C; struct UnkTextStruct2 *unk40; @@ -158,7 +158,7 @@ bool8 HasNoMailinMailbox(void) bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3) { - if (sub_802C4A4() != 0) { + if (HasNoPelipperBoardJobs() != 0) { return FALSE; } else @@ -178,11 +178,11 @@ bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3) sub_8012D34(gUnknown_203B2E0->unk40,param_3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E0->unk44,1,1); - sub_8013848(&gUnknown_203B2E0->unk8,sub_802C474(),param_3,param_1); + sub_8013848(&gUnknown_203B2E0->unk8,CountPelipperBoardSlots(),param_3,param_1); gUnknown_203B2E0->unk20 = gUnknown_203B2E4; sub_8013984(&gUnknown_203B2E0->unk8); sub_802C328(); - sub_802C39C(); + DrawPelipperBoardJobMenu(); return TRUE; } } @@ -208,7 +208,7 @@ u32 sub_802C1E4(u8 param_1) default: if (sub_80138B8(&gUnknown_203B2E0->unk8,1)) { sub_802C328(); - sub_802C39C(); + DrawPelipperBoardJobMenu(); return 1; } else { @@ -227,10 +227,10 @@ void sub_802C28C(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E0->unk44, 0, 0); - gUnknown_203B2E0->unk2A = sub_802C474(); + gUnknown_203B2E0->pelipperBoardSlots = CountPelipperBoardSlots(); sub_8013984(&gUnknown_203B2E0->unk8); sub_802C328(); - sub_802C39C(); + DrawPelipperBoardJobMenu(); if(r0) AddMenuCursorSprite(&gUnknown_203B2E0->unk8); } @@ -308,7 +308,7 @@ void sub_802C328(void) "_0802C398: .4byte gUnknown_203B2E0"); } -void sub_802C39C(void) +void DrawPelipperBoardJobMenu(void) { u32 slotIndex; struct WonderMail *mail; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index f6e97b5e8..b57dfa98f 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -10,6 +10,7 @@ #include "code_802C39C.h" #include "menu_input.h" + const struct UnkTextStruct2 gUnknown_80DFDD4 = { 0x00, 0x00, 0x00, 0x00, @@ -89,7 +90,7 @@ ALIGNED(4) const u8 gUnknown_80E0010[] = "a dungeon with a mission in progress.\n" "Mail cannot be deleted now."; -ALIGNED(4) const u8 gUnknown_80E0074[] = _( +ALIGNED(4) const u8 gReceivedWonderMail[] = _( "Received the {COLOR_1 LIGHT_BLUE_2}Wonder Mail{END_COLOR_TEXT_1}!"); ALIGNED(4) const u8 gUnknown_80E0094[] = _( @@ -118,7 +119,7 @@ extern void sub_802D940(); extern void sub_802D9F0(); extern void sub_802DA60(); extern void sub_802D82C(); -extern void sub_802DA84(); +extern void AdvancetoFallbackWonderMailRescueState(); extern void sub_802D1B8(); extern void sub_802D2A8(); @@ -129,8 +130,7 @@ extern u8 sub_802DAA8(void); extern u8 sub_802DADC(void); extern u8 *sub_8096DD8(void); extern u8 sub_8096C08(u8 *); -extern void sub_802C750(void); -extern void sub_802D1A0(u32); +extern void DrawJobListMenu(void); extern struct WonderMail* GetJobSlotInfo(u8); extern void sub_803B35C(void *, u32*); extern void sub_802DE84(u32 *); @@ -143,7 +143,7 @@ extern void sub_8096C80(void); extern void sub_8096D24(void); extern void sub_80141B4(const u8 *, u32, u32, u32); extern u8 *sub_8096DE8(void); -extern void sub_8096A78(struct unkSubStruct_203B2F8 *); +extern void AcceptJob(struct unkSubStruct_203B2F8 *); extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32); struct unkStruct_803B344 *sub_803B344(u8); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); @@ -188,32 +188,32 @@ void sub_802CFD0(void) sub_80073E0(gUnknown_203B2F4->unk34); } -u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1) +u32 sub_802D098(struct unkSubStruct_203B2F8 *mail) { gUnknown_203B2F8 = MemoryAlloc(0x208,8); gUnknown_203B2F8->unk6C = 0; gUnknown_203B2F8->unk70 = 0; gUnknown_203B2F8->unk74 = 0; - gUnknown_203B2F8->unkC = param_1; + gUnknown_203B2F8->mail = mail; gUnknown_203B2F8->wonderMailAccepted = FALSE; gUnknown_203B2F8->unk9 = sub_8099328(&gUnknown_203B2F8->dungeonID); if (sub_8011C1C() != 2) { gUnknown_203B2F8->unk9 = FALSE; } - sub_802D1A0(0); + sub_802D1A0(INITIAL_WONDER_MAIL_CHECK); return 1; } u32 sub_802D0E0(void) { switch(gUnknown_203B2F8->state) { - case 0: + case INITIAL_WONDER_MAIL_CHECK: break; case 1: sub_802D7D0(); break; - case 0xb: - case 0xc: + case DRAW_JOB_LIST: + case DRAW_JOB_LIST_1: sub_802D8CC(); break; case 0xd: @@ -229,10 +229,10 @@ u32 sub_802D0E0(void) case 9: sub_802D82C(); break; - case 2: + case WONDER_MAIL_EXIT: return 3; default: - sub_802DA84(); + AdvancetoFallbackWonderMailRescueState(); break; } return 0; @@ -261,7 +261,7 @@ void sub_802D1A0(u32 newState) void sub_802D1B8(void) { - s32 iVar2; + s32 index; sub_8006518(gUnknown_203B2F8->unk1A8); switch(gUnknown_203B2F8->state) { @@ -278,12 +278,12 @@ void sub_802D1B8(void) gUnknown_203B2F8->unk1A8[3].unkC = 6; break; default: - for(iVar2 = 0; iVar2 < 4; iVar2++) + for(index = 0; index < 4; index++) { - gUnknown_203B2F8->unk1A8[iVar2] = gUnknown_80DFDD4; + gUnknown_203B2F8->unk1A8[index] = gUnknown_80DFDD4; } break; - case 2: + case WONDER_MAIL_EXIT: break; } ResetUnusedInputStruct(); @@ -294,14 +294,14 @@ void sub_802D2A8(void) { switch(gUnknown_203B2F8->state) { - case 0: - if (IsMailinJobSlot(&gUnknown_203B2F8->unkC->wonderMail)) { - sub_802D1A0(3); + case INITIAL_WONDER_MAIL_CHECK: + if (IsMailinJobSlot(&gUnknown_203B2F8->mail->wonderMail)) { + sub_802D1A0(DUPLICATE_WONDER_MAIL); } - else if (sub_8096F50(&gUnknown_203B2F8->unkC->wonderMail) != 0) { - sub_802D1A0(4); + else if (sub_8096F50(&gUnknown_203B2F8->mail->wonderMail) != 0) { + sub_802D1A0(DUPLICATE_WONDER_MAIL_1); } - else if ((gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->jobSlotIndex) != 0)) { + else if ((gUnknown_203B2F8->mail->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->jobSlotIndex) != 0)) { if (sub_802DAA8() != 0) { sub_802D1A0(9); } @@ -311,49 +311,49 @@ void sub_802D2A8(void) } else if (GetNumAcceptedJobs() >= MAX_ACCEPTED_JOBS) { if (sub_802DADC() != 0) { - sub_802D1A0(10); + sub_802D1A0(JOB_LIST_FULL); } else { sub_802D1A0(6); } } else - sub_802D1A0(8); + sub_802D1A0(RECEIVE_WONDER_MAIL); break; case 1: sub_802D73C(); sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0); break; - case 3: - gUnknown_203B2F8->fallbackState = 2; + case DUPLICATE_WONDER_MAIL: + gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT; sub_80141B4(gUnknown_80DFE9C,0,0,0x101); break; - case 4: - gUnknown_203B2F8->fallbackState = 2; + case DUPLICATE_WONDER_MAIL_1: + gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT; sub_80141B4(gUnknown_80DFED0,0,0,0x101); break; case 5: - gUnknown_203B2F8->fallbackState = 2; + gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT; sub_80141B4(gUnknown_80DFF2C,0,0,0x101); break; case 6: - gUnknown_203B2F8->fallbackState = 2; + gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT; sub_80141B4(gUnknown_80DFFA4,0,0,0x101); break; case 7: - gUnknown_203B2F8->fallbackState = 0xc; + gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; sub_80141B4(gUnknown_80E0010,0,0,0x101); break; - case 8: + case RECEIVE_WONDER_MAIL: gUnknown_203B2F8->wonderMailAccepted = TRUE; - sub_8096A78(gUnknown_203B2F8->unkC); + AcceptJob(gUnknown_203B2F8->mail); sub_8096C80(); sub_8096D24(); - if (gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) { - MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28); - MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78); + if (gUnknown_203B2F8->mail->wonderMail.unk2 == 4) { + MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->mail->unk14,0x28); + MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->mail->unk18,0x78); } - switch(gUnknown_203B2F8->unkC->wonderMail.dungeon.id) + switch(gUnknown_203B2F8->mail->wonderMail.dungeon.id) { // NOTE: subtract 1 from each of the case as the input?? case DUNGEON_ODDITY_CAVE: // 0x2B @@ -369,30 +369,30 @@ void sub_802D2A8(void) sub_8097418(0x2D, 1); break; } - gUnknown_203B2F8->fallbackState = 2; - sub_80141B4(gUnknown_80E0074,0,0,0x101); + gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT; + sub_80141B4(gReceivedWonderMail,0,0,0x101); break; case 9: sub_802D690(); sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0); break; - case 10: - gUnknown_203B2F8->fallbackState = 0xb; + case JOB_LIST_FULL: + gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST; sub_80141B4(gUnknown_80E0108,0,0,0x101); break; - case 0xb: + case DRAW_JOB_LIST: sub_802C4C8(0,0,4); break; - case 0xc: + case DRAW_JOB_LIST_1: sub_802C640(1); break; case 0xd: - sub_802C750(); + DrawJobListMenu(); sub_8012D60(&gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198, gUnknown_203B2F8->unk6C,2); break; case 0xe: - sub_802C750(); + DrawJobListMenu(); sub_8012EA4(&gUnknown_203B2F8->unk78,0); sub_8012D60(&gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3); break; @@ -402,10 +402,10 @@ void sub_802D2A8(void) sub_802DE84(&gUnknown_203B2F8->unk14); break; case 0x10: - sub_803B35C(gUnknown_203B2F8->unkC,&gUnknown_203B2F8->unk14); + sub_803B35C(gUnknown_203B2F8->mail,&gUnknown_203B2F8->unk14); gUnknown_203B2F8->unk14 = 3; gUnknown_203B2F8->unk58 = 0; - gUnknown_203B2F8->unk64 = gUnknown_203B2F8->unkC->unk18; + gUnknown_203B2F8->unk64 = gUnknown_203B2F8->mail->unk18; sub_802DE84(&gUnknown_203B2F8->unk14); break; } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index d5608e381..6578b2e67 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -1,3 +1,4 @@ +#include "constants/input.h" #include "global.h" #include "text.h" #include "input.h" @@ -140,13 +141,13 @@ u32 sub_8030768(u8 r0) } switch(GetKeyPress(&gUnknown_203B320->unk24)) { - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; default: diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 65db98e1e..0480f04fa 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -95,7 +95,6 @@ extern void sub_8030DE4(); extern void sub_8030810(u32); extern void sub_803092C(void); extern void sub_8030D40(u8, u32); -extern void sub_8095240(u8); bool8 sub_8030F58(u32 wonderMailType) { @@ -316,7 +315,7 @@ void sub_80313D8(u32 state) switch(state) { case 2: - sub_8095240(gUnknown_203B328->mailIndex); + DeleteMailAtIndex(gUnknown_203B328->mailIndex); break; case 3: for(index = 0; index < 0x20; index++) diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index 1e201dedc..0042fafef 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -128,7 +128,7 @@ extern u32 sub_802C598(s32); extern void sub_802C688(void); extern void sub_8096C80(void); extern void ResetJobSlot(u8); -extern u8 sub_802C620(void); +extern u8 GetPelipperBoardSlotIndex(void); void sub_802DE44(void); void sub_802DE60(void); @@ -149,17 +149,20 @@ void sub_802D7D0(void) gUnknown_203B2F8->unk70 = menuAction; } switch(menuAction) { + // Yes case 3: - sub_802D1A0(2); + sub_802D1A0(WONDER_MAIL_EXIT); break; + // New Mail case 6: gUnknown_203B2F8->fallbackState = 1; sub_802D1A0(0x10); break; + // No case 4: case 2: default: - sub_802D1A0(0); + sub_802D1A0(INITIAL_WONDER_MAIL_CHECK); break; } } @@ -174,19 +177,23 @@ void sub_802D82C(void) gUnknown_203B2F8->unk74 = menuAction; } switch(menuAction) { + // Yes case 3: ResetJobSlot(gUnknown_203B2F8->jobSlotIndex); sub_8096C80(); - sub_802D1A0(8); + sub_802D1A0(RECEIVE_WONDER_MAIL); break; + // New Mail case 6: gUnknown_203B2F8->fallbackState = 9; sub_802D1A0(0x10); break; + // Old Mail case 7: gUnknown_203B2F8->fallbackState = 9; sub_802D1A0(0xf); break; + // No default: case 1: case 2: @@ -204,12 +211,12 @@ void sub_802D8CC(void) case 1: break; case 3: - gUnknown_203B2F8->jobSlotIndex = sub_802C620(); + gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex(); sub_802D1A0(0xd); break; case 4: - gUnknown_203B2F8->jobSlotIndex = sub_802C620(); - gUnknown_203B2F8->fallbackState = 0xc; + gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex(); + gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; sub_802D1A0(0xf); break; case 2: @@ -232,21 +239,23 @@ void sub_802D940(void) switch(menuAction) { + // Delete case 2: if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > 5) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id))) { - sub_802D1A0(0x7); + sub_802D1A0(7); } else { sub_802D1A0(0xE); } break; + // Info case 5: - gUnknown_203B2F8->fallbackState = 0xc; + gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; sub_802D1A0(0xf); break; case 1: - sub_802D1A0(0xc); + sub_802D1A0(DRAW_JOB_LIST_1); break; } } @@ -264,15 +273,17 @@ void sub_802D9F0(void) switch(menuAction) { + // No case 1: case 4: - sub_802D1A0(0xc); + sub_802D1A0(DRAW_JOB_LIST_1); break; + // Yes case 3: sub_802C688(); ResetJobSlot(gUnknown_203B2F8->jobSlotIndex); sub_8096C80(); - sub_802D1A0(8); + sub_802D1A0(RECEIVE_WONDER_MAIL); break; } } @@ -292,7 +303,7 @@ void sub_802DA60(void) } } -void sub_802DA84(void) +void AdvancetoFallbackWonderMailRescueState(void) { s32 temp; if(sub_80144A4(&temp) == 0) diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 7afb08f87..127a59442 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -413,7 +413,7 @@ gUnknown_203B300: /* 203B300 */ gUnknown_203B304: /* 203B304 */ .space 0x4 -gUnknown_203B308: /* 203B308 */ +gPelipperBoard: /* 203B308 */ .space 0x4 gUnknown_203B30C: /* 203B30C */ From 155d4e9f0d04e1e4f4ab822819704b66470a1a9c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 31 Mar 2023 09:20:45 -0700 Subject: [PATCH 02/11] minor: label a few more funcs --- asm/friend_rescue.s | 2 +- asm/other_menus.s | 14 +++++++------- include/code_8094F88.h | 6 +++--- src/code_2.c | 4 ++-- src/code_8095824.c | 8 +++++--- src/friend_rescue_1.c | 8 ++++---- src/rescue_password_menu.c | 10 +++++----- src/thank_you_wonder_mail.c | 18 +++++++++--------- 8 files changed, 36 insertions(+), 34 deletions(-) diff --git a/asm/friend_rescue.s b/asm/friend_rescue.s index 86e3f714a..bd0ab3acc 100644 --- a/asm/friend_rescue.s +++ b/asm/friend_rescue.s @@ -1417,7 +1417,7 @@ _0803349C: adds r0, r5 ldr r1, [r0] movs r0, 0x6 - bl sub_809539C + bl GetMailIndex lsls r0, 24 lsrs r0, 24 bl sub_8095228 diff --git a/asm/other_menus.s b/asm/other_menus.s index 2f73a6873..0f50504ce 100644 --- a/asm/other_menus.s +++ b/asm/other_menus.s @@ -1360,7 +1360,7 @@ sub_8037EBC: _08037ED0: ldr r1, [r5, 0x10] movs r0, 0x1 - bl sub_809539C + bl GetMailIndex lsls r0, 24 lsrs r0, 24 bl sub_8095228 @@ -1431,7 +1431,7 @@ sub_8037F4C: _08037F5E: ldr r1, [r4, 0x10] movs r0, 0x4 - bl sub_809539C + bl GetMailIndex lsls r0, 24 lsrs r0, 24 bl sub_8095228 @@ -1596,7 +1596,7 @@ _0803809C: _080380A2: movs r0, 0x4 adds r1, r6, 0 - bl sub_80952F0 + bl HasMail lsls r0, 24 cmp r0, 0 beq _080380BA @@ -1628,19 +1628,19 @@ _080380D8: ldr r4, [r5, 0x10] movs r0, 0x2 adds r1, r4, 0 - bl sub_80952F0 + bl HasMail lsls r0, 24 cmp r0, 0 bne _08038110 movs r0, 0x4 adds r1, r4, 0 - bl sub_80952F0 + bl HasMail lsls r0, 24 cmp r0, 0 bne _08038110 movs r0, 0x6 adds r1, r4, 0 - bl sub_80952F0 + bl HasMail lsls r0, 24 cmp r0, 0 bne _08038110 @@ -1681,7 +1681,7 @@ sub_803812C: _0803813E: ldr r1, [r4, 0x10] movs r0, 0x1 - bl sub_80952F0 + bl HasMail lsls r0, 24 cmp r0, 0 bne _08038150 diff --git a/include/code_8094F88.h b/include/code_8094F88.h index e4a4b6e77..744425187 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -43,12 +43,12 @@ void DeleteMailAtIndex(u8 index); void sub_8095274(u32 param_1); bool8 sub_8095298(s32 param_1); void sub_80952C4(void); -bool8 sub_80952F0(u8 mailType, u32 param_2); +bool8 HasMail(u8 mailType, u32 param_2); s32 CountMailType(u8 mailType); u32 CountAllMail(void); s32 sub_8095374(void); -s32 sub_809539C(u8 mailType, u32 param_2); -s32 sub_80953D4(u8 mailType); +s32 GetMailIndex(u8 mailType, u32 param_2); +s32 GetFirstIndexofMailType(u8 mailType); #endif diff --git a/src/code_2.c b/src/code_2.c index feb41013a..b1c66909b 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -42,7 +42,7 @@ extern void sub_800CDA8(u32); extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); extern void sub_80095CC(u32, u32); -extern s32 sub_80953D4(u8); +extern s32 GetFirstIndexofMailType(u8); extern void nullsub_33(void); extern u32 sub_80009D0(u32); @@ -174,7 +174,7 @@ void GameLoop(void) CloseFile(gTitlePaletteFile); switch (nextMenu) { case 2: { - s32 mailIndex = sub_80953D4(7); + s32 mailIndex = GetFirstIndexofMailType(7); if (mailIndex != -1) { DeleteMailAtIndex(mailIndex); tmp3 = sub_80009D0(2); diff --git a/src/code_8095824.c b/src/code_8095824.c index b46bb19c8..8f0056a60 100644 --- a/src/code_8095824.c +++ b/src/code_8095824.c @@ -95,7 +95,7 @@ void sub_80952C4(void) } } -bool8 sub_80952F0(u8 mailType, u32 param_2) +bool8 HasMail(u8 mailType, u32 param_2) { struct unkStruct_203B480 *ptr; s32 index; @@ -146,7 +146,8 @@ s32 sub_8095374(void) return retvar; } -s32 sub_809539C(u8 mailType, u32 param_2) +/* With mailType and (additonal data??), search mail and return exact index */ +s32 GetMailIndex(u8 mailType, u32 param_2) { struct unkStruct_203B480 *ptr; s32 index; @@ -158,7 +159,8 @@ s32 sub_809539C(u8 mailType, u32 param_2) return -1; } -s32 sub_80953D4(u8 mailType) +/* Return the index of the first mail of the requested type */ +s32 GetFirstIndexofMailType(u8 mailType) { struct unkStruct_203B480 *ptr; s32 index; diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 2dc55973f..b26a77de2 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -724,7 +724,7 @@ void sub_8033DBC(void) case PASSWORD_ENTRY_AOK_MAIL_SUCCESS: mail.mailType = 5; sub_80951FC(&mail); - mail2 = sub_8095228(sub_809539C(1, mail.unk10.unk10)); + mail2 = sub_8095228(GetMailIndex(1, mail.unk10.unk10)); mail2->mailType = 7; MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); SetFriendRescueMenuState(0x40); @@ -1592,7 +1592,7 @@ void sub_8034D74(void) SetFriendRescueMenuState(0x6B); break; case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: - mail2 = sub_8095228(sub_809539C(4, mail.unk10.unk10)); + mail2 = sub_8095228(GetMailIndex(4, mail.unk10.unk10)); *mail2 = mail; mail2->mailType = 6; gUnknown_203B33C->unk420 = mail.unk10.unk10; @@ -1893,7 +1893,7 @@ void sub_8035210(void) case 0xD: if(gUnknown_203B33C->unk528 == 0x13) { - mail = sub_8095228(sub_80953D4(5)); + mail = sub_8095228(GetFirstIndexofMailType(5)); if(mail->unk20.id != ITEM_NOTHING) SetFriendRescueMenuState(0x53); else @@ -1940,7 +1940,7 @@ void sub_80352A4(void) CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER); monName = GetMonSpecies(MONSTER_PELIPPER); strcpy(gAvailablePokemonNames, monName); - mailIndex = sub_809539C(6, gUnknown_203B33C->unk420); + mailIndex = GetMailIndex(6, gUnknown_203B33C->unk420); DeleteMailAtIndex(mailIndex); SetFriendRescueMenuState(0x70); } diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 08da6d89b..75e185188 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -244,7 +244,7 @@ s32 UpdateRescuePasswordMenu(void) nextMenu = MENU_NO_SCREEN_CHANGE; local_44.mailType = 5; sub_80951FC(&local_44); - puVar5 = sub_8095228(sub_809539C(1, local_44.unk10.unk10)); + puVar5 = sub_8095228(GetMailIndex(1, local_44.unk10.unk10)); puVar5->mailType = WONDER_MAIL_TYPE_OKD; MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); break; @@ -264,7 +264,7 @@ s32 UpdateRescuePasswordMenu(void) DisplayPasswordAcceptScreen(); gRescuePasswordMenu->state = 9; nextMenu = MENU_NO_SCREEN_CHANGE; - puVar6 = sub_8095228(sub_809539C(4, local_44.unk10.unk10)); + puVar6 = sub_8095228(GetMailIndex(4, local_44.unk10.unk10)); *puVar6 = local_44; puVar6->mailType = 6; iVar9 = GetMainMenu(); @@ -461,7 +461,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para if (param_3->mailType != WONDER_MAIL_TYPE_SOS) { return PASSWORD_ENTRY_NOT_SOS_MAIL; } - else if ( (sub_80952F0(2, param_3->unk10.unk10)) || (sub_80952F0(WONDER_MAIL_TYPE_AOK, param_3->unk10.unk10)) || (sub_80952F0(WONDER_MAIL_TYPE_COMPLETED, param_3->unk10.unk10)) || (sub_8095298(param_3->unk10.unk10))) { + else if ( (HasMail(2, param_3->unk10.unk10)) || (HasMail(WONDER_MAIL_TYPE_AOK, param_3->unk10.unk10)) || (HasMail(WONDER_MAIL_TYPE_COMPLETED, param_3->unk10.unk10)) || (sub_8095298(param_3->unk10.unk10))) { return PASSWORD_ENTRY_DUPLICATE_SOS_MAIL; } else if (FindOpenMailSlot() == -1) { @@ -475,7 +475,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para if (param_3->mailType != WONDER_MAIL_TYPE_AOK) { return PASSWORD_ENTRY_NOT_AOK_MAIL; } - else if (!sub_80952F0(1, param_3->unk10.unk10)) { + else if (!HasMail(1, param_3->unk10.unk10)) { return PASSWORD_ENTRY_DUPLICATE_AOK_MAIL; } else { @@ -486,7 +486,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para if (param_3->mailType != WONDER_MAIL_TYPE_THANK_YOU) { return PASSWORD_ENTRY_NOT_THANK_YOU_MAIL; } - else if ((!sub_80952F0(4, param_3->unk10.unk10)) || (param_3->unk28 != sub_8011C34())) { + else if ((!HasMail(4, param_3->unk10.unk10)) || (param_3->unk28 != sub_8011C34())) { return PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL; } else { diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 8924503d0..19acf94be 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -285,7 +285,7 @@ u32 CreateThankYouMailPelipper(void) gUnknown_203B2C4->wonderMailMethod = WONDER_MAIL_GAME_LINK; gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_SEND; - index = sub_80953D4(6); + index = GetFirstIndexofMailType(6); if (index != -1) { mail = sub_8095228(index); gUnknown_203B2C4->unk41C = mail->unk20; @@ -815,7 +815,7 @@ void AdvanceToThankYouPasswordProcessing(void) void HandleThankYouMailPasswordMenu(void) { - u8 uVar1; + u8 mailIndex; struct unkStruct_203B480 *mail; u32 return_var; struct unkStruct_203B480 mail1; @@ -840,8 +840,8 @@ void HandleThankYouMailPasswordMenu(void) SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR); break; case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS: - uVar1 = sub_809539C(4,mail1.unk10.unk10); - mail = sub_8095228(uVar1); + mailIndex = GetMailIndex(4,mail1.unk10.unk10); + mail = sub_8095228(mailIndex); *mail = mail1; mail->mailType = 6; gUnknown_203B2C4->unk430 = mail1.unk10.unk10; @@ -1143,7 +1143,7 @@ void HandleMailCommunicationMenu(void) switch(gUnknown_203B2C4->wonderMailMode) { case WONDER_MAIL_MODE_SEND: - mail = sub_8095228(sub_80953D4(WONDER_MAIL_TYPE_THANK_YOU)); + mail = sub_8095228(GetFirstIndexofMailType(WONDER_MAIL_TYPE_THANK_YOU)); if(mail->unk20.id != ITEM_NOTHING) { SetThankYouMailMenuState(ITEM_EXISTS_ON_THANK_YOU_MAIL); @@ -1250,7 +1250,7 @@ void sub_802AB98(void) CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER); monName = GetMonSpecies(MONSTER_PELIPPER); strcpy(gAvailablePokemonNames, monName); - DeleteMailAtIndex(sub_809539C(6, gUnknown_203B2C4->unk430)); + DeleteMailAtIndex(GetMailIndex(6, gUnknown_203B2C4->unk430)); SetThankYouMailMenuState(0x24); break; default: @@ -1268,7 +1268,7 @@ void UpdateThankYouMailText(void) char *monName; u8 buffer1 [80]; u8 buffer2 [80]; - u8 uVar2; + u8 mailIndex; struct PokemonStruct *pokeStruct; struct PokemonStruct *pokeStruct2; s32 linkStatus; @@ -1407,8 +1407,8 @@ void UpdateThankYouMailText(void) gUnknown_203B2C4->unk53C.unk14 = MONSTER_PELIPPER; // 0x550 gUnknown_203B2C4->unk53C.unk16 = 2; // 0x552 gUnknown_203B2C4->unk53C.moneyReward = 0; // 0x554 - uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430); - mail = sub_8095228(uVar2); + mailIndex = GetMailIndex(6,gUnknown_203B2C4->unk430); + mail = sub_8095228(mailIndex); itemIndex = mail->unk20.id; if (itemIndex != ITEM_NOTHING) gUnknown_203B2C4->unk53C.itemRewards[0] = itemIndex; // unk558 From f9ef7a58f321bff3041fa17f1528e8e871bfb8b4 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 2 Apr 2023 11:04:53 -0700 Subject: [PATCH 03/11] minor: more documentation and work --- src/code_801D760.c | 10 +-- src/friend_list_menu_1.c | 20 +++--- src/wonder_mail.c | 85 +++++++++++------------ src/wonder_mail_2_1.c | 6 +- src/wonder_mail_2_mid.c | 3 +- src/wonder_mail_3.c | 2 +- src/wonder_mail_3_mid.c | 137 +++++++++++++++++++------------------- src/wonder_mail_4.c | 2 +- src/wonder_mail_5.c | 2 +- src/wonder_mail_802DF88.c | 9 +-- 10 files changed, 138 insertions(+), 138 deletions(-) diff --git a/src/code_801D760.c b/src/code_801D760.c index 59063f118..cd94d33e3 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -107,13 +107,13 @@ struct unk_203B250 *gUnknown_203B250; void sub_801D680(void) { - int local_c; + int menuAction; - local_c = 0; - if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&local_c), local_c != 1)) { - gUnknown_203B250->unk14 = local_c; + menuAction = 0; + if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) { + gUnknown_203B250->unk14 = menuAction; } - switch(local_c) { + switch(menuAction) { case 2: sub_801D208(3); break; diff --git a/src/friend_list_menu_1.c b/src/friend_list_menu_1.c index 19f1ae683..e44eafca8 100644 --- a/src/friend_list_menu_1.c +++ b/src/friend_list_menu_1.c @@ -17,7 +17,7 @@ struct unkStruct_203B2B4 // size: 0x178 s32 unk0; s32 state; - u32 unk8; + u32 fallbackState; u8 unkC; u8 unkD; s16 species; @@ -97,7 +97,7 @@ bool8 sub_80252F0(s32 param_1) return FALSE; } else { - gUnknown_203B2B4 = MemoryAlloc(0x178,8); + gUnknown_203B2B4 = MemoryAlloc(sizeof(struct unkStruct_203B2B4),8); gUnknown_203B2B4->unk70 = 0; gUnknown_203B2B4->unk0 = param_1; gUnknown_203B2B4->unkC = sub_8002658(sub_80A5728()); @@ -180,7 +180,7 @@ void sub_8025434(s32 newState) void sub_802544C(void) { - s32 iVar5; + s32 index; sub_8006518(gUnknown_203B2B4->unk118); @@ -200,9 +200,9 @@ void sub_802544C(void) sub_8012CAC(&gUnknown_203B2B4->unk118[2],gUnknown_203B2B4->unkC8); break; default: - for(iVar5 = 0; iVar5 < 4; iVar5++) + for(index = 0; index < 4; index++) { - gUnknown_203B2B4->unk118[iVar5] = gUnknown_80DD148; + gUnknown_203B2B4->unk118[index] = gUnknown_80DD148; } break; @@ -219,7 +219,7 @@ void sub_8025518(void) switch(gUnknown_203B2B4->state) { case 0: - gUnknown_203B2B4->unk8 = 1; + gUnknown_203B2B4->fallbackState = 1; sub_80141B4(gUnknown_80DD1A8,0,0,0x301); break; case 1: @@ -262,19 +262,19 @@ void sub_8025518(void) sub_801B3C0(&item); break; case 8: - gUnknown_203B2B4->unk8 = 2; + gUnknown_203B2B4->fallbackState = 2; sub_80141B4(gUnknown_80DD1C8,0,0,0x101); break; case 9: - gUnknown_203B2B4->unk8 = 2; + gUnknown_203B2B4->fallbackState = 2; sub_80141B4(gUnknown_80DD1EC,0,0,0x101); break; case 10: - gUnknown_203B2B4->unk8 = 2; + gUnknown_203B2B4->fallbackState = 2; sub_80141B4(gUnknown_80DD240,0,0,0x101); break; case 7: - gUnknown_203B2B4->unk8 = 1; + gUnknown_203B2B4->fallbackState = 1; PlaySound(0xcf); sub_80141B4(gUnknown_80DD270,0,0,0x101); break; diff --git a/src/wonder_mail.c b/src/wonder_mail.c index cebf0efde..cf45434a5 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -171,6 +171,7 @@ enum FriendRescueStates { RECEIVED_FRIEND_SOS_MAIL_SAVE_PRE = 0x24, RECEIVED_FRIEND_SOS_MAIL_SAVE_COMPLETE = 0x25, PROMPT_SOS_MAIL_PASSWORD = 0x26, + PROMPT_CHOOSE_AOK_MAIL = 0x29, NO_AOK_MAIL_TO_SEND = 0x2F, NO_POKEMON_IN_FRIEND_AREA = 0x31, PROMPT_SELECT_HELPER_POKEMON = 0x32, @@ -360,7 +361,7 @@ u32 sub_8028078(void) case 0x2d: sub_80295A8(); break; - case 0x29: + case PROMPT_CHOOSE_AOK_MAIL: sub_8029668(); break; case 0x2b: @@ -578,7 +579,7 @@ void sub_8028348(void) case 0x2D: sub_8014248(gUnknown_80DDDBC, 0, 8, gUnknown_80DDA64, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); break; - case 0x29: + case PROMPT_CHOOSE_AOK_MAIL: sub_80141B4(gUnknown_80DDDD8, 0, &gUnknown_203B2C0->faceFile,0x10d); break; case 0x2A: @@ -854,14 +855,14 @@ void PrintFriendRescueCounterError(u32 errorCode) void sub_8028BF0(void) { - u32 temp; - if(sub_80144A4(&temp) != 0) + u32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } gUnknown_203B2C0->unk40 = 8; gUnknown_203B2C0->speciesNum = -1; - switch(temp) + switch(menuChoice) { case 0: gUnknown_203B2C0->unk40 = 3; @@ -890,7 +891,7 @@ void sub_8028BF0(void) gUnknown_203B2C0->unk538 = 2; if(CountMailType(WONDER_MAIL_TYPE_AOK) != 0) { - SetFriendRescueCounterState(0x29); + SetFriendRescueCounterState(PROMPT_CHOOSE_AOK_MAIL); } else { @@ -951,13 +952,13 @@ void sub_8028CFC() void sub_8028D4C() { - s32 temp; + s32 menuChoice; - if(sub_80144A4(&temp) != 0) + if(sub_80144A4(&menuChoice) != 0) { return; } - gUnknown_203B2C0->unk538 = temp; + gUnknown_203B2C0->unk538 = menuChoice; switch(gUnknown_203B2C0->unk538) { case 5: @@ -1010,13 +1011,13 @@ void sub_8028E08() void sub_8028E24() { - s32 temp; + s32 menuChoice; - if(sub_80144A4(&temp) != 0) + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: SetFriendRescueCounterState(CONFIRM_DELETE_ALL_MAIL_1); @@ -1031,13 +1032,13 @@ void sub_8028E24() void sub_8028E54() { - s32 temp; + s32 menuChoice; - if(sub_80144A4(&temp) != 0) + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: SetFriendRescueCounterState(CONFIRM_DELETE_ALL_MAIL_2); @@ -1080,13 +1081,13 @@ void sub_8028EAC() void sub_8028ED4() { - s32 temp; + s32 menuChoice; - if(sub_80144A4(&temp) != 0) + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp){ + switch(menuChoice){ case 8: SetFriendRescueCounterState(0xB); break; @@ -1168,14 +1169,14 @@ void sub_8028FC0() void sub_8028FDC(void) { - s32 temp; + s32 menuChoice; struct unkStruct_203B480 *mail; - if(sub_80144A4(&temp) != 0) + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: mail = sub_8095228(gUnknown_203B2C0->mailIndex); @@ -1295,12 +1296,12 @@ void sub_80291AC(void) void sub_8029208(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 13: @@ -1340,12 +1341,12 @@ void sub_8029208(void) void sub_80292A4(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: switch(gUnknown_203B2C0->unk538) @@ -1504,12 +1505,12 @@ void sub_80293F4(void) void sub_802955C(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: SetFriendRescueCounterState(PROMPT_SOS_MAIL_PASSWORD); @@ -1532,12 +1533,12 @@ void sub_802958C(void) void sub_80295A8(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: SetFriendRescueCounterState(0x8); @@ -1750,12 +1751,12 @@ void sub_8029944(void) void sub_80299AC(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 0x12: SetFriendRescueCounterState(4); @@ -1770,12 +1771,12 @@ void sub_80299AC(void) void sub_80299D8(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 8: @@ -1792,12 +1793,12 @@ void sub_80299D8(void) void sub_8029A18(void) { - s32 temp; - if(sub_80144A4(&temp) != 0) + s32 menuChoice; + if(sub_80144A4(&menuChoice) != 0) { return; } - switch(temp) + switch(menuChoice) { case 0x11: if(sub_8024108(3) != 0) diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 70aa44570..d9199c857 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -19,7 +19,7 @@ struct unkStruct_203B2E8 s16 unk24; s16 unk26; u16 unk28; - u16 unk2A; + u16 acceptedJobs; u16 unk2C; u8 fill2E[0x3C - 0x2E]; u32 unk3C; @@ -143,7 +143,7 @@ extern struct WonderMail* GetJobSlotInfo(u8); extern s32 sub_8013800(void *, u32); extern void sub_803B35C(void *, u32 *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); -extern void CreateRescueTitle(void *); +extern void CreateRescueTitle(struct unkStruct_802C39C *); extern void sub_8013984(u32 *); extern void sub_802C6DC(void); @@ -263,7 +263,7 @@ void sub_802C640(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E8->unk44, 0, 0); - gUnknown_203B2E8->unk2A = CountAcceptedJobs(); + gUnknown_203B2E8->acceptedJobs = CountAcceptedJobs(); sub_8013984(&gUnknown_203B2E8->unk8); sub_802C6DC(); DrawJobListMenu(); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 84ae37cb5..51c83c228 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -31,7 +31,7 @@ extern struct WonderMail *GetPelipperBoardSlotInfo(u32); extern void sub_803B35C(struct WonderMail *, u32 *); extern u8 gBulletinBoardText[]; extern bool8 IsMailinJobSlot(struct WonderMail *); -extern void CreateRescueTitle(void *); +extern void CreateRescueTitle(struct unkStruct_802C39C *); extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32); @@ -83,7 +83,6 @@ extern struct UnkTextStruct2 gUnknown_80DFC9C; extern u16 gUnknown_203B2E4; extern struct WonderMail *GetMailboxSlotInfo(u8); -extern void CreateRescueTitle(void *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern u8 gMailboxText[]; extern u8 gAvailablePokemonNames[]; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index b57dfa98f..bad548ab3 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -150,7 +150,7 @@ extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void CreateRescueTitle(void *); +extern void CreateRescueTitle(struct unkStruct_802C39C *); extern s32 sub_8013800(void *, u32); extern u8 gUnknown_80DFDBC[]; diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index a3918e39c..330e53d26 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -10,6 +10,7 @@ #include "friend_area.h" #include "item.h" #include "menu_input.h" +#include "code_802C39C.h" struct unkStruct_803B344 { @@ -29,12 +30,7 @@ struct unkStruct_203B30C s32 state; u8 unk4; u8 unk5[3]; - u32 unk8; - u8 fillC[0x4C - 0xC]; - u8 unk4C; - u8 fill4D[0x58 - 0x4D]; - u8 *unk58; - u32 unk5C; + struct unkStruct_802C39C unk8; struct MenuStruct unk60; struct MenuItem unkB0[8]; struct UnkTextStruct2 unkF0[4]; @@ -98,6 +94,20 @@ struct unkStruct_203B314 extern struct unkStruct_203B314 *gUnknown_203B314; + +enum FriendRewardStates { + PREP_MONEY_REWARD = 0, + MONEY_REWARD = 1, + PREP_FRIEND_AREA_REWARD = 2, + UNLOCK_FRIEND_AREA = 3, + PREP_ITEM_REWARD = 4, + GIVE_ITEM_REWARD = 5, + NEXT_ITEM = 6, + TEAM_PNTS_REWARD = 7, + NEW_TEAM_RANK = 8, + REWARD_EXIT = 9, +}; + extern u8 sub_802FCF0(u32); extern void sub_802F9C0(void); extern void sub_802FA50(void); @@ -107,7 +117,7 @@ extern void sub_8013878(u32 *, s32); extern void AddMenuCursorSprite(u32 *); extern void sub_8013984(u32 *); -extern void sub_802F2E8(u32); +extern void SetRewardSceneState(u32); extern void sub_802EFEC(u32); extern void sub_802F148(void); extern void sub_802F184(void); @@ -118,8 +128,8 @@ extern void sub_801B72C(void); extern u32 sub_801B6AC(void); extern void sub_802F108(void); extern s32 sub_80144A4(s32 *); -extern void sub_803B35C(struct WonderMail*, u32 *); -extern void sub_802DE84(u32 *); +extern void sub_803B35C(struct WonderMail*, struct unkStruct_802C39C *); +extern void sub_802DE84(struct unkStruct_802C39C *); extern void sub_802CDD4(u32); extern void sub_802CED8(u32); extern void sub_802CFD0(void); @@ -322,7 +332,7 @@ void sub_802EFEC(u32 newState) void sub_802F004(void) { - s32 iVar3; + s32 index; sub_8006518(gUnknown_203B30C->unkF0); switch(gUnknown_203B30C->state) @@ -333,9 +343,9 @@ void sub_802F004(void) sub_8012CAC(&gUnknown_203B30C->unkF0[2], gUnknown_203B30C->unkB0); break; default: - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B30C->unkF0[iVar3] = gUnknown_80E03C4; + gUnknown_203B30C->unkF0[index] = gUnknown_80E03C4; } } ResetUnusedInputStruct(); @@ -361,9 +371,9 @@ void sub_802F088(void) case 3: temp = sub_803B344(gUnknown_203B30C->unk4); sub_803B35C(&temp->mail, &gUnknown_203B30C->unk8); - gUnknown_203B30C->unk8 = 3; - gUnknown_203B30C->unk4C = 0; - gUnknown_203B30C->unk58 = temp->unk18; + gUnknown_203B30C->unk8.unk0[0] = 3; + gUnknown_203B30C->unk8.unk44 = 0; + gUnknown_203B30C->unk8.unk50[0] = temp->unk18; sub_802DE84(&gUnknown_203B30C->unk8); } } @@ -446,7 +456,7 @@ void sub_802F1E8(void) -u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 r1) +u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 displayClientSprite) { struct unkStruct_203B310 *preload; @@ -455,7 +465,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 r1) gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8); gUnknown_203B310->unk10 = r0; gUnknown_203B310->itemRewardIndex = 0; - gUnknown_203B310->displayClientDialogueSprite = r1; + gUnknown_203B310->displayClientDialogueSprite = displayClientSprite; // NOTE: dumb var to get correct ordering preload = gUnknown_203B310; @@ -476,7 +486,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 r1) gUnknown_203B310->faceData = gUnknown_203B310->faceFile->data; } - sub_802F2E8(0); + SetRewardSceneState(PREP_MONEY_REWARD); return 1; } @@ -484,9 +494,9 @@ u32 sub_802F298(void) { switch(gUnknown_203B310->state) { - case 9: + case REWARD_EXIT: return 3; - case 5: + case GIVE_ITEM_REWARD: sub_802F6FC(); return 0; default: @@ -506,7 +516,7 @@ void sub_802F2C0(void) } } -void sub_802F2E8(u32 newState) +void SetRewardSceneState(u32 newState) { gUnknown_203B310->state = newState; sub_802F300(); @@ -515,14 +525,14 @@ void sub_802F2E8(u32 newState) void sub_802F300(void) { - s32 iVar3; + s32 index; switch(gUnknown_203B310->state) { - case 0: + case PREP_MONEY_REWARD: sub_8006518(gUnknown_203B310->unk24); - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B310->unk24[iVar3] = gUnknown_80E041C; + gUnknown_203B310->unk24[index] = gUnknown_80E041C; } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B310->unk24, 1, 1); @@ -540,24 +550,23 @@ void HandleMissionReward(void) struct Item item; switch(gUnknown_203B310->state) { - case 0: - // Reward intro.. + case PREP_MONEY_REWARD: moneyReward = gUnknown_203B310->unk10->moneyReward; if (moneyReward == 0) { - sub_802F2E8(2); + SetRewardSceneState(PREP_FRIEND_AREA_REWARD); } else { gUnknown_202DE30 = moneyReward; if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->nextState = 1; + gUnknown_203B310->nextState = MONEY_REWARD; } else { - sub_802F2E8(1); + SetRewardSceneState(MONEY_REWARD); } } break; - case 1: + case MONEY_REWARD: PlaySound(0xcb); AddToTeamMoney(gUnknown_203B310->unk10->moneyReward); if (sub_808D544(0) < 2) { @@ -566,26 +575,24 @@ void HandleMissionReward(void) else { sub_80141B4(gUnknown_80E0484,0,0,0x101); } - gUnknown_203B310->nextState = 2; + gUnknown_203B310->nextState = PREP_FRIEND_AREA_REWARD; break; - case 2: - if (gUnknown_203B310->unk10->friendAreaReward == '\0') { - // No friend area reward.. go to item reward - sub_802F2E8(4); + case PREP_FRIEND_AREA_REWARD: + if (gUnknown_203B310->unk10->friendAreaReward == 0) { + SetRewardSceneState(PREP_ITEM_REWARD); } else { sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0); if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->nextState = 3; + gUnknown_203B310->nextState = UNLOCK_FRIEND_AREA; } else { - sub_802F2E8(3); + SetRewardSceneState(UNLOCK_FRIEND_AREA); } } break; - case 3: - // Friend area reward + case UNLOCK_FRIEND_AREA: if (GetFriendAreaStatus(gUnknown_203B310->unk10->friendAreaReward)) { // We already have the friend area AddToTeamMoney(1000); @@ -605,9 +612,9 @@ void HandleMissionReward(void) sub_80141B4(gUnknown_80E05FC,0,0,0x101); } } - gUnknown_203B310->nextState = 4; + gUnknown_203B310->nextState = PREP_ITEM_REWARD; break; - case 4: + case PREP_ITEM_REWARD: itemID = gUnknown_203B310->unk10->itemRewards[0]; if (itemID != ITEM_NOTHING) { @@ -626,26 +633,24 @@ void HandleMissionReward(void) sub_8090E14(gUnknown_202DEA8,&item,&local_20); if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->nextState = 5; + gUnknown_203B310->nextState = GIVE_ITEM_REWARD; } else { - sub_802F2E8(5); + SetRewardSceneState(GIVE_ITEM_REWARD); } } else { - sub_802F2E8(5); + SetRewardSceneState(GIVE_ITEM_REWARD); } } else - sub_802F2E8(7); + SetRewardSceneState(TEAM_PNTS_REWARD); break; - case 5: - // Item reward + case GIVE_ITEM_REWARD: if ((gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex]) == 0) { - // No item in this reward slot - sub_802F2E8(6); + SetRewardSceneState(NEXT_ITEM); } else { if ((gUnknown_203B310->itemRewardIndex == 0) && (gUnknown_203B310->unk10->moneyReward == 0)) { @@ -656,47 +661,41 @@ void HandleMissionReward(void) } } break; - case 6: - // Increase item reward slot index + case NEXT_ITEM: gUnknown_203B310->itemRewardIndex++; if(gUnknown_203B310->itemRewardIndex < MAX_ITEM_REWARDS) - sub_802F2E8(5); + SetRewardSceneState(GIVE_ITEM_REWARD); else - // No more items to check... move to give points - sub_802F2E8(7); + SetRewardSceneState(TEAM_PNTS_REWARD); break; - case 7: + case TEAM_PNTS_REWARD: if (gUnknown_203B310->unk10->teamRankPtsReward == 0) { - // No pnts to reward - sub_802F2E8(9); + SetRewardSceneState(REWARD_EXIT); } else { gUnknown_203B310->currTeamRank = GetRescueTeamRank(); AddToTeamRankPts(gUnknown_203B310->unk10->teamRankPtsReward); PlaySound(0xcb); if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) { - // Rank up time - gUnknown_203B310->nextState = 8; + gUnknown_203B310->nextState = NEW_TEAM_RANK; } else { - // No rank up.. close out - gUnknown_203B310->nextState = 9; + gUnknown_203B310->nextState = REWARD_EXIT; } gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward; sub_80141B4(gUnknown_80E0670,0,0,0x101); } break; - case 8: - // Rank up + case NEW_TEAM_RANK: PlaySound(0xc9); - gUnknown_203B310->nextState = 9; + gUnknown_203B310->nextState = REWARD_EXIT; rankString = GetTeamRankString(gUnknown_203B310->currTeamRank); strcpy(gUnknown_202E038,rankString); rankString = GetTeamRankString(GetRescueTeamRank()); strcpy(gUnknown_202E038 + 0x50,rankString); sub_80141B4(gUnknown_80E06A8,0,0,0x101); break; - case 9: + case REWARD_EXIT: break; } } @@ -707,8 +706,8 @@ void sub_802F6FC(void) { case 2: case 3: - sub_801B72C(); - sub_802F2E8(6); + sub_801B72C(); + SetRewardSceneState(NEXT_ITEM); break; case 0: case 1: @@ -721,7 +720,7 @@ void sub_802F718(void) s32 temp; if (sub_80144A4(&temp) == 0) { - sub_802F2E8(gUnknown_203B310->nextState); + SetRewardSceneState(gUnknown_203B310->nextState); } } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 6578b2e67..f5f1c527f 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -101,7 +101,7 @@ extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void CreateRescueTitle(void *); +extern void CreateRescueTitle(struct unkStruct_802C39C *); u32 sub_80306A8(u32 wonderMailType, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3) { diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index bc06f252b..016db8b64 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -50,7 +50,7 @@ extern void sub_8030DD4(void); extern void sub_801317C(void *); extern void PlayMenuSoundEffect(u32); extern u32 sub_8012A64(void *, u32); -extern void CreateRescueDescription(void *); +extern void CreateRescueDescription(struct unkStruct_802C39C *); extern void xxx_call_draw_string(u32, u32, const char *, u32, u32); extern void sub_80073E0(u32); extern void sub_80073B8(u32); diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index 0042fafef..ebe144815 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -10,6 +10,7 @@ #include "wonder_mail_3.h" #include "code_80958E8.h" #include "menu_input.h" +#include "code_802C39C.h" struct unkStruct_203B2FC { @@ -40,7 +41,7 @@ struct unkStruct_203B300 { // size: 0x7C u8 fill0[0xC]; - u32 *unkC; + struct unkStruct_802C39C *unkC; u32 unk10; struct UnkTextStruct2 *unk14; struct UnkTextStruct2 unk18[4]; @@ -108,7 +109,7 @@ static const u8 wonder_mail_802DF88_fill1[] = "pksdir0"; extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern void CreateRescueDescription(u32 *); +extern void CreateRescueDescription(struct unkStruct_802C39C *); extern void PlayMenuSoundEffect(u32); extern s32 sub_8012A64(void *, u32); extern s32 sub_80144A4(s32 *); @@ -524,12 +525,12 @@ void sub_802DE60(void) } } -u32 sub_802DE84(u32 *r0) +u32 sub_802DE84(struct unkStruct_802C39C *r0) { gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8); gUnknown_203B300->unkC = r0; sub_801317C(); - gUnknown_203B300->unk10 = *gUnknown_203B300->unkC; + gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0]; gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10]; sub_8006518(gUnknown_203B300->unk18); gUnknown_203B300->unk18[gUnknown_203B300->unk10] = gUnknown_80E0264; From bdc4684e951e47a9e830707ce50ee83e81046a45 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 2 Apr 2023 11:11:09 -0700 Subject: [PATCH 04/11] minor: label another func --- src/wonder_mail_3_mid.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 330e53d26..94f063cce 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -141,7 +141,7 @@ extern void sub_802DF24(void); extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_802F6FC(void); -extern void sub_802F718(void); +extern void ProceedToNextRewardSceneState(void); extern u8 sub_80138B8(u32 *, u32); extern void sub_8013660(u32 *); extern u32 GetKeyPress(u32 *); @@ -500,7 +500,7 @@ u32 sub_802F298(void) sub_802F6FC(); return 0; default: - sub_802F718(); + ProceedToNextRewardSceneState(); return 0; } } @@ -715,7 +715,7 @@ void sub_802F6FC(void) } } -void sub_802F718(void) +void ProceedToNextRewardSceneState(void) { s32 temp; From 870de4e48260f8f5c55e4cce5e073f9500bedbfa Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 8 Apr 2023 19:38:28 -0700 Subject: [PATCH 05/11] decomp another func and document a few more fields in gDungeon --- asm/code_8045A00.s | 69 ----------------------------------- include/dungeon_global_data.h | 20 +++++++--- src/code_8045A00.c | 40 +++++++++++++++++++- 3 files changed, 54 insertions(+), 75 deletions(-) diff --git a/asm/code_8045A00.s b/asm/code_8045A00.s index 24d090565..dce697954 100644 --- a/asm/code_8045A00.s +++ b/asm/code_8045A00.s @@ -5,75 +5,6 @@ .text - thumb_func_start sub_8045C28 -sub_8045C28: - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r2, 0 - lsls r1, 24 - lsrs r4, r1, 24 - adds r1, r4, 0 - movs r2, 0 - bl xxx_init_itemslot_8090A8C - movs r7, 0 - adds r0, r4, 0 - bl IsNotSpecialItem - lsls r0, 24 - cmp r0, 0 - beq _08045C72 - cmp r6, 0 - bne _08045C6C - movs r0, 0x64 - bl DungeonRandInt - ldr r1, _08045C64 - ldr r1, [r1] - ldr r2, _08045C68 - adds r1, r2 - ldrb r1, [r1] - cmp r0, r1 - bge _08045C72 - b _08045C76 - .align 2, 0 -_08045C64: .4byte gDungeon -_08045C68: .4byte 0x0001c57e -_08045C6C: - cmp r6, 0x1 - bne _08045C72 - movs r7, 0x1 -_08045C72: - cmp r7, 0 - beq _08045C7E -_08045C76: - ldrb r1, [r5] - movs r0, 0x8 - orrs r0, r1 - strb r0, [r5] -_08045C7E: - adds r0, r4, 0 - bl GetItemCategory - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bne _08045CA2 - ldr r0, _08045CA8 - ldr r0, [r0] - ldr r1, _08045CAC - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r0, r5, 0 - bl sub_8046CE4 -_08045CA2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045CA8: .4byte gDungeon -_08045CAC: .4byte 0x0001c58b - thumb_func_end sub_8045C28 - thumb_func_start sub_8045CB0 sub_8045CB0: push {r4-r7,lr} diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 17be84fbb..fb17e6e5e 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -121,7 +121,9 @@ struct Dungeon /* 0x37F8 */ bool8 plusIsActive[2]; // Index 0: Enemy , Index 1: Team /* 0x37FA */ bool8 minusIsActive[2]; // Index 0: Enemy , Index 1: Team /* 0x37FC */ bool8 decoyActive; - u8 fill37FD[0x3A08 - 0x37FD]; + u8 fill37FD[0x3904 - 0x37FD]; + /* 0x3904 */ u16 unk3904; + u8 fill3906[0x3A08 - 0x3906]; /* 0x3A08 */ u8 unk3A08; u8 fill3A09[0x3A0D - 0x3A09]; /* 0x3A0D */ u8 unk3A0D; @@ -172,8 +174,12 @@ struct Dungeon /* 0x1357C */ struct Entity *teamPokemon[MAX_TEAM_MEMBERS]; /* 0x1358C */ struct Entity *wildPokemon[DUNGEON_MAX_WILD_POKEMON]; /* 0x135CC */ struct Entity *allPokemon[DUNGEON_MAX_POKEMON]; // Contains both team and wild Pokémon - /* 0x1361C */ struct Entity *clientPokemon[2]; // Not sure how large this array is. - u8 fill13624[0x17B2C - 0x13624]; + /* 0x1361C */ struct Entity *clientPokemon[0x40]; + /* 0x1371C */ struct Entity *unk1371C[0x40]; + /* 0x1381C */ struct Entity teamPokemonEntities[MAX_TEAM_MEMBERS]; + /* 0x139EC */ struct Entity wildPokemonEntities[DUNGEON_MAX_WILD_POKEMON]; + /* 0x1412C */ struct Entity clientPokemonEntities[0x40]; + /* 0x15E2C */ struct Entity unk15E2C[0x40]; /* 0x17B2C */ struct Entity *lightningRodPokemon; /* 0x17B30 */ struct Entity *snatchPokemon; /* 0x17B34 */ u8 fillunk1734[0x17B38 - 0x17B34]; @@ -198,8 +204,12 @@ struct Dungeon u8 unk18217; u8 fill18218[0x1C578 - 0x18218]; u8 unk1C578; - u8 fill1C579[0x1CE98 - 0x1C579]; - /* 0x1CE98 */ struct unkDungeonGlobal_unk1CE98_sub unk1CE98; + u8 fill1C579[0x1C57E - 0x1C579]; + u8 unk1C57E; + u8 fill1C57F[0x1C58B - 0x1C57F]; + u8 unk1C58B; + u8 fill1C58C[0x1CE98 - 0x1C58C]; + struct unkDungeonGlobal_unk1CE98_sub unk1CE98; // TODO: not sure how large this is u32 unk1CEC8; /* 0x1CECC */ struct DungeonMusicPlayer musPlayer; }; diff --git a/src/code_8045A00.c b/src/code_8045A00.c index ff7945e00..823c3f74a 100644 --- a/src/code_8045A00.c +++ b/src/code_8045A00.c @@ -1,6 +1,9 @@ #include "global.h" +#include "constants/item.h" #include "dungeon_global_data.h" #include "dungeon_util.h" +#include "dungeon_random.h" +#include "item.h" extern u8 *gUnknown_80FE6F4[]; extern struct unkStruct_8090F58 gUnknown_80F699C; @@ -10,8 +13,9 @@ extern struct unkStruct_8090F58 gUnknown_80F6990; extern struct EntityInfo* GetTrapData_1(struct Entity *entity); extern void SetMessageArgument_2(u8 *, struct EntityInfo *, u32); extern void GetTrapName(u8 *, u8); - +extern bool8 IsNotSpecialItem(u8 id); void sub_8045BF8(u8 *, struct Item *); +void sub_8046CE4(void *param_1,u32 param_2); void sub_8045ACC(void) { @@ -90,3 +94,37 @@ void sub_8045C18(u8 *buffer, struct Item *item) { sub_8090E14(buffer, item, &gUnknown_80F6990); } + +void sub_8045C28(struct Item *Item, u8 itemID, u32 param_3) +{ + bool8 stickyFlag; + u32 total; + + xxx_init_itemslot_8090A8C(Item,itemID,0); + stickyFlag = FALSE; + if (IsNotSpecialItem(itemID)) { + if (param_3 == 0) { + if (DungeonRandInt(100) >= gDungeon->unk1C57E) + { + goto _short; + } + else + { + goto _store; + } + } + else if (param_3 == 1) { + stickyFlag = TRUE; + } + } +_short: + if (stickyFlag) +_store: + Item->flags = Item->flags | ITEM_FLAG_STICKY; + if (GetItemCategory(itemID) == CATEGORY_POKE) { + // FIXME: total hack but too lazy to figure out array for now + total = (gDungeon->unk1C58B << 2) + gDungeon->unk1C58B; + total <<= 3; + sub_8046CE4(Item, total); + } +} From a76aa6d797a41a5edb2b88af62d0449a45419ed6 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 9 Apr 2023 15:43:31 -0700 Subject: [PATCH 06/11] more documentation of kecleon shop --- include/kecleon_items.h | 30 ++++++++++---- include/team_inventory.h | 2 + src/items.c | 4 +- src/kecleon_items.c | 22 +++++----- src/kecleon_items_1.c | 88 ++++++++++++++++++++-------------------- 5 files changed, 80 insertions(+), 66 deletions(-) diff --git a/include/kecleon_items.h b/include/kecleon_items.h index b952896b1..c489b983c 100644 --- a/include/kecleon_items.h +++ b/include/kecleon_items.h @@ -10,24 +10,23 @@ struct unkStruct_203B210 // size: 0x148 u32 unk0; bool8 isKecleonItemShop; // FALSE indicates it is Kecleon TM Shop - u8 fill5[3]; u32 currState; u32 fallbackState; s32 itemSellPrice; u32 numInventoryItemToSell; s32 inventoryItemSellPrice; - struct Item unk1C; + struct Item soldItem; u8 itemShopItemIndex; u8 wareShopItemIndex; - u32 unk24; - u32 unk28; - u32 unk2C; - u32 unk30; - struct MenuItem unk34[8]; + u32 soldItemInventoryIndex; + u32 menuAction1; + u32 menuAction2; + u32 menuAction3; + struct MenuItem menuItems[8]; u16 unk74[8]; - struct MenuStruct unk84; + struct MenuStruct menu; struct OpenedFile *faceFile; - u8 *unkD8; + u8 *faceData; u16 unkDC; u16 unkDE; u8 unkE0; @@ -59,4 +58,17 @@ struct unkStruct_203B224 u8 unkF0[4]; }; +enum KecleonStoreStates +{ + KECLEON_STORE_INIT = 0, + KECLEON_STORE_MAIN_MENU = 1, + KECLEON_STORE_EXIT = 4, + KECLEON_STORE_NO_STORE_ITEMS = 5, + KECLEON_STORE_NO_MONEY = 6, + KECLEON_STORE_NO_ITEMS_TO_SELL = 9, + KECLEON_STORE_TOO_MANY_ITEMS = 10, + KECLEON_STORE_NOT_ENOUGH_MONEY = 12, + KECLEON_STORE_CANT_SELL_ITEM = 13 +}; + #endif // GUARD_KECLEON_ITEMS_H diff --git a/include/team_inventory.h b/include/team_inventory.h index 39da3de03..e4b774d86 100644 --- a/include/team_inventory.h +++ b/include/team_inventory.h @@ -16,4 +16,6 @@ struct TeamInventory extern struct TeamInventory *gTeamInventory_203B460; +#define MAX_TEAM_MONEY 99999 + #endif diff --git a/src/items.c b/src/items.c index 5edceec9a..6c9165bd2 100644 --- a/src/items.c +++ b/src/items.c @@ -666,8 +666,8 @@ void AddToTeamMoney(s32 amount) gTeamInventory_203B460->teamMoney += amount; // clamp money - clamped_money = 99999; - if (gTeamInventory_203B460->teamMoney <= 99999) { + clamped_money = MAX_TEAM_MONEY; + if (gTeamInventory_203B460->teamMoney <= MAX_TEAM_MONEY) { if (gTeamInventory_203B460->teamMoney >= 0) { return; } diff --git a/src/kecleon_items.c b/src/kecleon_items.c index a395c40da..b170bb9ef 100644 --- a/src/kecleon_items.c +++ b/src/kecleon_items.c @@ -36,9 +36,9 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1) struct OpenedFile *faceFile; gUnknown_203B210 = MemoryAlloc(sizeof(struct unkStruct_203B210),8); - gUnknown_203B210->unk28 = 0; - gUnknown_203B210->unk2C = 0; - gUnknown_203B210->unk30 = 0; + gUnknown_203B210->menuAction1 = 0; + gUnknown_203B210->menuAction2 = 0; + gUnknown_203B210->menuAction3 = 0; gUnknown_203B210->unk0 = param_1; switch(param_1) { @@ -79,21 +79,21 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1) } faceFile = GetDialogueSpriteDataPtr(MONSTER_KECLEON); gUnknown_203B210->faceFile = faceFile; - gUnknown_203B210->unkD8 = faceFile->data; + gUnknown_203B210->faceData = faceFile->data; gUnknown_203B210->unkE0 = 0; gUnknown_203B210->unkE1 = 0; gUnknown_203B210->unkE2 = 0; gUnknown_203B210->unkDC = 2; gUnknown_203B210->unkDE = 8; - UpdateKecleonStoreState(0); + UpdateKecleonStoreState(KECLEON_STORE_INIT); return 1; } u32 sub_8018C04(void) { switch(gUnknown_203B210->currState) { - case 0: - case 1: + case KECLEON_STORE_INIT: + case KECLEON_STORE_MAIN_MENU: sub_8019730(); break; case 0x12: @@ -125,7 +125,7 @@ u32 sub_8018C04(void) case 0x1d: sub_8019D4C(); break; - case 4: + case KECLEON_STORE_EXIT: return 3; default: sub_8019D68(); @@ -153,7 +153,7 @@ void UpdateKecleonStoreState(u32 newState) void sub_8018D30(void) { - s32 iVar3; + s32 index; sub_8006518(gUnknown_203B210->unkE8); switch(gUnknown_203B210->currState) { @@ -181,8 +181,8 @@ void sub_8018D30(void) case 0x17: case 0x18: case 0x19: - for(iVar3 = 0; iVar3 < 4; iVar3++) - gUnknown_203B210->unkE8[iVar3] = gUnknown_80DB840; + for(index = 0; index < 4; index++) + gUnknown_203B210->unkE8[index] = gUnknown_80DB840; break; } ResetUnusedInputStruct(); diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 1feb29807..d12d90502 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -119,13 +119,13 @@ void sub_8019700(void) preload = gUnknown_203B210; nullText = NULL; - preload->unk34[0].text = *gUnknown_80D4920; - preload->unk34[0].menuAction = 5; + preload->menuItems[0].text = *gUnknown_80D4920; + preload->menuItems[0].menuAction = 5; menuAction = 1; - preload->unk34[1].text = *gUnknown_80D4928; - preload->unk34[1].menuAction = 6; - preload->unk34[2].text = nullText; - preload->unk34[2].menuAction = menuAction; + preload->menuItems[1].text = *gUnknown_80D4928; + preload->menuItems[1].menuAction = 6; + preload->menuItems[2].text = nullText; + preload->menuItems[2].menuAction = menuAction; } void sub_8019730(void) @@ -135,32 +135,32 @@ void sub_8019730(void) if (sub_80144A4(&menuAction) != 0) return; if (menuAction != 1) - gUnknown_203B210->unk28 = menuAction; + gUnknown_203B210->menuAction1 = menuAction; switch(menuAction) { case 2: if (CountKecleonItems() == 0) - UpdateKecleonStoreState(5); + UpdateKecleonStoreState(KECLEON_STORE_NO_STORE_ITEMS); else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) - UpdateKecleonStoreState(0xA); + UpdateKecleonStoreState(KECLEON_STORE_TOO_MANY_ITEMS); else UpdateKecleonStoreState(0xF); break; case 3: if (GetNumberOfFilledInventorySlots() == 0) - UpdateKecleonStoreState(9); + UpdateKecleonStoreState(KECLEON_STORE_NO_ITEMS_TO_SELL); else if (gUnknown_203B210->numInventoryItemToSell == 0) UpdateKecleonStoreState(8); - else if (gTeamInventory_203B460->teamMoney < 99999) + else if (gTeamInventory_203B460->teamMoney < MAX_TEAM_MONEY) UpdateKecleonStoreState(0x17); else UpdateKecleonStoreState(7); break; case 4: if (GetNumberOfFilledInventorySlots() == 0) - UpdateKecleonStoreState(9); + UpdateKecleonStoreState(KECLEON_STORE_NO_ITEMS_TO_SELL); else if (gUnknown_203B210->numInventoryItemToSell == 0) UpdateKecleonStoreState(8); - else if (gUnknown_203B210->inventoryItemSellPrice + gTeamInventory_203B460->teamMoney > 99999) + else if (gUnknown_203B210->inventoryItemSellPrice + gTeamInventory_203B460->teamMoney > MAX_TEAM_MONEY) UpdateKecleonStoreState(7); else UpdateKecleonStoreState(0x1f); @@ -213,7 +213,7 @@ void sub_80198E8(void) { case 5: AddToTeamMoney(gUnknown_203B210->itemSellPrice); - ShiftItemsDownFrom(gUnknown_203B210->unk24); + ShiftItemsDownFrom(gUnknown_203B210->soldItemInventoryIndex); PlaySound(0x14c); UpdateKecleonStoreState(0x19); break; @@ -249,7 +249,7 @@ void sub_8019944(void) break; case 1: case 6: - UpdateKecleonStoreState(1); + UpdateKecleonStoreState(KECLEON_STORE_MAIN_MENU); break; } } @@ -257,17 +257,17 @@ void sub_8019944(void) void sub_80199CC(void) { - u32 uVar2; + u32 menuAction; struct BulkItem *item; if (gUnknown_203B210->isKecleonItemShop) { - uVar2 = sub_8019EDC(1); + menuAction = sub_8019EDC(1); } else { - uVar2 = sub_801A2A8(1); + menuAction = sub_801A2A8(1); } - switch(uVar2) + switch(menuAction) { case 3: if (gUnknown_203B210->isKecleonItemShop) { @@ -278,9 +278,9 @@ void sub_80199CC(void) gUnknown_203B210->wareShopItemIndex = sub_801A37C(); item = GetKecleonWareItem(gUnknown_203B210->wareShopItemIndex); } - xxx_init_itemslot_8090A8C(&gUnknown_203B210->unk1C,item->id,0); - gUnknown_203B210->unk1C.quantity =item->quantity; - gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->unk1C); + xxx_init_itemslot_8090A8C(&gUnknown_203B210->soldItem,item->id,0); + gUnknown_203B210->soldItem.quantity =item->quantity; + gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->soldItem); UpdateKecleonStoreState(0x14); break; case 4: @@ -292,9 +292,9 @@ void sub_80199CC(void) gUnknown_203B210->wareShopItemIndex = sub_801A37C(); item = GetKecleonWareItem(gUnknown_203B210->wareShopItemIndex); } - xxx_init_itemslot_8090A8C(&gUnknown_203B210->unk1C,item->id,0); - gUnknown_203B210->unk1C.quantity = item->quantity; - gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->unk1C); + xxx_init_itemslot_8090A8C(&gUnknown_203B210->soldItem,item->id,0); + gUnknown_203B210->soldItem.quantity = item->quantity; + gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->soldItem); UpdateKecleonStoreState(0x15); break; case 2: @@ -302,7 +302,7 @@ void sub_80199CC(void) sub_801A010(); else sub_801A3DC(); - UpdateKecleonStoreState(1); + UpdateKecleonStoreState(KECLEON_STORE_MAIN_MENU); break; case 1: sub_801AD34(0); @@ -318,21 +318,21 @@ void sub_8019B08(void) case 0: break; case 3: - gUnknown_203B210->unk24 = sub_801A8AC(); - gUnknown_203B210->unk1C = gTeamInventory_203B460->teamItems[gUnknown_203B210->unk24]; - gUnknown_203B210->itemSellPrice = GetStackSellPrice(&gUnknown_203B210->unk1C); + gUnknown_203B210->soldItemInventoryIndex = sub_801A8AC(); + gUnknown_203B210->soldItem = gTeamInventory_203B460->teamItems[gUnknown_203B210->soldItemInventoryIndex]; + gUnknown_203B210->itemSellPrice = GetStackSellPrice(&gUnknown_203B210->soldItem); UpdateKecleonStoreState(0x1c); break; case 4: - gUnknown_203B210->unk24 = sub_801A8AC(); - gUnknown_203B210->unk1C = gTeamInventory_203B460->teamItems[gUnknown_203B210->unk24]; - gUnknown_203B210->itemSellPrice = GetStackSellPrice(&gUnknown_203B210->unk1C); + gUnknown_203B210->soldItemInventoryIndex = sub_801A8AC(); + gUnknown_203B210->soldItem = gTeamInventory_203B460->teamItems[gUnknown_203B210->soldItemInventoryIndex]; + gUnknown_203B210->itemSellPrice = GetStackSellPrice(&gUnknown_203B210->soldItem); sub_8099690(0); UpdateKecleonStoreState(0x1d); break; case 2: sub_801A928(); - UpdateKecleonStoreState(1); + UpdateKecleonStoreState(KECLEON_STORE_MAIN_MENU); break; case 1: default: @@ -352,15 +352,15 @@ void sub_8019BBC(void) else { sub_801A2A8(0); } - if ((sub_8012FD8(&gUnknown_203B210->unk84) == 0) && (sub_8013114(&gUnknown_203B210->unk84,&menuAction), menuAction != 1)) { - gUnknown_203B210->unk30 = menuAction; + if ((sub_8012FD8(&gUnknown_203B210->menu) == 0) && (sub_8013114(&gUnknown_203B210->menu,&menuAction), menuAction != 1)) { + gUnknown_203B210->menuAction3 = menuAction; } switch(menuAction){ case 2: if (gTeamInventory_203B460->teamMoney == 0) - UpdateKecleonStoreState(0x6); + UpdateKecleonStoreState(KECLEON_STORE_NO_MONEY); else if (gUnknown_203B210->itemSellPrice > gTeamInventory_203B460->teamMoney) - UpdateKecleonStoreState(0xC); + UpdateKecleonStoreState(KECLEON_STORE_NOT_ENOUGH_MONEY); else UpdateKecleonStoreState(0x16); break; @@ -379,15 +379,15 @@ void sub_8019C78(void) menuAction = 0; sub_801A6E8(0); - if ((sub_8012FD8(&gUnknown_203B210->unk84) == '\0') && (sub_8013114(&gUnknown_203B210->unk84,&menuAction), menuAction != 1)) { - gUnknown_203B210->unk2C = menuAction; + if ((sub_8012FD8(&gUnknown_203B210->menu) == '\0') && (sub_8013114(&gUnknown_203B210->menu,&menuAction), menuAction != 1)) { + gUnknown_203B210->menuAction2 = menuAction; } switch(menuAction){ case 3: sub_8099690(0); - if (!CanSellItem(gUnknown_203B210->unk1C.id)) - UpdateKecleonStoreState(0xd); - else if (gUnknown_203B210->itemSellPrice + gTeamInventory_203B460->teamMoney > 99999) + if (!CanSellItem(gUnknown_203B210->soldItem.id)) + UpdateKecleonStoreState(KECLEON_STORE_CANT_SELL_ITEM); + else if (gUnknown_203B210->itemSellPrice + gTeamInventory_203B460->teamMoney > MAX_TEAM_MONEY) UpdateKecleonStoreState(0xe); else UpdateKecleonStoreState(0x1e); @@ -976,7 +976,7 @@ u32 sub_801A6E8(u8 param_1) break; case 4: item = gTeamInventory_203B460->teamItems[sub_801A8AC()]; - if (CanSellItem(item.id) && (GetStackSellPrice(&item) + gTeamInventory_203B460->teamMoney < 100000)) + if (CanSellItem(item.id) && (GetStackSellPrice(&item) + gTeamInventory_203B460->teamMoney <= MAX_TEAM_MONEY)) PlayMenuSoundEffect(0); else PlayMenuSoundEffect(2); @@ -1135,7 +1135,7 @@ void sub_801A9E0(void) stack2.unk8 = 1; item.flags = 3; sub_8090E14(buffer1,&item, &stack2); - if (GetStackSellPrice(&item) + gTeamInventory_203B460->teamMoney > 99999){ + if (GetStackSellPrice(&item) + gTeamInventory_203B460->teamMoney > MAX_TEAM_MONEY){ // very dumb but this matches... sprintfStatic((char *)&stack3,gUnknown_80DB9A0,buffer1); xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),(u8 *)&stack3,gUnknown_203B224->unk88,0); From 261ba2c4c2da11a71ec7b4030bc34f97021de770 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 9 Apr 2023 16:22:17 -0700 Subject: [PATCH 07/11] document menuAction variables --- include/debug_menu.h | 2 +- include/felicity_bank.h | 2 +- include/friend_area_action_menu.h | 7 +- include/kangaskhan_storage.h | 32 +++++--- include/mailbox.h | 4 +- src/debug_menu_2.c | 2 +- src/felicity_bank.c | 2 +- src/felicity_bank_1.c | 8 +- src/friend_area_action_menu.c | 10 +-- src/friend_area_action_menu_1.c | 6 +- src/kangaskhan_storage.c | 18 ++--- src/kangaskhan_storage_2.c | 120 ++++++++++++++---------------- src/kangaskhan_storage_3.c | 46 ++++++------ src/mailbox.c | 8 +- src/mailbox_1.c | 4 +- 15 files changed, 136 insertions(+), 135 deletions(-) diff --git a/include/debug_menu.h b/include/debug_menu.h index ceeca6511..f91e08364 100644 --- a/include/debug_menu.h +++ b/include/debug_menu.h @@ -33,7 +33,7 @@ struct unkStruct_203B3F8 s16 unk4; u16 unk6; struct PokemonStruct *pokemon; - u32 unkC; + u32 menuAction; struct MenuStruct unk10; u32 unk60; u32 unk64; diff --git a/include/felicity_bank.h b/include/felicity_bank.h index 7cd64ec0d..c02b7b5e0 100644 --- a/include/felicity_bank.h +++ b/include/felicity_bank.h @@ -12,7 +12,7 @@ struct unkStruct_203B204 s32 currState; u32 fallbackState; u32 chosenAmount; - u32 unk10; + u32 menuAction; struct MenuItem unk14[8]; u16 unk54[8]; u32 unk64; diff --git a/include/friend_area_action_menu.h b/include/friend_area_action_menu.h index 01d76cfd4..c4ddbae45 100644 --- a/include/friend_area_action_menu.h +++ b/include/friend_area_action_menu.h @@ -18,10 +18,9 @@ struct unkStruct_203B2BC u16 moveID; struct Move moves[8]; u16 moveIDs[4]; // some list of move IDs - - u32 unk70; - s32 unk74; - u32 unk78; + u32 menuAction1; + u32 menuAction2; + u32 menuAction3; struct MenuStruct unk7C; u8 fill80[0xFD - 0xCC]; u32 unkFD; diff --git a/include/kangaskhan_storage.h b/include/kangaskhan_storage.h index 3833e9a82..c43c51e7d 100644 --- a/include/kangaskhan_storage.h +++ b/include/kangaskhan_storage.h @@ -10,14 +10,13 @@ struct unkStruct_203B208 // size: 0x14C u32 unk0; u32 currState; - u32 unk8; - struct Item unkC; - u32 unk10; + u32 fallbackState; + struct Item storedItem; + u32 itemIndex; u8 id; // another id? - u8 fill15[0x3]; - u32 unk18; - u32 unk1C; - u32 unk20; + u32 menuAction1; + u32 menuAction2; + u32 menuAction3; struct MenuItem unk24[5]; u16 unk4C[5]; struct MenuStruct unk58; @@ -42,12 +41,12 @@ struct unkStruct_203B20C { u32 state; u8 unk4[4]; - struct Item unk8; - u32 unkC; + struct Item item; + u32 itemIndex; u8 id; - u32 unk14; - u32 unk18; - u32 unk1C; + u32 menuAction1; + u32 menuAction2; + u32 menuAction3; struct MenuItem unk20[8]; u16 unk60[8]; struct MenuStruct unk70; @@ -64,4 +63,13 @@ struct unkStruct_203B20C struct UnkTextStruct2 unkF0[4]; }; +enum KangaskhanStorageStates { + KANGASKHAN_STORAGE_INIT = 0, + KANGASKHAN_STORAGE_MAIN_MENU = 1, + KANGASKHAN_STORAGE_EXIT = 4, + KANGASKHAN_STORAGE_NO_INV_ITEMS = 5, + KANGASKHAN_STORAGE_TOO_MANY_ITEMS = 6, + KANGASKHAN_STORAGE_IS_MONEY_USED_TM = 9, +}; + #endif diff --git a/include/mailbox.h b/include/mailbox.h index 53c2fa6f0..dcde0ba71 100644 --- a/include/mailbox.h +++ b/include/mailbox.h @@ -16,8 +16,8 @@ struct unkStruct_203B304 u8 fill10[0x50 - 0x10]; u8 unk50; u8 fill51[0x64 - 0x51]; - u32 unk64; - u32 unk68; + u32 menuAction1; + u32 menuAction2; struct MenuStruct unk6C; struct MenuItem unkBC[8]; u16 unkFC[8]; diff --git a/src/debug_menu_2.c b/src/debug_menu_2.c index 093b6766f..38ad8dbce 100644 --- a/src/debug_menu_2.c +++ b/src/debug_menu_2.c @@ -124,7 +124,7 @@ void sub_803AD88(void) break; case 3: sub_8023DA4(); - sub_8012D60(&gUnknown_203B3F8->unk10, gUnknown_203B3F8->unk90, 0, gUnknown_203B3F8->unkD0, gUnknown_203B3F8->unkC, 2); + sub_8012D60(&gUnknown_203B3F8->unk10, gUnknown_203B3F8->unk90, 0, gUnknown_203B3F8->unkD0, gUnknown_203B3F8->menuAction, 2); break; case 5: gUnknown_203B3F8->unk70 = 3; diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 632867231..06a5c8ec3 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -31,7 +31,7 @@ u32 CreateFelicityBank(s32 param_1) ResetUnusedInputStruct(); sub_800641C(0,1,1); gUnknown_203B204 = MemoryAlloc(sizeof(struct unkStruct_203B204),8); - gUnknown_203B204->unk10 = 0; + gUnknown_203B204->menuAction = 0; gUnknown_203B204->unk0 = param_1; CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PERSIAN); CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_PERSIAN); diff --git a/src/felicity_bank_1.c b/src/felicity_bank_1.c index 504e487fd..5c876a80b 100644 --- a/src/felicity_bank_1.c +++ b/src/felicity_bank_1.c @@ -29,11 +29,11 @@ void sub_8016B48(u8 action); void sub_80169BC(void) { - s32 temp; - if(sub_80144A4(&temp) == 0) + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) { - gUnknown_203B204->unk10 = temp; - switch(temp) + gUnknown_203B204->menuAction = menuAction; + switch(menuAction) { case 2: UpdateFelicityBankState(7); diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index 865fdfea7..da84927d7 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -127,9 +127,9 @@ u32 sub_8027074(void) { ResetSprites(0); gUnknown_203B2BC = MemoryAlloc(sizeof(struct unkStruct_203B2BC), 8); - gUnknown_203B2BC->unk70 = 0; - gUnknown_203B2BC->unk74 = 0; - gUnknown_203B2BC->unk78 = 0; + gUnknown_203B2BC->menuAction1 = 0; + gUnknown_203B2BC->menuAction2 = 0; + gUnknown_203B2BC->menuAction3 = 0; SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_INIT); return 1; } @@ -247,7 +247,7 @@ void sub_8027274(void) case 3: sub_8027D40(3,&gUnknown_203B2BC->item2); sub_8023DA4(); - sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk70,2); + sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->menuAction1,2); break; case 4: sub_8024458(gUnknown_203B2BC->targetPoke,2); @@ -263,7 +263,7 @@ void sub_8027274(void) break; case 0xc: sub_801A9E0(); - sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk74,2); + sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->menuAction2,2); break; case 0xd: HeldItemToSlot(&slot, &gUnknown_203B2BC->itemToGive); diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index ae673096f..2b882b989 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -104,12 +104,12 @@ void sub_80278B4(void) struct PokemonStruct *playerStruct; struct PokemonStruct *pokeStruct1; struct PokemonStruct *pokeStruct2; - int menuAction; + u32 menuAction; menuAction = 0; sub_8023A94(0); if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) { - gUnknown_203B2BC->unk70 = menuAction; + gUnknown_203B2BC->menuAction1 = menuAction; } switch(menuAction) { case 6: @@ -292,7 +292,7 @@ void sub_8027BD8(void) menuAction = 0; sub_801A6E8(0); if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) { - gUnknown_203B2BC->unk74 = menuAction; + gUnknown_203B2BC->menuAction2 = menuAction; } switch(menuAction) { diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index 333b15233..088068ebf 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -28,7 +28,7 @@ extern void sub_8017D24(); extern void sub_8017DDC(); extern void sub_8017928(); extern void sub_8017A1C(); -extern void sub_8017DF8(); +extern void AdvanceToKangaskhanStorageFallbackState(); void sub_8016E80(); extern void sub_8016FF8(); @@ -41,9 +41,9 @@ u32 DisplayKangaskhanDialogueSprite(s32 param_1) ResetUnusedInputStruct(); sub_800641C(0,1,1); gUnknown_203B208 = MemoryAlloc(sizeof(struct unkStruct_203B208),8); - gUnknown_203B208->unk18 = 0; - gUnknown_203B208->unk1C = 0; - gUnknown_203B208->unk20 = 0; + gUnknown_203B208->menuAction1 = 0; + gUnknown_203B208->menuAction2 = 0; + gUnknown_203B208->menuAction3 = 0; gUnknown_203B208->unk0 = param_1; CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_KANGASKHAN); CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_KANGASKHAN); @@ -63,15 +63,15 @@ u32 DisplayKangaskhanDialogueSprite(s32 param_1) gUnknown_203B208->unkE6 = 0; gUnknown_203B208->unkE0 = 2; gUnknown_203B208->unkE2 = 8; - UpdateKangaskhanStorageState(0); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_INIT); return 1; } u32 sub_8016D54(void) { switch(gUnknown_203B208->currState) { - case 0: - case 1: + case KANGASKHAN_STORAGE_INIT: + case KANGASKHAN_STORAGE_MAIN_MENU: sub_8017828(); break; case 0xd: @@ -109,10 +109,10 @@ u32 sub_8016D54(void) case 0x1c: sub_8017A1C(); break; - case 4: + case KANGASKHAN_STORAGE_EXIT: return 3; default: - sub_8017DF8(); + AdvanceToKangaskhanStorageFallbackState(); break; } return 0; diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c index ceffe6d45..71599820f 100644 --- a/src/kangaskhan_storage_2.c +++ b/src/kangaskhan_storage_2.c @@ -103,35 +103,30 @@ void sub_8017828(void) if (sub_80144A4(&menuAction) == 0) { if (menuAction != 1) { - gUnknown_203B208->unk18 = menuAction; + gUnknown_203B208->menuAction1 = menuAction; } switch(menuAction) { case 2: if (GetNumberOfFilledInventorySlots() == 0) { - UpdateKangaskhanStorageState(5); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_NO_INV_ITEMS); + } + else if (sub_801CF50(0) != 0) { + UpdateKangaskhanStorageState(8); } else { - if (sub_801CF50(0) != 0) { - UpdateKangaskhanStorageState(8); - } - else { - UpdateKangaskhanStorageState(0xb); - } + UpdateKangaskhanStorageState(0xb); } break; case 3: if (sub_801CF14(1) != 0) { UpdateKangaskhanStorageState(7); } - else - { - if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { - UpdateKangaskhanStorageState(6); - } - else { - UpdateKangaskhanStorageState(0x14); - } + else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); + } + else { + UpdateKangaskhanStorageState(0x14); } break; case 6: @@ -152,8 +147,8 @@ void sub_80178D0(void) switch(menuAction) { case 4: - MoveToStorage(&gUnknown_203B208->unkC); - ShiftItemsDownFrom(gUnknown_203B208->unk10); + MoveToStorage(&gUnknown_203B208->storedItem); + ShiftItemsDownFrom(gUnknown_203B208->itemIndex); FillInventoryGaps(); UpdateKangaskhanStorageState(0x13); break; @@ -174,9 +169,9 @@ void sub_8017928(void) switch(menuAction) { case 4: - gTeamInventory_203B460->teamStorage[gUnknown_203B208->unkC.id] -= gUnknown_203B208->unkC.quantity; - item.id = gUnknown_203B208->unkC.id; - item.quantity = gUnknown_203B208->unkC.quantity; + gTeamInventory_203B460->teamStorage[gUnknown_203B208->storedItem.id] -= gUnknown_203B208->storedItem.quantity; + item.id = gUnknown_203B208->storedItem.id; + item.quantity = gUnknown_203B208->storedItem.quantity; AddHeldItemToInventory(&item); UpdateKangaskhanStorageState(0x1d); break; @@ -197,19 +192,18 @@ void sub_80179A8(void) switch(menuAction) { case 4: - for(index = 0; index < INVENTORY_SIZE; index++) - { - if (sub_801AED0(index) != 0) { - MoveToStorage(&gTeamInventory_203B460->teamItems[index]); - gTeamInventory_203B460->teamItems[index].id = 0; - gTeamInventory_203B460->teamItems[index].flags = 0; + for(index = 0; index < INVENTORY_SIZE; index++) + { + if (sub_801AED0(index) != 0) { + MoveToStorage(&gTeamInventory_203B460->teamItems[index]); + gTeamInventory_203B460->teamItems[index].id = 0; + gTeamInventory_203B460->teamItems[index].flags = 0; + } } - } - FillInventoryGaps(); - sub_801AE84(); - UpdateKangaskhanStorageState(0x13); - break; - + FillInventoryGaps(); + sub_801AE84(); + UpdateKangaskhanStorageState(0x13); + break; case 1: case 5: UpdateKangaskhanStorageState(0xe); @@ -275,19 +269,19 @@ void sub_8017AF8(void) } else { - gUnknown_203B208->unk10 = sub_801A8AC(); - gUnknown_203B208->unkC = gTeamInventory_203B460->teamItems[gUnknown_203B208->unk10]; + gUnknown_203B208->itemIndex = sub_801A8AC(); + gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; UpdateKangaskhanStorageState(0xF); } break; case 4: - gUnknown_203B208->unk10 = sub_801A8AC(); - gUnknown_203B208->unkC = gTeamInventory_203B460->teamItems[gUnknown_203B208->unk10]; + gUnknown_203B208->itemIndex = sub_801A8AC(); + gUnknown_203B208->storedItem = gTeamInventory_203B460->teamItems[gUnknown_203B208->itemIndex]; UpdateKangaskhanStorageState(0x10); break; case 2: sub_801A928(); - UpdateKangaskhanStorageState(1); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); break; } } @@ -303,20 +297,20 @@ void sub_8017B88(void) else { gUnknown_203B208->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->id, 0); - gUnknown_203B208->unkC.quantity = 1; + xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); + gUnknown_203B208->storedItem.quantity = 1; UpdateKangaskhanStorageState(0x19); } break; case 4: gUnknown_203B208->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->id, 0); - gUnknown_203B208->unkC.quantity = 1; + xxx_init_itemslot_8090A8C(&gUnknown_203B208->storedItem, gUnknown_203B208->id, 0); + gUnknown_203B208->storedItem.quantity = 1; UpdateKangaskhanStorageState(0x1A); break; case 2: sub_801CBB8(); - UpdateKangaskhanStorageState(1); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_MAIN_MENU); break; case 1: sub_801AD34(0); @@ -334,7 +328,7 @@ void sub_8017C28(void) sub_8017598(); break; case 3: - gUnknown_203B208->unkC.quantity = gUnknown_203B208->unkA8; + gUnknown_203B208->storedItem.quantity = gUnknown_203B208->unkA8; UpdateKangaskhanStorageState(0x1B); break; case 2: @@ -353,16 +347,16 @@ void sub_8017C7C(void) sub_801A6E8(0); if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { sub_8013114(&gUnknown_203B208->unk58, &menuAction); - if(menuAction != 1) gUnknown_203B208->unk1C = menuAction; + if(menuAction != 1) gUnknown_203B208->menuAction2 = menuAction; } switch(menuAction) { case 2: sub_8099690(0); - if(!IsNotMoneyOrUsedTMItem(gUnknown_203B208->unkC.id)) - UpdateKangaskhanStorageState(9); - else if(!sub_801ADA0(gUnknown_203B208->unk10)) + if(!IsNotMoneyOrUsedTMItem(gUnknown_203B208->storedItem.id)) + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_IS_MONEY_USED_TM); + else if(!sub_801ADA0(gUnknown_203B208->itemIndex)) UpdateKangaskhanStorageState(0xA); else UpdateKangaskhanStorageState(0x11); @@ -384,7 +378,7 @@ void sub_8017D24(void) sub_801CA08(0); if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { sub_8013114(&gUnknown_203B208->unk58, &menuAction); - if(menuAction != 1) gUnknown_203B208->unk20 = menuAction; + if(menuAction != 1) gUnknown_203B208->menuAction3 = menuAction; } switch(menuAction) @@ -393,9 +387,9 @@ void sub_8017D24(void) if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { sub_801CBB8(); - UpdateKangaskhanStorageState(6); + UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS); } - else if(IsThrowableItem(gUnknown_203B208->unkC.id)) + else if(IsThrowableItem(gUnknown_203B208->storedItem.id)) UpdateKangaskhanStorageState(0x18); else UpdateKangaskhanStorageState(0x1B); @@ -441,12 +435,12 @@ void sub_8017DDC(void) } } -void sub_8017DF8(void) +void AdvanceToKangaskhanStorageFallbackState(void) { s32 temp; if(sub_80144A4(&temp) == 0) { - UpdateKangaskhanStorageState(gUnknown_203B208->unk8); + UpdateKangaskhanStorageState(gUnknown_203B208->fallbackState); } } @@ -455,9 +449,9 @@ u32 sub_8017E1C(void) ResetUnusedInputStruct(); sub_800641C(NULL, 1, 1); gUnknown_203B20C = MemoryAlloc(sizeof(struct unkStruct_203B20C), 8); - gUnknown_203B20C->unk14 = 0; - gUnknown_203B20C->unk18 = 0; - gUnknown_203B20C->unk1C = 0; + gUnknown_203B20C->menuAction1 = 0; + gUnknown_203B20C->menuAction2 = 0; + gUnknown_203B20C->menuAction3 = 0; sub_8017F10(0); return 1; } @@ -572,7 +566,7 @@ void sub_8018100(void) switch(gUnknown_203B20C->state) { case 1: - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction1, 2); break; case 4: sub_801A5D8(3, 3, 0, 0xA); @@ -583,10 +577,10 @@ void sub_8018100(void) case 6: sub_801A9E0(); sub_801841C(); - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction2, 2); break; case 7: - sub_801B3C0(&gUnknown_203B20C->unk8); + sub_801B3C0(&gUnknown_203B20C->item); break; case 10: sub_801C8C4(1, 3, 0, 0xA); @@ -599,10 +593,10 @@ void sub_8018100(void) case 12: gUnknown_203B20C->unkD0 = 2; gUnknown_203B20C->unkC8 = 1; - if(gTeamInventory_203B460->teamStorage[gUnknown_203B20C->unk8.id] > 99) + if(gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] > 99) gUnknown_203B20C->unkCC = 99; else - gUnknown_203B20C->unkCC = gTeamInventory_203B460->teamStorage[gUnknown_203B20C->unk8.id]; + gUnknown_203B20C->unkCC = gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id]; gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC; gUnknown_203B20C->unkD4 = 1; gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1]; @@ -615,10 +609,10 @@ void sub_8018100(void) sub_801CCD8(); sub_801AD34(0); sub_80184D4(); - sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2); + sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->menuAction3, 2); break; case 14: - sub_801B3C0(&gUnknown_203B20C->unk8); + sub_801B3C0(&gUnknown_203B20C->item); break; case 0: default: diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c index c0a611dd1..890cfa6bc 100644 --- a/src/kangaskhan_storage_3.c +++ b/src/kangaskhan_storage_3.c @@ -45,7 +45,7 @@ void sub_8018588(void) if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) { sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->unk14 = menuAction; + if(menuAction != 1) gUnknown_203B20C->menuAction1 = menuAction; } switch(menuAction) @@ -99,14 +99,14 @@ void sub_8018620(void) } else { - gUnknown_203B20C->unkC = sub_801A8AC(); - gUnknown_203B20C->unk8 = gTeamInventory_203B460->teamItems[gUnknown_203B20C->unkC]; + gUnknown_203B20C->itemIndex = sub_801A8AC(); + gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; sub_8017F10(6); } break; case 4: - gUnknown_203B20C->unkC = sub_801A8AC(); - gUnknown_203B20C->unk8 = gTeamInventory_203B460->teamItems[gUnknown_203B20C->unkC]; + gUnknown_203B20C->itemIndex = sub_801A8AC(); + gUnknown_203B20C->item = gTeamInventory_203B460->teamItems[gUnknown_203B20C->itemIndex]; sub_8017F10(7); break; case 2: @@ -161,15 +161,15 @@ void sub_80186F8(void) else { gUnknown_203B20C->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B20C->unk8, gUnknown_203B20C->id, 0); - gUnknown_203B20C->unk8.quantity = 1; + xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); + gUnknown_203B20C->item.quantity = 1; sub_8017F10(0xD); } break; case 4: gUnknown_203B20C->id = sub_801CB24(); - xxx_init_itemslot_8090A8C(&gUnknown_203B20C->unk8, gUnknown_203B20C->id, 0); - gUnknown_203B20C->unk8.quantity = 1; + xxx_init_itemslot_8090A8C(&gUnknown_203B20C->item, gUnknown_203B20C->id, 0); + gUnknown_203B20C->item.quantity = 1; sub_8017F10(0xE); break; case 2: @@ -192,10 +192,10 @@ void sub_8018854(void) switch(sub_8013BBC(&gUnknown_203B20C->unkC0)) { case 3: - gUnknown_203B20C->unk8.quantity = gUnknown_203B20C->unkC0; - gTeamInventory_203B460->teamStorage[gUnknown_203B20C->unk8.id] -= gUnknown_203B20C->unk8.quantity; - item.id = gUnknown_203B20C->unk8.id; - item.quantity = gUnknown_203B20C->unk8.quantity; + gUnknown_203B20C->item.quantity = gUnknown_203B20C->unkC0; + gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; + item.id = gUnknown_203B20C->item.id; + item.quantity = gUnknown_203B20C->item.quantity; AddHeldItemToInventory(&item); if(sub_801CF14(1) == 0) if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) @@ -230,19 +230,19 @@ void sub_8018904(void) if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) { sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->unk18 = menuAction; + if(menuAction != 1) gUnknown_203B20C->menuAction2 = menuAction; } switch(menuAction) { case 2: - if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->unk8.id)) - if(sub_801ADA0(gUnknown_203B20C->unkC) == 0) + if(IsNotMoneyOrUsedTMItem(gUnknown_203B20C->item.id)) + if(sub_801ADA0(gUnknown_203B20C->itemIndex) == 0) error: sub_8012EA4(&gUnknown_203B20C->unk70, 1); else { - MoveToStorage(&gUnknown_203B20C->unk8); - ShiftItemsDownFrom(gUnknown_203B20C->unkC); + MoveToStorage(&gUnknown_203B20C->item); + ShiftItemsDownFrom(gUnknown_203B20C->itemIndex); FillInventoryGaps(); if(GetNumberOfFilledInventorySlots() == 0) { @@ -276,20 +276,20 @@ void sub_80189C8(void) if(sub_8012FD8(&gUnknown_203B20C->unk70) == 0) { sub_8013114(&gUnknown_203B20C->unk70, &menuAction); - if(menuAction != 1) gUnknown_203B20C->unk1C = menuAction; + if(menuAction != 1) gUnknown_203B20C->menuAction3 = menuAction; } switch(menuAction) { case 3: if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) sub_8012EA4(&gUnknown_203B20C->unk70, 1); - else if(IsThrowableItem(gUnknown_203B20C->unk8.id)) + else if(IsThrowableItem(gUnknown_203B20C->item.id)) sub_8017F10(0xC); else { - gTeamInventory_203B460->teamStorage[gUnknown_203B20C->unk8.id] -= gUnknown_203B20C->unk8.quantity; - item.id = gUnknown_203B20C->unk8.id; - item.quantity = gUnknown_203B20C->unk8.quantity; + gTeamInventory_203B460->teamStorage[gUnknown_203B20C->item.id] -= gUnknown_203B20C->item.quantity; + item.id = gUnknown_203B20C->item.id; + item.quantity = gUnknown_203B20C->item.quantity; AddHeldItemToInventory(&item); if(sub_801CF14(1) == 0) if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) diff --git a/src/mailbox.c b/src/mailbox.c index 1ee5a293d..817b10a3c 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -90,8 +90,8 @@ extern void sub_802B9FC(u8); u32 sub_802DFB0(void) { gUnknown_203B304 = MemoryAlloc(sizeof(struct unkStruct_203B304), 8); - gUnknown_203B304->unk64 = 0; - gUnknown_203B304->unk68 = 0; + gUnknown_203B304->menuAction1 = 0; + gUnknown_203B304->menuAction2 = 0; SetMailboxState(INITIALIZE_MAILBOX); return 1; } @@ -190,7 +190,7 @@ void sub_802E1AC(void) switch(gUnknown_203B304->state) { case MAIN_MAILBOX_MENU: - sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, gUnknown_203B304->unkFC, gUnknown_203B304->unk64, 2); + sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, gUnknown_203B304->unkFC, gUnknown_203B304->menuAction1, 2); break; case MAIL_MENU: sub_802BD14(0, 0, 4); @@ -201,7 +201,7 @@ void sub_802E1AC(void) case MAIL_ACTION_MENU: CreateMailMenu(); CreateMailAcceptedStatusBox(3); - sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, 0, gUnknown_203B304->unk68, 2); + sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, 0, gUnknown_203B304->menuAction2, 2); break; case MAIL_INFO: sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC); diff --git a/src/mailbox_1.c b/src/mailbox_1.c index a482b8ef0..59e0c6ce1 100644 --- a/src/mailbox_1.c +++ b/src/mailbox_1.c @@ -48,7 +48,7 @@ void HandleMailboxMenu(void) if(!sub_8012FD8(&gUnknown_203B304->unk6C)) { sub_8013114(&gUnknown_203B304->unk6C, &menuAction); - if(menuAction != 1) gUnknown_203B304->unk64 = menuAction; + if(menuAction != 1) gUnknown_203B304->menuAction1 = menuAction; } switch(menuAction) { @@ -124,7 +124,7 @@ void HandleMailActionMenu(void) if(!sub_8012FD8(&gUnknown_203B304->unk6C)) { sub_8013114(&gUnknown_203B304->unk6C, &menuAction); - if(menuAction != 1) gUnknown_203B304->unk68 = menuAction; + if(menuAction != 1) gUnknown_203B304->menuAction2 = menuAction; } switch(menuAction) { From e92e483f0cbf1582cf556b0374ff86d2b2a517ea Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 9 Apr 2023 16:37:23 -0700 Subject: [PATCH 08/11] document more vars --- src/debug_menu_mid.c | 9 ++++----- src/main_menu.c | 32 ++++++++++++++++---------------- src/options_menu.c | 6 +++--- src/wonder_mail_2_1.c | 6 +++--- 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 976bb8e22..a1c9fe5ae 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -12,8 +12,7 @@ struct unkStruct_203B3F0 // size: 0x138 u32 state; u8 id; - u8 fill5[0x8 - 5]; - u32 unk8; + u32 menuAction; struct MenuItem menuItems[8]; struct MenuStruct unk4C; u32 unk9C; @@ -192,7 +191,7 @@ void sub_803A5A0(void) case 2: sub_801CCD8(); sub_803A6F0(); - sub_8012D60(&gUnknown_203B3F0->unk4C, gUnknown_203B3F0->menuItems, 0, 0, gUnknown_203B3F0->unk8, 2); + sub_8012D60(&gUnknown_203B3F0->unk4C, gUnknown_203B3F0->menuItems, 0, 0, gUnknown_203B3F0->menuAction, 2); break; case 3: gUnknown_203B3F0->unkAC = 3; @@ -233,10 +232,10 @@ void sub_803A6F0(void) gUnknown_203B3F0->menuItems[0].text = &gDebug_NumberText; gUnknown_203B3F0->menuItems[0].menuAction = 2; - gUnknown_203B3F0->unk8 = 2; + gUnknown_203B3F0->menuAction = 2; if (!IsNotMoneyOrUsedTMItem(gUnknown_203B3F0->id)) { gUnknown_203B3F0->menuItems[0].menuAction = -1; - gUnknown_203B3F0->unk8 = 3; + gUnknown_203B3F0->menuAction = 3; } preload = gUnknown_203B3F0; // this var gets loaded in between the sets... very dumb diff --git a/src/main_menu.c b/src/main_menu.c index 8973d35fe..b32455768 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -460,7 +460,7 @@ void SetUpMenu(void) s32 UpdateMenu(void) { - s32 iVar1; + s32 nextMenu1; s32 nextMenu; nextMenu = MENU_NO_SCREEN_CHANGE; @@ -475,37 +475,37 @@ s32 UpdateMenu(void) nextMenu = UpdateLoadScreenMenu(); break; case MENU_TRADE_ITEMS: - iVar1 = UpdateTradeItemsMenu(); + nextMenu1 = UpdateTradeItemsMenu(); nextMenu = MENU_MAIN_SCREEN; - if (iVar1 != 3) { + if (nextMenu1 != 3) { nextMenu = MENU_NO_SCREEN_CHANGE; } break; case MENU_FRIEND_RESCUE: - iVar1 = UpdateFriendRescueMenu(); + nextMenu1 = UpdateFriendRescueMenu(); nextMenu = MENU_MAIN_SCREEN; - if (iVar1 != 3) { + if (nextMenu1 != 3) { nextMenu = MENU_NO_SCREEN_CHANGE; } break; case MENU_WONDER_MAIL: - iVar1 = UpdateWonderMailMenu(); + nextMenu1 = UpdateWonderMailMenu(); nextMenu = MENU_MAIN_SCREEN; - if (iVar1 != 3) { + if (nextMenu1 != 3) { nextMenu = MENU_NO_SCREEN_CHANGE; } break; case MENU_DUAL_SLOT: - iVar1 = UpdateDualSlotMenu(); + nextMenu1 = UpdateDualSlotMenu(); nextMenu = MENU_MAIN_SCREEN; - if (iVar1 != 3) { + if (nextMenu1 != 3) { nextMenu = MENU_NO_SCREEN_CHANGE; } break; case MENU_WIRELESS_COMMS: - iVar1 = UpdateWirelessCommsMenu(); + nextMenu1 = UpdateWirelessCommsMenu(); nextMenu = 5; - if ((iVar1 != 3) && (nextMenu = MENU_NO_SCREEN_CHANGE, iVar1 == 2)) { + if ((nextMenu1 != 3) && (nextMenu = MENU_NO_SCREEN_CHANGE, nextMenu1 == 2)) { nextMenu = MENU_MAIN_SCREEN; } break; @@ -623,13 +623,13 @@ void sub_8035C1C(void) } void -SetMenuItems(struct MenuStruct *param_1, struct UnkTextStruct2 *unkData, s32 index, const struct UnkTextStruct2 *param_4, const struct MenuItem *menuItems, u8 param_6 ,u32 param_7, u32 unused_8) +SetMenuItems(struct MenuStruct *param_1, struct UnkTextStruct2 *unkData, s32 index, const struct UnkTextStruct2 *param_4, const struct MenuItem *menuItems, u8 param_6 ,u32 menuAction, u32 unused_8) { unkData[index] = *param_4; ResetUnusedInputStruct(); sub_800641C(unkData,1,1); if (param_6 != 0) { - sub_8012D60(¶m_1[index],menuItems,0,0,param_7,index); + sub_8012D60(¶m_1[index],menuItems,0,0,menuAction,index); } else { sub_8012E04(¶m_1[index],menuItems,0,0,0,index); @@ -757,7 +757,7 @@ s32 sub_8035DB4(u32 currMenu) void DrawMainMenu(void) { - s32 iVar3; + s32 index; if(gUnknown_203B34C == NULL) { @@ -765,9 +765,9 @@ void DrawMainMenu(void) MemoryFill8((u8 *)gUnknown_203B34C, 0, sizeof(struct unkStruct_203B34C)); } - for(iVar3 = 0; iVar3 < 4; iVar3++) + for(index = 0; index < 4; index++) { - gUnknown_203B34C->unk144[iVar3] = gUnknown_80E59C8; + gUnknown_203B34C->unk144[index] = gUnknown_80E59C8; } ResetUnusedInputStruct(); diff --git a/src/options_menu.c b/src/options_menu.c index 522c986a0..2912c734d 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -12,7 +12,7 @@ struct unkStruct_203B25C u32 state; u32 chosenHintIndex; struct GameOptions newOptions; - u32 unk18; + u32 menuAction; struct MenuStruct unk1C; struct MenuItem menuItems[8]; u16 unkAC[8]; @@ -383,7 +383,7 @@ void sub_801DED0(void) case 0: case 1: gUnknown_203B25C->unk1C.unk0 = gOthers_MenuOption; - sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->unk18,0); + sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0); break; case 3: sub_801E3F0(0); @@ -454,7 +454,7 @@ void HandleOthersMenu(void) menuAction = 0; if (sub_8012FD8(&gUnknown_203B25C->unk1C) == '\0') { sub_8013114(&gUnknown_203B25C->unk1C,&menuAction); - gUnknown_203B25C->unk18 = menuAction; + gUnknown_203B25C->menuAction = menuAction; } switch(menuAction) { diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index d9199c857..004a2a1b4 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -38,7 +38,7 @@ struct unkStruct_203B2F0 u8 fillD[0x10 - 0xD]; u32 unk10; u8 fill14[0x68 - 0x14]; - u32 unk68; + u32 menuAction; struct MenuStruct unk6C; struct MenuStruct unkBC; struct MenuItem unk10C[8]; @@ -411,7 +411,7 @@ bool8 InitializeJobListMenu(u32 r0) else { gUnknown_203B2F0 = MemoryAlloc(sizeof(struct unkStruct_203B2F0), 0x8); - gUnknown_203B2F0->unk68 = 0; + gUnknown_203B2F0->menuAction = 0; gUnknown_203B2F0->unk0 = r0; SetJobListState(0); return TRUE; @@ -495,7 +495,7 @@ void sub_802C9D8(void) break; case 2: DrawJobListMenu(); - sub_8012D60(&gUnknown_203B2F0->unk6C, gUnknown_203B2F0->unk10C, 0, 0, gUnknown_203B2F0->unk68, 2); + sub_8012D60(&gUnknown_203B2F0->unk6C, gUnknown_203B2F0->unk10C, 0, 0, gUnknown_203B2F0->menuAction, 2); break; case 3: sub_802CBAC(); From 0520040b07cace51f49c903d464916bbb90cebaa Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 14 Apr 2023 11:39:11 -0700 Subject: [PATCH 09/11] decomp some more dungeon funcs --- asm/code_80450F8.s | 321 +--------------------------------- asm/code_8045A00.s | 2 +- asm/code_8046CE4.s | 2 +- asm/code_8073CF0.s | 2 +- asm/code_807CD9C.s | 4 +- asm/code_8085B0C.s | 2 +- include/dungeon_global_data.h | 2 +- src/code_8057824_1.c | 45 +++-- src/code_805A120.c | 34 ++-- src/code_80869E4.c | 42 ++--- src/dungeon_util.c | 138 +++++++++++++++ 11 files changed, 206 insertions(+), 388 deletions(-) diff --git a/asm/code_80450F8.s b/asm/code_80450F8.s index 69a2cc275..fb5d91b2d 100644 --- a/asm/code_80450F8.s +++ b/asm/code_80450F8.s @@ -5,325 +5,6 @@ .text - thumb_func_start sub_804513C -sub_804513C: - push {r4-r7,lr} - movs r3, 0 - ldr r7, _080451FC - ldr r6, _08045200 - ldr r4, _08045204 - movs r5, 0 -_08045148: - ldr r0, [r7] - lsls r2, r3, 2 - adds r1, r0, r6 - adds r1, r2 - adds r0, r4 - str r0, [r1] - str r5, [r0] - adds r4, 0x74 - adds r3, 0x1 - cmp r3, 0x3 - ble _08045148 - ldr r1, _08045208 - movs r2, 0 - adds r0, r1, 0x5 -_08045164: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08045164 - movs r3, 0 - ldr r7, _080451FC - ldr r6, _0804520C - ldr r4, _08045210 - movs r5, 0 -_08045176: - ldr r0, [r7] - lsls r2, r3, 2 - adds r1, r0, r6 - adds r1, r2 - adds r0, r4 - str r0, [r1] - str r5, [r0] - adds r4, 0x74 - adds r3, 0x1 - cmp r3, 0xF - ble _08045176 - ldr r1, _08045214 - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xF -_08045194: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08045194 - movs r3, 0 - ldr r5, _080451FC - ldr r4, _08045218 - movs r2, 0 -_080451A4: - ldr r0, [r5] - lsls r1, r3, 2 - adds r0, r4 - adds r0, r1 - str r2, [r0] - adds r3, 0x1 - cmp r3, 0x13 - ble _080451A4 - movs r3, 0 - ldr r7, _080451FC - ldr r6, _0804521C - ldr r4, _08045220 - movs r5, 0 -_080451BE: - ldr r0, [r7] - lsls r2, r3, 2 - adds r1, r0, r6 - adds r1, r2 - adds r0, r4 - str r0, [r1] - str r5, [r0] - adds r4, 0x74 - adds r3, 0x1 - cmp r3, 0x3F - ble _080451BE - movs r3, 0 - ldr r7, _080451FC - ldr r6, _08045224 - ldr r4, _08045228 - movs r5, 0 -_080451DE: - ldr r0, [r7] - lsls r2, r3, 2 - adds r1, r0, r6 - adds r1, r2 - adds r0, r4 - str r0, [r1] - str r5, [r0] - adds r4, 0x74 - adds r3, 0x1 - cmp r3, 0x3F - ble _080451DE - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080451FC: .4byte gDungeon -_08045200: .4byte 0x0001357c -_08045204: .4byte 0x0001381c -_08045208: .4byte gUnknown_202EE70 -_0804520C: .4byte 0x0001358c -_08045210: .4byte 0x000139ec -_08045214: .4byte gUnknown_202EE76 -_08045218: .4byte 0x000135cc -_0804521C: .4byte 0x0001361c -_08045220: .4byte 0x0001412c -_08045224: .4byte 0x0001371c -_08045228: .4byte 0x00015e2c - thumb_func_end sub_804513C - - thumb_func_start sub_804522C -sub_804522C: - push {r4-r7,lr} - sub sp, 0x4 - ldr r2, _08045274 - ldr r0, [r2] - ldr r3, _08045278 - adds r1, r0, r3 - ldrb r7, [r1] - ldr r1, _0804527C - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080452AA - movs r6, 0 - adds r7, r2, 0 -_08045248: - ldr r0, [r7] - lsls r1, r6, 2 - ldr r2, _08045280 - adds r0, r2 - adds r0, r1 - ldr r5, [r0] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080452A2 - ldr r0, [r7] - ldr r3, _08045284 - adds r0, r3 - ldr r0, [r0] - cmp r5, r0 - bne _08045288 - adds r0, r5, 0 - bl sub_806C51C - b _080452A2 - .align 2, 0 -_08045274: .4byte gDungeon -_08045278: .4byte 0x00018210 -_0804527C: .4byte 0x0001820a -_08045280: .4byte 0x000135cc -_08045284: .4byte 0x000181f8 -_08045288: - ldr r4, [r5, 0x70] - adds r0, r5, 0 - bl EntityGetStatusSprites - adds r2, r0, 0 - adds r0, r4, 0 - adds r0, 0x98 - ldr r0, [r0] - movs r3, 0x4 - ldrsh r1, [r4, r3] - movs r3, 0 - bl UpdateDungeonPokemonSprite -_080452A2: - adds r6, 0x1 - cmp r6, 0x13 - ble _08045248 - b _0804533E -_080452AA: - movs r6, 0 -_080452AC: - ldr r0, _08045348 - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _0804534C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080452CC - adds r0, r4, 0 - bl sub_806C51C -_080452CC: - adds r6, 0x1 - cmp r6, 0x3 - ble _080452AC - movs r6, 0 -_080452D4: - ldr r5, _08045348 - ldr r0, [r5] - lsls r1, r6, 2 - ldr r3, _08045350 - adds r0, r3 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080452F4 - adds r0, r4, 0 - bl sub_806C51C -_080452F4: - adds r6, 0x1 - cmp r6, 0xF - ble _080452D4 - movs r6, 0 - ldr r0, [r5] - ldr r1, _08045354 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r6, r0 - bge _08045336 - adds r4, r5, 0 -_0804530C: - ldr r0, [r4] - lsls r1, r6, 2 - ldr r3, _08045358 - adds r0, r3 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - str r1, [sp] - adds r1, r7, 0 - movs r2, 0x1 - movs r3, 0xFF - bl sub_80462AC - adds r6, 0x1 - ldr r0, [r4] - ldr r1, _08045354 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r6, r0 - blt _0804530C -_08045336: - cmp r7, 0 - beq _0804533E - bl sub_807FA9C -_0804533E: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08045348: .4byte gDungeon -_0804534C: .4byte 0x0001357c -_08045350: .4byte 0x0001358c -_08045354: .4byte 0x00003904 -_08045358: .4byte 0x0001361c - thumb_func_end sub_804522C - - thumb_func_start sub_804535C -sub_804535C: - push {lr} - adds r2, r0, 0 - cmp r1, 0 - beq _0804536C - ldr r0, [r1] - str r0, [r2, 0xC] - ldr r0, [r1, 0x4] - b _0804538E -_0804536C: - movs r0, 0x4 - ldrsh r1, [r2, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 11 - movs r1, 0xC0 - lsls r1, 4 - adds r0, r1 - str r0, [r2, 0xC] - movs r0, 0x6 - ldrsh r1, [r2, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 11 - movs r1, 0x80 - lsls r1, 5 - adds r0, r1 -_0804538E: - str r0, [r2, 0x10] - pop {r0} - bx r0 - thumb_func_end sub_804535C - - thumb_func_start sub_8045394 -sub_8045394: - str r1, [r0, 0xC] - str r2, [r0, 0x10] - bx lr - thumb_func_end sub_8045394 - - thumb_func_start sub_804539C -sub_804539C: - ldr r3, [r0, 0xC] - adds r3, r1 - str r3, [r0, 0xC] - ldr r1, [r0, 0x10] - adds r1, r2 - str r1, [r0, 0x10] - bx lr - thumb_func_end sub_804539C - thumb_func_start sub_80453AC sub_80453AC: push {r4-r7,lr} @@ -1101,4 +782,4 @@ _0804598A: bx r1 thumb_func_end sub_8045888 - .align 2, 0 \ No newline at end of file + .align 2, 0 diff --git a/asm/code_8045A00.s b/asm/code_8045A00.s index dce697954..ffee79238 100644 --- a/asm/code_8045A00.s +++ b/asm/code_8045A00.s @@ -1943,7 +1943,7 @@ _08046BAA: adds r0, r2 ldr r2, [r0] adds r0, r4, 0 - bl sub_804539C + bl IncreaseEntityPixelPos mov r0, r10 bl sub_8009C7C add r2, sp, 0x20 diff --git a/asm/code_8046CE4.s b/asm/code_8046CE4.s index 92bc9610f..64ae9576a 100644 --- a/asm/code_8046CE4.s +++ b/asm/code_8046CE4.s @@ -240,7 +240,7 @@ _0804731A: adds r0, r7, 0 ldr r1, [sp, 0x228] ldr r2, [sp, 0x22C] - bl sub_804539C + bl IncreaseEntityPixelPos bl IsWaterTileset lsls r0, 24 movs r2, 0 diff --git a/asm/code_8073CF0.s b/asm/code_8073CF0.s index 2c634e90c..ad996adae 100644 --- a/asm/code_8073CF0.s +++ b/asm/code_8073CF0.s @@ -2825,7 +2825,7 @@ _080753A6: ldr r1, [r4, 0x10] ldr r2, [r4, 0x14] adds r0, r3, 0 - bl sub_804539C + bl IncreaseEntityPixelPos ldrh r0, [r4, 0x18] subs r0, 0x1 strh r0, [r4, 0x18] diff --git a/asm/code_807CD9C.s b/asm/code_807CD9C.s index 3d726aaae..d59b9f0c4 100644 --- a/asm/code_807CD9C.s +++ b/asm/code_807CD9C.s @@ -151,7 +151,7 @@ _0807CEBC: adds r0, r6, 0 ldr r1, [sp, 0x2C] ldr r2, [sp, 0x30] - bl sub_804539C + bl IncreaseEntityPixelPos adds r0, r6, 0 bl sub_8045888 lsls r0, 24 @@ -1404,7 +1404,7 @@ _0807D8B0: adds r0, r2 ldr r2, [r0] adds r0, r4, 0 - bl sub_804539C + bl IncreaseEntityPixelPos mov r0, r10 bl sub_8009C7C add r2, sp, 0x20 diff --git a/asm/code_8085B0C.s b/asm/code_8085B0C.s index e68ed1d69..1c4c3dcf6 100644 --- a/asm/code_8085B0C.s +++ b/asm/code_8085B0C.s @@ -126,7 +126,7 @@ _08085C08: muls r2, r0 lsls r2, 8 adds r0, r6, 0 - bl sub_804539C + bl IncreaseEntityPixelPos _08085C32: adds r5, 0x10 adds r7, 0x1 diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index fb17e6e5e..67fc979a0 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -122,7 +122,7 @@ struct Dungeon /* 0x37FA */ bool8 minusIsActive[2]; // Index 0: Enemy , Index 1: Team /* 0x37FC */ bool8 decoyActive; u8 fill37FD[0x3904 - 0x37FD]; - /* 0x3904 */ u16 unk3904; + /* 0x3904 */ s16 unk3904; u8 fill3906[0x3A08 - 0x3906]; /* 0x3A08 */ u8 unk3A08; u8 fill3A09[0x3A0D - 0x3A09]; diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 35a3b80fb..84cc80260 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -325,7 +325,7 @@ extern void PlaySoundEffect(u32); extern void sub_806CDD4(struct Entity *, u32, u32); extern void sub_80869E4(struct Entity *, u32, u32, u32); extern void sub_806CE68(struct Entity *, u32); -extern void sub_804539C(struct Entity *, u32, u32); +extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_8042B0C(struct Entity *); extern void DisplayDungeonDialogue(u32 *); extern void sub_803E708(u32, u32); @@ -449,7 +449,6 @@ extern u8 sub_8086AE4(u32); extern void sub_8072008(struct Entity *, struct Entity *, s16, u32, u32); extern struct Entity *GetPartnerEntity(); extern void sub_80869E4(struct Entity *, u32, u32, u32); -extern void sub_804539C(struct Entity *, u32, u32); extern void sub_806CDD4(struct Entity *, u32, u32); extern void sub_8085374(); @@ -1534,12 +1533,12 @@ void GroudonPostStoryPreFightDialogue(void) } // Moves Groudon down in a walking fashion -void SceneGroudonMovement(struct Entity * param_1) +void SceneGroudonMovement(struct Entity * GroudonEntity) { int iVar1; sub_8086848(0x18,0x10); - sub_806CDD4(param_1,0,DIRECTION_SOUTH); + sub_806CDD4(GroudonEntity,0,DIRECTION_SOUTH); for(iVar1 = 0; iVar1 < 0x2C; iVar1++) { if ((iVar1 == 10) || (iVar1 == 0x20)) { @@ -1548,12 +1547,12 @@ void SceneGroudonMovement(struct Entity * param_1) sub_808680C(); } if ((iVar1 - 10U < 0xc) || (iVar1 > 0x1f)) { - sub_804539C(param_1,0,0x100); + IncreaseEntityPixelPos(GroudonEntity,0,0x100); } sub_803E46C(0x46); } - sub_80856C8(param_1,param_1->pos.x,param_1->pos.y + 1); - sub_80861D4(param_1,0xf,0); + sub_80856C8(GroudonEntity,GroudonEntity->pos.x,GroudonEntity->pos.y + 1); + sub_80861D4(GroudonEntity,0xf,0); sub_803E708(10,0x46); sub_808682C(); sub_8085930(DIRECTION_NORTH); @@ -1801,7 +1800,7 @@ void sub_8089168(void) void sub_808919C(struct Entity *r0) { - sub_804539C(r0, 0, 0xfffffe00); + IncreaseEntityPixelPos(r0, 0, 0xfffffe00); } void sub_80891B0(struct Entity *r0) @@ -1830,43 +1829,43 @@ void sub_80891F0(void) sub_80855E4(sub_80891D0); } -void sub_8089224(struct Entity * param_1) +void sub_8089224(struct Entity * entity) { - s32 iVar1; + s32 xPixelPos; - if (param_1->pixelPos.y < 0x9001) { + if (entity->pixelPos.y < 0x9001) { return; } - iVar1 = param_1->pixelPos.x; + xPixelPos = entity->pixelPos.x; - if(iVar1 < 0xE400) + if(xPixelPos < 0xE400) { - if(iVar1 <= 0xB400) + if(xPixelPos <= 0xB400) { // 0 - 0xB400 - sub_804539C(param_1, 0, 0xfffffe00); + IncreaseEntityPixelPos(entity, 0, 0xfffffe00); } else { // 0xB401 - 0xE3FF - sub_804539C(param_1, 0xfffffe00, 0); + IncreaseEntityPixelPos(entity, 0xfffffe00, 0); } } else { - if(iVar1 < 0xFC00) + if(xPixelPos < 0xFC00) { - sub_804539C(param_1, 0, 0xfffffe00); + IncreaseEntityPixelPos(entity, 0, 0xfffffe00); } else { - if(iVar1 <= 0x11400) + if(xPixelPos <= 0x11400) { - sub_804539C(param_1, 0x200, 0); + IncreaseEntityPixelPos(entity, 0x200, 0); } else { - sub_804539C(param_1, 0, 0xfffffe00); + IncreaseEntityPixelPos(entity, 0, 0xfffffe00); } } } @@ -5000,7 +4999,7 @@ void MedichamRescueDialogue(void) sub_806CDD4(MedichamEntity, 0, DIRECTION_SOUTH); for(counter = 0x17; counter >= 0; counter--) { - sub_804539C(MedichamEntity, 0, 0x80 << 1); + IncreaseEntityPixelPos(MedichamEntity, 0, 0x80 << 1); sub_803E46C(0x46); } sub_806CE68(MedichamEntity, DIRECTION_SOUTH); @@ -5090,7 +5089,7 @@ void SmeargleRescueDialogue(void) sub_806CDD4(SmeargleEntity, 0, DIRECTION_SOUTH); for(counter = 0x17; counter >= 0; counter--) { - sub_804539C(SmeargleEntity, 0, 0x80 << 1); + IncreaseEntityPixelPos(SmeargleEntity, 0, 0x80 << 1); sub_803E46C(0x46); } sub_806CE68(SmeargleEntity, DIRECTION_SOUTH); diff --git a/src/code_805A120.c b/src/code_805A120.c index 7946bacd2..b8ac0c2b8 100644 --- a/src/code_805A120.c +++ b/src/code_805A120.c @@ -99,7 +99,7 @@ extern void sub_806CDD4(struct Entity *, u32, u32); extern bool8 sub_80705F0(struct Entity *pokemon, struct Position *pos); extern u8 sub_8044B28(void); extern u8 sub_803F428(struct Position *pos); -extern void sub_804539C(struct Entity *, u32, u32); +extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_803E46C(u32); bool8 sub_80571F0(struct Entity * pokemon, struct Move *move); extern void sub_807EC28(u32); @@ -1132,9 +1132,9 @@ bool8 sub_805A85C(struct Entity * pokemon, struct Entity * target, struct Move * int y; int counter; struct Position *r9; - struct Position sp_0x18; + struct Position pos1; struct Move stackMove; - struct Position32 sp_0x28; + struct Position32 pos2; struct Tile *tile; struct Entity *entity; s32 temp; @@ -1142,7 +1142,7 @@ bool8 sub_805A85C(struct Entity * pokemon, struct Entity * target, struct Move * u8 check; - sp_0x18 = target->pos; + pos1 = target->pos; sub_806CDD4(target,10,8); for(counter = 0; counter < 0x28; counter++) @@ -1152,9 +1152,9 @@ bool8 sub_805A85C(struct Entity * pokemon, struct Entity * target, struct Move * x--; y--; if ((x != 0) || (y != 0)) { - sp_0x18.x = target->pos.x + x; - sp_0x18.y = target->pos.y + y; - if (sub_80705F0(target,&sp_0x18) == 0) goto _0805A8C2; + pos1.x = target->pos.x + x; + pos1.y = target->pos.y + y; + if (sub_80705F0(target,&pos1) == 0) goto _0805A8C2; } } _0805A8C2: @@ -1162,23 +1162,23 @@ _0805A8C2: sub_80522F4(pokemon,target,*gUnknown_80FEBDC); return FALSE; } - temp = sp_0x18.x * 0x1800; + temp = pos1.x * 0x1800; temp += (0xC00); - sp_0x28.x = (temp - target->pixelPos.x) / 0xc; + pos2.x = (temp - target->pixelPos.x) / 0xc; - temp2 = sp_0x18.y * 0x1800; + temp2 = pos1.y * 0x1800; temp2 += (0x80 << 5); - sp_0x28.y = ((temp2 - target->pixelPos.y) / 0xc); + pos2.y = ((temp2 - target->pixelPos.y) / 0xc); - if (((check = sub_803F428(&target->pos), r9 = &target->pos, check != 0)) || (sub_803F428(&sp_0x18) != 0)) { + if (((check = sub_803F428(&target->pos), r9 = &target->pos, check != 0)) || (sub_803F428(&pos1) != 0)) { for(counter = 0; counter < 0xC; counter++) { - sub_804539C(target,sp_0x28.x,sp_0x28.y); + IncreaseEntityPixelPos(target,pos2.x,pos2.y); sub_803E46C(0x2c); } } - tile = GetTileSafe(sp_0x18.x,sp_0x18.y); + tile = GetTileSafe(pos1.x,pos1.y); entity = tile->monster; if (entity != NULL) { if (GetEntityType(entity) == ENTITY_MONSTER) { @@ -1194,10 +1194,10 @@ _0805A8C2: else { _0805A9FE: if (EntityExists(target)) { - if ((sub_803F428(r9) != 0) || (sub_803F428(&sp_0x18) != 0)) { + if ((sub_803F428(r9) != 0) || (sub_803F428(&pos1) != 0)) { for(counter = 0; counter < 0xC; counter++) { - sub_804539C(target, -sp_0x28.x,-sp_0x28.y); + IncreaseEntityPixelPos(target, -pos2.x,-pos2.y); sub_803E46C(0x2c); } } @@ -1207,7 +1207,7 @@ _0805A9FE: } else { - sub_80694C0(target,sp_0x18.x,sp_0x18.y,0); + sub_80694C0(target,pos1.x,pos1.y,0); _0805AA5E: if (EntityExists(target)) { #ifndef NOMATCHING diff --git a/src/code_80869E4.c b/src/code_80869E4.c index 80b379982..0e7f2ff90 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -41,10 +41,10 @@ extern s32 GetCameraYPos(void); extern void sub_803F878(u32, u32); extern void sub_8086384(struct Entity *entity); extern void sub_8085930(u32); -extern void sub_804539C(struct Entity *, u32, u32); +extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_806CE68(struct Entity *, u32); extern void sub_806CDD4(struct Entity *, u8, u32); -extern void sub_804535C(struct Entity *, u32 *); +extern void sub_804535C(struct Entity *, struct Position32 *); extern void sub_8086A54(struct Entity *); extern void sub_8086A3C(struct Entity *); extern void PlaySoundEffect(u32); @@ -58,22 +58,22 @@ void SpriteShockEffect(struct Entity *entity) void sub_80862DC(struct Entity *entity) { - u32 array[2]; - array[0] = entity->pixelPos.x; - array[1] = entity->pixelPos.y + (0xE0 << 6); + struct Position32 pos; + pos.x = entity->pixelPos.x; + pos.y = entity->pixelPos.y + (0xE0 << 6); - sub_804535C(entity, array); + sub_804535C(entity, &pos); sub_806CDD4(entity, 0, DIRECTION_NORTH); sub_8086A54(entity); } void sub_8086310(struct Entity *entity) { - u32 array[2]; - array[0] = entity->pixelPos.x; - array[1] = entity->pixelPos.y + (0x90 << 8); + struct Position32 pos; + pos.x = entity->pixelPos.x; + pos.y = entity->pixelPos.y + (0x90 << 8); - sub_804535C(entity, array); + sub_804535C(entity, &pos); sub_806CE68(entity, DIRECTION_SOUTH); sub_8086A3C(entity); entity->isVisible = 0; @@ -81,22 +81,22 @@ void sub_8086310(struct Entity *entity) void sub_8086348(struct Entity *entity) { - u32 array[2]; - array[0] = entity->pixelPos.x + (0xF0 << 7); - array[1] = entity->pixelPos.y + 0xffffe000; + struct Position32 pos; + pos.x = entity->pixelPos.x + (0xF0 << 7); + pos.y = entity->pixelPos.y + 0xffffe000; - sub_804535C(entity, array); + sub_804535C(entity, &pos); sub_806CDD4(entity, 0, DIRECTION_WEST); sub_8086A54(entity); } void sub_8086384(struct Entity *entity) { - u32 array[2]; - array[0] = entity->pixelPos.x + (0xF0 << 7); - array[1] = entity->pixelPos.y; + struct Position32 pos; + pos.x = entity->pixelPos.x + (0xF0 << 7); + pos.y = entity->pixelPos.y; - sub_804535C(entity, array); + sub_804535C(entity, &pos); sub_806CDD4(entity, 0, DIRECTION_WEST); sub_8086A54(entity); } @@ -133,17 +133,17 @@ void sub_8086404(struct Entity *entity) void sub_8086410(struct Entity *entity) { - sub_804539C(entity, 0, 0xffffff00); + IncreaseEntityPixelPos(entity, 0, 0xffffff00); } void sub_8086424(struct Entity *entity) { - sub_804539C(entity, 0, 0x80 << 1); + IncreaseEntityPixelPos(entity, 0, 0x80 << 1); } void sub_8086434(struct Entity *entity) { - sub_804539C(entity, 0xffffff00, 0); + IncreaseEntityPixelPos(entity, 0xffffff00, 0); } void sub_8086448(void) diff --git a/src/dungeon_util.c b/src/dungeon_util.c index ed8bd0256..ac067ce47 100644 --- a/src/dungeon_util.c +++ b/src/dungeon_util.c @@ -2,6 +2,16 @@ #include "dungeon_util.h" #include "dungeon_map_access.h" +#include "dungeon_global_data.h" + +extern u8 gUnknown_202EE70[0x6]; +extern u8 gUnknown_202EE76[0x10]; +u32 EntityGetStatusSprites(struct Entity *entity); +void UpdateDungeonPokemonSprite(int id, short species, int status, char visible); + +void sub_806C51C(struct Entity *entity); +extern void sub_80462AC(struct Entity * ,u32, u32, u32, u32); +extern void sub_807FA9C(); const struct Position gAdjacentTileOffsets[] = { {0, 1}, @@ -62,3 +72,131 @@ struct Tile* GetTileAtEntitySafe(struct Entity *entity) { return GetTileSafe(entity->pos.x, entity->pos.y); } + +void sub_804513C(void) +{ + s32 index; + + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + gDungeon->teamPokemon[index] = &gDungeon->teamPokemonEntities[index]; + gDungeon->teamPokemon[index]->type = ENTITY_NOTHING; + } + + for(index = 0; index < 6; index++) + { + gUnknown_202EE70[index] = 0; + } + + for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) + { + gDungeon->wildPokemon[index] = &gDungeon->wildPokemonEntities[index]; + gDungeon->wildPokemon[index]->type = ENTITY_NOTHING; + } + + for(index = 0; index < 0x10; index++) + { + gUnknown_202EE76[index] = 0; + } + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + gDungeon->allPokemon[index] = NULL; + } + + for (index = 0; index < 0x40; index++) + { + gDungeon->clientPokemon[index] = &gDungeon->clientPokemonEntities[index]; + gDungeon->clientPokemon[index]->type = ENTITY_NOTHING; + } + + for(index = 0; index < 0x40; index++) + { + gDungeon->unk1371C[index] = &gDungeon->unk15E2C[index]; + gDungeon->unk1371C[index]->type = ENTITY_NOTHING; + } +} + +void sub_804522C(void) { + s32 index; + struct Entity *entity; + struct Entity *entity2; + struct EntityInfo *info; + u32 statusSprites; + bool8 crossEyed; + + crossEyed = gDungeon->hallucinating; + if (gDungeon->blinded) + { + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeon->allPokemon[index]; + if(EntityExists(entity)) + { + if(entity == gDungeon->cameraTarget) + { + sub_806C51C(entity); + } + else + { + info = entity->info; + statusSprites = EntityGetStatusSprites(entity); + UpdateDungeonPokemonSprite(info->unk98, info->apparentID, statusSprites, FALSE); + } + } + } + } + else + { + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity2 = gDungeon->teamPokemon[index]; + if(EntityExists(entity2)) + { + sub_806C51C(entity2); + } + } + for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) + { + entity2 = gDungeon->wildPokemon[index]; + if(EntityExists(entity2)) + { + sub_806C51C(entity2); + } + } + + for(index = 0; index < gDungeon->unk3904; index++) + { + sub_80462AC(gDungeon->clientPokemon[index], crossEyed, 1, 0xFF, 0); + } + + if(crossEyed) + sub_807FA9C(); + } +} + +void sub_804535C(struct Entity *entity, struct Position32 *pos) +{ + + if (pos != NULL) { + (entity->pixelPos).x = pos->x; + (entity->pixelPos).y = pos->y; + } + else { + (entity->pixelPos).x = (entity->pos).x * 0x1800 + 0xc00; + (entity->pixelPos).y = (entity->pos).y * 0x1800 + 0x1000; + } +} + +void sub_8045394(struct Entity *entity, s32 x, s32 y) +{ + entity->pixelPos.x = x; + entity->pixelPos.y = y; +} + +void IncreaseEntityPixelPos(struct Entity *entity, s32 x, s32 y) +{ + entity->pixelPos.x += x; + entity->pixelPos.y += y; +} + From 5cb16c3ecddbcb7ce864e7f6dfc9c25d6e45c2ea Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 14 Apr 2023 11:39:22 -0700 Subject: [PATCH 10/11] label a few more vars --- src/wonder_mail_3_mid.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 94f063cce..53cbfd3f5 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -29,7 +29,6 @@ struct unkStruct_203B30C // size: 0x150 s32 state; u8 unk4; - u8 unk5[3]; struct unkStruct_802C39C unk8; struct MenuStruct unk60; struct MenuItem unkB0[8]; @@ -44,8 +43,6 @@ struct unkStruct_203B310 /* 0x4 */ u32 nextState; /* 0x8 */ bool8 displayClientDialogueSprite; // true to display the dialogue sprite for the client /* 0x9 */ u8 currTeamRank; // team rank - u8 unkA; - u8 unkB; /* 0xC */ s32 itemRewardIndex; struct unkStruct_802F204 *unk10; /* 0x14 */ struct OpenedFile *faceFile; @@ -765,14 +762,14 @@ u32 sub_802F73C(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2, u8 r3) u32 sub_802F848(s16 param_1) { - int iVar2; + int index; s32 param_1_32; param_1_32 = param_1; // cast needed - for( iVar2 = 0; iVar2 < gUnknown_203B314->unkDE; iVar2++ ) { - if (gUnknown_203B314->unk0[iVar2] == param_1_32) { - sub_8013878(&gUnknown_203B314->unkBC,iVar2); + for( index = 0; index < gUnknown_203B314->unkDE; index++ ) { + if (gUnknown_203B314->unk0[index] == param_1_32) { + sub_8013878(&gUnknown_203B314->unkBC,index); sub_802F9C0(); sub_802FA50(); return 1; From fccd4b2ec8d5528aacd5e39f3a0d7e11011ec2c1 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 20 Apr 2023 21:57:49 -0700 Subject: [PATCH 11/11] document more fields of dungeon --- include/dungeon_entity.h | 10 +++++++--- include/dungeon_global_data.h | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index dd64a5391..8bc5db5ab 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -220,8 +220,10 @@ struct EntityInfo u8 fill160[0x164 - 0x160]; /* 0x164 */ u8 unk164; /* 0x165 */ u8 unk165; - u8 fill166[0x169 - 0x166]; - u8 turnsSinceWarpScarfActivation; + /* 0x166 */ u8 unk166; + /* 0x167 */ u8 unk167; + /* 0x168 */ u8 unk168; + /* 0x169 */ u8 turnsSinceWarpScarfActivation; /* 0x16C */ struct Position targetPos; /* 0x170 */ struct Position pixelPos; u32 unk174; @@ -291,11 +293,13 @@ struct Entity /* 0x54 */ u16 spriteGlobalIndex; u8 fill56[0x64 - 0x56]; u32 unk64; - u8 fill68[2]; + u16 unk68; /* 0x6A */ u8 unk6A; /* 0x6A */ u8 unk6B; /* 0x6C */ u8 direction; /* 0x6D */ u8 direction2; // Duplicate of 0x6C? + /* 0x6E */ u8 unk6E; + /* 0x6F */ u8 unk6F; /* 0x70 */ struct EntityInfo *info; }; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 67fc979a0..a3f91d9fa 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -95,7 +95,7 @@ struct Dungeon /* 0x660 */ s16 fractionalTurn; // Handles turn order when Pokémon have different movement speeds. u8 fill662[0x666 - 0x662]; /* 0x666 */ u16 windTurns; // Turns remaining before getting swept out of the dungeon. - u8 fill668[0x66A - 0x668]; + /* 0x668 */ u16 unk668; u16 bossSongIndex; u8 unk66C; u8 unk66D; @@ -114,7 +114,9 @@ struct Dungeon /* 0x68A */ u8 unk68A; u8 fill68B[0x699 - 0x68B]; u8 unk699; - u8 fill69A[0x363C - 0x69A]; + u8 fill69A[0x69C - 0x69A]; + /* 0x69C */ struct EntityInfo unk69C[4]; + u8 fillEBC[0x363C - 0xEBC]; /* 0x363C */ u8 expYieldRankings[NUM_MONSTERS]; u8 fill37E3[0x37F4 - 0x37D9]; /* 0x37F4 */ s32 unk37F4;