diff --git a/asm/wonder_mail_2.s b/asm/wonder_mail_2.s deleted file mode 100644 index 4add06ee1..000000000 --- a/asm/wonder_mail_2.s +++ /dev/null @@ -1,673 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_802BF30 -sub_802BF30: - push {r4,lr} - ldr r4, _0802BF9C - ldr r0, [r4] - adds r0, 0xA0 - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA1 - strb r2, [r0] - ldr r0, [r4] - adds r0, 0xA2 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA3 - strb r2, [r0] - ldr r0, [r4] - movs r1, 0x1E - ldrsh r0, [r0, r1] - movs r1, 0x18 - bl sub_8009614 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x38] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x4E - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x38] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x50 - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x40 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802BF9C: .4byte gUnknown_203B2D8 - thumb_func_end sub_802BF30 - - thumb_func_start CreateMailMenu -CreateMailMenu: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xDC - ldr r4, _0802C060 - ldr r0, [r4] - ldr r0, [r0, 0x38] - bl sub_8008C54 - ldr r0, [r4] - ldr r0, [r0, 0x38] - bl sub_80073B8 - ldr r1, [r4] - movs r2, 0x22 - ldrsh r0, [r1, r2] - lsls r0, 3 - adds r0, 0xA - ldr r2, _0802C064 - ldr r3, [r1, 0x38] - movs r1, 0 - str r1, [sp] - bl xxx_call_draw_string - movs r6, 0 - ldr r0, [r4] - movs r3, 0x1E - ldrsh r0, [r0, r3] - cmp r6, r0 - bge _0802C09A - adds r7, r4, 0 - ldr r0, _0802C068 - mov r9, r0 - add r1, sp, 0x5C - mov r8, r1 -_0802BFE8: - ldr r1, [r7] - movs r3, 0x22 - ldrsh r2, [r1, r3] - movs r3, 0x20 - ldrsh r0, [r1, r3] - muls r0, r2 - adds r0, r6 - adds r1, r0 - ldrb r0, [r1] - bl sub_8095FE8 - adds r5, r0, 0 - ldr r0, [r7] - ldr r1, [r0, 0x38] - str r1, [sp, 0x4] - adds r0, 0x4 - adds r1, r6, 0 - bl sub_8013800 - str r0, [sp, 0x4C] - ldrb r0, [r5] - cmp r0, 0x1 - bne _0802C06C - ldr r0, [r7] - adds r0, 0x4 - adds r1, r6, 0 - bl sub_8013800 - adds r4, r0, 0 - ldr r0, [r7] - ldr r3, [r0, 0x38] - movs r0, 0xA - adds r1, r4, 0 - movs r2, 0x6 - bl sub_803B6B0 - bl GetPlayerPokemonStruct - adds r1, r0, 0 - mov r0, r9 - bl PrintPokeNameToBuffer - ldrb r0, [r5, 0x5] - bl GetPokemonMailHeadline - adds r1, r0, 0 - mov r0, r8 - mov r2, r9 - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x38] - movs r0, 0 - str r0, [sp] - movs r0, 0x15 - adds r1, r4, 0 - mov r2, r8 - bl xxx_call_draw_string - b _0802C08E - .align 2, 0 -_0802C060: .4byte gUnknown_203B2D8 -_0802C064: .4byte gMailboxText -_0802C068: .4byte gAvailablePokemonNames -_0802C06C: - adds r0, r5, 0 - add r1, sp, 0x4 - bl sub_803B35C - adds r0, r5, 0 - bl sub_80968B0 - lsls r0, 24 - cmp r0, 0 - beq _0802C088 - mov r1, sp - adds r1, 0x47 - movs r0, 0x2 - strb r0, [r1] -_0802C088: - add r0, sp, 0x4 - bl sub_803B6D4 -_0802C08E: - adds r6, 0x1 - ldr r0, [r7] - movs r1, 0x1E - ldrsh r0, [r0, r1] - cmp r6, r0 - blt _0802BFE8 -_0802C09A: - ldr r0, _0802C0B4 - ldr r0, [r0] - ldr r0, [r0, 0x38] - bl sub_80073E0 - add sp, 0xDC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802C0B4: .4byte gUnknown_203B2D8 - thumb_func_end CreateMailMenu - - thumb_func_start CountEmptyMailSlots -CountEmptyMailSlots: - push {r4,r5,lr} - movs r5, 0 - movs r4, 0 -_0802C0BE: - lsls r0, r4, 24 - lsrs r0, 24 - bl IsMailSlotEmpty - lsls r0, 24 - cmp r0, 0 - bne _0802C0D6 - ldr r0, _0802C0E4 - ldr r0, [r0] - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_0802C0D6: - adds r4, 0x1 - cmp r4, 0x3 - ble _0802C0BE - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0802C0E4: .4byte gUnknown_203B2D8 - thumb_func_end CountEmptyMailSlots - - thumb_func_start HasNoMailinMailbox -HasNoMailinMailbox: - push {r4,lr} - movs r4, 0 -_0802C0EC: - lsls r0, r4, 24 - lsrs r0, 24 - bl IsMailSlotEmpty - lsls r0, 24 - cmp r0, 0 - bne _0802C0FE - movs r0, 0 - b _0802C106 -_0802C0FE: - adds r4, 0x1 - cmp r4, 0x3 - ble _0802C0EC - movs r0, 0x1 -_0802C106: - pop {r4} - pop {r1} - bx r1 - thumb_func_end HasNoMailinMailbox - - thumb_func_start sub_802C10C -sub_802C10C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - mov r8, r2 - bl sub_802C4A4 - lsls r0, 24 - cmp r0, 0 - beq _0802C126 - movs r0, 0 - b _0802C1CC -_0802C126: - ldr r5, _0802C1D8 - ldr r0, [r5] - cmp r0, 0 - bne _0802C138 - movs r0, 0xA8 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] -_0802C138: - ldr r0, [r5] - str r6, [r0, 0x3C] - lsls r1, r6, 1 - adds r1, r6 - lsls r1, 3 - adds r1, 0x44 - adds r1, r0, r1 - str r1, [r0, 0x40] - adds r0, 0x44 - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x3C] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x44 - ldr r0, _0802C1DC - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldr r2, [r5] - ldr r1, [r2, 0x40] - adds r0, r2, 0 - adds r0, 0xA4 - str r0, [r1, 0x14] - cmp r4, 0 - beq _0802C186 - ldr r1, [r2, 0x3C] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r1, r2, 0 - adds r1, 0x4C - adds r1, r0 - ldr r0, [r4] - str r0, [r1] -_0802C186: - ldr r0, [r5] - ldr r0, [r0, 0x40] - mov r1, r8 - bl sub_8012D34 - bl ResetUnusedInputStruct - ldr r0, [r5] - adds r0, 0x44 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r4, [r5] - adds r4, 0x8 - bl sub_802C474 - adds r1, r0, 0 - adds r0, r4, 0 - mov r2, r8 - adds r3, r6, 0 - bl sub_8013848 - ldr r0, [r5] - ldr r1, _0802C1E0 - ldrh r1, [r1] - strh r1, [r0, 0x20] - adds r0, 0x8 - bl sub_8013984 - bl sub_802C328 - bl sub_802C39C - movs r0, 0x1 -_0802C1CC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0802C1D8: .4byte gUnknown_203B2E0 -_0802C1DC: .4byte gUnknown_80DFCB4 -_0802C1E0: .4byte gUnknown_203B2E4 - thumb_func_end sub_802C10C - - thumb_func_start sub_802C1E4 -sub_802C1E4: - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _0802C200 - ldr r0, _0802C1FC - ldr r0, [r0] - adds r0, 0x8 - bl sub_8013660 - movs r0, 0 - b _0802C266 - .align 2, 0 -_0802C1FC: .4byte gUnknown_203B2E0 -_0802C200: - ldr r0, _0802C218 - ldr r0, [r0] - adds r0, 0x8 - bl GetKeyPress - cmp r0, 0x2 - beq _0802C222 - cmp r0, 0x2 - bgt _0802C21C - cmp r0, 0x1 - beq _0802C22C - b _0802C240 - .align 2, 0 -_0802C218: .4byte gUnknown_203B2E0 -_0802C21C: - cmp r0, 0x4 - beq _0802C236 - b _0802C240 -_0802C222: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0802C266 -_0802C22C: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0802C266 -_0802C236: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _0802C266 -_0802C240: - ldr r0, _0802C258 - ldr r0, [r0] - adds r0, 0x8 - movs r1, 0x1 - bl sub_80138B8 - lsls r0, 24 - cmp r0, 0 - bne _0802C25C - movs r0, 0 - b _0802C266 - .align 2, 0 -_0802C258: .4byte gUnknown_203B2E0 -_0802C25C: - bl sub_802C328 - bl sub_802C39C - movs r0, 0x1 -_0802C266: - pop {r1} - bx r1 - thumb_func_end sub_802C1E4 - - thumb_func_start sub_802C26C -sub_802C26C: - ldr r0, _0802C288 - ldr r1, [r0] - movs r0, 0x26 - ldrsh r2, [r1, r0] - movs r3, 0x24 - ldrsh r0, [r1, r3] - muls r0, r2 - movs r3, 0x20 - ldrsh r2, [r1, r3] - adds r0, r2 - adds r1, r0 - ldrb r0, [r1] - bx lr - .align 2, 0 -_0802C288: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C26C - - thumb_func_start sub_802C28C -sub_802C28C: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl ResetUnusedInputStruct - ldr r5, _0802C2D0 - ldr r0, [r5] - adds r0, 0x44 - movs r1, 0 - movs r2, 0 - bl sub_800641C - bl sub_802C474 - adds r1, r0, 0 - ldr r0, [r5] - strh r1, [r0, 0x2A] - adds r0, 0x8 - bl sub_8013984 - bl sub_802C328 - bl sub_802C39C - cmp r4, 0 - beq _0802C2CA - ldr r0, [r5] - adds r0, 0x8 - bl AddMenuCursorSprite -_0802C2CA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802C2D0: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C28C - - thumb_func_start sub_802C2D4 -sub_802C2D4: - push {r4,r5,lr} - ldr r4, _0802C31C - ldr r2, [r4] - cmp r2, 0 - beq _0802C314 - ldr r1, _0802C320 - ldrh r0, [r2, 0x20] - strh r0, [r1] - ldr r0, [r2, 0x3C] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x44 - ldr r0, _0802C324 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x44 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802C314: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802C31C: .4byte gUnknown_203B2E0 -_0802C320: .4byte gUnknown_203B2E4 -_0802C324: .4byte gUnknown_80DFC9C - thumb_func_end sub_802C2D4 - - thumb_func_start sub_802C328 -sub_802C328: - push {r4,lr} - ldr r4, _0802C398 - ldr r0, [r4] - ldrh r1, [r0, 0x28] - adds r0, 0xA4 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - ldrh r1, [r0, 0x26] - adds r0, 0xA5 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA6 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xA7 - strb r2, [r0] - ldr r0, [r4] - movs r1, 0x22 - ldrsh r0, [r0, r1] - movs r1, 0x18 - bl sub_8009614 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x3C] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x52 - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x3C] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x54 - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x44 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802C398: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C328 - - thumb_func_start sub_802C39C -sub_802C39C: - push {r4-r7,lr} - sub sp, 0x60 - ldr r7, _0802C3F8 - ldr r0, [r7] - ldr r0, [r0, 0x3C] - bl sub_8008C54 - ldr r0, [r7] - ldr r0, [r0, 0x3C] - bl sub_80073B8 - ldr r0, [r7] - movs r1, 0x26 - ldrsh r4, [r0, r1] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _0802C3FC - ldr r3, [r0, 0x3C] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0xA6 - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - movs r3, 0x26 - ldrsh r2, [r1, r3] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x3C] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r6, 0 - b _0802C452 - .align 2, 0 -_0802C3F8: .4byte gUnknown_203B2E0 -_0802C3FC: .4byte gBulletinBoardText -_0802C400: - ldr r1, [r7] - movs r3, 0x26 - ldrsh r2, [r1, r3] - movs r3, 0x24 - ldrsh r0, [r1, r3] - muls r0, r2 - adds r0, r6 - adds r1, r0 - ldrb r5, [r1] - adds r0, r5, 0 - bl sub_8096574 - adds r4, r0, 0 - ldr r0, [r7] - ldr r1, [r0, 0x3C] - str r1, [sp, 0x8] - adds r0, 0x8 - adds r1, r6, 0 - bl sub_8013800 - str r0, [sp, 0x50] - adds r0, r4, 0 - add r1, sp, 0x8 - bl sub_803B35C - adds r0, r5, 0 - bl sub_8096574 - bl sub_80968B0 - lsls r0, 24 - cmp r0, 0 - beq _0802C44A - mov r1, sp - adds r1, 0x4B - movs r0, 0x2 - strb r0, [r1] -_0802C44A: - add r0, sp, 0x8 - bl sub_803B6D4 - adds r6, 0x1 -_0802C452: - ldr r0, [r7] - movs r1, 0x22 - ldrsh r0, [r0, r1] - cmp r6, r0 - blt _0802C400 - ldr r0, _0802C470 - ldr r0, [r0] - ldr r0, [r0, 0x3C] - bl sub_80073E0 - add sp, 0x60 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802C470: .4byte gUnknown_203B2E0 - thumb_func_end sub_802C39C - - .align 2,0 diff --git a/include/constants/mailbox.h b/include/constants/mailbox.h index 6a918621f..8f961f501 100644 --- a/include/constants/mailbox.h +++ b/include/constants/mailbox.h @@ -2,5 +2,6 @@ #define GUARD_CONSTANTS_MAILBOX_H #define MAX_ACCEPTED_JOBS 8 +#define NUM_MAILBOX_SLOTS 4 #endif // GUARD_CONSTANTS_MAILBOX_H diff --git a/ld_script.txt b/ld_script.txt index 436c87aa7..69e4a4a42 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -125,7 +125,7 @@ SECTIONS { src/wonder_mail.o(.text); src/thank_you_wonder_mail.o(.text); src/wonder_mail_2.o(.text); - asm/wonder_mail_2.o(.text); + src/wonder_mail_2_mid.o(.text); src/wonder_mail_2_1.o(.text); asm/wonder_mail_802C860.o(.text); src/wonder_mail_3.o(.text); diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 3359a6100..11e5a1cb5 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -643,7 +643,7 @@ void sub_802B880(void) void sub_802B8D4(void) { s32 iVar2; - s32 retvar; + s32 y; s32 new_index; u8 mailIndex; @@ -654,12 +654,12 @@ void sub_802B8D4(void) 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++) { - retvar = sub_8013800(&gUnknown_203B2CC->unk38, 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, retvar, 6, gUnknown_203B2CC->unk6C); + sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C); sub_802BC7C(); - xxx_format_and_draw(0x15, retvar, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0); + xxx_format_and_draw(0x15, y, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0); } sub_80073E0(gUnknown_203B2CC->unk6C); } @@ -953,3 +953,63 @@ void sub_802BEDC(void) 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 0fc0ea174..c02dedccf 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -5,6 +5,12 @@ #include "text.h" #include "menu.h" +struct unkStruct_802C39C +{ + /* 0x0 */ u32 local_6c[15]; + /* 0x3C */ u8 local_29[12]; + /* 0x48 */ u32 local_24[4]; +}; struct unkStruct_203B2E8 { @@ -143,7 +149,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(u32 *); +extern void sub_803B6D4(void *); extern void sub_8013984(u32 *); extern void sub_802C6DC(void); @@ -356,8 +362,7 @@ void sub_802C750(void) int iVar2; s32 r4; s32 r5; - u32 auStack104 [18]; - u32 uStack32[4]; + struct unkStruct_802C39C local; sub_8008C54(gUnknown_203B2E8->unk3C); sub_80073B8(gUnknown_203B2E8->unk3C); @@ -374,10 +379,10 @@ void sub_802C750(void) do { uVar1 = GetJobSlotInfo(gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + iVar2]); - auStack104[0] = gUnknown_203B2E8->unk3C; - uStack32[0] = sub_8013800(&gUnknown_203B2E8->unk8,iVar2); - sub_803B35C(uVar1,auStack104); - sub_803B6D4(auStack104); + 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); 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 new file mode 100644 index 000000000..2e5bd3627 --- /dev/null +++ b/src/wonder_mail_2_mid.c @@ -0,0 +1,358 @@ +#include "global.h" +#include "constants/mailbox.h" +#include "code_800D090.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "pokemon_mail.h" + +bool8 IsMailSlotEmpty(u8); +extern void sub_8013984(void *); +extern void sub_8013848(u32 *, s32, u32, u32); +extern s32 sub_802C474(void); +extern void sub_8012D34(struct UnkTextStruct2 *, u32); +extern void sub_802C328(void); +extern void sub_802C39C(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 void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); + +extern s32 sub_8013800(u32 *, s32); +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 xxx_call_draw_string(s32, s32, u8 *, s32, s32); +extern void sub_8012BC4(s32, s32, s32, s32 ,s32 ,s32); + + +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; + +struct unkStruct_203B2E0 +{ + // size: 0xA8 + u8 unk0[0x8]; + u32 unk8; + u8 unkC[0x20 - 0xC]; + s16 unk20; + s16 unk22; + s16 unk24; + s16 unk26; + s16 unk28; + s16 unk2A; + u8 fill22[0x3C - 0x2C]; + s32 unk3C; + struct UnkTextStruct2 *unk40; + struct UnkTextStruct2 unk44[4]; + u8 unkA4[4]; +}; +extern struct unkStruct_203B2E0 *gUnknown_203B2E0; + +struct unkStruct_802C39C +{ + /* 0x0 */ u32 local_6c[15]; + /* 0x3C */ u8 local_29[12]; + /* 0x48 */ u32 local_24[4]; +}; + + +extern struct UnkTextStruct2 gUnknown_80DFCB4; +extern struct UnkTextStruct2 gUnknown_80DFC9C; + +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 struct PokemonStruct *GetPlayerPokemonStruct(void); +extern u8 gMailboxText[]; +extern u8 gAvailablePokemonNames[]; +extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); +extern void sub_803B6B0(u32, u32, u32, u32); + +void CreateMailMenu(void) +{ + u8 *pcVar2; + s32 y; + s32 iVar5; + struct unkStruct_802C39C local; + u8 buffer [128]; + + sub_8008C54(gUnknown_203B2D8->unk38); + sub_80073B8(gUnknown_203B2D8->unk38); + xxx_call_draw_string(gUnknown_203B2D8->unk22 * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0); + iVar5 = 0; + 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); + if (*pcVar2 == 1) { + y = sub_8013800(&gUnknown_203B2D8->unk4, iVar5); + sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); + PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); + sprintf_2(buffer, GetPokemonMailHeadline(pcVar2[5]), gAvailablePokemonNames); + xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0); + } + else { + sub_803B35C(pcVar2,local.local_6c); + if (sub_80968B0(pcVar2) != 0) { + local.local_29[7] = 2; + } + sub_803B6D4(&local); + } + iVar5++; + } while (iVar5 < gUnknown_203B2D8->unk1E); + } + sub_80073E0(gUnknown_203B2D8->unk38); +} + +s32 CountEmptyMailSlots(void) +{ + s32 mailSlots; + s32 index; + + mailSlots = 0; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(!IsMailSlotEmpty(index)) + { + gUnknown_203B2D8->unk0[mailSlots] = index; + mailSlots++; + } + } + return mailSlots; +} + +bool8 HasNoMailinMailbox(void) +{ + s32 index; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(!IsMailSlotEmpty(index)) + return FALSE; + } + return TRUE; +} + + +bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3) +{ + if (sub_802C4A4() != 0) { + return FALSE; + } + else + { + if (gUnknown_203B2E0 == NULL) { + gUnknown_203B2E0 = MemoryAlloc(sizeof(struct unkStruct_203B2E0),8); + } + gUnknown_203B2E0->unk3C = param_1; + gUnknown_203B2E0->unk40 = &gUnknown_203B2E0->unk44[param_1]; + sub_8006518(gUnknown_203B2E0->unk44); + + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFCB4; + gUnknown_203B2E0->unk40->unk14 = gUnknown_203B2E0->unkA4; + if (param_2 != NULL) { + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C].unk08 = *param_2; + } + 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); + gUnknown_203B2E0->unk20 = gUnknown_203B2E4; + sub_8013984(&gUnknown_203B2E0->unk8); + sub_802C328(); + sub_802C39C(); + return TRUE; + } +} + +u32 sub_802C1E4(u8 param_1) +{ + if (param_1 == '\0') { + sub_8013660(&gUnknown_203B2E0->unk8); + return 0; + } + else { + switch(GetKeyPress(&gUnknown_203B2E0->unk8)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + if (sub_80138B8(&gUnknown_203B2E0->unk8,1)) { + sub_802C328(); + sub_802C39C(); + return 1; + } + else { + return 0; + } + } + } +} + +u8 sub_802C26C(void) +{ + return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24) + gUnknown_203B2E0->unk20]; +} + +void sub_802C28C(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, 0, 0); + gUnknown_203B2E0->unk2A = sub_802C474(); + sub_8013984(&gUnknown_203B2E0->unk8); + sub_802C328(); + sub_802C39C(); + if(r0_u8) + AddMenuCursorSprite(&gUnknown_203B2E0->unk8); +} + +void sub_802C2D4(void) +{ + if(gUnknown_203B2E0 != NULL) + { + gUnknown_203B2E4 = gUnknown_203B2E0->unk20; + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFC9C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, 1, 1); + MemoryFree(gUnknown_203B2E0); + gUnknown_203B2E0 = NULL; + } +} + +NAKED +void sub_802C328(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0802C398\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" +"_0802C398: .4byte gUnknown_203B2E0"); +} + +void sub_802C39C(void) +{ + u32 uVar1; + u8 *uVar3; + s32 iVar4; + s32 iVar5; + 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); + iVar4 += 4; + iVar5 = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; + sub_8012BC4(iVar5,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); + + iVar6 = 0; + if(iVar6 < gUnknown_203B2E0->unk22) + do + { + 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); + if (sub_80968B0(sub_8096574(uVar1)) != '\0') { + local.local_29[7] = 2; + } + sub_803B6D4(&local); + iVar6++; + } while (iVar6 < gUnknown_203B2E0->unk22); + sub_80073E0(gUnknown_203B2E0->unk3C); +}