From dfedc6a896f37d19ee76574a2336e6136f2716a5 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 Mar 2023 20:25:08 -0700 Subject: [PATCH] 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 */