From fae8e0cbfbf9935da3050efaca43a8ffffbe642b Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 19 May 2023 10:50:27 -0700 Subject: [PATCH] more menu decomp and merging of files --- asm/wonder_mail_3.s | 297 --------------------------------- include/code_802C39C.h | 2 +- include/mailbox.h | 6 +- include/pelipper_board.h | 5 +- include/wonder_mail.h | 5 +- include/wonder_mail_2_1.h | 4 +- include/wonder_mail_3.h | 7 +- ld_script.txt | 1 - src/mailbox.c | 10 +- src/menu_input.c | 4 +- src/pelipper_board.c | 10 +- src/thank_you_wonder_mail.c | 2 +- src/wonder_mail_2.c | 2 +- src/wonder_mail_2_1.c | 8 +- src/wonder_mail_3.c | 322 ++++++++++++++++++++++++++++++++++-- src/wonder_mail_3_mid.c | 2 +- src/wonder_mail_4.c | 6 +- src/wonder_mail_5.c | 2 +- src/wonder_mail_802DF88.c | 218 +----------------------- 19 files changed, 344 insertions(+), 569 deletions(-) delete mode 100644 asm/wonder_mail_3.s diff --git a/asm/wonder_mail_3.s b/asm/wonder_mail_3.s deleted file mode 100644 index 59c7c8fe9..000000000 --- a/asm/wonder_mail_3.s +++ /dev/null @@ -1,297 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_802D5A4 -sub_802D5A4: - push {r4-r7,lr} - ldr r4, _0802D630 - ldr r0, [r4] - movs r5, 0xCC - lsls r5, 1 - adds r0, r5 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - mov r12, r0 - movs r3, 0 - movs r1, 0x8C - lsls r1, 1 - add r1, r12 - ldr r0, _0802D634 - ldr r0, [r0] - str r0, [r1] - movs r1, 0x8E - lsls r1, 1 - add r1, r12 - movs r0, 0x2 - str r0, [r1] - movs r2, 0x1 - movs r1, 0x90 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D638 - ldr r0, [r0] - str r0, [r1] - movs r1, 0x92 - lsls r1, 1 - add r1, r12 - movs r0, 0x5 - str r0, [r1] - movs r7, 0x2 - movs r0, 0x94 - lsls r0, 1 - add r0, r12 - str r3, [r0] - movs r0, 0x96 - lsls r0, 1 - add r0, r12 - str r2, [r0] - movs r6, 0 - movs r3, 0x8E - lsls r3, 1 - add r3, r12 - mov r0, r12 - adds r2, r0, r5 -_0802D60A: - ldrh r0, [r2] - cmp r0, 0 - bne _0802D61A - ldr r1, [r3] - mov r5, r12 - ldr r0, [r5, 0x6C] - cmp r1, r0 - beq _0802D62A -_0802D61A: - adds r3, 0x8 - adds r2, 0x2 - adds r6, 0x1 - cmp r6, r7 - blt _0802D60A - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x6C] -_0802D62A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802D630: .4byte gUnknown_203B2F8 -_0802D634: .4byte gUnknown_80D494C -_0802D638: .4byte gUnknown_80D4970 - thumb_func_end sub_802D5A4 - - thumb_func_start sub_802D63C -sub_802D63C: - ldr r0, _0802D684 - ldr r0, [r0] - mov r12, r0 - movs r3, 0 - movs r1, 0xAC - lsls r1, 1 - add r1, r12 - ldr r0, _0802D688 - ldr r0, [r0] - str r0, [r1] - movs r1, 0xAE - lsls r1, 1 - add r1, r12 - movs r0, 0x3 - str r0, [r1] - movs r2, 0x1 - movs r1, 0xB0 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D68C - ldr r0, [r0] - str r0, [r1] - movs r1, 0xB2 - lsls r1, 1 - add r1, r12 - movs r0, 0x4 - str r0, [r1] - movs r0, 0xB4 - lsls r0, 1 - add r0, r12 - str r3, [r0] - movs r0, 0xB6 - lsls r0, 1 - add r0, r12 - str r2, [r0] - bx lr - .align 2, 0 -_0802D684: .4byte gUnknown_203B2F8 -_0802D688: .4byte gUnknown_80D4920 -_0802D68C: .4byte gUnknown_80D4928 - thumb_func_end sub_802D63C - - thumb_func_start sub_802D690 -sub_802D690: - push {r4,r5,lr} - ldr r2, _0802D728 - ldr r0, [r2] - mov r12, r0 - movs r4, 0 - movs r1, 0xAC - lsls r1, 1 - add r1, r12 - ldr r0, _0802D72C - ldr r0, [r0] - str r0, [r1] - movs r1, 0xAE - lsls r1, 1 - add r1, r12 - movs r0, 0x3 - str r0, [r1] - movs r3, 0x1 - movs r1, 0xB0 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D730 - ldr r0, [r0] - str r0, [r1] - movs r1, 0xB2 - lsls r1, 1 - add r1, r12 - movs r0, 0x4 - str r0, [r1] - movs r1, 0xB4 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D734 - str r0, [r1] - movs r1, 0xB6 - lsls r1, 1 - add r1, r12 - movs r0, 0x6 - str r0, [r1] - movs r1, 0xB8 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D738 - str r0, [r1] - movs r1, 0xBA - lsls r1, 1 - add r1, r12 - movs r0, 0x7 - str r0, [r1] - movs r5, 0x4 - movs r0, 0xBC - lsls r0, 1 - add r0, r12 - str r4, [r0] - movs r0, 0xBE - lsls r0, 1 - add r0, r12 - str r3, [r0] - movs r3, 0 - mov r0, r12 - ldr r4, [r0, 0x74] - movs r1, 0xAE - lsls r1, 1 - add r1, r12 -_0802D70E: - ldr r0, [r1] - cmp r0, r4 - beq _0802D722 - adds r1, 0x8 - adds r3, 0x1 - cmp r3, r5 - blt _0802D70E - ldr r1, [r2] - movs r0, 0x4 - str r0, [r1, 0x74] -_0802D722: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802D728: .4byte gUnknown_203B2F8 -_0802D72C: .4byte gUnknown_80D4920 -_0802D730: .4byte gUnknown_80D4928 -_0802D734: .4byte gUnknown_80E014C -_0802D738: .4byte gUnknown_80E0158 - thumb_func_end sub_802D690 - - thumb_func_start sub_802D73C -sub_802D73C: - push {r4,r5,lr} - ldr r3, _0802D7C0 - ldr r0, [r3] - mov r12, r0 - movs r4, 0 - movs r1, 0xAC - lsls r1, 1 - add r1, r12 - ldr r0, _0802D7C4 - ldr r0, [r0] - str r0, [r1] - movs r1, 0xAE - lsls r1, 1 - add r1, r12 - movs r0, 0x3 - str r0, [r1] - movs r2, 0x1 - movs r1, 0xB0 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D7C8 - ldr r0, [r0] - str r0, [r1] - movs r1, 0xB2 - lsls r1, 1 - add r1, r12 - movs r0, 0x4 - str r0, [r1] - movs r1, 0xB4 - lsls r1, 1 - add r1, r12 - ldr r0, _0802D7CC - str r0, [r1] - movs r1, 0xB6 - lsls r1, 1 - add r1, r12 - movs r0, 0x6 - str r0, [r1] - movs r5, 0x3 - movs r0, 0xB8 - lsls r0, 1 - add r0, r12 - str r4, [r0] - movs r0, 0xBA - lsls r0, 1 - add r0, r12 - str r2, [r0] - movs r2, 0 - mov r0, r12 - ldr r4, [r0, 0x70] - movs r1, 0xAE - lsls r1, 1 - add r1, r12 -_0802D7A6: - ldr r0, [r1] - cmp r0, r4 - beq _0802D7BA - adds r1, 0x8 - adds r2, 0x1 - cmp r2, r5 - blt _0802D7A6 - ldr r1, [r3] - movs r0, 0x4 - str r0, [r1, 0x70] -_0802D7BA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802D7C0: .4byte gUnknown_203B2F8 -_0802D7C4: .4byte gUnknown_80D4920 -_0802D7C8: .4byte gUnknown_80D4928 -_0802D7CC: .4byte gUnknown_80E014C - thumb_func_end sub_802D73C - - .align 2,0 diff --git a/include/code_802C39C.h b/include/code_802C39C.h index 6b478760a..18b50f1cc 100644 --- a/include/code_802C39C.h +++ b/include/code_802C39C.h @@ -5,7 +5,7 @@ struct unkStruct_802C39C /* 0xC */ u8 *playerName; /* 0x10 */ s16 clientSpecies; /* 0x12 */ s16 targetSpecies; - /* 0x14 */ u8 unk14; + /* 0x14 */ u8 targetItem; /* 0x15 */ u8 fill15[0x2E - 0x15]; u8 unk2E; u8 fill2F[0x34 - 0x2F]; diff --git a/include/mailbox.h b/include/mailbox.h index ef91f7ee0..a79913dc9 100644 --- a/include/mailbox.h +++ b/include/mailbox.h @@ -4,6 +4,7 @@ #include "menu.h" #include "text.h" #include "constants/mailbox.h" +#include "code_802C39C.h" struct unkStruct_203B304 { @@ -12,10 +13,7 @@ struct unkStruct_203B304 u32 fallbackState; u8 mailboxIndex; u8 mailIndex; - u32 unkC; - u8 fill10[0x50 - 0x10]; - u8 unk50; - u8 fill51[0x64 - 0x51]; + struct unkStruct_802C39C unkC; u32 menuAction1; u32 menuAction2; struct MenuStruct unk6C; diff --git a/include/pelipper_board.h b/include/pelipper_board.h index 80ba03b87..72b5c0387 100644 --- a/include/pelipper_board.h +++ b/include/pelipper_board.h @@ -6,10 +6,7 @@ struct unkStruct_203B308 u32 state; u32 unk4; u8 jobIndex; - u32 unkC; - u8 fill10[0x50 - 0x10]; - u8 unk50; - u8 fill51[0x64 - 0x51]; + struct unkStruct_802C39C unkC; u32 menuAction1; u32 menuAction2; struct MenuStruct unk6C; diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 255bfb4b2..f59e8235e 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -12,15 +12,14 @@ struct unkStruct_802F204 { - /* 0x0 */ u8 clientName[POKEMON_NAME_LENGTH]; // client name? + /* 0x0 */ u8 clientName[POKEMON_NAME_LENGTH]; /* 0xA */ u8 name2[POKEMON_NAME_LENGTH]; // target name? - /* 0x14 */ s16 unk14; // poke species (client??) + /* 0x14 */ s16 clientSpecies; /* 0x16 */ u8 unk16; /* 0x18 */ s32 moneyReward; /* 0x1C */ u8 itemRewards[MAX_ITEM_REWARDS]; /* 0x1F */ u8 quantity; /* 0x20 */ u8 friendAreaReward; - u8 fill21[0x24 - 0x21]; /* 0x24 */ u32 teamRankPtsReward; }; diff --git a/include/wonder_mail_2_1.h b/include/wonder_mail_2_1.h index d64cc4607..810e8d2ea 100644 --- a/include/wonder_mail_2_1.h +++ b/include/wonder_mail_2_1.h @@ -25,9 +25,7 @@ struct unkStruct_203B2F0 u32 state; u8 unk8[0xC - 0x8]; u8 unkC; - u8 fillD[0x10 - 0xD]; - u32 unk10; - u8 fill14[0x68 - 0x14]; + struct unkStruct_802C39C unk10; u32 menuAction; struct MenuStruct unk6C; struct MenuStruct unkBC; diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h index a4761870d..8e1d7097e 100644 --- a/include/wonder_mail_3.h +++ b/include/wonder_mail_3.h @@ -44,12 +44,7 @@ struct unkStruct_203B2F8 struct unkSubStruct_203B2F8 *mail; u8 jobSlotIndex; u8 fill11[0x14 - 0x11]; - u32 unk14; - u8 fill18[0x58 - 0x18]; - u8 unk58; - u8 fill59[0x64 - 0x59]; - u8 *unk64; - u32 unk68; + struct unkStruct_802C39C unk14; u32 menuAction1; u32 menuAction2; u32 menuAction3; diff --git a/ld_script.txt b/ld_script.txt index e5e1c9772..7d485cd68 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -136,7 +136,6 @@ SECTIONS { src/wonder_mail_2_1.o(.text); asm/wonder_mail_802C860.o(.text); src/wonder_mail_3.o(.text); - asm/wonder_mail_3.o(.text); src/wonder_mail_802DF88.o(.text); src/mailbox.o(.text); src/pelipper_board.o(.text); diff --git a/src/mailbox.c b/src/mailbox.c index 4922eabc4..317e79a51 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -82,8 +82,8 @@ extern void sub_802BD14(u32, u32, u32); extern void sub_802BE94(u32); extern void CreateMailMenu(void); extern void CreateMailAcceptedStatusBox(u32); -extern void sub_803B35C(struct WonderMail *, u32 *); -extern void sub_802DE84(u32 *); +extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *); +extern void sub_802DE84(struct unkStruct_802C39C *); extern void InitializeJobListMenu(u32); extern void sub_802B640(u32, u32, u32); extern void sub_802B7D0(u32); @@ -236,8 +236,8 @@ void sub_802E1AC(void) break; case MAIL_INFO: sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC); - gUnknown_203B304->unkC = 3; - gUnknown_203B304->unk50 = 0; + gUnknown_203B304->unkC.unk0[0] = 3; + gUnknown_203B304->unkC.unk44 = 0; sub_802DE84(&gUnknown_203B304->unkC); break; case JOB_LIST_MENU: @@ -265,7 +265,7 @@ void CreateMailboxMenu(void) s32 loopMax; loopMax = 0; - MemoryFill16(gUnknown_203B304->unkFC,0,0x10); + MemoryFill16(gUnknown_203B304->unkFC,0,sizeof(gUnknown_203B304->unkFC)); gUnknown_203B304->menuItems[0].text = gMailboxCheckMail; gUnknown_203B304->menuItems[0].menuAction = 2; if ((HasNoMailinMailbox())) { diff --git a/src/menu_input.c b/src/menu_input.c index 0cf69b78b..0798fc4a5 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -23,7 +23,7 @@ void MoveMenuCursorUp(u32 *); void MoveMenuCursorDown(u32 *); extern void sub_80073B8(u32); extern s32 sub_8008ED0(const u8 *); -extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern s32 sub_8013800(u32 *, s32); extern void sub_80073E0(u32); extern void sub_8013660(u32 *); @@ -316,7 +316,7 @@ void sub_8012EBC(struct MenuStruct *param_1) sub_8006518(textStack); x = sub_8008ED0(param_1->unk0); xxx_format_and_draw((((ptr_text2->unk14[2]) * 8 - x) /2) + 8, - 0,*(u8 **)param_1, param_1->index, 0); + 0,param_1->unk0, param_1->index, 0); } colorArray = param_1->menuTextColorArray; menuItemsPtr = param_1->menuItems; diff --git a/src/pelipper_board.c b/src/pelipper_board.c index eccc2fe35..339e39896 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -75,8 +75,8 @@ extern void sub_802C10C(u32, u32, u32); extern void sub_802C28C(u32); extern void DrawPelipperBoardJobMenu(void); extern void CreatePelipperAcceptedStatusBox(u32); -extern void sub_803B35C(struct WonderMail *, u32 *); -extern void sub_802DE84(u32 *); +extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *); +extern void sub_802DE84(struct unkStruct_802C39C *); extern void InitializeJobListMenu(u32); extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); @@ -223,8 +223,8 @@ void sub_802EA58(void) break; case PELIPPER_JOB_INFO: sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC); - gPelipperBoard->unkC = 3; - gPelipperBoard->unk50 = 0; + gPelipperBoard->unkC.unk0[0] = 3; + gPelipperBoard->unkC.unk44 = 0; sub_802DE84(&gPelipperBoard->unkC); break; case PELIPPER_JOB_LIST_MENU: @@ -243,7 +243,7 @@ void CreatePelipperBoardMenu(void) s32 loopMax; loopMax = 0; - MemoryFill16(gPelipperBoard->unkFC,0,0x10); + MemoryFill16(gPelipperBoard->unkFC,0,sizeof(gPelipperBoard->unkFC)); gPelipperBoard->menuItems[0].text = gPelipperBoard_BulletinBoard; gPelipperBoard->menuItems[0].menuAction = 2; if ((HasNoPelipperBoardJobs())) { diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 45797e0f5..303243c45 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -1404,7 +1404,7 @@ void UpdateThankYouMailText(void) case 0x22: monName = GetMonSpecies(MONSTER_PELIPPER); strcpy(gUnknown_203B2C4->unk53C.clientName,monName); // 0x53C - gUnknown_203B2C4->unk53C.unk14 = MONSTER_PELIPPER; // 0x550 + gUnknown_203B2C4->unk53C.clientSpecies = MONSTER_PELIPPER; // 0x550 gUnknown_203B2C4->unk53C.unk16 = 2; // 0x552 gUnknown_203B2C4->unk53C.moneyReward = 0; // 0x554 mailIndex = GetMailIndex(6,gUnknown_203B2C4->unk430); diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index cfbbfde0c..3250431a2 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -176,7 +176,7 @@ void sub_802B3E0(void) case 1: monName = GetMonSpecies(MONSTER_PELIPPER); strcpy(gUnknown_203B2C8->unk114.clientName, monName); - gUnknown_203B2C8->unk114.unk14 = MONSTER_PELIPPER; + gUnknown_203B2C8->unk114.clientSpecies = MONSTER_PELIPPER; gUnknown_203B2C8->unk114.unk16 = 2; gUnknown_203B2C8->unk114.moneyReward = 0; sub_8097790(); diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 3dbb6b2f8..8392a2325 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -102,7 +102,7 @@ extern void sub_8013C68(u32 *); extern void sub_80073E0(u32); extern struct WonderMail* GetJobSlotInfo(u8); extern s32 sub_8013800(void *, u32); -extern void sub_803B35C(void *, u32 *); +extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void CreateRescueTitle(struct unkStruct_802C39C *); @@ -123,7 +123,7 @@ extern void sub_802CD38(void); extern void sub_802CDB8(void); extern void sub_802C928(void); extern void sub_802C9D8(void); -extern void sub_802DE84(u32 *); +extern void sub_802DE84(struct unkStruct_802C39C *); extern void sub_802CBAC(void); s32 CountAcceptedJobs(void); @@ -328,7 +328,7 @@ void DrawJobListMenu(void) 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); + sub_803B35C(mail,&local); CreateRescueTitle(&local); } sub_80073E0(gUnknown_203B2E8->unk3C); @@ -463,7 +463,7 @@ void sub_802C9D8(void) break; case 4: sub_803B35C(GetJobSlotInfo(gUnknown_203B2F0->unkC), &gUnknown_203B2F0->unk10); - gUnknown_203B2F0->unk10 = 3; + gUnknown_203B2F0->unk10.unk0[0] = 3; sub_802DE84(&gUnknown_203B2F0->unk10); break; case 5: diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 19f3ce1c2..aa06f0bc2 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -9,11 +9,10 @@ #include "menu.h" #include "wonder_mail.h" #include "wonder_mail_3.h" -#include "code_802C39C.h" #include "menu_input.h" +#include "code_80958E8.h" #include "wonder_mail_2_1.h" - const struct UnkTextStruct2 gUnknown_80DFDD4 = { 0x00, 0x00, 0x00, 0x00, @@ -135,8 +134,8 @@ extern u8 *sub_8096DD8(void); extern u8 sub_8096C08(u8 *); extern void DrawJobListMenu(void); extern struct WonderMail* GetJobSlotInfo(u8); -extern void sub_803B35C(void *, u32*); -extern void sub_802DE84(u32 *); +extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C*); +extern void sub_802DE84(struct unkStruct_802C39C *); extern void sub_802D73C(void); extern void sub_802C640(u32); extern void sub_802C4C8(u32, u32, u32); @@ -183,6 +182,8 @@ extern struct unkStruct_203B2F0 *gUnknown_203B2F0; extern u8 *gUnknown_80D4920[]; extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D494C[]; +extern u8 *gUnknown_80D4970[]; void sub_802CBAC(void) { @@ -464,7 +465,7 @@ void sub_802CFD0(void) iVar1 = sub_803B344(gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C + r5); local.unk0[0] = gUnknown_203B2F4->unk34; local.y = sub_8013800(gUnknown_203B2F4, r5); - sub_803B35C(iVar1,local.unk0); + sub_803B35C(&iVar1->mail,&local); local.unk43 = 1; local.unk4C = iVar1->unk14; CreateRescueTitle(&local); @@ -682,15 +683,316 @@ void sub_802D2A8(void) break; case 0xf: sub_803B35C(GetJobSlotInfo(gUnknown_203B2F8->jobSlotIndex),&gUnknown_203B2F8->unk14); - gUnknown_203B2F8->unk14 = 3; + gUnknown_203B2F8->unk14.unk0[0] = 3; sub_802DE84(&gUnknown_203B2F8->unk14); break; case 0x10: - sub_803B35C(gUnknown_203B2F8->mail,&gUnknown_203B2F8->unk14); - gUnknown_203B2F8->unk14 = 3; - gUnknown_203B2F8->unk58 = 0; - gUnknown_203B2F8->unk64 = gUnknown_203B2F8->mail->unk18; + sub_803B35C(&gUnknown_203B2F8->mail->wonderMail,&gUnknown_203B2F8->unk14); + gUnknown_203B2F8->unk14.unk0[0] = 3; + gUnknown_203B2F8->unk14.unk44 = 0; + gUnknown_203B2F8->unk14.unk50[0] = gUnknown_203B2F8->mail->unk18; sub_802DE84(&gUnknown_203B2F8->unk14); break; } } + +void sub_802D5A4(void) { + s32 loopMax; + s32 index; + + loopMax = 0; + MemoryFill16(gUnknown_203B2F8->unk198, 0, sizeof(gUnknown_203B2F8->unk198)); + gUnknown_203B2F8->unk118[loopMax].text = *gUnknown_80D494C; + gUnknown_203B2F8->unk118[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B2F8->unk118[loopMax].text = *gUnknown_80D4970; + gUnknown_203B2F8->unk118[loopMax].menuAction = 5; + loopMax += 1; + gUnknown_203B2F8->unk118[loopMax].text = NULL; + gUnknown_203B2F8->unk118[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if (gUnknown_203B2F8->unk198[index] == 0) { + if(gUnknown_203B2F8->unk118[index].menuAction == gUnknown_203B2F8->menuAction1) + return; + } + } + gUnknown_203B2F8->menuAction1 = 2; +} + +void sub_802D63C(void) { + s32 loopMax = 0; + gUnknown_203B2F8->unk158[loopMax].text = *gUnknown_80D4920; + gUnknown_203B2F8->unk158[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = *gUnknown_80D4928; + gUnknown_203B2F8->unk158[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = NULL; + gUnknown_203B2F8->unk158[loopMax].menuAction = 1; +} + +void sub_802D690(void) { + s32 loopMax; + s32 index; + + loopMax = 0; + gUnknown_203B2F8->unk158[loopMax].text = *gUnknown_80D4920; + gUnknown_203B2F8->unk158[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = *gUnknown_80D4928; + gUnknown_203B2F8->unk158[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = gUnknown_80E014C; + gUnknown_203B2F8->unk158[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = gUnknown_80E0158; + gUnknown_203B2F8->unk158[loopMax].menuAction = 7; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = NULL; + gUnknown_203B2F8->unk158[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2F8->unk158[index].menuAction == gUnknown_203B2F8->menuAction3) + return; + } + gUnknown_203B2F8->menuAction3 = 4; +} + +void sub_802D73C(void) { + s32 loopMax; + s32 index; + + loopMax = 0; + gUnknown_203B2F8->unk158[loopMax].text = *gUnknown_80D4920; + gUnknown_203B2F8->unk158[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = *gUnknown_80D4928; + gUnknown_203B2F8->unk158[loopMax].menuAction = 4; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = gUnknown_80E014C; + gUnknown_203B2F8->unk158[loopMax].menuAction = 6; + loopMax += 1; + gUnknown_203B2F8->unk158[loopMax].text = NULL; + gUnknown_203B2F8->unk158[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2F8->unk158[index].menuAction == gUnknown_203B2F8->menuAction2) + return; + } + gUnknown_203B2F8->menuAction2 = 4; +} + +extern s32 sub_80144A4(s32 *); + + +void sub_802D7D0(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B2F8->menuAction2 = menuAction; + } + switch(menuAction) { + // Yes + case 3: + 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(INITIAL_WONDER_MAIL_CHECK); + break; + } + } +} + +void sub_802D82C(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B2F8->menuAction3 = menuAction; + } + switch(menuAction) { + // Yes + case 3: + ResetJobSlot(gUnknown_203B2F8->jobSlotIndex); + sub_8096C80(); + 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: + case 4: + sub_802D1A0(1); + break; + } + } +} + +void sub_802D8CC(void) +{ + switch(sub_802C598(1)) { + case 0: + case 1: + break; + case 3: + gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex(); + sub_802D1A0(0xd); + break; + case 4: + gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex(); + gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; + sub_802D1A0(0xf); + break; + case 2: + sub_802C688(); + sub_802D1A0(1); + break; + } +} + +void sub_802D940(void) +{ + struct WonderMail *mail; + s32 menuAction; + + menuAction = 0; + sub_802C598(0); + if ((sub_8012FD8(&gUnknown_203B2F8->unk78) == 0) && (sub_8013114(&gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) { + gUnknown_203B2F8->menuAction1 = menuAction; + } + + 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(7); + } + else { + sub_802D1A0(0xE); + } + break; + // Info + case 5: + gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; + sub_802D1A0(0xf); + break; + case 1: + sub_802D1A0(DRAW_JOB_LIST_1); + break; + } +} + +void sub_802D9F0(void) +{ + s32 menuAction; + + menuAction = 0; + sub_802C598(0); + sub_8012FD8(&gUnknown_203B2F8->unk78); + if (sub_8012FD8(&gUnknown_203B2F8->unkC8) == 0) { + sub_8013114(&gUnknown_203B2F8->unkC8,&menuAction); + } + + switch(menuAction) + { + // No + case 1: + case 4: + sub_802D1A0(DRAW_JOB_LIST_1); + break; + // Yes + case 3: + sub_802C688(); + ResetJobSlot(gUnknown_203B2F8->jobSlotIndex); + sub_8096C80(); + sub_802D1A0(RECEIVE_WONDER_MAIL); + break; + } +} + +void sub_802DA60(void) +{ + switch(sub_802DEE0()) + { + case 2: + case 3: + sub_802DF24(); + sub_802D1A0(gUnknown_203B2F8->fallbackState); + break; + case 0: + case 1: + break; + } +} + +void AdvancetoFallbackWonderMailRescueState(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_802D1A0(gUnknown_203B2F8->fallbackState); + } +} + +bool8 sub_802DAA8(void) +{ + struct WonderMail *mail; + + mail = GetJobSlotInfo(gUnknown_203B2F8->jobSlotIndex); + if (!gUnknown_203B2F8->unk9) { + return TRUE; + } + else { + if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)) return FALSE; + return TRUE; + } +} + +bool8 sub_802DADC(void) +{ + u8 mailType; + struct WonderMail *mail; + s32 counter; + + if (!gUnknown_203B2F8->unk9) { +_0802DAE8: + return TRUE; + } + else { + for( mail = &gUnknown_203B490->jobSlots[0], counter = 0; counter < MAX_ACCEPTED_JOBS; mail++, counter++) + { + mailType = mail->mailType; + if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) || + ((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->dungeon.id)))) goto _0802DAE8; + } + return FALSE; + } +} + diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 8a315afb9..2e1ead4a6 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -470,7 +470,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 displayClientSprite) strcpy(gUnknown_202E5D8, preload->unk10->clientName); PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); - gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->unk14); + gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->clientSpecies); gUnknown_203B310->faceData = NULL; gUnknown_203B310->unk20 = 0; diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 3bbdac56c..8a975dda3 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -294,9 +294,9 @@ void sub_803092C(void) local.dungeon = &mail->dungeon; local.playerName = mail->playerName; - local.clientSpecies = (mail->clientSpecies); - local.targetSpecies = (mail->clientSpecies); - local.unk14 = 0; + local.clientSpecies = mail->clientSpecies; + local.targetSpecies = mail->clientSpecies; + local.targetItem = ITEM_NOTHING; local.unk2E = 5; switch(mail->mailType) diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index 016db8b64..7c6183cc6 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -127,7 +127,7 @@ void sub_8030E48(void) stack.playerName = mail->playerName; stack.clientSpecies = mail->clientSpecies; stack.targetSpecies = mail->clientSpecies; - stack.unk14 = 0; + stack.targetItem = ITEM_NOTHING; if (mail->unk20.id == ITEM_NOTHING) { stack.unk2E = 5; } diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index 2a730cefb..7074764fe 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -1,16 +1,9 @@ #include "global.h" -#include "constants/wonder_mail.h" #include "exclusive_pokemon.h" #include "input.h" -#include "item.h" #include "memory.h" -#include "menu.h" -#include "text.h" -#include "wonder_mail.h" -#include "wonder_mail_3.h" -#include "code_80958E8.h" -#include "menu_input.h" #include "code_802C39C.h" +#include "wonder_mail.h" struct unkStruct_203B2FC { @@ -141,215 +134,6 @@ void sub_802D1A0(u32); u32 sub_802DEE0(void); void sub_802DF24(void); -void sub_802D7D0(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - if (menuAction != 1) { - gUnknown_203B2F8->menuAction2 = menuAction; - } - switch(menuAction) { - // Yes - case 3: - 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(INITIAL_WONDER_MAIL_CHECK); - break; - } - } -} - -void sub_802D82C(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - if (menuAction != 1) { - gUnknown_203B2F8->menuAction3 = menuAction; - } - switch(menuAction) { - // Yes - case 3: - ResetJobSlot(gUnknown_203B2F8->jobSlotIndex); - sub_8096C80(); - 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: - case 4: - sub_802D1A0(1); - break; - } - } -} - -void sub_802D8CC(void) -{ - switch(sub_802C598(1)) { - case 0: - case 1: - break; - case 3: - gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex(); - sub_802D1A0(0xd); - break; - case 4: - gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex(); - gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; - sub_802D1A0(0xf); - break; - case 2: - sub_802C688(); - sub_802D1A0(1); - break; - } -} - -void sub_802D940(void) -{ - struct WonderMail *mail; - s32 menuAction; - - menuAction = 0; - sub_802C598(0); - if ((sub_8012FD8(&gUnknown_203B2F8->unk78) == 0) && (sub_8013114(&gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) { - gUnknown_203B2F8->menuAction1 = menuAction; - } - - 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(7); - } - else { - sub_802D1A0(0xE); - } - break; - // Info - case 5: - gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; - sub_802D1A0(0xf); - break; - case 1: - sub_802D1A0(DRAW_JOB_LIST_1); - break; - } -} - -void sub_802D9F0(void) -{ - s32 menuAction; - - menuAction = 0; - sub_802C598(0); - sub_8012FD8(&gUnknown_203B2F8->unk78); - if (sub_8012FD8(&gUnknown_203B2F8->unkC8) == 0) { - sub_8013114(&gUnknown_203B2F8->unkC8,&menuAction); - } - - switch(menuAction) - { - // No - case 1: - case 4: - sub_802D1A0(DRAW_JOB_LIST_1); - break; - // Yes - case 3: - sub_802C688(); - ResetJobSlot(gUnknown_203B2F8->jobSlotIndex); - sub_8096C80(); - sub_802D1A0(RECEIVE_WONDER_MAIL); - break; - } -} - -void sub_802DA60(void) -{ - switch(sub_802DEE0()) - { - case 2: - case 3: - sub_802DF24(); - sub_802D1A0(gUnknown_203B2F8->fallbackState); - break; - case 0: - case 1: - break; - } -} - -void AdvancetoFallbackWonderMailRescueState(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802D1A0(gUnknown_203B2F8->fallbackState); - } -} - -bool8 sub_802DAA8(void) -{ - struct WonderMail *mail; - - mail = GetJobSlotInfo(gUnknown_203B2F8->jobSlotIndex); - if (!gUnknown_203B2F8->unk9) { - return TRUE; - } - else { - if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)) return FALSE; - return TRUE; - } -} - -bool8 sub_802DADC(void) -{ - u8 mailType; - struct WonderMail *mail; - s32 counter; - - if (!gUnknown_203B2F8->unk9) { -_0802DAE8: - return TRUE; - } - else { - for( mail = &gUnknown_203B490->jobSlots[0], counter = 0; counter < 8; mail++, counter++) - { - mailType = mail->mailType; - if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) || - ((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->dungeon.id)))) goto _0802DAE8; - } - return FALSE; - } -} - -// TODO: merge above with wonder_mail_3.c - bool8 sub_802DB28(u8 jobSlotIndex, u8 dungeon) { char local_18 [8];