diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-08-30 18:23:26 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-08-30 18:23:26 -0400 |
commit | 73aecdbbbff398c27734f8ed793bb495a5391a4b (patch) | |
tree | b3060e2576d1572c1a8aeb63f300f43ba0d13131 | |
parent | 550450880645598b327be0e512b48de2c3777a58 (diff) |
Decompile mail-related code
-rw-r--r-- | arm9/arm9.lsf | 2 | ||||
-rw-r--r-- | arm9/asm/scrcmd.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_02025658.s | 454 | ||||
-rw-r--r-- | arm9/asm/unk_02035068.s | 8 | ||||
-rw-r--r-- | arm9/asm/unk_020377F0.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0205CE48.s | 6 | ||||
-rw-r--r-- | arm9/asm/unk_020653EC.s | 18 | ||||
-rw-r--r-- | arm9/asm/unk_0206C700.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_020854E0.s | 52 | ||||
-rw-r--r-- | arm9/asm/unk_020859C0.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 48 | ||||
-rw-r--r-- | arm9/src/daycare.c | 4 | ||||
-rw-r--r-- | arm9/src/mail.c | 267 | ||||
-rw-r--r-- | arm9/src/main.c | 4 | ||||
-rw-r--r-- | arm9/src/pokemon.c | 30 | ||||
-rw-r--r-- | arm9/src/save_arrays.c | 4 | ||||
-rw-r--r-- | include/constants/pokemon.h | 2 | ||||
-rw-r--r-- | include/daycare.h | 4 | ||||
-rw-r--r-- | include/global.h | 4 | ||||
-rw-r--r-- | include/mail.h | 58 | ||||
-rw-r--r-- | include/pokemon.h | 4 | ||||
-rw-r--r-- | include/seals.h | 15 |
22 files changed, 427 insertions, 567 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index f2ac2c77..4459fd8c 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -94,7 +94,7 @@ Static arm9 Object unk_020250A4.o Object unk_02025484.o Object unk_020254B8.o - Object unk_02025658.o + Object mail.o Object unk_02025954.o Object unk_02026CD0.o Object unk_02027E30.o diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s index 0074e70f..b874b757 100644 --- a/arm9/asm/scrcmd.s +++ b/arm9/asm/scrcmd.s @@ -8765,9 +8765,9 @@ FUN_0203DF38: ; 0x0203DF38 bl GetVarPointer add r5, r0, #0x0 ldr r0, [r4, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get mov r1, #0x0 - bl FUN_0202589C + bl Mailbox_CountMessages strh r0, [r5, #0x0] mov r0, #0x0 pop {r3-r5, pc} diff --git a/arm9/asm/unk_02025658.s b/arm9/asm/unk_02025658.s deleted file mode 100644 index 4c6c4960..00000000 --- a/arm9/asm/unk_02025658.s +++ /dev/null @@ -1,454 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gGameLanguage - .extern gGameVersion - - .text - - thumb_func_start InitSealsObject -InitSealsObject: ; 0x02025658 - push {r3-r5, lr} - add r4, r0, #0x0 - mov r0, #0x0 - str r0, [r4, #0x0] - strb r0, [r4, #0x4] - ldr r0, _020256A0 ; =gGameLanguage - mov r1, #0x8 - ldrb r0, [r0, #0x0] - strb r0, [r4, #0x5] - ldr r0, _020256A4 ; =gGameVersion - ldrb r0, [r0, #0x0] - strb r0, [r4, #0x6] - mov r0, #0xff - strb r0, [r4, #0x7] - add r0, r4, #0x0 - add r0, #0x8 - bl StringFillEOS - ldr r0, _020256A8 ; =0x0000FFFF - mov r1, #0x0 - add r2, r4, #0x0 -_02025682: - add r1, r1, #0x1 - strh r0, [r2, #0x18] - add r2, r2, #0x2 - cmp r1, #0x3 - blt _02025682 - mov r5, #0x0 - add r4, #0x20 -_02025690: - add r0, r4, #0x0 - bl FUN_02013724 - add r5, r5, #0x1 - add r4, #0x8 - cmp r5, #0x3 - blt _02025690 - pop {r3-r5, pc} - .balign 4 -_020256A0: .word gGameLanguage -_020256A4: .word gGameVersion -_020256A8: .word 0x0000FFFF - - thumb_func_start FUN_020256AC -FUN_020256AC: ; 0x020256AC - ldrb r0, [r0, #0x7] - cmp r0, #0xb - bhi _020256B6 - mov r0, #0x1 - bx lr -_020256B6: - mov r0, #0x0 - bx lr - .balign 4 - - thumb_func_start CreateNewSealsObject -CreateNewSealsObject: ; 0x020256BC - push {r4, lr} - mov r1, #0x38 - bl AllocFromHeapAtEnd - add r4, r0, #0x0 - bl InitSealsObject - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start CopySealsObject -CopySealsObject: ; 0x020256D0 - ldr r3, _020256D8 ; =MI_CpuCopy8 - mov r2, #0x38 - bx r3 - nop -_020256D8: .word MI_CpuCopy8 - - thumb_func_start FUN_020256DC -FUN_020256DC: ; 0x020256DC - push {r4-r7, lr} - sub sp, #0x14 - add r7, r3, #0x0 - add r5, r0, #0x0 - add r6, r1, #0x0 - add r4, r2, #0x0 - bl InitSealsObject - add r0, r7, #0x0 - strb r6, [r5, #0x7] - bl SavArray_PlayerParty_get - str r0, [sp, #0x0] - add r0, r7, #0x0 - bl Sav2_PlayerData_GetProfileAddr - add r6, r0, #0x0 - bl PlayerProfile_GetNamePtr - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x8 - bl CopyU16StringArray - add r0, r6, #0x0 - bl PlayerProfile_GetTrainerGender - strb r0, [r5, #0x4] - add r0, r6, #0x0 - bl PlayerProfile_GetTrainerID - str r0, [r5, #0x0] - ldr r0, [sp, #0x0] - mov r6, #0x0 - bl GetPartyCount - cmp r4, r0 - bge _020257AE - add r5, #0x18 -_0202572A: - ldr r0, [sp, #0x0] - add r1, r4, #0x0 - bl GetPartyMonByIndex - mov r1, #0x5 - mov r2, #0x0 - add r7, r0, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - str r0, [sp, #0x4] - add r0, r7, #0x0 - mov r1, #0x4c - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0x8] - add r0, r7, #0x0 - mov r1, #0x70 - mov r2, #0x0 - bl GetMonData - str r0, [sp, #0xc] - add r0, r7, #0x0 - bl FUN_0206B6C8 - str r0, [sp, #0x10] - ldr r0, [sp, #0x4] - ldr r1, [sp, #0xc] - ldr r2, [sp, #0x8] - bl FUN_0206B7BC - lsl r3, r6, #0x1 - ldrh r1, [r5, r3] - add r7, r0, #0x0 - ldr r0, _020257B4 ; =0xFFFFF000 - add r2, r1, #0x0 - and r2, r0 - ldr r0, [sp, #0x10] - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - ldr r0, _020257B8 ; =0x00000FFF - and r0, r1 - orr r0, r2 - strh r0, [r5, r3] - add r0, r6, #0x1 - lsl r0, r0, #0x18 - lsr r6, r0, #0x18 - ldrh r1, [r5, r3] - ldr r0, _020257BC ; =0xFFFF0FFF - and r0, r1 - lsl r1, r7, #0x1c - lsr r1, r1, #0x10 - orr r0, r1 - strh r0, [r5, r3] - cmp r6, #0x3 - bhs _020257AE - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - ldr r0, [sp, #0x0] - bl GetPartyCount - cmp r4, r0 - blt _0202572A -_020257AE: - add sp, #0x14 - pop {r4-r7, pc} - nop -_020257B4: .word 0xFFFFF000 -_020257B8: .word 0x00000FFF -_020257BC: .word 0xFFFF0FFF - - thumb_func_start FUN_020257C0 -FUN_020257C0: ; 0x020257C0 - ldr r0, [r0, #0x0] - bx lr - - thumb_func_start FUN_020257C4 -FUN_020257C4: ; 0x020257C4 - add r0, #0x8 - bx lr - - thumb_func_start FUN_020257C8 -FUN_020257C8: ; 0x020257C8 - ldrb r0, [r0, #0x4] - bx lr - - thumb_func_start FUN_020257CC -FUN_020257CC: ; 0x020257CC - ldrb r0, [r0, #0x7] - bx lr - - thumb_func_start FUN_020257D0 -FUN_020257D0: ; 0x020257D0 - cmp r1, #0xc - bhs _020257D6 - strb r1, [r0, #0x7] -_020257D6: - bx lr - - thumb_func_start FUN_020257D8 -FUN_020257D8: ; 0x020257D8 - ldrb r0, [r0, #0x5] - bx lr - - thumb_func_start FUN_020257DC -FUN_020257DC: ; 0x020257DC - ldrb r0, [r0, #0x6] - bx lr - - thumb_func_start FUN_020257E0 -FUN_020257E0: ; 0x020257E0 - cmp r1, #0x3 - bhs _02025810 - cmp r2, #0x0 - beq _020257F0 - cmp r2, #0x1 - beq _020257FC - cmp r2, #0x2 - b _02025808 -_020257F0: - lsl r1, r1, #0x1 - add r0, r0, r1 - ldrh r0, [r0, #0x18] - lsl r0, r0, #0x14 - lsr r0, r0, #0x14 - bx lr -_020257FC: - lsl r1, r1, #0x1 - add r0, r0, r1 - ldrh r0, [r0, #0x18] - lsl r0, r0, #0x10 - lsr r0, r0, #0x1c - bx lr -_02025808: - lsl r1, r1, #0x1 - add r0, r0, r1 - ldrh r0, [r0, #0x18] - bx lr -_02025810: - mov r0, #0x0 - bx lr - - thumb_func_start FUN_02025814 -FUN_02025814: ; 0x02025814 - cmp r1, #0x3 - bhs _02025820 - add r0, #0x20 - lsl r1, r1, #0x3 - add r0, r0, r1 - bx lr -_02025820: - add r0, #0x20 - bx lr - - thumb_func_start FUN_02025824 -FUN_02025824: ; 0x02025824 - push {r3, lr} - cmp r2, #0x3 - bhs _02025834 - add r0, #0x20 - lsl r2, r2, #0x3 - add r0, r0, r2 - bl FUN_02013960 -_02025834: - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02025838 -FUN_02025838: ; 0x02025838 - ldr r3, _02025840 ; =SavArray_get - mov r1, #0xf - bx r3 - nop -_02025840: .word SavArray_get - - thumb_func_start FUN_02025844 -FUN_02025844: ; 0x02025844 - mov r0, #0x46 - lsl r0, r0, #0x4 - bx lr - .balign 4 - - thumb_func_start FUN_0202584C -FUN_0202584C: ; 0x0202584C - push {r3-r5, lr} - add r5, r0, #0x0 - mov r4, #0x0 -_02025852: - add r0, r5, #0x0 - bl InitSealsObject - add r4, r4, #0x1 - add r5, #0x38 - cmp r4, #0x14 - blt _02025852 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02025864 -FUN_02025864: ; 0x02025864 - push {r3, lr} - cmp r1, #0x0 - bne _02025872 - mov r1, #0x14 - bl FUN_020258F0 - pop {r3, pc} -_02025872: - mov r0, #0x0 - mvn r0, r0 - pop {r3, pc} - - thumb_func_start FUN_02025878 -FUN_02025878: ; 0x02025878 - push {r3, lr} - bl FUN_02025940 - cmp r0, #0x0 - beq _02025886 - bl InitSealsObject -_02025886: - pop {r3, pc} - - thumb_func_start FUN_02025888 -FUN_02025888: ; 0x02025888 - push {r4, lr} - add r4, r3, #0x0 - bl FUN_02025940 - add r1, r0, #0x0 - beq _0202589A - add r0, r4, #0x0 - bl CopySealsObject -_0202589A: - pop {r4, pc} - - thumb_func_start FUN_0202589C -FUN_0202589C: ; 0x0202589C - push {r3, lr} - cmp r1, #0x0 - bne _020258AA - mov r1, #0x14 - bl FUN_02025918 - pop {r3, pc} -_020258AA: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_020258B0 -FUN_020258B0: ; 0x020258B0 - push {r3-r5, lr} - add r5, r3, #0x0 - bl FUN_02025940 - add r4, r0, #0x0 - add r0, r5, #0x0 - bl CreateNewSealsObject - add r5, r0, #0x0 - cmp r4, #0x0 - beq _020258CE - add r0, r4, #0x0 - add r1, r5, #0x0 - bl CopySealsObject -_020258CE: - add r0, r5, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_020258D4 -FUN_020258D4: ; 0x020258D4 - push {r4, lr} - add r4, r3, #0x0 - bl FUN_02025940 - cmp r0, #0x0 - bne _020258E8 - add r0, r4, #0x0 - bl InitSealsObject - pop {r4, pc} -_020258E8: - add r1, r4, #0x0 - bl CopySealsObject - pop {r4, pc} - - thumb_func_start FUN_020258F0 -FUN_020258F0: ; 0x020258F0 - push {r4-r6, lr} - add r6, r1, #0x0 - add r5, r0, #0x0 - mov r4, #0x0 - cmp r6, #0x0 - ble _02025912 -_020258FC: - add r0, r5, #0x0 - bl FUN_020256AC - cmp r0, #0x0 - bne _0202590A - add r0, r4, #0x0 - pop {r4-r6, pc} -_0202590A: - add r4, r4, #0x1 - add r5, #0x38 - cmp r4, r6 - blt _020258FC -_02025912: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r6, pc} - - thumb_func_start FUN_02025918 -FUN_02025918: ; 0x02025918 - push {r3-r7, lr} - mov r4, #0x0 - add r7, r1, #0x0 - add r5, r0, #0x0 - add r6, r4, #0x0 - cmp r7, #0x0 - ble _0202593A -_02025926: - add r0, r5, #0x0 - bl FUN_020256AC - cmp r0, #0x0 - beq _02025932 - add r4, r4, #0x1 -_02025932: - add r6, r6, #0x1 - add r5, #0x38 - cmp r6, r7 - blt _02025926 -_0202593A: - add r0, r4, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02025940 -FUN_02025940: ; 0x02025940 - mov r3, #0x0 - cmp r1, #0x0 - bne _02025950 - cmp r2, #0x14 - bge _02025950 - mov r1, #0x38 - mul r1, r2 - add r3, r0, r1 -_02025950: - add r0, r3, #0x0 - bx lr diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s index 7a33df26..0294a124 100644 --- a/arm9/asm/unk_02035068.s +++ b/arm9/asm/unk_02035068.s @@ -2406,7 +2406,7 @@ _0203638A: bl Sav2_Bag_get str r0, [r5, #0x4] ldr r0, [r6, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r5, #0x8] ldr r0, [r6, #0xc] bl Sav2_PlayerData_GetOptionsAddr @@ -2505,7 +2505,7 @@ _02036474: bl Sav2_Bag_get str r0, [r5, #0x4] ldr r0, [r6, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r5, #0x8] ldr r0, [r6, #0xc] bl Sav2_PlayerData_GetOptionsAddr @@ -2998,7 +2998,7 @@ FUN_0203684C: ; 0x0203684C bl Sav2_Bag_get str r0, [r5, #0x4] ldr r0, [r6, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r5, #0x8] ldr r0, [r6, #0xc] bl Sav2_PlayerData_GetOptionsAddr @@ -3527,7 +3527,7 @@ FUN_02036CEC: ; 0x02036CEC bl Sav2_Bag_get str r0, [r4, #0x4] ldr r0, [r5, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s index 266266f9..d0d60821 100644 --- a/arm9/asm/unk_020377F0.s +++ b/arm9/asm/unk_020377F0.s @@ -435,7 +435,7 @@ FUN_0203797C: ; 0x0203797C bl Sav2_Bag_get str r0, [r4, #0x4] ldr r0, [r5, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr diff --git a/arm9/asm/unk_0205CE48.s b/arm9/asm/unk_0205CE48.s index adeddafc..5ad7ca34 100644 --- a/arm9/asm/unk_0205CE48.s +++ b/arm9/asm/unk_0205CE48.s @@ -294,7 +294,7 @@ FUN_0205D024: ; 0x0205D024 bl Sav2_Bag_get str r0, [r4, #0x4] ldr r0, [r5, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr @@ -777,7 +777,7 @@ FUN_0205D400: ; 0x0205D400 bl Sav2_Bag_get str r0, [r4, #0x4] ldr r0, [r5, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr @@ -1508,7 +1508,7 @@ FUN_0205D9A8: ; 0x0205D9A8 bl Sav2_Bag_get str r0, [r4, #0x4] ldr r0, [r5, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s index dd82a0eb..1cf56132 100644 --- a/arm9/asm/unk_020653EC.s +++ b/arm9/asm/unk_020653EC.s @@ -1606,7 +1606,7 @@ FUN_02066070: ; 0x02066070 add r6, r0, #0x0 add r0, r4, #0x0 add r5, r2, #0x0 - bl FUN_02025838 + bl Sav2_Mailbox_get mov r1, #0x6b lsl r1, r1, #0x2 str r0, [sp, #0x4] @@ -1617,7 +1617,7 @@ FUN_02066070: ; 0x02066070 lsl r1, r1, #0x4 str r0, [r6, r1] add r0, r5, #0x0 - bl CreateNewSealsObject + bl Mail_new add r7, r0, #0x0 add r0, r6, #0x0 str r0, [sp, #0x10] @@ -1633,7 +1633,7 @@ _020660AE: mov r1, #0x0 add r2, r4, #0x0 add r3, r7, #0x0 - bl FUN_020258D4 + bl Mailbox_FetchMailIToBuffer mov r0, #0xc mul r0, r4 ldr r1, [sp, #0x8] @@ -1653,22 +1653,22 @@ _020660AE: ldr r0, [sp, #0xc] strb r4, [r1, r0] add r0, r7, #0x0 - bl FUN_020256AC + bl Mail_TypeIsValid cmp r0, #0x0 beq _02066134 mov r0, #0x1 strb r0, [r5, #0x1] add r0, r7, #0x0 - bl FUN_020257C8 + bl Mail_GetAuthorGender strb r0, [r5, #0x4] add r0, r7, #0x0 - bl FUN_020257CC + bl Mail_GetType strb r0, [r5, #0x5] ldrb r0, [r5, #0x5] bl MailToItemId strh r0, [r5, #0x6] add r0, r7, #0x0 - bl FUN_020257C4 + bl Mail_GetAuthorNamePtr add r1, r0, #0x0 ldr r0, [r5, #0x8] bl CopyU16ArrayToString @@ -1778,7 +1778,7 @@ _020661D4: ldrb r2, [r5, #0x18] ldr r0, [r5, r0] mov r1, #0x0 - bl FUN_02025878 + bl Mailbox_DeleteSlotI ldrb r1, [r5, #0x18] add r0, r5, #0x0 bl FUN_02066160 @@ -2395,7 +2395,7 @@ _02066676: lsl r0, r0, #0x2 ldr r0, [r5, r0] ldr r0, [r0, #0xc] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] add r0, r4, #0x0 mov r1, #0x0 diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s index f23632f0..c42b766a 100644 --- a/arm9/asm/unk_0206C700.s +++ b/arm9/asm/unk_0206C700.s @@ -2169,7 +2169,7 @@ _0206D8EA: add r2, sp, #0x0 bl SetMonData ldr r0, [r4, #0x5c] - bl CreateNewSealsObject + bl Mail_new add r6, r0, #0x0 add r0, r5, #0x0 mov r1, #0xa9 diff --git a/arm9/asm/unk_020854E0.s b/arm9/asm/unk_020854E0.s index 86ea2fee..76b5a118 100644 --- a/arm9/asm/unk_020854E0.s +++ b/arm9/asm/unk_020854E0.s @@ -25,7 +25,7 @@ FUN_020854E0: ; 0x020854E0 add r7, r1, #0x0 add r6, r2, #0x0 str r3, [sp, #0x0] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [sp, #0x4] ldr r0, [sp, #0x20] mov r1, #0x1c @@ -46,14 +46,14 @@ FUN_020854E0: ; 0x020854E0 strh r0, [r4, #0xc] ldr r0, [sp, #0x20] str r5, [r4, #0x10] - bl CreateNewSealsObject + bl Mail_new str r0, [r4, #0x14] - bl InitSealsObject + bl Mail_init ldr r0, [r4, #0x14] mov r1, #0xff add r2, r6, #0x0 add r3, r5, #0x0 - bl FUN_020256DC + bl Mail_SetNewMessageDetails add r0, r4, #0x0 add sp, #0x8 pop {r3-r7, pc} @@ -78,12 +78,12 @@ FUN_02085538: ; 0x02085538 strh r6, [r4, #0xc] add r0, r7, #0x0 str r7, [r4, #0x10] - bl FUN_02025838 + bl Sav2_Mailbox_get ldr r3, [sp, #0x0] add r1, r5, #0x0 add r2, r6, #0x0 str r0, [r4, #0x18] - bl FUN_020258B0 + bl Mailbox_AllocAndFetchMailI str r0, [r4, #0x14] add r0, r4, #0x0 pop {r3-r7, pc} @@ -106,7 +106,7 @@ FUN_02085578: ; 0x02085578 strh r0, [r4, #0x0] str r5, [r4, #0x10] add r0, r7, #0x0 - bl CreateNewSealsObject + bl Mail_new str r0, [r4, #0x14] ldr r2, [r4, #0x14] add r0, r6, #0x0 @@ -133,10 +133,10 @@ FUN_020855B0: ; 0x020855B0 strh r0, [r4, #0x0] add r0, r7, #0x0 str r5, [r4, #0x10] - bl CreateNewSealsObject + bl Mail_new add r1, r6, #0x0 str r0, [r4, #0x14] - bl FUN_020257D0 + bl Mail_SetType add r0, r4, #0x0 pop {r3-r7, pc} .balign 4 @@ -162,7 +162,7 @@ _020855FC: ldr r3, [r5, #0x14] add r1, r4, #0x0 add r2, r6, #0x0 - bl FUN_02025888 + bl Mailbox_CopyMailToSlotI mov r0, #0x1 pop {r4-r6, pc} @@ -206,14 +206,14 @@ FUN_02085644: ; 0x02085644 add r7, r0, #0x0 add r4, r2, #0x0 str r1, [sp, #0x0] - bl FUN_02025864 + bl Mailbox_GetFirstEmptySlotIdx add r6, r0, #0x0 mov r0, #0x0 mvn r0, r0 cmp r6, r0 beq _0208569E add r0, r4, #0x0 - bl CreateNewSealsObject + bl Mail_new add r4, r0, #0x0 add r0, r5, #0x0 mov r1, #0xa9 @@ -223,9 +223,9 @@ FUN_02085644: ; 0x02085644 mov r1, #0x0 add r2, r6, #0x0 add r3, r4, #0x0 - bl FUN_02025888 + bl Mailbox_CopyMailToSlotI add r0, r4, #0x0 - bl InitSealsObject + bl Mail_init add r0, r5, #0x0 mov r1, #0xa9 add r2, r4, #0x0 @@ -249,14 +249,14 @@ FUN_020856A0: ; 0x020856A0 add r2, r5, #0x0 add r7, r0, #0x0 str r1, [sp, #0x0] - bl FUN_020258B0 + bl Mailbox_AllocAndFetchMailI add r6, r0, #0x0 bne _020856BC mov r0, #0x0 mvn r0, r0 pop {r3-r7, pc} _020856BC: - bl FUN_020257CC + bl Mail_GetType bl MailToItemId str r0, [sp, #0x0] add r0, r4, #0x0 @@ -270,7 +270,7 @@ _020856BC: add r0, r7, #0x0 mov r1, #0x0 add r2, r5, #0x0 - bl FUN_02025878 + bl Mailbox_DeleteSlotI add r0, r6, #0x0 bl FreeToHeap add r0, r5, #0x0 @@ -292,25 +292,25 @@ FUN_020856F0: ; 0x020856F0 mov r0, #0x0 strh r0, [r6, #0x0] add r0, r4, #0x0 - bl FUN_020257C0 + bl Mail_GetOTID str r0, [r6, #0x8] mov r0, #0x8 add r1, r5, #0x0 bl String_ctor str r0, [r6, #0x10] add r0, r4, #0x0 - bl FUN_020257C4 + bl Mail_GetAuthorNamePtr add r1, r0, #0x0 ldr r0, [r6, #0x10] bl CopyU16ArrayToString add r0, r4, #0x0 - bl FUN_020257CC + bl Mail_GetType strb r0, [r6, #0xf] add r0, r4, #0x0 - bl FUN_020257D8 + bl Mail_GetLanguage strb r0, [r6, #0xd] add r0, r4, #0x0 - bl FUN_020257DC + bl Mail_GetVersion strb r0, [r6, #0xe] mov r5, #0x0 mov r7, #0x2 @@ -319,7 +319,7 @@ _02085748: add r0, r4, #0x0 lsr r1, r1, #0x18 add r2, r7, #0x0 - bl FUN_020257E0 + bl Mail_GetAttrFromUnk18Array lsl r1, r5, #0x1 add r1, r6, r1 strh r0, [r1, #0x14] @@ -335,7 +335,7 @@ _0208576A: lsl r1, r5, #0x18 add r0, r4, #0x0 lsr r1, r1, #0x18 - bl FUN_02025814 + bl Mail_GetUnk20Array add r1, r0, #0x0 lsl r0, r5, #0x3 add r0, r7, r0 @@ -376,7 +376,7 @@ _020857B0: add r0, r6, #0x0 add r1, r4, r1 lsr r2, r2, #0x18 - bl FUN_02025824 + bl Mail_CopyToUnk20Array add r0, r5, #0x1 lsl r0, r0, #0x10 lsr r5, r0, #0x10 @@ -384,7 +384,7 @@ _020857B0: blo _020857B0 ldrb r1, [r7, #0xf] add r0, r6, #0x0 - bl FUN_020257D0 + bl Mail_SetType pop {r3-r7, pc} .balign 4 diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s index 1a38e392..7b65b9e5 100644 --- a/arm9/asm/unk_020859C0.s +++ b/arm9/asm/unk_020859C0.s @@ -638,7 +638,7 @@ _02085E66: bl Sav2_Bag_get str r0, [r4, #0x4] ldr r0, [r6, #0x10] - bl FUN_02025838 + bl Sav2_Mailbox_get str r0, [r4, #0x8] add r0, r4, #0x0 mov r1, #0x0 diff --git a/arm9/global.inc b/arm9/global.inc index 0a3e62e0..821007ef 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1630,30 +1630,30 @@ .extern FUN_020254F8 .extern FUN_02025520 .extern FUN_02025614 -.extern InitSealsObject -.extern FUN_020256AC -.extern CreateNewSealsObject -.extern CopySealsObject -.extern FUN_020256DC -.extern FUN_020257C0 -.extern FUN_020257C4 -.extern FUN_020257C8 -.extern FUN_020257CC -.extern FUN_020257D0 -.extern FUN_020257D8 -.extern FUN_020257DC -.extern FUN_020257E0 -.extern FUN_02025814 -.extern FUN_02025824 -.extern FUN_02025838 -.extern FUN_02025844 -.extern FUN_0202584C -.extern FUN_02025864 -.extern FUN_02025878 -.extern FUN_02025888 -.extern FUN_0202589C -.extern FUN_020258B0 -.extern FUN_020258D4 +.extern Mail_init +.extern Mail_TypeIsValid +.extern Mail_new +.extern Mail_copy +.extern Mail_SetNewMessageDetails +.extern Mail_GetOTID +.extern Mail_GetAuthorNamePtr +.extern Mail_GetAuthorGender +.extern Mail_GetType +.extern Mail_SetType +.extern Mail_GetLanguage +.extern Mail_GetVersion +.extern Mail_GetAttrFromUnk18Array +.extern Mail_GetUnk20Array +.extern Mail_CopyToUnk20Array +.extern Sav2_Mailbox_get +.extern Sav2_Mailbox_sizeof +.extern Sav2_Mailbox_init +.extern Mailbox_GetFirstEmptySlotIdx +.extern Mailbox_DeleteSlotI +.extern Mailbox_CopyMailToSlotI +.extern Mailbox_CountMessages +.extern Mailbox_AllocAndFetchMailI +.extern Mailbox_FetchMailIToBuffer .extern FUN_02025954 .extern FUN_0202595C .extern FUN_02025960 diff --git a/arm9/src/daycare.c b/arm9/src/daycare.c index eff25151..b144f0a9 100644 --- a/arm9/src/daycare.c +++ b/arm9/src/daycare.c @@ -1,6 +1,6 @@ #include "global.h" #include "pokemon.h" -#include "seals.h" +#include "mail.h" #include "save_block_2.h" #include "daycare.h" @@ -40,7 +40,7 @@ u32 DayCareMon_GetSteps(struct DayCareMon * dcmon) return dcmon->steps; } -struct SealStruct * DayCareMail_GetCapsule(struct DayCareMail * dcmail) +struct Mail * DayCareMail_GetCapsule(struct DayCareMail * dcmail) { return &dcmail->seal; } diff --git a/arm9/src/mail.c b/arm9/src/mail.c new file mode 100644 index 00000000..96074471 --- /dev/null +++ b/arm9/src/mail.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "mail.h" +#include "heap.h" +#include "string_util.h" +#include "MI_memory.h" +#include "save_block_2.h" +#include "party.h" +#include "player_data.h" + +#pragma thumb on + +extern void FUN_02013724(u16 * ptr); +extern u32 FUN_0206B6C8(struct Pokemon * pokemon); +extern u16 FUN_0206B7BC(u16 species, u32 forme, BOOL is_egg); +extern void FUN_02013960(u16 * dest, const u16 * src); + +void Mail_init(struct Mail * mail) +{ + s32 i; + mail->author_otId = 0; + mail->author_gender = 0; + mail->author_language = (u8)gGameLanguage; + mail->author_version = (u8)gGameVersion; + mail->mail_type = 0xFF; + StringFillEOS(mail->author_name, 8); + for (i = 0; i < 3; i++) + { + mail->unk_18[i].raw = 0xFFFF; + } + for (i = 0; i < 3; i++) + { + FUN_02013724(mail->unk_20[i]); + } +} + +BOOL Mail_TypeIsValid(struct Mail * mail) +{ + return mail->mail_type <= 11; +} + +struct Mail * Mail_new(u32 heap_id) +{ + struct Mail * ret = (struct Mail *)AllocFromHeapAtEnd(heap_id, sizeof(struct Mail)); + Mail_init(ret); + return ret; +} + +void Mail_copy(const struct Mail * src, struct Mail * dest) +{ + MI_CpuCopy8(src, dest, sizeof(struct Mail)); +} + +void Mail_SetNewMessageDetails(struct Mail * mail, u8 type, u8 monIdx, struct SaveBlock2 * sav2) +{ + u32 sp10; + u32 forme; + BOOL is_egg; + u16 species; + struct PlayerParty * party; + struct PlayerData * profile; + struct Pokemon * pokemon; + u16 r7; + u8 i; + + Mail_init(mail); + mail->mail_type = type; + party = SavArray_PlayerParty_get(sav2); + profile = Sav2_PlayerData_GetProfileAddr(sav2); + + CopyU16StringArray(mail->author_name, PlayerProfile_GetNamePtr(profile)); + mail->author_gender = (u8)PlayerProfile_GetTrainerGender(profile); + mail->author_otId = PlayerProfile_GetTrainerID(profile); + for (i = 0; monIdx < GetPartyCount(party); monIdx++) + { + union MailMessage * ptr; + pokemon = GetPartyMonByIndex(party, monIdx); + species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, NULL); + is_egg = (BOOL)GetMonData(pokemon, MON_DATA_IS_EGG, NULL); + forme = GetMonData(pokemon, MON_DATA_FORME, NULL); + sp10 = FUN_0206B6C8(pokemon); + r7 = FUN_0206B7BC(species, forme, is_egg); + ptr = &mail->unk_18[i]; + ptr->bits.unk_0 = sp10; + i++; + ptr->bits.unk_C = r7; + if (i >= 3) + break; + } +} + +u32 Mail_GetOTID(struct Mail * mail) +{ + return mail->author_otId; +} + +u16 * Mail_GetAuthorNamePtr(struct Mail * mail) +{ + return mail->author_name; +} + +u8 Mail_GetAuthorGender(struct Mail * mail) +{ + return mail->author_gender; +} + +u8 Mail_GetType(struct Mail * mail) +{ + return mail->mail_type; +} + +void Mail_SetType(struct Mail * mail, u8 type) +{ + if (type < 12) + mail->mail_type = type; +} + +u8 Mail_GetLanguage(struct Mail * mail) +{ + return mail->author_language; +} + +u8 Mail_GetVersion(struct Mail * mail) +{ + return mail->author_version; +} + +u16 Mail_GetAttrFromUnk18Array(struct Mail * mail, u32 idx, u32 attr) +{ + if (idx < 3) + { + switch (attr) + { + case 0: + return mail->unk_18[idx].bits.unk_0; + case 1: + return mail->unk_18[idx].bits.unk_C; + case 2: + default: + return mail->unk_18[idx].raw; + } + } + return 0; +} + +u16 * Mail_GetUnk20Array(struct Mail * mail, u32 idx) +{ + if (idx < 3) + return mail->unk_20[idx]; + else + return mail->unk_20[0]; +} + +void Mail_CopyToUnk20Array(struct Mail * mail, const u16 * src, u32 idx) +{ + if (idx < 3) + FUN_02013960(mail->unk_20[idx], src); +} + +struct Mail * Sav2_Mailbox_get(struct SaveBlock2 * sav2) +{ + return (struct Mail *)SavArray_get(sav2, 15); +} + +u32 Sav2_Mailbox_sizeof(void) +{ + return 20 * sizeof(struct Mail); +} + +void Sav2_Mailbox_init(struct Mail * mail) +{ + s32 i; + for (i = 0; i < 20; i++) + { + Mail_init(&mail[i]); + } +} + +s32 Mailbox_GetFirstEmptySlotIdx(struct Mail * mail, BOOL r1) +{ + switch (r1) + { + case 0: + return MailArray_GetFirstEmptySlotIdx(mail, 20); + default: + return -1; + } +} + +void Mailbox_DeleteSlotI(struct Mail * mail, BOOL r1, s32 idx) +{ + mail = Mailbox_GetPtrToSlotI(mail, r1, idx); + if (mail != NULL) + Mail_init(mail); +} + +void Mailbox_CopyMailToSlotI(struct Mail * mail, BOOL r1, s32 idx, const struct Mail * src) +{ + mail = Mailbox_GetPtrToSlotI(mail, r1, idx); + if (mail != NULL) + Mail_copy(src, mail); +} + +s32 Mailbox_CountMessages(struct Mail * mail, BOOL r1) +{ + switch (r1) + { + case 0: + return MailArray_CountMessages(mail, 20); + default: + return 0; + } +} + +struct Mail * Mailbox_AllocAndFetchMailI(struct Mail * mail, BOOL r1, s32 idx, u32 heap_id) +{ + struct Mail * ret; + mail = Mailbox_GetPtrToSlotI(mail, r1, idx); + ret = Mail_new(heap_id); + if (mail != NULL) + Mail_copy(mail, ret); + return ret; +} + +void Mailbox_FetchMailIToBuffer(struct Mail * mail, BOOL r1, s32 idx, struct Mail * dest) +{ + mail = Mailbox_GetPtrToSlotI(mail, r1, idx); + if (mail == NULL) + Mail_init(dest); + else + Mail_copy(mail, dest); +} + +s32 MailArray_GetFirstEmptySlotIdx(struct Mail * mail, s32 count) +{ + s32 i; + for (i = 0; i < count; i++) + { + if (!Mail_TypeIsValid(&mail[i])) + return i; + } + return -1; +} + +s32 MailArray_CountMessages(struct Mail * mail, s32 count) +{ + s32 ret = 0; + s32 i; + for (i = 0; i < count; i++) + { + if (Mail_TypeIsValid(&mail[i])) + ret++; + } + return ret; +} + +struct Mail * Mailbox_GetPtrToSlotI(struct Mail * mail, BOOL r1, s32 idx) +{ + struct Mail * ret = NULL; + switch (r1) + { + case 0: + if (idx < 20) + ret = &mail[idx]; + break; + } + return ret; +} diff --git a/arm9/src/main.c b/arm9/src/main.c index 4f3b583c..86f0f6af 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -1,3 +1,5 @@ +#define IN_MAIN_C + #include "global.h" #include "SPI_pm.h" #include "CARD_backup.h" @@ -51,7 +53,7 @@ extern struct Unk21DBE18 MOD52_021D76C8; extern u8 SDK_STATIC_BSS_START[]; -const u8 gGameVersion = GAME_VERSION; +const int gGameVersion = GAME_VERSION; const int gGameLanguage = GAME_LANGUAGE; THUMB_FUNC void NitroMain(void) diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c index 0fb6d121..1f48d0fc 100644 --- a/arm9/src/pokemon.c +++ b/arm9/src/pokemon.c @@ -19,6 +19,8 @@ #pragma thumb on +extern void FUN_02029C74(const u8 *, u8 *); + u32 GetMonDataInternal(struct Pokemon * pokemon, int attr, void * ptr); u32 GetBoxMonDataInternal(struct BoxPokemon * pokemon, int attr, void * ptr); void SetMonDataInternal(struct Pokemon * pokemon, int attr, void * ptr); @@ -255,7 +257,7 @@ BOOL ReleaseBoxMonLock(struct BoxPokemon * mon, BOOL decrypt_result) void CreateMon(struct Pokemon * pokemon, int species, int level, int fixedIV, int hasFixedPersonality, int fixedPersonality, int otIdType, int fixedOtId) { - struct SealStruct * seal; + struct Mail * mail; u32 capsule; u8 seal_coords[0x18]; ZeroMonData(pokemon); @@ -264,9 +266,9 @@ void CreateMon(struct Pokemon * pokemon, int species, int level, int fixedIV, in MonEncryptSegment((u16 *)&pokemon->party, sizeof(pokemon->party), 0); ENCRYPT_PTY(pokemon); SetMonData(pokemon, MON_DATA_LEVEL, &level); - seal = CreateNewSealsObject(0); - SetMonData(pokemon, MON_DATA_SEAL_STRUCT, seal); - FreeToHeap(seal); + mail = Mail_new(0); + SetMonData(pokemon, MON_DATA_MAIL_STRUCT, mail); + FreeToHeap(mail); capsule = 0; SetMonData(pokemon, MON_DATA_CAPSULE, &capsule); MIi_CpuClearFast(0, seal_coords, sizeof(seal_coords)); @@ -558,8 +560,8 @@ u32 GetMonDataInternal(struct Pokemon * pokemon, int attr, void * dest) return pokemon->party.spatk; case MON_DATA_SPDEF: return pokemon->party.spdef; - case MON_DATA_SEAL_STRUCT: - CopySealsObject(&pokemon->party.seal_something, dest); + case MON_DATA_MAIL_STRUCT: + Mail_copy(&pokemon->party.seal_something, dest); return 1; case MON_DATA_SEAL_COORDS: FUN_02029C74(pokemon->party.sealCoords, dest); @@ -1046,8 +1048,8 @@ void SetMonDataInternal(struct Pokemon * pokemon, int attr, void * value) case MON_DATA_SPDEF: pokemon->party.spdef = VALUE(u16); break; - case MON_DATA_SEAL_STRUCT: - CopySealsObject((const struct SealStruct *)value, &pokemon->party.seal_something); + case MON_DATA_MAIL_STRUCT: + Mail_copy((const struct Mail *)value, &pokemon->party.seal_something); break; case MON_DATA_SEAL_COORDS: FUN_02029C74((const u8 *)value, pokemon->party.sealCoords); @@ -1475,7 +1477,7 @@ void AddMonDataInternal(struct Pokemon * pokemon, int attr, int value) case MON_DATA_SPEED: case MON_DATA_SPATK: case MON_DATA_SPDEF: - case MON_DATA_SEAL_STRUCT: + case MON_DATA_MAIL_STRUCT: // case MON_DATA_SEAL_COORDS: GF_ASSERT(0); break; @@ -1756,7 +1758,7 @@ void AddBoxMonData(struct BoxPokemon * boxmon, int attr, int value) case MON_DATA_SPEED: case MON_DATA_SPATK: case MON_DATA_SPDEF: - case MON_DATA_SEAL_STRUCT: + case MON_DATA_MAIL_STRUCT: case MON_DATA_SEAL_COORDS: case MON_DATA_SPECIES_EXISTS: case MON_DATA_SANITY_IS_EGG: @@ -2990,16 +2992,16 @@ void FUN_02069A64(struct BoxPokemon * src, struct Pokemon * dest) { u32 sp0 = 0; u8 sp4[12][2]; - struct SealStruct * seals; + struct Mail * mail; dest->box = *src; if (dest->box.box_lock) dest->box.party_lock = TRUE; SetMonData(dest, MON_DATA_STATUS, &sp0); SetMonData(dest, MON_DATA_HP, &sp0); SetMonData(dest, MON_DATA_MAXHP, &sp0); - seals = CreateNewSealsObject(0); - SetMonData(dest, MON_DATA_SEAL_STRUCT, seals); - FreeToHeap(seals); + mail = Mail_new(0); + SetMonData(dest, MON_DATA_MAIL_STRUCT, mail); + FreeToHeap(mail); SetMonData(dest, MON_DATA_CAPSULE, &sp0); MIi_CpuClearFast(0, sp4, sizeof(sp4)); SetMonData(dest, MON_DATA_SEAL_COORDS, sp4); diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index 4ba492b8..43e83403 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -20,7 +20,6 @@ extern u32 FUN_02034D80(void); extern u32 FUN_02025954(void); extern u32 FUN_02023AC8(void); extern u32 FUN_02026FD8(void); -extern u32 FUN_02025844(void); extern u32 FUN_02028054(void); extern u32 FUN_02028980(void); extern u32 FUN_02029A84(void); @@ -45,7 +44,6 @@ extern void FUN_02034D88(void *); extern void FUN_0202597C(void *); extern void FUN_02023AD8(void *); extern void FUN_02026F60(void *); -extern void FUN_0202584C(void *); extern void FUN_0202805C(void *); extern void FUN_02028994(void *); extern void FUN_02029A8C(void *); @@ -85,7 +83,7 @@ const struct SaveChunkHeader UNK_020EE700[] = { { 12, 0, (SAVSIZEFN)FUN_02025954, (SAVINITFN)FUN_0202597C }, { 13, 0, (SAVSIZEFN)FUN_02023AC8, (SAVINITFN)FUN_02023AD8 }, { 14, 0, (SAVSIZEFN)FUN_02026FD8, (SAVINITFN)FUN_02026F60 }, - { 15, 0, (SAVSIZEFN)FUN_02025844, (SAVINITFN)FUN_0202584C }, + { 15, 0, (SAVSIZEFN)Sav2_Mailbox_sizeof, (SAVINITFN)Sav2_Mailbox_init }, { 16, 0, (SAVSIZEFN)FUN_02028054, (SAVINITFN)FUN_0202805C }, { 17, 0, (SAVSIZEFN)FUN_020286F8, (SAVINITFN)FUN_02028724 }, { 18, 0, (SAVSIZEFN)FUN_02028980, (SAVINITFN)FUN_02028994 }, diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 123b144b..2c9288f5 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -282,7 +282,7 @@ #define MON_DATA_SPEED 166 #define MON_DATA_SPATK 167 #define MON_DATA_SPDEF 168 -#define MON_DATA_SEAL_STRUCT 169 +#define MON_DATA_MAIL_STRUCT 169 #define MON_DATA_SEAL_COORDS 170 #define MON_DATA_SPECIES_EXISTS 171 #define MON_DATA_SANITY_IS_EGG 172 diff --git a/include/daycare.h b/include/daycare.h index d1026f76..98cf0880 100644 --- a/include/daycare.h +++ b/include/daycare.h @@ -3,7 +3,7 @@ struct DayCareMail { - struct SealStruct seal; + struct Mail seal; u16 ot_name[OT_NAME_LENGTH + 1]; u16 nickname[POKEMON_NAME_LENGTH + 1]; u8 padding_5E[2]; @@ -30,7 +30,7 @@ struct DayCareMon * Sav2_DayCare_GetMonX(struct DayCare * daycare, s32 i); struct BoxPokemon * DayCareMon_GetBoxMon(struct DayCareMon * dcmon); struct DayCareMail * DayCareMon_GetExtras(struct DayCareMon * dcmon); u32 DayCareMon_GetSteps(struct DayCareMon * dcmon); -struct SealStruct * DayCareMail_GetCapsule(struct DayCareMail * dcmail); +struct Mail * DayCareMail_GetCapsule(struct DayCareMail * dcmail); u32 Sav2_DayCare_GetEggPID(struct DayCare * daycare); u8 Sav2_DayCare_GetEggCycleCounter(struct DayCare * daycare); void DayCareMon_SetSteps(struct DayCareMon * dcmon, u32 steps); diff --git a/include/global.h b/include/global.h index 24e4388b..3b377e5e 100644 --- a/include/global.h +++ b/include/global.h @@ -15,7 +15,9 @@ extern void ErrorHandling(void); #define GF_ASSERT(expr) do {if (!(expr)) ErrorHandling();} while (0) -extern const int gGameLanguage; +#ifndef IN_MAIN_C +extern const u8 gGameLanguage; extern const u8 gGameVersion; +#endif //IN_MAIN_C #endif //GUARD_GLOBAL_H diff --git a/include/mail.h b/include/mail.h new file mode 100644 index 00000000..47d8a777 --- /dev/null +++ b/include/mail.h @@ -0,0 +1,58 @@ +#ifndef POKEDIAMOND_SEALS_H +#define POKEDIAMOND_SEALS_H + +#include "save_block_2.h" + +union MailMessage +{ + u16 raw; + struct { + u16 unk_0:12; + u16 unk_C:4; + } bits; +}; + +struct Mail +{ + u32 author_otId; // author otid + u8 author_gender; // author gender + u8 author_language; // language + u8 author_version; // version + u8 mail_type; // mail type + u16 author_name[OT_NAME_LENGTH + 1]; // author name + union MailMessage unk_18[3]; + u8 padding_1E[2]; + u16 unk_20[3][4]; +}; + +struct Mail * Mail_new(u32 heap_id); + +void Mail_init(struct Mail * mail); +BOOL Mail_TypeIsValid(struct Mail * mail); +struct Mail * Mail_new(u32 heap_id); +void Mail_copy(const struct Mail * src, struct Mail * dest); +void Mail_SetNewMessageDetails(struct Mail * mail, u8 type, u8 monIdx, struct SaveBlock2 * sav2); +u32 Mail_GetOTID(struct Mail * mail); +u16 * Mail_GetAuthorNamePtr(struct Mail * mail); +u8 Mail_GetAuthorGender(struct Mail * mail); +u8 Mail_GetType(struct Mail * mail); +void Mail_SetType(struct Mail * mail, u8 type); +u8 Mail_GetLanguage(struct Mail * mail); +u8 Mail_GetVersion(struct Mail * mail); +u16 Mail_GetAttrFromUnk18Array(struct Mail * mail, u32 idx, u32 attr); +u16 * Mail_GetUnk20Array(struct Mail * mail, u32 idx); +void Mail_CopyToUnk20Array(struct Mail * mail, const u16 * src, u32 idx); +struct Mail * Sav2_Mailbox_get(struct SaveBlock2 * sav2); +u32 Sav2_Mailbox_sizeof(void); +void Sav2_Mailbox_init(struct Mail * mail); +s32 Mailbox_GetFirstEmptySlotIdx(struct Mail * mail, BOOL r1); +void Mailbox_DeleteSlotI(struct Mail * mail, BOOL r1, s32 idx); +void Mailbox_CopyMailToSlotI(struct Mail * mail, BOOL r1, s32 idx, const struct Mail * src); +s32 Mailbox_CountMessages(struct Mail * mail, BOOL r1); +struct Mail * Mailbox_AllocAndFetchMailI(struct Mail * mail, BOOL r1, s32 idx, u32 heap_id); +void Mailbox_FetchMailIToBuffer(struct Mail * mail, BOOL r1, s32 idx, struct Mail * dest); +s32 MailArray_GetFirstEmptySlotIdx(struct Mail * mail, s32 count); +s32 MailArray_CountMessages(struct Mail * mail, s32 count); +struct Mail * Mailbox_GetPtrToSlotI(struct Mail * mail, BOOL r1, s32 idx); + +#endif //POKEDIAMOND_SEALS_H diff --git a/include/pokemon.h b/include/pokemon.h index 196343de..097df9e0 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -6,7 +6,7 @@ // Enums #include "constants/species.h" -#include "seals.h" +#include "mail.h" #include "constants/pokemon.h" #include "string16.h" #include "player_data.h" @@ -142,7 +142,7 @@ struct PartyPokemon /* 0x096 */ u16 speed; /* 0x098 */ u16 spatk; /* 0x09A */ u16 spdef; - /* 0x09C */ struct SealStruct seal_something; // a struct? + /* 0x09C */ struct Mail seal_something; // a struct? /* 0x0D4 */ u8 sealCoords[0x18]; // u8 pairs? }; diff --git a/include/seals.h b/include/seals.h deleted file mode 100644 index 8fda23b9..00000000 --- a/include/seals.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef POKEDIAMOND_SEALS_H -#define POKEDIAMOND_SEALS_H - -struct SealStruct -{ - // TODO: define - u8 filler_00[0x38]; -}; - -struct SealStruct * CreateNewSealsObject(u32 heap_id); - -void CopySealsObject(const struct SealStruct *, struct SealStruct *); -void FUN_02029C74(const u8 *, u8 *); - -#endif //POKEDIAMOND_SEALS_H |