From f0f69853de0dd3ebfdfa566b880c50d365b3ebb0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 27 Jul 2024 10:52:35 +0200 Subject: [PATCH] unify wonder mail structs --- include/wonder_mail_802C4C8.h | 14 ---- include/wonder_mail_802CDD4.h | 11 --- src/wonder_mail_802C4C8.c | 132 +++++++++++----------------------- src/wonder_mail_802CDD4.c | 121 ++++++++++--------------------- 4 files changed, 78 insertions(+), 200 deletions(-) diff --git a/include/wonder_mail_802C4C8.h b/include/wonder_mail_802C4C8.h index 3aedbe03c..1fef8af13 100644 --- a/include/wonder_mail_802C4C8.h +++ b/include/wonder_mail_802C4C8.h @@ -1,22 +1,8 @@ #ifndef GUARD_WONDER_MAIL_802C4C8_H #define GUARD_WONDER_MAIL_802C4C8_H -#include "constants/mailbox.h" -#include "structs/menu.h" #include "structs/str_text.h" -// TODO: UNIFY -// size: 0xA8 -struct unkStruct_203B2E8 -{ - /* 0x0 */ u8 pelipperBoardSlots[MAX_ACCEPTED_JOBS]; - /* 0x8 */ MenuInputStruct input; - u32 unk3C; - UnkTextStruct2 *unk40; - UnkTextStruct2 unk44[4]; - UnkTextStruct2_sub2 unkA4; -}; - void DrawJobListMenu(void); bool8 HasNoAcceptedJobs(void); u8 GetPelipperBoardSlotIndex(void); diff --git a/include/wonder_mail_802CDD4.h b/include/wonder_mail_802CDD4.h index 7a02daf29..c61e7279c 100644 --- a/include/wonder_mail_802CDD4.h +++ b/include/wonder_mail_802CDD4.h @@ -4,17 +4,6 @@ #include "structs/menu.h" #include "structs/str_text.h" -// TODO: UNIFY -// size: 0xA0 -typedef struct unkStruct_203B2F4 -{ - MenuInputStruct input; - u32 unk34; - UnkTextStruct2 *unk38; - UnkTextStruct2 unk3C[4]; - UnkTextStruct2_sub2 unk9C; -} unkStruct_203B2F4; - bool8 sub_802CDD4(u32); u32 sub_802CE5C(bool8); u8 sub_802CEBC(void); diff --git a/src/wonder_mail_802C4C8.c b/src/wonder_mail_802C4C8.c index 82f2ac025..64a76c581 100644 --- a/src/wonder_mail_802C4C8.c +++ b/src/wonder_mail_802C4C8.c @@ -8,13 +8,14 @@ #include "memory.h" #include "menu_input.h" #include "pokemon_mail.h" +#include "wonder_mail_802C10C.h" #include "structs/str_802C39C.h" #include "structs/str_wonder_mail.h" #include "text1.h" #include "text2.h" #include "wonder_mail_802C4C8.h" -static EWRAM_DATA_2 struct unkStruct_203B2E8* gUnknown_203B2E8 = {0}; +static EWRAM_DATA_2 struct unkStruct_203B2E0* gUnknown_203B2E8 = {0}; static EWRAM_DATA_2 u16 gUnknown_203B2EC = {0}; #include "data/wonder_mail_802C4C8.h" @@ -28,23 +29,23 @@ bool8 sub_802C4C8(s32 a0, UnkTextStruct2_sub *a1, u32 a2) if (HasNoAcceptedJobs()) return FALSE; - gUnknown_203B2E8 = MemoryAlloc(sizeof(struct unkStruct_203B2E8), 8); - gUnknown_203B2E8->unk3C = a0; - gUnknown_203B2E8->unk40 = &gUnknown_203B2E8->unk44[a0]; - sub_8006518(gUnknown_203B2E8->unk44); + gUnknown_203B2E8 = MemoryAlloc(sizeof(struct unkStruct_203B2E0), 8); + gUnknown_203B2E8->unk8.s0.unk34 = a0; + gUnknown_203B2E8->unk8.s0.unk38 = &gUnknown_203B2E8->unk8.s0.unk3C[a0]; + sub_8006518(gUnknown_203B2E8->unk8.s0.unk3C); - gUnknown_203B2E8->unk44[gUnknown_203B2E8->unk3C] = sUnknown_80DFCFC; - gUnknown_203B2E8->unk40->unk14 = &gUnknown_203B2E8->unkA4; + gUnknown_203B2E8->unk8.s0.unk3C[gUnknown_203B2E8->unk8.s0.unk34] = sUnknown_80DFCFC; + gUnknown_203B2E8->unk8.s0.unk38->unk14 = &gUnknown_203B2E8->unk8.unk9C; if (a1 != NULL) - gUnknown_203B2E8->unk44[gUnknown_203B2E8->unk3C].unk8 = *a1; + gUnknown_203B2E8->unk8.s0.unk3C[gUnknown_203B2E8->unk8.s0.unk34].unk8 = *a1; - sub_8012D34(gUnknown_203B2E8->unk40, a2); + sub_8012D34(gUnknown_203B2E8->unk8.s0.unk38, a2); ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2E8->unk44, TRUE, TRUE); - sub_8013848(&gUnknown_203B2E8->input, CountAcceptedJobs(), a2, a0); - gUnknown_203B2E8->input.menuIndex = gUnknown_203B2EC; - sub_8013984(&gUnknown_203B2E8->input); + sub_800641C(gUnknown_203B2E8->unk8.s0.unk3C, TRUE, TRUE); + sub_8013848(&gUnknown_203B2E8->unk8.s0.input, CountAcceptedJobs(), a2, a0); + gUnknown_203B2E8->unk8.s0.input.menuIndex = gUnknown_203B2EC; + sub_8013984(&gUnknown_203B2E8->unk8.s0.input); sub_802C6DC(); DrawJobListMenu(); return TRUE; @@ -53,11 +54,11 @@ bool8 sub_802C4C8(s32 a0, UnkTextStruct2_sub *a1, u32 a2) u32 sub_802C598(bool8 a0) { if (!a0) { - sub_8013660(&gUnknown_203B2E8->input); + sub_8013660(&gUnknown_203B2E8->unk8.s0.input); return 0; } - switch (GetKeyPress(&gUnknown_203B2E8->input)) { + switch (GetKeyPress(&gUnknown_203B2E8->unk8.s0.input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; @@ -69,7 +70,7 @@ u32 sub_802C598(bool8 a0) return 4; } - if (sub_80138B8(&gUnknown_203B2E8->input, 1)) { + if (sub_80138B8(&gUnknown_203B2E8->unk8.s0.input, 1)) { sub_802C6DC(); DrawJobListMenu(); return 1; @@ -79,91 +80,42 @@ u32 sub_802C598(bool8 a0) u8 GetPelipperBoardSlotIndex(void) { - return gUnknown_203B2E8->pelipperBoardSlots[(gUnknown_203B2E8->input.unk1E * gUnknown_203B2E8->input.unk1C) + gUnknown_203B2E8->input.menuIndex]; + return gUnknown_203B2E8->pelipperBoardSlots[(gUnknown_203B2E8->unk8.s0.input.unk1E * gUnknown_203B2E8->unk8.s0.input.unk1C) + gUnknown_203B2E8->unk8.s0.input.menuIndex]; } void sub_802C640(bool8 cursorSprite) { ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2E8->unk44, FALSE, FALSE); - gUnknown_203B2E8->input.unk22 = CountAcceptedJobs(); - sub_8013984(&gUnknown_203B2E8->input); + sub_800641C(gUnknown_203B2E8->unk8.s0.unk3C, FALSE, FALSE); + gUnknown_203B2E8->unk8.s0.input.unk22 = CountAcceptedJobs(); + sub_8013984(&gUnknown_203B2E8->unk8.s0.input); sub_802C6DC(); DrawJobListMenu(); if (cursorSprite) - AddMenuCursorSprite(&gUnknown_203B2E8->input); + AddMenuCursorSprite(&gUnknown_203B2E8->unk8.s0.input); } void sub_802C688(void) { if (gUnknown_203B2E8 != NULL) { - gUnknown_203B2EC = gUnknown_203B2E8->input.menuIndex; - gUnknown_203B2E8->unk44[gUnknown_203B2E8->unk3C] = sUnknown_80DFCE4; + gUnknown_203B2EC = gUnknown_203B2E8->unk8.s0.input.menuIndex; + gUnknown_203B2E8->unk8.s0.unk3C[gUnknown_203B2E8->unk8.s0.unk34] = sUnknown_80DFCE4; ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2E8->unk44, TRUE, TRUE); + sub_800641C(gUnknown_203B2E8->unk8.s0.unk3C, TRUE, TRUE); MemoryFree(gUnknown_203B2E8); gUnknown_203B2E8 = NULL; } } -NAKED static void sub_802C6DC(void) { - asm_unified("\tpush {r4,lr}\n" - "\tldr r4, _0802C74C\n" - "\tldr r0, [r4]\n" - "\tldrh r1, [r0, 0x28]\n" - "\tadds r0, 0xA4\n" - "\tmovs r2, 0\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tldrh r1, [r0, 0x26]\n" - "\tadds r0, 0xA5\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA6\n" - "\tmovs r1, 0xC\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA7\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tmovs r1, 0x22\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, 0x3C]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r1, r2, r1\n" - "\tadds r1, 0x52\n" - "\tasrs r3, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r2, 0x3C]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r2, r0\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x54\n" - "\tstrh r3, [r2]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x44\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" -"_0802C74C: .4byte gUnknown_203B2E8"); + gUnknown_203B2E8->unk8.unk9C.f0 = gUnknown_203B2E8->unk8.s0.input.unk20; + gUnknown_203B2E8->unk8.unk9C.f1 = gUnknown_203B2E8->unk8.s0.input.unk1E; + gUnknown_203B2E8->unk8.unk9C.f2 = 12; + gUnknown_203B2E8->unk8.unk9C.f3 = 0; + + SUB_8009614_CALL(gUnknown_203B2E8->unk8.s0); } void DrawJobListMenu(void) @@ -174,26 +126,26 @@ void DrawJobListMenu(void) s32 x; unkStruct_802C39C local; - sub_8008C54(gUnknown_203B2E8->unk3C); - sub_80073B8(gUnknown_203B2E8->unk3C); - r4 = gUnknown_203B2E8->input.unk1E * 8; + sub_8008C54(gUnknown_203B2E8->unk8.s0.unk34); + sub_80073B8(gUnknown_203B2E8->unk8.s0.unk34); + r4 = gUnknown_203B2E8->unk8.s0.input.unk1E * 8; x = r4; x += 10; - PrintStringOnWindow(x, 0, sJobList, gUnknown_203B2E8->unk3C, 0); + PrintStringOnWindow(x, 0, sJobList, gUnknown_203B2E8->unk8.s0.unk34, 0); r4 += 4; - x = r4 + (gUnknown_203B2E8->unkA4.f2 * 8); - sub_8012BC4(x, 0, gUnknown_203B2E8->input.unk1E + 1, 2, 7, gUnknown_203B2E8->unk3C); + x = r4 + (gUnknown_203B2E8->unk8.unk9C.f2 * 8); + sub_8012BC4(x, 0, gUnknown_203B2E8->unk8.s0.input.unk1E + 1, 2, 7, gUnknown_203B2E8->unk8.s0.unk34); - for (i = 0; i < gUnknown_203B2E8->input.unk1A; i++) { - mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[(gUnknown_203B2E8->input.unk1E * gUnknown_203B2E8->input.unk1C) + i]); - local.unk0[0] = gUnknown_203B2E8->unk3C; - local.y = sub_8013800(&gUnknown_203B2E8->input, i); + for (i = 0; i < gUnknown_203B2E8->unk8.s0.input.unk1A; i++) { + mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[(gUnknown_203B2E8->unk8.s0.input.unk1E * gUnknown_203B2E8->unk8.s0.input.unk1C) + i]); + local.unk0[0] = gUnknown_203B2E8->unk8.s0.unk34; + local.y = sub_8013800(&gUnknown_203B2E8->unk8.s0.input, i); sub_803B35C(mail, &local); CreateRescueTitle(&local); } - sub_80073E0(gUnknown_203B2E8->unk3C); + sub_80073E0(gUnknown_203B2E8->unk8.s0.unk34); } static s32 CountAcceptedJobs(void) diff --git a/src/wonder_mail_802CDD4.c b/src/wonder_mail_802CDD4.c index 4b6a93790..6c9716491 100644 --- a/src/wonder_mail_802CDD4.c +++ b/src/wonder_mail_802CDD4.c @@ -8,12 +8,13 @@ #include "menu_input.h" #include "pokemon_mail.h" #include "structs/str_802C39C.h" +#include "structs/struct_sub80095e4.h" #include "structs/str_wonder_mail.h" #include "text1.h" #include "text2.h" #include "wonder_mail_802CDD4.h" -static EWRAM_DATA_2 unkStruct_203B2F4 *sUnknown_203B2F4 = {0}; +static EWRAM_DATA_2 struct_Sub80095E4_2 *sUnknown_203B2F4 = {0}; #include "data/wonder_mail_802CDD4.h" @@ -22,17 +23,17 @@ static void sub_802CF5C(void); bool8 sub_802CDD4(u32 a0) { if (sUnknown_203B2F4 == NULL) - sUnknown_203B2F4 = MemoryAlloc(sizeof(unkStruct_203B2F4), 8); + sUnknown_203B2F4 = MemoryAlloc(sizeof(struct_Sub80095E4_2), 8); - sUnknown_203B2F4->unk34 = a0; - sUnknown_203B2F4->unk38 = &sUnknown_203B2F4->unk3C[sUnknown_203B2F4->unk34]; - sub_8006518(sUnknown_203B2F4->unk3C); - sUnknown_203B2F4->unk3C[sUnknown_203B2F4->unk34] = sUnknown_80DFDA4; - sUnknown_203B2F4->unk38->unk14 = &sUnknown_203B2F4->unk9C; - sub_8012D34(sUnknown_203B2F4->unk38, 4); + sUnknown_203B2F4->s0.unk34 = a0; + sUnknown_203B2F4->s0.unk38 = &sUnknown_203B2F4->s0.unk3C[sUnknown_203B2F4->s0.unk34]; + sub_8006518(sUnknown_203B2F4->s0.unk3C); + sUnknown_203B2F4->s0.unk3C[sUnknown_203B2F4->s0.unk34] = sUnknown_80DFDA4; + sUnknown_203B2F4->s0.unk38->unk14 = &sUnknown_203B2F4->unk9C; + sub_8012D34(sUnknown_203B2F4->s0.unk38, 4); ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B2F4->unk3C, TRUE, TRUE); - sub_8013848(&sUnknown_203B2F4->input, 5, 4, a0); + sub_800641C(sUnknown_203B2F4->s0.unk3C, TRUE, TRUE); + sub_8013848(&sUnknown_203B2F4->s0.input, 5, 4, a0); sub_802CF5C(); sub_802CFD0(); return TRUE; @@ -41,18 +42,18 @@ bool8 sub_802CDD4(u32 a0) u32 sub_802CE5C(bool8 a0) { if (!a0) { - sub_8013660(&sUnknown_203B2F4->input); + sub_8013660(&sUnknown_203B2F4->s0.input); return 0; } - switch (GetKeyPress(&sUnknown_203B2F4->input)) { + switch (GetKeyPress(&sUnknown_203B2F4->s0.input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; case INPUT_A_BUTTON: return 3; default: - if (sub_80138B8(&sUnknown_203B2F4->input, TRUE)) { + if (sub_80138B8(&sUnknown_203B2F4->s0.input, TRUE)) { sub_802CF5C(); sub_802CFD0(); return 1; @@ -63,90 +64,40 @@ u32 sub_802CE5C(bool8 a0) u8 sub_802CEBC(void) { - return (sUnknown_203B2F4->input.unk1E * sUnknown_203B2F4->input.unk1C) + sUnknown_203B2F4->input.menuIndex; + return (sUnknown_203B2F4->s0.input.unk1E * sUnknown_203B2F4->s0.input.unk1C) + sUnknown_203B2F4->s0.input.menuIndex; } void sub_802CED8(bool8 cursorSprite) { ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B2F4->unk3C, FALSE, FALSE); - sub_8013984(&sUnknown_203B2F4->input); + sub_800641C(sUnknown_203B2F4->s0.unk3C, FALSE, FALSE); + sub_8013984(&sUnknown_203B2F4->s0.input); sub_802CF5C(); sub_802CFD0(); if (cursorSprite) - AddMenuCursorSprite(&sUnknown_203B2F4->input); + AddMenuCursorSprite(&sUnknown_203B2F4->s0.input); } void sub_802CF14(void) { if (sUnknown_203B2F4 != NULL) { - sUnknown_203B2F4->unk3C[sUnknown_203B2F4->unk34] = sUnknown_80DFD8C; + sUnknown_203B2F4->s0.unk3C[sUnknown_203B2F4->s0.unk34] = sUnknown_80DFD8C; ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B2F4->unk3C, TRUE, TRUE); + sub_800641C(sUnknown_203B2F4->s0.unk3C, TRUE, TRUE); MemoryFree(sUnknown_203B2F4); sUnknown_203B2F4 = NULL; } } -NAKED static void sub_802CF5C(void) { - asm_unified( - "\tpush {r4,lr}\n" - "\tldr r4, _0802CFCC\n" - "\tldr r0, [r4]\n" - "\tldrh r1, [r0, 0x20]\n" - "\tadds r0, 0x9C\n" - "\tmovs r2, 0\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tldrh r1, [r0, 0x1E]\n" - "\tadds r0, 0x9D\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x9E\n" - "\tmovs r1, 0xC\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x9F\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tmovs r1, 0x1A\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, 0x34]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r1, r2, r1\n" - "\tadds r1, 0x4A\n" - "\tasrs r3, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r2, 0x34]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r2, r0\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x4C\n" - "\tstrh r3, [r2]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x3C\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" -"_0802CFCC: .4byte sUnknown_203B2F4"); + sUnknown_203B2F4->unk9C.f0 = sUnknown_203B2F4->s0.input.unk20; + sUnknown_203B2F4->unk9C.f1 = sUnknown_203B2F4->s0.input.unk1E; + sUnknown_203B2F4->unk9C.f2 = 12; + sUnknown_203B2F4->unk9C.f3 = 0; + + SUB_8009614_CALL(sUnknown_203B2F4->s0); } void sub_802CFD0(void) @@ -156,21 +107,21 @@ void sub_802CFD0(void) s32 r5; s32 r4; - sub_8008C54(sUnknown_203B2F4->unk34); - sub_80073B8(sUnknown_203B2F4->unk34); + sub_8008C54(sUnknown_203B2F4->s0.unk34); + sub_80073B8(sUnknown_203B2F4->s0.unk34); - r5 = r4 = (sUnknown_203B2F4->input.unk1E * 8) + 10; - PrintStringOnWindow(r5, 0, sRescueEvent, sUnknown_203B2F4->unk34, 0); + r5 = r4 = (sUnknown_203B2F4->s0.input.unk1E * 8) + 10; + PrintStringOnWindow(r5, 0, sRescueEvent, sUnknown_203B2F4->s0.unk34, 0); r4 -= 6; r5 = r4 + (sUnknown_203B2F4->unk9C.f2 * 8); - sub_8012BC4(r5, 0, sUnknown_203B2F4->input.unk1E + 1, 2, 7, sUnknown_203B2F4->unk34); + sub_8012BC4(r5, 0, sUnknown_203B2F4->s0.input.unk1E + 1, 2, 7, sUnknown_203B2F4->s0.unk34); - for (r5 = 0; r5 < sUnknown_203B2F4->input.unk1A; r5++) { - iVar1 = sub_803B344((sUnknown_203B2F4->input.unk1E * sUnknown_203B2F4->input.unk1C) + r5); + for (r5 = 0; r5 < sUnknown_203B2F4->s0.input.unk1A; r5++) { + iVar1 = sub_803B344((sUnknown_203B2F4->s0.input.unk1E * sUnknown_203B2F4->s0.input.unk1C) + r5); - local.unk0[0] = sUnknown_203B2F4->unk34; - local.y = sub_8013800(&sUnknown_203B2F4->input, r5); + local.unk0[0] = sUnknown_203B2F4->s0.unk34; + local.y = sub_8013800(&sUnknown_203B2F4->s0.input, r5); sub_803B35C(&iVar1->mail, &local); local.unk43 = 1; @@ -178,5 +129,5 @@ void sub_802CFD0(void) CreateRescueTitle(&local); } - sub_80073E0(sUnknown_203B2F4->unk34); + sub_80073E0(sUnknown_203B2F4->s0.unk34); }