diff --git a/asm/code_803B050.s b/asm/code_803B050.s index 2fc580b71..27ba3abb8 100644 --- a/asm/code_803B050.s +++ b/asm/code_803B050.s @@ -884,8 +884,8 @@ sub_803B6B0: _0803B6D0: .4byte gUnknown_80E8B94 thumb_func_end sub_803B6B0 - thumb_func_start sub_803B6D4 -sub_803B6D4: + thumb_func_start CreateRescueTitle +CreateRescueTitle: push {r4-r7,lr} sub sp, 0x144 adds r7, r0, 0 @@ -1204,7 +1204,7 @@ _0803B968: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_803B6D4 + thumb_func_end CreateRescueTitle thumb_func_start CreateRescueDescription CreateRescueDescription: diff --git a/asm/code_803C1D0.s b/asm/code_803C1D0.s index fb6c7cf51..2fff797c6 100644 --- a/asm/code_803C1D0.s +++ b/asm/code_803C1D0.s @@ -37,8 +37,8 @@ sub_803C1F0: _0803C1FC: .4byte gUnknown_80E8BF8 thumb_func_end sub_803C1F0 - thumb_func_start sub_803C200 -sub_803C200: + thumb_func_start GetDungeonTeamRankPts +GetDungeonTeamRankPts: push {lr} lsls r1, 24 lsrs r1, 24 @@ -51,7 +51,7 @@ sub_803C200: bx r1 .align 2, 0 _0803C218: .4byte gUnknown_80E80A0 - thumb_func_end sub_803C200 + thumb_func_end GetDungeonTeamRankPts thumb_func_start sub_803C21C sub_803C21C: @@ -225,7 +225,7 @@ _0803C35A: strh r0, [r4, 0x14] ldrb r1, [r6, 0x1] adds r0, r5, 0 - bl sub_803C200 + bl GetDungeonTeamRankPts str r0, [r4, 0x24] pop {r3} mov r8, r3 diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s index 818d7db69..ff49585cc 100644 --- a/asm/code_80958E8.s +++ b/asm/code_80958E8.s @@ -2009,8 +2009,8 @@ _080969C2: bx r1 thumb_func_end GetNumAcceptedJobs - thumb_func_start sub_80969D0 -sub_80969D0: + thumb_func_start CountJobsinDungeon +CountJobsinDungeon: push {r4-r6,lr} lsls r0, 24 lsrs r6, r0, 24 @@ -2041,7 +2041,7 @@ _080969FA: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_80969D0 + thumb_func_end CountJobsinDungeon thumb_func_start sub_8096A08 sub_8096A08: diff --git a/asm/friend_rescue.s b/asm/friend_rescue.s index 44b8b0882..660e78d01 100644 --- a/asm/friend_rescue.s +++ b/asm/friend_rescue.s @@ -1453,7 +1453,7 @@ _08033512: strb r1, [r0] adds r0, r2, 0x4 movs r1, 0 - bl sub_803C200 + bl GetDungeonTeamRankPts ldr r1, [r4] movs r3, 0xAC lsls r3, 3 diff --git a/asm/ground_script.s b/asm/ground_script.s index d1927840a..8992effcc 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -7349,7 +7349,7 @@ _080A1730: bl sub_80A2740 lsls r0, 24 lsrs r0, 24 - bl sub_80969D0 + bl CountJobsinDungeon movs r1, 0 cmp r0, 0 ble _080A1750 diff --git a/asm/wonder_mail_3_mid.s b/asm/wonder_mail_3_mid.s index 90c0c250a..6add33aa8 100644 --- a/asm/wonder_mail_3_mid.s +++ b/asm/wonder_mail_3_mid.s @@ -379,7 +379,7 @@ _0802FCA8: cmp r5, 0 bne _0802FCCA mov r0, r9 - bl sub_80969D0 + bl CountJobsinDungeon cmp r0, 0 ble _0802FCCA ldr r0, [r4] diff --git a/asm/wonder_mail_4.s b/asm/wonder_mail_4.s index 404c7cfde..df3277c4f 100644 --- a/asm/wonder_mail_4.s +++ b/asm/wonder_mail_4.s @@ -5,239 +5,6 @@ .text - thumb_func_start sub_80308A0 -sub_80308A0: - push {r4,lr} - ldr r4, _08030928 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x44 - ldrh r1, [r1] - adds r0, 0xC0 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x42 - ldrh r1, [r1] - adds r0, 0xC1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC2 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xC3 - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - movs r1, 0x3E - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x58] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x6E - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x58] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x70 - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x60 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030928: .4byte gUnknown_203B320 - thumb_func_end sub_80308A0 - - thumb_func_start sub_803092C -sub_803092C: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x60 - ldr r7, _08030A24 - ldr r0, [r7] - ldr r0, [r0, 0x58] - bl sub_8008C54 - ldr r0, [r7] - ldr r0, [r0, 0x58] - bl sub_80073B8 - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0x42 - movs r2, 0 - ldrsh r4, [r0, r2] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _08030A28 - ldr r0, [r1, 0x20] - lsls r0, 2 - adds r0, r2 - ldr r2, [r0] - ldr r3, [r1, 0x58] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r3, [r7] - adds r0, r3, 0 - adds r0, 0xC2 - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - adds r0, r3, 0 - adds r0, 0x42 - movs r1, 0 - ldrsh r2, [r0, r1] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r3, 0x58] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x1 - bl sub_8012BC4 - movs r6, 0 - ldr r0, [r7] - movs r2, 0x3E - ldrsh r0, [r0, r2] - cmp r6, r0 - bge _08030A56 - mov r9, r7 - mov r8, r6 - add r7, sp, 0x8 - mov r5, sp - adds r5, 0x4B -_080309B0: - mov r3, r9 - ldr r1, [r3] - adds r0, r1, 0 - adds r0, 0x42 - movs r3, 0 - ldrsh r2, [r0, r3] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r2 - adds r0, r6 - adds r1, r0 - ldrb r0, [r1] - bl sub_8095228 - adds r4, r0, 0 - mov r1, r9 - ldr r0, [r1] - ldr r1, [r0, 0x58] - str r1, [sp, 0x8] - adds r0, 0x24 - adds r1, r6, 0 - bl sub_8013800 - str r0, [sp, 0x50] - add r1, sp, 0x48 - movs r0, 0x7 - strb r0, [r1] - mov r0, sp - adds r0, 0x4A - mov r2, r8 - strb r2, [r0] - add r0, sp, 0x4C - strb r2, [r0] - adds r0, r4, 0x4 - str r0, [sp, 0x10] - adds r0, 0x10 - str r0, [sp, 0x14] - ldrh r0, [r4, 0xC] - strh r0, [r7, 0x10] - ldrh r0, [r4, 0xC] - strh r0, [r7, 0x12] - strb r2, [r7, 0x14] - subs r1, 0x12 - movs r0, 0x5 - strb r0, [r1] - ldrb r0, [r4] - cmp r0, 0x4 - beq _08030A32 - cmp r0, 0x4 - bgt _08030A2C - cmp r0, 0x2 - bgt _08030A3E - cmp r0, 0x1 - blt _08030A3E - movs r0, 0x1 - strb r0, [r5] - b _08030A42 - .align 2, 0 -_08030A24: .4byte gUnknown_203B320 -_08030A28: .4byte gUnknown_80E086C -_08030A2C: - cmp r0, 0x5 - beq _08030A38 - b _08030A3E -_08030A32: - movs r0, 0x3 - strb r0, [r5] - b _08030A42 -_08030A38: - movs r0, 0x4 - strb r0, [r5] - b _08030A42 -_08030A3E: - mov r3, r8 - strb r3, [r5] -_08030A42: - add r0, sp, 0x8 - bl sub_803B6D4 - adds r6, 0x1 - mov r1, r9 - ldr r0, [r1] - movs r2, 0x3E - ldrsh r0, [r0, r2] - cmp r6, r0 - blt _080309B0 -_08030A56: - ldr r0, _08030A70 - ldr r0, [r0] - ldr r0, [r0, 0x58] - bl sub_80073E0 - add sp, 0x60 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030A70: .4byte gUnknown_203B320 - thumb_func_end sub_803092C - thumb_func_start sub_8030A74 sub_8030A74: push {r4,r5,lr} diff --git a/asm/wonder_mail_802C860.s b/asm/wonder_mail_802C860.s index 33144d736..036c51a78 100644 --- a/asm/wonder_mail_802C860.s +++ b/asm/wonder_mail_802C860.s @@ -736,7 +736,7 @@ _0802D034: ldr r0, [r4, 0x14] str r0, [sp, 0x54] add r0, sp, 0x8 - bl sub_803B6D4 + bl CreateRescueTitle adds r5, 0x1 _0802D076: ldr r0, [r6] diff --git a/include/sub_8095228.h b/include/sub_8095228.h index 9541d206b..1dec21a72 100644 --- a/include/sub_8095228.h +++ b/include/sub_8095228.h @@ -7,8 +7,7 @@ struct unkStruct_8095228 /* 0x1 */ u8 missionType; // mission type /* 0x2 */ u8 unk2; /* 0x3 */ u8 unk3; - /* 0x4 */ u8 dungeon; // dungeon - /* 0x5 */ u8 floor; // floor + /* 0x4 */ struct DungeonLocation dungeon; // dungeon /* 0x8 */ u32 unk8; /* 0xC */ s16 clientSpecies; // client pokemon /* 0xE */ s16 targetSpecies; // target diff --git a/src/post_office_guide.c b/src/post_office_guide.c index ca3ceb2d1..a40b8a767 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -2,6 +2,7 @@ #include "pokemon.h" #include "file_system.h" #include "input.h" +#include "constants/mailbox.h" #include "menu.h" #include "memory.h" #include "text.h" @@ -185,7 +186,7 @@ extern void DisplayMissionObjectives(); extern u8 *GetCurrentMissionText(s16 r0); extern u8 *sub_80975DC(u32 r0); extern u8 sub_8099360(u8 *); -extern u8 sub_8099394(u8 *); +extern u8 sub_8099394(volatile u8 *); extern struct WonderMail *GetJobSlotInfo(u8); extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); extern void sub_80073B8(u32); @@ -208,7 +209,7 @@ extern void ReturntoGoRescueMenu(); extern void HandlePostOfficeHelpGetHelpMenuSelection(); extern void ReturnToGetHelpMenu(); extern s32 sub_80144A4(s32 *); -extern s32 sub_80969D0(u8); +extern s32 CountJobsinDungeon(u8); extern void sub_8012D08(struct UnkTextStruct2 *, s32); @@ -582,7 +583,7 @@ void sub_8031A84(void) sub_8006518(gUnknown_203B330->unk18); gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1F18; if (gUnknown_203B330->unkC == 2) { - iVar1 = sub_80969D0(gUnknown_203B330->dungeonIndex); + iVar1 = CountJobsinDungeon(gUnknown_203B330->dungeonIndex); if (iVar1 == 0) { iVar1 = 1; } @@ -599,7 +600,7 @@ void DisplayMissionObjectives(void) struct unkStruct_8095228 *iVar8; struct WonderMail *jobInfo; u8 auStack248 [100]; - u8 local_94 [4]; + volatile u8 local_94; u8 auStack144 [100]; short auStack44; short local_2a; @@ -611,18 +612,18 @@ void DisplayMissionObjectives(void) switch(gUnknown_203B330->unkC) { case 1: - sub_8099394(local_94); - iVar8 = sub_8095228(local_94[0]); + sub_8099394(&local_94); + iVar8 = sub_8095228(local_94); sub_803B6B0(10,16,3,gUnknown_203B330->unk10); // %dF - sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->floor); + sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->dungeon.dungeonFloor); xxx_call_draw_string(0x15,16,auStack248,gUnknown_203B330->unk10,0); // Rescue #C6%s#R sprintf_2(auStack248,gUnknown_80E1F40,GetMonSpecies(iVar8->clientSpecies)); xxx_call_draw_string(0x28,16,auStack248,gUnknown_203B330->unk10,0); break; case 2: - if (sub_80969D0(gUnknown_203B330->dungeonIndex) == 0) { + if (CountJobsinDungeon(gUnknown_203B330->dungeonIndex) == 0) { // Just go! xxx_call_draw_string(10,16,gUnknown_80E1F54,gUnknown_203B330->unk10,0); } @@ -631,7 +632,7 @@ void DisplayMissionObjectives(void) yCoord = 16; // 8 Job Slots... check each of them - for(jobSlotIdx = 0; jobSlotIdx < 8; jobSlotIdx++) + for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) { jobInfo = GetJobSlotInfo(jobSlotIdx); if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 22c5c54d9..b650c1153 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -454,7 +454,7 @@ u32 ConvertMenutoRescuePasswordState(u32 unused) u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_8095228 *param_3) { if ( (!sub_803D204(passwordBuffer, param_3)) || (7 < param_3->mailType) || - (param_3->floor >= GetDungeonFloorCount(param_3->dungeon)) || + (param_3->dungeon.dungeonFloor >= GetDungeonFloorCount(param_3->dungeon.dungeonIndex)) || (param_3->clientSpecies == SPECIES_NONE) || (SPECIES_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || (IsInvalidItemReward(param_3->unk20.itemIndex))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 3b63a619d..0a2ae19b4 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -237,7 +237,7 @@ extern s32 sub_80381F4(u32, void *, void *); extern void sub_801C8C4(u32, u32, s32 * , u32); extern u8 sub_809539C(u32, u32); extern u8 sub_800D588(void); -extern u32 sub_803C200(u8 *, u32); +extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_8031D70(u8, u32); extern void sub_803092C(void); @@ -1420,7 +1420,7 @@ void UpdateThankYouMailText(void) else gUnknown_203B2C4->unk53C.itemRewards[0] = 0; // unk558 gUnknown_203B2C4->unk53C.numItems = 1; // unk55B - gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->dungeon, 0); // unk560 + gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&puVar4->dungeon, 0); // unk560 gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559 gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 9a05db4aa..33dc9fd56 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -1172,7 +1172,7 @@ void sub_8028FDC(void) { case 8: return_var = sub_8095228(gUnknown_203B2C0->unk218); - if(sub_80A2824(return_var->dungeon) == 0) + if(sub_80A2824(return_var->dungeon.dungeonIndex) == 0) { sub_8028B04(0x1C); } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 11e5a1cb5..b40cd6dc4 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -141,8 +141,8 @@ extern void sub_802B5FC(void); extern void sub_802B624(void); extern void sub_802F204(struct unkStruct_802F204 *, u32); -extern void sub_803C37C(u8 *, u32, u8 *); -extern u32 sub_803C200(u8 *, u32); +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 u8 sub_80023E4(u32); extern void nullsub_131(void); @@ -387,7 +387,7 @@ void sub_802B3E0(void) sub_8097790(); iVar3 = sub_8095228(gUnknown_203B2C8->unk1); sub_803C37C(&iVar3->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards); - gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->dungeon, 0); + gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&iVar3->dungeon, 0); gUnknown_203B2C8->unk114.itemRewards[1] = 0; gUnknown_203B2C8->unk114.itemRewards[2] = 0; gUnknown_203B2C8->unk114.numItems = 10; diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index c02dedccf..ebc50e3af 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -7,9 +7,18 @@ struct unkStruct_802C39C { - /* 0x0 */ u32 local_6c[15]; - /* 0x3C */ u8 local_29[12]; - /* 0x48 */ u32 local_24[4]; + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0xC]; + /* 0x48 */ u8 fill48[4]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u32 unk50[3]; }; struct unkStruct_203B2E8 @@ -149,7 +158,7 @@ extern s32 sub_8013800(void *, u32); extern void sub_803B35C(void *, u32 *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); -extern void sub_803B6D4(void *); +extern void CreateRescueTitle(void *); extern void sub_8013984(u32 *); extern void sub_802C6DC(void); @@ -379,10 +388,10 @@ void sub_802C750(void) do { uVar1 = GetJobSlotInfo(gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + iVar2]); - local.local_6c[0] = gUnknown_203B2E8->unk3C; - local.local_24[0] = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); - sub_803B35C(uVar1,local.local_6c); - sub_803B6D4(&local); + local.unk0[0] = gUnknown_203B2E8->unk3C; + local.unk4C = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); + sub_803B35C(uVar1,local.unk0); + CreateRescueTitle(&local); iVar2++; } while( iVar2 < gUnknown_203B2E8->unk22); sub_80073E0(gUnknown_203B2E8->unk3C); diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 2e5bd3627..1c1430427 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -28,7 +28,7 @@ extern u8 *sub_8096574(u32); extern void sub_803B35C(u8 *, u32 *); extern u8 gBulletinBoardText[]; extern u8 sub_80968B0(u8 *); -extern void sub_803B6D4(void *); +extern void CreateRescueTitle(void *); extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32); extern void sub_8012BC4(s32, s32, s32, s32 ,s32 ,s32); @@ -77,12 +77,21 @@ extern struct unkStruct_203B2E0 *gUnknown_203B2E0; struct unkStruct_802C39C { - /* 0x0 */ u32 local_6c[15]; - /* 0x3C */ u8 local_29[12]; - /* 0x48 */ u32 local_24[4]; + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x34 */ u8 fill34[2]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0xC]; + /* 0x48 */ u8 fill48[4]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u32 unk50[3]; }; - extern struct UnkTextStruct2 gUnknown_80DFCB4; extern struct UnkTextStruct2 gUnknown_80DFC9C; @@ -91,7 +100,7 @@ extern u16 gUnknown_203B2E4; extern u8 *sub_8095FE8(u8); extern u8 sub_80968B0(u8 *); extern void sub_803B35C(u8 *, u32 *); -extern void sub_803B6D4(void *); +extern void CreateRescueTitle(void *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern u8 gMailboxText[]; extern u8 gAvailablePokemonNames[]; @@ -113,8 +122,8 @@ void CreateMailMenu(void) if (iVar5 < gUnknown_203B2D8->unk1E) { do { pcVar2 = sub_8095FE8(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + iVar5]); - local.local_6c[0] = gUnknown_203B2D8->unk38; - local.local_24[0] = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); + local.unk0[0] = gUnknown_203B2D8->unk38; + local.unk4C = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); if (*pcVar2 == 1) { y = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); @@ -123,11 +132,11 @@ void CreateMailMenu(void) xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0); } else { - sub_803B35C(pcVar2,local.local_6c); + sub_803B35C(pcVar2,local.unk0); if (sub_80968B0(pcVar2) != 0) { - local.local_29[7] = 2; + local.unk3C[11] = 2; } - sub_803B6D4(&local); + CreateRescueTitle(&local); } iVar5++; } while (iVar5 < gUnknown_203B2D8->unk1E); @@ -325,19 +334,19 @@ void sub_802C39C(void) u32 uVar1; u8 *uVar3; s32 iVar4; - s32 iVar5; + s32 x; s32 iVar6; struct unkStruct_802C39C local; sub_8008C54(gUnknown_203B2E0->unk3C); sub_80073B8(gUnknown_203B2E0->unk3C); iVar4 = gUnknown_203B2E0->unk26 * 8; - iVar5 = iVar4; - iVar5 += 10; - xxx_call_draw_string(iVar5,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); + x = iVar4; + x += 10; + xxx_call_draw_string(x,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); iVar4 += 4; - iVar5 = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; - sub_8012BC4(iVar5,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); + x = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; + sub_8012BC4(x,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); iVar6 = 0; if(iVar6 < gUnknown_203B2E0->unk22) @@ -345,13 +354,13 @@ void sub_802C39C(void) { uVar1 = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24 + iVar6]); uVar3 = sub_8096574(uVar1); - local.local_6c[0] = gUnknown_203B2E0->unk3C; - local.local_24[0] = sub_8013800(&gUnknown_203B2E0->unk8,iVar6); - sub_803B35C(uVar3,local.local_6c); + local.unk0[0] = gUnknown_203B2E0->unk3C; + local.unk4C = sub_8013800(&gUnknown_203B2E0->unk8,iVar6); + sub_803B35C(uVar3,local.unk0); if (sub_80968B0(sub_8096574(uVar1)) != '\0') { - local.local_29[7] = 2; + local.unk3C[11] = 2; } - sub_803B6D4(&local); + CreateRescueTitle(&local); iVar6++; } while (iVar6 < gUnknown_203B2E0->unk22); sub_80073E0(gUnknown_203B2E0->unk3C); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 4d0efcb05..66e4011cf 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -44,8 +44,8 @@ struct unkStruct_203B310 { // size: 0x84 /* 0x0 */ u32 state; - u32 unk4; - u8 unk8; + /* 0x4 */ u32 nextState; + /* 0x8 */ bool8 displayClientDialogueSprite; // true to display the dialogue sprite for the client /* 0x9 */ u8 currTeamRank; // team rank u8 unkA; u8 unkB; @@ -354,7 +354,7 @@ void sub_802F1E8(void) -u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1) +u32 sub_802F204(struct unkStruct_802F204 *r0, bool8 r1) { struct unkStruct_203B310 *preload; @@ -363,7 +363,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1) gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8); gUnknown_203B310->unk10 = r0; gUnknown_203B310->itemRewardIndex = 0; - gUnknown_203B310->unk8 = r1; + gUnknown_203B310->displayClientDialogueSprite = r1; // NOTE: dumb var to get correct ordering preload = gUnknown_203B310; @@ -459,9 +459,9 @@ void HandleMissionReward(void) } else { gUnknown_202DE30 = moneyReward; - if (gUnknown_203B310->unk8 != '\0') { + if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->unk4 = 1; + gUnknown_203B310->nextState = 1; } else { sub_802F2E8(1); @@ -477,7 +477,7 @@ void HandleMissionReward(void) else { sub_80141B4(gUnknown_80E0484,0,0,0x101); } - gUnknown_203B310->unk4 = 2; + gUnknown_203B310->nextState = 2; break; case 2: if (gUnknown_203B310->unk10->friendAreaReward == '\0') { @@ -486,9 +486,9 @@ void HandleMissionReward(void) } else { sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0); - if (gUnknown_203B310->unk8 != '\0') { + if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->unk4 = 3; + gUnknown_203B310->nextState = 3; } else { sub_802F2E8(3); @@ -516,7 +516,7 @@ void HandleMissionReward(void) sub_80141B4(gUnknown_80E05FC,0,0,0x101); } } - gUnknown_203B310->unk4 = 4; + gUnknown_203B310->nextState = 4; break; case 4: uVar7 = gUnknown_203B310->unk10->itemRewards[0]; @@ -542,9 +542,9 @@ void HandleMissionReward(void) local_20.unk4 = 0; local_20.unk8 = 1; sub_8090E14(gUnknown_202DEA8,(struct ItemSlot *)&local_14,&local_20); - if (gUnknown_203B310->unk8 != '\0') { + if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->unk4 = 5; + gUnknown_203B310->nextState = 5; } else { @@ -594,11 +594,11 @@ void HandleMissionReward(void) PlaySound(0xcb); if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) { // Rank up time - gUnknown_203B310->unk4 = 8; + gUnknown_203B310->nextState = 8; } else { // No rank up.. close out - gUnknown_203B310->unk4 = 9; + gUnknown_203B310->nextState = 9; } gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward; sub_80141B4(gUnknown_80E0670,0,0,0x101); @@ -607,7 +607,7 @@ void HandleMissionReward(void) case 8: // Rank up PlaySound(0xc9); - gUnknown_203B310->unk4 = 9; + gUnknown_203B310->nextState = 9; rankString = GetTeamRankString(gUnknown_203B310->currTeamRank); strcpy(gUnknown_202E038,rankString); rankString = GetTeamRankString(GetRescueTeamRank()); @@ -639,7 +639,7 @@ void sub_802F718(void) s32 temp; if (sub_80144A4(&temp) == 0) { - sub_802F2E8(gUnknown_203B310->unk4); + sub_802F2E8(gUnknown_203B310->nextState); } } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 873daf440..49b4c91bf 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -2,6 +2,8 @@ #include "text.h" #include "input.h" #include "memory.h" +#include "item.h" +#include "sub_8095228.h" struct unkStruct_203B320 { @@ -9,7 +11,8 @@ struct unkStruct_203B320 u8 unk0[4]; u8 fill4[0x20 - 4]; u32 unk20; - u8 fill24[0x3C - 0x24]; + u32 unk24; + u8 fill28[0x3C - 0x28]; s16 unk3C; s16 unk3E; s16 unk40; @@ -25,6 +28,23 @@ struct unkStruct_203B320 extern struct unkStruct_203B320 *gUnknown_203B320; extern struct UnkTextStruct2 gUnknown_80E083C; extern struct UnkTextStruct2 gUnknown_80E0854; +extern u8 *gUnknown_80E086C[]; + +struct unkStruct_802C39C +{ + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x34 */ u8 fill34[2]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0x10]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u32 unk50[3]; +}; extern u8 sub_8030C20(u32); extern s32 sub_8030A74(void); @@ -33,12 +53,19 @@ extern void sub_803092C(void); extern void sub_8012D08(struct UnkTextStruct2 *, s32); extern void sub_8013818(void *, u32, u32, u32); -extern u8 sub_80138B8(u8 *, u32); -extern void sub_8013660(u8 *); -extern s32 GetKeyPress(u8 *); +extern u8 sub_80138B8(u32 *, u32); +extern void sub_8013660(u32 *); +extern s32 GetKeyPress(u32 *); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(u8 *); -extern void AddMenuCursorSprite(u8 *); +extern void sub_8013984(u32 *); +extern void AddMenuCursorSprite(u32 *); +extern s32 sub_8013800(void *, u32); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void CreateRescueTitle(void *); u32 sub_80306A8(u32 r0, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3) { @@ -63,7 +90,7 @@ u32 sub_80306A8(u32 r0, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3) sub_8012D08(gUnknown_203B320->unk5C, r3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B320->unk60, 1, 1); - sub_8013818(gUnknown_203B320->fill24, sub_8030A74(), r3, r1); + sub_8013818(&gUnknown_203B320->unk24, sub_8030A74(), r3, r1); sub_80308A0(); sub_803092C(); return 1; @@ -73,10 +100,10 @@ u32 sub_8030768(u8 r0) { if(r0 == 0) { - sub_8013660(gUnknown_203B320->fill24); + sub_8013660(&gUnknown_203B320->unk24); return 0; } - switch(GetKeyPress(gUnknown_203B320->fill24)) + switch(GetKeyPress(&gUnknown_203B320->unk24)) { case 4: PlayMenuSoundEffect(4); @@ -88,7 +115,7 @@ u32 sub_8030768(u8 r0) PlayMenuSoundEffect(0); return 3; default: - if(sub_80138B8(gUnknown_203B320->fill24, 1) != 0) + if(sub_80138B8(&gUnknown_203B320->unk24, 1) != 0) { sub_80308A0(); sub_803092C(); @@ -111,12 +138,12 @@ void sub_8030810(u32 r0) r0_u8 = r0; // cast needed.. gUnknown_203B320->unk46 = sub_8030A74(); - sub_8013984(gUnknown_203B320->fill24); + sub_8013984(&gUnknown_203B320->unk24); sub_80308A0(); sub_803092C(); if(r0_u8 != 0) - AddMenuCursorSprite(gUnknown_203B320->fill24); + AddMenuCursorSprite(&gUnknown_203B320->unk24); } void sub_803084C() @@ -135,3 +162,132 @@ u8 *sub_8030894() { return gUnknown_203B320->unk0; } + +NAKED +void sub_80308A0(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _08030928\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x44\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC0\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x42\n" + "\tldrh r1, [r1]\n" + "\tadds r0, 0xC1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC2\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xC3\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x3E\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, 0x58]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x6E\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x58]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x70\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x60\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" +"_08030928: .4byte gUnknown_203B320"); +} + +void sub_803092C(void) +{ + struct unkStruct_8095228 *pbVar2; + s32 r4; + s32 r5; + s32 r6; + struct unkStruct_802C39C local; + + sub_8008C54(gUnknown_203B320->unk58); + sub_80073B8(gUnknown_203B320->unk58); + r4 = gUnknown_203B320->unk42 * 8; + r5 = r4; + r5 += 10; + xxx_call_draw_string(r5,0,gUnknown_80E086C[gUnknown_203B320->unk20],gUnknown_203B320->unk58,0); + r4 += 4; + r5 = r4 + gUnknown_203B320->unkC0[2] * 8; + sub_8012BC4(r5,0,gUnknown_203B320->unk42 + 1,1,7,gUnknown_203B320->unk58); + + r6 = 0; + if (r6 < gUnknown_203B320->unk3E) { + do { + pbVar2 = sub_8095228(gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + r6]); + local.unk0[0] = gUnknown_203B320->unk58; + local.unk4C = sub_8013800(&gUnknown_203B320->unk24,r6); + local.unk3C[8] = 7; + local.unk3C[10] = 0; + local.unk3C[12] = 0; + + local.unk8 = &pbVar2->dungeon; + local.unkC = pbVar2->padding2; + + local.unk10 = (pbVar2->clientSpecies); + local.unk12 = (pbVar2->clientSpecies); + local.unk14 = 0; + local.fill15[0x19] = 5; + + switch(pbVar2->mailType) + { + case 4: + local.unk3C[11] = 3; + break; + case 5: + local.unk3C[11] = 4; + break; + case 1: + case 2: + local.unk3C[11]= 1; + break; + default: + local.unk3C[11]= 0; + break; + } + CreateRescueTitle(&local); + r6++; + } while (r6 < gUnknown_203B320->unk3E); + } + sub_80073E0(gUnknown_203B320->unk58); +}