summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-08-30 20:23:43 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-08-30 20:23:43 -0400
commit3adc93018bf3deabde775905169c2b87d0560bd9 (patch)
treeb8c7ad379c2e7bdbec6d9c7e4f9021f73243f302
parent73aecdbbbff398c27734f8ed793bb495a5391a4b (diff)
Decompile mail_message.c
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/unk_02013724.s427
-rw-r--r--arm9/asm/unk_020139D8.s4
-rw-r--r--arm9/asm/unk_02026CD0.s8
-rw-r--r--arm9/asm/unk_0202A1E0.s10
-rw-r--r--arm9/asm/unk_0202E29C.s2
-rw-r--r--arm9/asm/unk_02035068.s2
-rw-r--r--arm9/asm/unk_020520AC.s12
-rw-r--r--arm9/asm/unk_02052EE8.s2
-rw-r--r--arm9/asm/unk_02085338.s8
-rw-r--r--arm9/asm/unk_020854E0.s8
-rw-r--r--arm9/asm/unk_0208A338.s10
-rw-r--r--arm9/global.inc34
-rw-r--r--arm9/modules/05/asm/mod05_021E2B80.s10
-rw-r--r--arm9/modules/11/asm/module_11_thumb2.s4
-rw-r--r--arm9/modules/15/asm/module_15.s30
-rw-r--r--arm9/modules/51/asm/module_51.s8
-rw-r--r--arm9/modules/61/asm/module_61.s6
-rw-r--r--arm9/modules/74/asm/module_74.s2
-rw-r--r--arm9/src/mail.c16
-rw-r--r--arm9/src/mail_message.c201
-rw-r--r--arm9/src/msgdata.c3
-rw-r--r--arm9/src/pokemon.c1
-rw-r--r--include/mail.h11
-rw-r--r--include/mail_message.h30
-rw-r--r--include/msgdata.h3
-rw-r--r--include/proto.h2
-rw-r--r--include/script_buffers.h3
28 files changed, 332 insertions, 527 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 4459fd8c..29b8e407 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -37,7 +37,7 @@ Static arm9
Object unk_0201137C.o
Object unk_02011744.o
Object unk_02012CC8.o
- Object unk_02013724.o
+ Object mail_message.o
Object unk_020139D8.o
Object unk_02013CD4.o
Object unk_020142EC.o
diff --git a/arm9/asm/unk_02013724.s b/arm9/asm/unk_02013724.s
deleted file mode 100644
index b36fa660..00000000
--- a/arm9/asm/unk_02013724.s
+++ /dev/null
@@ -1,427 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .rodata
-
- .global UNK_020ED54C
-UNK_020ED54C: ; 0x020ED54C
- .byte 0x8D, 0x01, 0x8F, 0x01, 0x8B, 0x01, 0x8C, 0x01, 0x8E, 0x01
-
- .global UNK_020ED556
-UNK_020ED556: ; 0x020ED556
- .byte 0x00
-
- .global UNK_020ED557
-UNK_020ED557: ; 0x020ED557
- .byte 0x00
-
- .global UNK_020ED558
-UNK_020ED558: ; 0x020ED558
- .byte 0x84, 0x01
-
- .global UNK_020ED55A
-UNK_020ED55A: ; 0x020ED55A
- .byte 0x07, 0x00
-
- .global UNK_020ED55C
-UNK_020ED55C: ; 0x020ED55C
- .byte 0xFF, 0xFF
-
- .global UNK_020ED55E
-UNK_020ED55E: ; 0x020ED55E
- .byte 0x00, 0x00, 0x01, 0x00, 0x84, 0x01, 0x21, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00, 0x88, 0x01
- .byte 0x0A, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x04, 0x84, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00
- .byte 0x00, 0x00
-
- .text
-
- thumb_func_start FUN_02013724
-FUN_02013724: ; 0x02013724
- ldr r1, _02013738 ; =0x0000FFFF
- mov r2, #0x0
- strh r1, [r0, #0x0]
-_0201372A:
- add r2, r2, #0x1
- strh r1, [r0, #0x4]
- add r0, r0, #0x2
- cmp r2, #0x2
- blt _0201372A
- bx lr
- nop
-_02013738: .word 0x0000FFFF
-
- thumb_func_start FUN_0201373C
-FUN_0201373C: ; 0x0201373C
- strh r1, [r0, #0x0]
- mov r2, #0x0
- ldr r1, _02013750 ; =0x0000FFFF
- strh r2, [r0, #0x2]
-_02013744:
- add r2, r2, #0x1
- strh r1, [r0, #0x4]
- add r0, r0, #0x2
- cmp r2, #0x2
- blt _02013744
- bx lr
- .balign 4
-_02013750: .word 0x0000FFFF
-
- thumb_func_start FUN_02013754
-FUN_02013754: ; 0x02013754
- push {r4, lr}
- mov r1, #0x4
- add r4, r0, #0x0
- bl FUN_0201373C
- mov r0, #0x5
- strh r0, [r4, #0x2]
- pop {r4, pc}
-
- thumb_func_start FUN_02013764
-FUN_02013764: ; 0x02013764
- push {r4-r6, lr}
- add r6, r1, #0x0
- add r5, r0, #0x0
- cmp r6, #0x4
- blo _02013772
- bl ErrorHandling
-_02013772:
- cmp r6, #0x4
- bhs _020137B8
- mov r0, #0xa
- add r4, r6, #0x0
- mul r4, r0
- ldr r1, _020137BC ; =UNK_020ED556
- add r0, r5, #0x0
- ldrb r1, [r1, r4]
- bl FUN_0201373C
- ldr r0, _020137C0 ; =UNK_020ED557
- mov r1, #0x0
- ldrb r0, [r0, r4]
- mvn r1, r1
- strh r0, [r5, #0x2]
- ldr r0, _020137C4 ; =UNK_020ED558
- ldrsh r0, [r0, r4]
- cmp r0, r1
- beq _020137A2
- ldr r1, _020137C8 ; =UNK_020ED55A
- ldrh r1, [r1, r4]
- bl FUN_02013A9C
- strh r0, [r5, #0x4]
-_020137A2:
- ldr r0, _020137CC ; =UNK_020ED55C
- mov r1, #0x0
- ldrsh r0, [r0, r4]
- mvn r1, r1
- cmp r0, r1
- beq _020137B8
- ldr r1, _020137D0 ; =UNK_020ED55E
- ldrh r1, [r1, r4]
- bl FUN_02013A9C
- strh r0, [r5, #0x6]
-_020137B8:
- pop {r4-r6, pc}
- nop
-_020137BC: .word UNK_020ED556
-_020137C0: .word UNK_020ED557
-_020137C4: .word UNK_020ED558
-_020137C8: .word UNK_020ED55A
-_020137CC: .word UNK_020ED55C
-_020137D0: .word UNK_020ED55E
-
- thumb_func_start FUN_020137D4
-FUN_020137D4: ; 0x020137D4
- push {r3-r7, lr}
- sub sp, #0x8
- str r0, [sp, #0x0]
- add r0, r1, #0x0
- str r1, [sp, #0x4]
- bl ScrStrBufs_new
- ldr r5, [sp, #0x0]
- ldr r7, _02013838 ; =0x0000FFFF
- add r6, r0, #0x0
- mov r4, #0x0
-_020137EA:
- ldrh r2, [r5, #0x4]
- cmp r2, r7
- beq _02013800
- add r0, r6, #0x0
- add r1, r4, #0x0
- bl FUN_0200B518
- add r4, r4, #0x1
- add r5, r5, #0x2
- cmp r4, #0x2
- blt _020137EA
-_02013800:
- ldr r2, [sp, #0x0]
- mov r0, #0x1
- ldrh r2, [r2, #0x0]
- mov r1, #0x1a
- lsl r3, r2, #0x1
- ldr r2, _0201383C ; =UNK_020ED54C
- ldrh r2, [r2, r3]
- ldr r3, [sp, #0x4]
- bl NewMsgDataFromNarc
- add r5, r0, #0x0
- ldr r2, [sp, #0x0]
- ldr r3, [sp, #0x4]
- ldrh r2, [r2, #0x2]
- add r0, r6, #0x0
- add r1, r5, #0x0
- bl ReadMsgData_ExpandPlaceholders
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl DestroyMsgData
- add r0, r6, #0x0
- bl ScrStrBufs_delete
- add r0, r4, #0x0
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02013838: .word 0x0000FFFF
-_0201383C: .word UNK_020ED54C
-
- thumb_func_start FUN_02013840
-FUN_02013840: ; 0x02013840
- push {r4, lr}
- add r4, r0, #0x0
- add r3, r1, #0x0
- ldrh r1, [r4, #0x0]
- mov r0, #0x1a
- lsl r2, r1, #0x1
- ldr r1, _02013858 ; =UNK_020ED54C
- ldrh r1, [r1, r2]
- ldrh r2, [r4, #0x2]
- bl ReadMsgData_NewNarc_NewString
- pop {r4, pc}
- .balign 4
-_02013858: .word UNK_020ED54C
-
- thumb_func_start FUN_0201385C
-FUN_0201385C: ; 0x0201385C
- ldrh r1, [r0, #0x0]
- ldr r0, _0201386C ; =0x0000FFFF
- cmp r1, r0
- beq _02013868
- mov r0, #0x1
- bx lr
-_02013868:
- mov r0, #0x0
- bx lr
- .balign 4
-_0201386C: .word 0x0000FFFF
-
- thumb_func_start FUN_02013870
-FUN_02013870: ; 0x02013870
- push {r4, lr}
- add r4, r0, #0x0
- ldrh r0, [r4, #0x0]
- ldrh r1, [r4, #0x2]
- bl FUN_020138A0
- mov r3, #0x0
- cmp r0, #0x0
- bls _02013896
- ldr r1, _0201389C ; =0x0000FFFF
-_02013884:
- ldrh r2, [r4, #0x4]
- cmp r2, r1
- bne _0201388E
- mov r0, #0x0
- pop {r4, pc}
-_0201388E:
- add r3, r3, #0x1
- add r4, r4, #0x2
- cmp r3, r0
- blo _02013884
-_02013896:
- mov r0, #0x1
- pop {r4, pc}
- nop
-_0201389C: .word 0x0000FFFF
-
- thumb_func_start FUN_020138A0
-FUN_020138A0: ; 0x020138A0
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x5
- blo _020138AE
- bl ErrorHandling
-_020138AE:
- add r0, r5, #0x0
- bl FUN_02013974
- cmp r4, r0
- blo _020138BC
- bl ErrorHandling
-_020138BC:
- ldr r1, _02013910 ; =UNK_020ED54C
- lsl r2, r5, #0x1
- ldrh r1, [r1, r2]
- mov r0, #0x1a
- add r2, r4, #0x0
- mov r3, #0x0
- bl ReadMsgData_NewNarc_NewString
- str r0, [sp, #0x0]
- bl String_c_str
- add r4, r0, #0x0
- ldrh r1, [r4, #0x0]
- ldr r0, _02013914 ; =0x0000FFFF
- mov r5, #0x0
- cmp r1, r0
- beq _02013904
- add r7, r0, #0x0
- sub r6, r0, #0x1
-_020138E2:
- cmp r1, r6
- bne _020138FC
- add r0, r4, #0x0
- bl MsgArray_ControlCodeIsStrVar
- cmp r0, #0x0
- beq _020138F2
- add r5, r5, #0x1
-_020138F2:
- add r0, r4, #0x0
- bl MsgArray_SkipControlCode
- add r4, r0, #0x0
- b _020138FE
-_020138FC:
- add r4, r4, #0x2
-_020138FE:
- ldrh r1, [r4, #0x0]
- cmp r1, r7
- bne _020138E2
-_02013904:
- ldr r0, [sp, #0x0]
- bl String_dtor
- add r0, r5, #0x0
- pop {r3-r7, pc}
- nop
-_02013910: .word UNK_020ED54C
-_02013914: .word 0x0000FFFF
-
- thumb_func_start FUN_02013918
-FUN_02013918: ; 0x02013918
- lsl r1, r1, #0x1
- add r0, r0, r1
- ldrh r0, [r0, #0x4]
- bx lr
-
- thumb_func_start FUN_02013920
-FUN_02013920: ; 0x02013920
- ldrh r0, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02013924
-FUN_02013924: ; 0x02013924
- ldrh r0, [r0, #0x2]
- bx lr
-
- thumb_func_start FUN_02013928
-FUN_02013928: ; 0x02013928
- push {r3-r4}
- ldrh r3, [r0, #0x0]
- ldrh r2, [r1, #0x0]
- cmp r3, r2
- bne _0201393A
- ldrh r3, [r0, #0x2]
- ldrh r2, [r1, #0x2]
- cmp r3, r2
- beq _02013940
-_0201393A:
- mov r0, #0x0
- pop {r3-r4}
- bx lr
-_02013940:
- mov r4, #0x0
-_02013942:
- ldrh r3, [r0, #0x4]
- ldrh r2, [r1, #0x4]
- cmp r3, r2
- beq _02013950
- mov r0, #0x0
- pop {r3-r4}
- bx lr
-_02013950:
- add r4, r4, #0x1
- add r1, r1, #0x2
- add r0, r0, #0x2
- cmp r4, #0x2
- blt _02013942
- mov r0, #0x1
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_02013960
-FUN_02013960: ; 0x02013960
- ldrh r2, [r1, #0x0]
- strh r2, [r0, #0x0]
- ldrh r2, [r1, #0x2]
- strh r2, [r0, #0x2]
- ldrh r2, [r1, #0x4]
- strh r2, [r0, #0x4]
- ldrh r1, [r1, #0x6]
- strh r1, [r0, #0x6]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02013974
-FUN_02013974: ; 0x02013974
- cmp r0, #0x5
- bhs _0201397C
- mov r0, #0x14
- bx lr
-_0201397C:
- mov r0, #0x0
- bx lr
-
- thumb_func_start FUN_02013980
-FUN_02013980: ; 0x02013980
- push {r4-r6, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- add r6, r2, #0x0
- cmp r4, #0x5
- blo _02013990
- bl ErrorHandling
-_02013990:
- strh r4, [r5, #0x0]
- strh r6, [r5, #0x2]
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02013998
-FUN_02013998: ; 0x02013998
- push {r4-r6, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- add r6, r2, #0x0
- cmp r4, #0x2
- blo _020139A8
- bl ErrorHandling
-_020139A8:
- lsl r0, r4, #0x1
- add r0, r5, r0
- strh r6, [r0, #0x4]
- pop {r4-r6, pc}
-
- thumb_func_start FUN_020139B0
-FUN_020139B0: ; 0x020139B0
- push {r4, lr}
- add r4, r0, #0x0
- ldrh r0, [r4, #0x0]
- ldrh r1, [r4, #0x2]
- bl FUN_020138A0
- cmp r0, #0x2
- bhs _020139D0
- lsl r1, r0, #0x1
- add r2, r4, r1
- ldr r1, _020139D4 ; =0x0000FFFF
-_020139C6:
- add r0, r0, #0x1
- strh r1, [r2, #0x4]
- add r2, r2, #0x2
- cmp r0, #0x2
- blo _020139C6
-_020139D0:
- pop {r4, pc}
- nop
-_020139D4: .word 0x0000FFFF
diff --git a/arm9/asm/unk_020139D8.s b/arm9/asm/unk_020139D8.s
index afc8a077..d03cc66a 100644
--- a/arm9/asm/unk_020139D8.s
+++ b/arm9/asm/unk_020139D8.s
@@ -61,8 +61,8 @@ UNK_020ED5B5: ; 0x020ED5B5
.global UNK_020ED5C0
UNK_020ED5C0: ; 0x020ED5C0
- .byte 0x6A, 0x01, 0x4D, 0x02, 0x35, 0x02, 0x29, 0x02, 0x84, 0x01, 0x85, 0x01, 0x86, 0x01, 0x87, 0x01
- .byte 0x88, 0x01, 0x89, 0x01, 0x8A, 0x01
+ .short 0x016A, 0x024D, 0x0235, 0x0229, 0x0184, 0x0185, 0x0186, 0x0187
+ .short 0x0188, 0x0189, 0x018A
.global UNK_020ED5D6
UNK_020ED5D6: ; 0x020ED5D6
diff --git a/arm9/asm/unk_02026CD0.s b/arm9/asm/unk_02026CD0.s
index ed87943a..1cfea136 100644
--- a/arm9/asm/unk_02026CD0.s
+++ b/arm9/asm/unk_02026CD0.s
@@ -1105,12 +1105,12 @@ _02027492:
_0202749A:
add r0, r5, #0x0
add r0, #0x40
- bl FUN_02013724
+ bl MailMsg_init
add r5, #0x40
add r0, r5, #0x0
mov r1, #0x0
add r2, r4, #0x0
- bl FUN_02013998
+ bl MailMsg_SetFieldI
pop {r3-r5, pc}
.balign 4
_020274B0: .word 0x00001234
@@ -1398,12 +1398,12 @@ _02027698: .word 0x00002345
thumb_func_start FUN_0202769C
FUN_0202769C: ; 0x0202769C
- ldr r3, _020276A4 ; =FUN_02013918
+ ldr r3, _020276A4 ; =MailMsg_GetFieldI
add r0, #0x40
mov r1, #0x0
bx r3
.balign 4
-_020276A4: .word FUN_02013918
+_020276A4: .word MailMsg_GetFieldI
thumb_func_start FUN_020276A8
FUN_020276A8: ; 0x020276A8
diff --git a/arm9/asm/unk_0202A1E0.s b/arm9/asm/unk_0202A1E0.s
index 355666bb..df633837 100644
--- a/arm9/asm/unk_0202A1E0.s
+++ b/arm9/asm/unk_0202A1E0.s
@@ -34,19 +34,19 @@ FUN_0202A204: ; 0x0202A204
push {r4, lr}
add r4, r0, #0x0
mov r1, #0x0
- bl FUN_02013764
+ bl MailMsg_init_fromTemplate
add r0, r4, #0x0
add r0, #0x8
mov r1, #0x1
- bl FUN_02013764
+ bl MailMsg_init_fromTemplate
add r0, r4, #0x0
add r0, #0x10
mov r1, #0x2
- bl FUN_02013764
+ bl MailMsg_init_fromTemplate
add r4, #0x18
add r0, r4, #0x0
mov r1, #0x3
- bl FUN_02013764
+ bl MailMsg_init_fromTemplate
pop {r4, pc}
.balign 4
@@ -629,7 +629,7 @@ FUN_0202A5D4: ; 0x0202A5D4
lsl r0, r5, #0x3
add r0, r1, r0
add r1, r4, #0x0
- bl FUN_02013960
+ bl MailMsg_copy
pop {r3-r5, pc}
.balign 4
diff --git a/arm9/asm/unk_0202E29C.s b/arm9/asm/unk_0202E29C.s
index 06da82b7..4bb83bc8 100644
--- a/arm9/asm/unk_0202E29C.s
+++ b/arm9/asm/unk_0202E29C.s
@@ -78,7 +78,7 @@ FUN_0202E29C: ; 0x0202E29C
ldr r0, [r2, #0x8]
sub r1, #0x18
add r0, r0, r1
- bl FUN_02013724
+ bl MailMsg_init
bl FUN_0202E500
_0202E332:
pop {r4, pc}
diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s
index 0294a124..95c1867f 100644
--- a/arm9/asm/unk_02035068.s
+++ b/arm9/asm/unk_02035068.s
@@ -2841,7 +2841,7 @@ FUN_02036724: ; 0x02036724
str r0, [r4, r1]
add r0, sp, #0x0
mov r1, #0x4
- bl FUN_0201373C
+ bl MailMsg_init_withBank
mov r0, #0x7e
lsl r0, r0, #0x2
ldr r0, [r4, r0]
diff --git a/arm9/asm/unk_020520AC.s b/arm9/asm/unk_020520AC.s
index b7b805a2..d29ed837 100644
--- a/arm9/asm/unk_020520AC.s
+++ b/arm9/asm/unk_020520AC.s
@@ -227,7 +227,7 @@ FUN_02052178: ; 0x02052178
cmp r0, #0x0
beq _020521A4
add r0, sp, #0x0
- bl FUN_02013754
+ bl MailMsg_init_default
add r0, sp, #0x0
bl FUN_02052DE8
add r0, r4, #0x0
@@ -1675,7 +1675,7 @@ _02052C34:
mov r0, #0x5e
lsl r0, r0, #0x2
add r0, r5, r0
- bl FUN_0201385C
+ bl MailMsg_IsInit
cmp r0, #0x0
bne _02052C46
mov r0, #0xa5
@@ -1684,7 +1684,7 @@ _02052C46:
mov r0, #0x5e
lsl r0, r0, #0x2
add r0, r5, r0
- bl FUN_02013920
+ bl MailMsg_GetMsgBank
cmp r0, #0x4
beq _02052C78
ldr r0, [r5, #0x8]
@@ -1705,7 +1705,7 @@ _02052C78:
mov r0, #0x5e
lsl r0, r0, #0x2
add r0, r5, r0
- bl FUN_02013924
+ bl MailMsg_GetMsgNo
add r4, r0, #0x0
cmp r4, #0x14
blt _02052C8A
@@ -1715,7 +1715,7 @@ _02052C8A:
lsl r0, r0, #0x2
add r0, r5, r0
mov r1, #0x0
- bl FUN_02013918
+ bl MailMsg_GetFieldI
add r2, r0, #0x0
ldr r0, _02052CB0 ; =0x0000FFFF
cmp r2, r0
@@ -1759,7 +1759,7 @@ FUN_02052CD8: ; 0x02052CD8
mov r0, #0x5e
lsl r0, r0, #0x2
add r0, r4, r0
- bl FUN_02013960
+ bl MailMsg_copy
mov r0, #0x6
mov r1, #0x1
lsl r0, r0, #0x6
diff --git a/arm9/asm/unk_02052EE8.s b/arm9/asm/unk_02052EE8.s
index 5a3ae781..3d8839c2 100644
--- a/arm9/asm/unk_02052EE8.s
+++ b/arm9/asm/unk_02052EE8.s
@@ -881,7 +881,7 @@ FUN_02053598: ; 0x02053598
str r1, [r4, #0x4]
add r0, #0x14
str r1, [r4, #0x8]
- bl FUN_0201373C
+ bl MailMsg_init_withBank
mov r0, #0x0
str r0, [r4, #0x10]
str r0, [r4, #0xc]
diff --git a/arm9/asm/unk_02085338.s b/arm9/asm/unk_02085338.s
index 77d69e0d..45fcb995 100644
--- a/arm9/asm/unk_02085338.s
+++ b/arm9/asm/unk_02085338.s
@@ -39,7 +39,7 @@ FUN_02085338: ; 0x02085338
add r0, r4, #0x0
add r0, #0x14
mov r1, #0x3
- bl FUN_0201373C
+ bl MailMsg_init_withBank
b _020853A0
_02085390:
ldr r0, _020853A4 ; =0x0000FFFF
@@ -132,13 +132,13 @@ FUN_020853F0: ; 0x020853F0
thumb_func_start FUN_020853FC
FUN_020853FC: ; 0x020853FC
add r2, r0, #0x0
- ldr r3, _02085408 ; =FUN_02013960
+ ldr r3, _02085408 ; =MailMsg_copy
add r2, #0x14
add r0, r1, #0x0
add r1, r2, #0x0
bx r3
.balign 4
-_02085408: .word FUN_02013960
+_02085408: .word MailMsg_copy
thumb_func_start FUN_0208540C
FUN_0208540C: ; 0x0208540C
@@ -244,7 +244,7 @@ _02085490:
_02085494:
add r0, #0x14
add r1, r2, #0x0
- bl FUN_02013928
+ bl MailMsg_compare
pop {r3, pc}
.balign 4
diff --git a/arm9/asm/unk_020854E0.s b/arm9/asm/unk_020854E0.s
index 76b5a118..c19e1a5d 100644
--- a/arm9/asm/unk_020854E0.s
+++ b/arm9/asm/unk_020854E0.s
@@ -339,7 +339,7 @@ _0208576A:
add r1, r0, #0x0
lsl r0, r5, #0x3
add r0, r7, r0
- bl FUN_02013960
+ bl MailMsg_copy
add r0, r5, #0x1
lsl r0, r0, #0x10
lsr r5, r0, #0x10
@@ -556,7 +556,7 @@ _02085900:
add r1, #0x1a
lsl r0, r0, #0x3
add r0, r1, r0
- bl FUN_0201385C
+ bl MailMsg_IsInit
cmp r0, #0x0
beq _02085938
ldr r1, [r4, #0x10]
@@ -567,13 +567,13 @@ _02085900:
add r0, #0x14
lsl r1, r1, #0x3
add r1, r2, r1
- bl FUN_02013960
+ bl MailMsg_copy
b _02085942
_02085938:
add r0, r4, #0x0
add r0, #0x14
mov r1, #0x3
- bl FUN_0201373C
+ bl MailMsg_init_withBank
_02085942:
add r1, r4, #0x0
ldr r0, [r4, #0x8]
diff --git a/arm9/asm/unk_0208A338.s b/arm9/asm/unk_0208A338.s
index 9764dd11..2be81a9f 100644
--- a/arm9/asm/unk_0208A338.s
+++ b/arm9/asm/unk_0208A338.s
@@ -212,7 +212,7 @@ _0208A4E8:
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
- bl FUN_02013960
+ bl MailMsg_copy
mov r0, #0x3
str r0, [r4, #0x54]
b _0208A6C8
@@ -224,7 +224,7 @@ _0208A502:
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
- bl FUN_02013960
+ bl MailMsg_copy
mov r0, #0x3
str r0, [r4, #0x54]
b _0208A6C8
@@ -236,7 +236,7 @@ _0208A51C:
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
- bl FUN_02013960
+ bl MailMsg_copy
mov r0, #0x3
str r0, [r4, #0x54]
b _0208A6C8
@@ -248,7 +248,7 @@ _0208A536:
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x48
- bl FUN_02013960
+ bl MailMsg_copy
mov r0, #0x3
str r0, [r4, #0x54]
b _0208A6C8
@@ -377,7 +377,7 @@ _0208A656:
add r0, r4, #0x0
add r0, #0x48
mov r1, #0x0
- bl FUN_02013918
+ bl MailMsg_GetFieldI
add r5, r0, #0x0
add r0, r4, #0x0
bl FUN_0208A8D0
diff --git a/arm9/global.inc b/arm9/global.inc
index 821007ef..1dc35362 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -886,23 +886,23 @@
.extern FUN_020136C0
.extern FUN_020136E0
.extern FUN_020136F8
-.extern FUN_02013724
-.extern FUN_0201373C
-.extern FUN_02013754
-.extern FUN_02013764
-.extern FUN_020137D4
-.extern FUN_02013840
-.extern FUN_0201385C
-.extern FUN_02013870
-.extern FUN_02013918
-.extern FUN_02013920
-.extern FUN_02013924
-.extern FUN_02013928
-.extern FUN_02013960
-.extern FUN_02013974
-.extern FUN_02013980
-.extern FUN_02013998
-.extern FUN_020139B0
+.extern MailMsg_init
+.extern MailMsg_init_withBank
+.extern MailMsg_init_default
+.extern MailMsg_init_fromTemplate
+.extern MailMsg_GetExpandedString
+.extern MailMsg_GetRawString
+.extern MailMsg_IsInit
+.extern MailMsg_AllFieldsAreInit
+.extern MailMsg_GetFieldI
+.extern MailMsg_GetMsgBank
+.extern MailMsg_GetMsgNo
+.extern MailMsg_compare
+.extern MailMsg_copy
+.extern MailMsg_NumMsgsInBank
+.extern MailMsg_SetMsgBankAndNum
+.extern MailMsg_SetFieldI
+.extern MailMsg_SetTrailingFieldsEmpty
.extern FUN_020139D8
.extern FUN_02013A10
.extern FUN_02013A30
diff --git a/arm9/modules/05/asm/mod05_021E2B80.s b/arm9/modules/05/asm/mod05_021E2B80.s
index 86414448..8aa39261 100644
--- a/arm9/modules/05/asm/mod05_021E2B80.s
+++ b/arm9/modules/05/asm/mod05_021E2B80.s
@@ -324,23 +324,23 @@ MOD05_021E2DF0: ; 0x021E2DF0
add r6, r2, #0
add r0, sp, #0
add r7, r3, #0
- bl FUN_02013724
+ bl MailMsg_init
add r0, sp, #0
add r1, r4, #0
add r2, r6, #0
- bl FUN_02013980
+ bl MailMsg_SetMsgBankAndNum
add r0, sp, #0
mov r1, #0
add r2, r7, #0
- bl FUN_02013998
+ bl MailMsg_SetFieldI
add r2, sp, #0x10
ldrh r2, [r2, #0x10]
add r0, sp, #0
mov r1, #1
- bl FUN_02013998
+ bl MailMsg_SetFieldI
add r0, sp, #0
mov r1, #0x20
- bl FUN_020137D4
+ bl MailMsg_GetExpandedString
add r4, r0, #0
ldr r0, [r5]
add r1, r4, #0
diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s
index fb098d96..c342adc4 100644
--- a/arm9/modules/11/asm/module_11_thumb2.s
+++ b/arm9/modules/11/asm/module_11_thumb2.s
@@ -4840,7 +4840,7 @@ MOD11_02231684: ; 0x02231684
mul r1, r0
add r0, r5, r1
mov r1, #5
- bl FUN_020137D4
+ bl MailMsg_GetExpandedString
b _022316CC
_022316BC:
ldr r0, [sp, #0xc]
@@ -4849,7 +4849,7 @@ _022316BC:
mul r1, r0
add r0, r5, r1
mov r1, #5
- bl FUN_020137D4
+ bl MailMsg_GetExpandedString
_022316CC:
add r4, r0, #0
add r0, r6, #0
diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s
index 712980c4..d8172549 100644
--- a/arm9/modules/15/asm/module_15.s
+++ b/arm9/modules/15/asm/module_15.s
@@ -252,14 +252,14 @@ MOD15_021D76C4: ; 0x021D76C4
add r4, r1, #0
add r5, r0, #0
add r0, r4, #0
- bl FUN_02013920
+ bl MailMsg_GetMsgBank
strh r0, [r5]
mov r0, #0
ldrsh r0, [r5, r0]
- bl FUN_02013974
+ bl MailMsg_NumMsgsInBank
strb r0, [r5, #3]
add r0, r4, #0
- bl FUN_02013924
+ bl MailMsg_GetMsgNo
strb r0, [r5, #2]
pop {r3, r4, r5, pc}
.align 2, 0
@@ -290,7 +290,7 @@ MOD15_021D76E8: ; 0x021D76E8
_021D7712:
mov r0, #0
ldrsh r0, [r5, r0]
- bl FUN_02013974
+ bl MailMsg_NumMsgsInBank
strb r0, [r5, #3]
_021D771C:
mov r1, #0
@@ -298,7 +298,7 @@ _021D771C:
ldrsh r1, [r5, r1]
ldrsb r2, [r5, r2]
add r0, r4, #0
- bl FUN_02013980
+ bl MailMsg_SetMsgBankAndNum
pop {r3, r4, r5, pc}
thumb_func_start MOD15_021D772C
@@ -325,7 +325,7 @@ MOD15_021D772C: ; 0x021D772C
_021D7752:
mov r0, #0
ldrsh r0, [r5, r0]
- bl FUN_02013974
+ bl MailMsg_NumMsgsInBank
strb r0, [r5, #3]
mov r0, #3
ldrsb r0, [r5, r0]
@@ -337,7 +337,7 @@ _021D7764:
ldrsh r1, [r5, r1]
ldrsb r2, [r5, r2]
add r0, r4, #0
- bl FUN_02013980
+ bl MailMsg_SetMsgBankAndNum
pop {r3, r4, r5, pc}
thumb_func_start MOD15_021D7774
@@ -1917,7 +1917,7 @@ _021D8362:
ldrh r1, [r1]
add r0, r4, #0
add r0, #8
- bl FUN_02013998
+ bl MailMsg_SetFieldI
_021D8370:
add r0, r4, #0
bl MOD15_021D85EC
@@ -2102,7 +2102,7 @@ _021D84B6:
bne _021D84CA
add r0, r4, #0
add r0, #8
- bl FUN_020139B0
+ bl MailMsg_SetTrailingFieldsEmpty
_021D84CA:
add r1, r4, #0
add r2, r4, #0
@@ -2282,7 +2282,7 @@ _021D8620:
pop {r3, pc}
_021D8624:
add r0, #8
- bl FUN_02013870
+ bl MailMsg_AllFieldsAreInit
pop {r3, pc}
_021D862C:
mov r0, #0
@@ -2417,11 +2417,11 @@ MOD15_021D86F4: ; 0x021D86F4
thumb_func_start MOD15_021D86FC
MOD15_021D86FC: ; 0x021D86FC
- ldr r3, _021D8704 ; =FUN_02013920
+ ldr r3, _021D8704 ; =MailMsg_GetMsgBank
add r0, #8
bx r3
nop
-_021D8704: .word FUN_02013920
+_021D8704: .word MailMsg_GetMsgBank
thumb_func_start MOD15_021D8708
MOD15_021D8708: ; 0x021D8708
@@ -2430,7 +2430,7 @@ MOD15_021D8708: ; 0x021D8708
cmp r2, #2
bne _021D8718
add r0, #8
- bl FUN_02013918
+ bl MailMsg_GetFieldI
pop {r3, pc}
_021D8718:
lsl r1, r1, #1
@@ -2440,11 +2440,11 @@ _021D8718:
thumb_func_start MOD15_021D8720
MOD15_021D8720: ; 0x021D8720
- ldr r3, _021D8728 ; =FUN_02013840
+ ldr r3, _021D8728 ; =MailMsg_GetRawString
add r0, #8
bx r3
nop
-_021D8728: .word FUN_02013840
+_021D8728: .word MailMsg_GetRawString
thumb_func_start MOD15_021D872C
MOD15_021D872C: ; 0x021D872C
diff --git a/arm9/modules/51/asm/module_51.s b/arm9/modules/51/asm/module_51.s
index 72a21ef0..0eea16a7 100644
--- a/arm9/modules/51/asm/module_51.s
+++ b/arm9/modules/51/asm/module_51.s
@@ -1675,7 +1675,7 @@ _02255530:
str r0, [r1, #0x10]
add r0, r6, #0
mov r1, #0x59
- bl FUN_020137D4
+ bl MailMsg_GetExpandedString
ldr r2, [r5]
mov r1, #0x1c
mul r1, r2
@@ -1717,7 +1717,7 @@ MOD51_022555C0: ; 0x022555C0
add r0, r1, #0
str r1, [sp]
add r7, r2, #0
- bl FUN_0201385C
+ bl MailMsg_IsInit
cmp r0, #0
bne _022555D6
mov r0, #0
@@ -1739,7 +1739,7 @@ _022555E8:
bne _022555FC
ldr r0, [sp]
add r1, #0x14
- bl FUN_02013928
+ bl MailMsg_compare
cmp r0, #0
bne _02255610
_022555FC:
@@ -1774,7 +1774,7 @@ _02255626:
beq _0225563A
ldr r0, [sp]
add r1, #0x14
- bl FUN_02013928
+ bl MailMsg_compare
_0225563A:
mov r0, #1
pop {r3, r4, r5, r6, r7, pc}
diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s
index e82b9e44..5cb5badb 100644
--- a/arm9/modules/61/asm/module_61.s
+++ b/arm9/modules/61/asm/module_61.s
@@ -96,7 +96,7 @@ _021D758C:
ldr r0, [r6, #0x1c]
add r0, #0x1a
add r0, r0, r5
- bl FUN_0201385C
+ bl MailMsg_IsInit
cmp r0, #0
beq _021D759E
mov r0, #0
@@ -1537,14 +1537,14 @@ _021D8122:
ldr r0, [r4, #0x1c]
add r0, #0x1a
add r0, r0, r5
- bl FUN_0201385C
+ bl MailMsg_IsInit
cmp r0, #0
beq _021D8164
ldr r0, [r4, #0x1c]
ldr r1, [r4]
add r0, #0x1a
add r0, r0, r5
- bl FUN_020137D4
+ bl MailMsg_GetExpandedString
str r0, [sp, #0x10]
mov r0, #0
str r0, [sp]
diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s
index 4daaf396..637691d0 100644
--- a/arm9/modules/74/asm/module_74.s
+++ b/arm9/modules/74/asm/module_74.s
@@ -1632,7 +1632,7 @@ MOD74_021D818C: ; 0x021D818C
add r0, r0, r1
ldr r1, [r4]
add r0, #8
- bl FUN_020137D4
+ bl MailMsg_GetExpandedString
add r5, r0, #0
add r0, r4, #0
add r0, #0x8c
diff --git a/arm9/src/mail.c b/arm9/src/mail.c
index 96074471..b2f8e92d 100644
--- a/arm9/src/mail.c
+++ b/arm9/src/mail.c
@@ -9,10 +9,8 @@
#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)
{
@@ -29,7 +27,7 @@ void Mail_init(struct Mail * mail)
}
for (i = 0; i < 3; i++)
{
- FUN_02013724(mail->unk_20[i]);
+ MailMsg_init(&mail->unk_20[i]);
}
}
@@ -72,7 +70,7 @@ void Mail_SetNewMessageDetails(struct Mail * mail, u8 type, u8 monIdx, struct Sa
mail->author_otId = PlayerProfile_GetTrainerID(profile);
for (i = 0; monIdx < GetPartyCount(party); monIdx++)
{
- union MailMessage * ptr;
+ union MailPatternData * ptr;
pokemon = GetPartyMonByIndex(party, monIdx);
species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, NULL);
is_egg = (BOOL)GetMonData(pokemon, MON_DATA_IS_EGG, NULL);
@@ -142,18 +140,18 @@ u16 Mail_GetAttrFromUnk18Array(struct Mail * mail, u32 idx, u32 attr)
return 0;
}
-u16 * Mail_GetUnk20Array(struct Mail * mail, u32 idx)
+struct MailMessage * Mail_GetUnk20Array(struct Mail * mail, u32 idx)
{
if (idx < 3)
- return mail->unk_20[idx];
+ return &mail->unk_20[idx];
else
- return mail->unk_20[0];
+ return &mail->unk_20[0];
}
-void Mail_CopyToUnk20Array(struct Mail * mail, const u16 * src, u32 idx)
+void Mail_CopyToUnk20Array(struct Mail * mail, const struct MailMessage * src, u32 idx)
{
if (idx < 3)
- FUN_02013960(mail->unk_20[idx], src);
+ MailMsg_copy(&mail->unk_20[idx], src);
}
struct Mail * Sav2_Mailbox_get(struct SaveBlock2 * sav2)
diff --git a/arm9/src/mail_message.c b/arm9/src/mail_message.c
new file mode 100644
index 00000000..4d1b75c6
--- /dev/null
+++ b/arm9/src/mail_message.c
@@ -0,0 +1,201 @@
+#include "global.h"
+#include "msgdata.h"
+#include "script_buffers.h"
+#include "unk_0201B8B8.h"
+#include "mail_message.h"
+
+#pragma thumb on
+
+struct UnkStruct_020ED556
+{
+ u8 unk_0;
+ u8 unk_1;
+ s16 unk_2;
+ u16 unk_4;
+ s16 unk_6;
+ u16 unk_8;
+};
+
+extern u16 FUN_02013A9C(s16 bank, u16 num);
+
+const u16 UNK_020ED54C[] = {
+ 397,
+ 399,
+ 395,
+ 396,
+ 398
+};
+
+const struct UnkStruct_020ED556 UNK_020ED556[] = {
+ { 0, 0, 0x184, 7, -1, 0 },
+ { 1, 0, 0x184, 33, -1, 0 },
+ { 2, 0, 0x188, 10, -1, 0 },
+ { 1, 4, 0x184, 1, -1, 0 }
+};
+
+void MailMsg_init(struct MailMessage * mailMsg)
+{
+ s32 i;
+ mailMsg->msg_bank = 0xFFFF;
+ for (i = 0; i < 2; i++)
+ {
+ mailMsg->fields[i] = 0xFFFF;
+ }
+}
+
+void MailMsg_init_withBank(struct MailMessage * mailMsg, u16 bank)
+{
+ s32 i;
+ mailMsg->msg_bank = bank;
+ mailMsg->msg_no = 0;
+ for (i = 0; i < 2; i++)
+ {
+ mailMsg->fields[i] = 0xFFFF;
+ }
+}
+
+void MailMsg_init_default(struct MailMessage * mailMsg)
+{
+ MailMsg_init_withBank(mailMsg, 4);
+ mailMsg->msg_no = 5;
+}
+
+void MailMsg_init_fromTemplate(struct MailMessage * mailMsg, u32 a1)
+{
+ GF_ASSERT(a1 < 4);
+ if (a1 < 4)
+ {
+ MailMsg_init_withBank(mailMsg, UNK_020ED556[a1].unk_0);
+ mailMsg->msg_no = UNK_020ED556[a1].unk_1;
+ if (UNK_020ED556[a1].unk_2 != -1)
+ mailMsg->fields[0] = FUN_02013A9C(UNK_020ED556[a1].unk_2, UNK_020ED556[a1].unk_4);
+ if (UNK_020ED556[a1].unk_6 != -1)
+ mailMsg->fields[1] = FUN_02013A9C(UNK_020ED556[a1].unk_6, UNK_020ED556[a1].unk_8);
+ }
+}
+
+struct String * MailMsg_GetExpandedString(struct MailMessage * mailMsg, u32 heap_id)
+{
+ s32 i;
+ struct ScrStrBufs * mgr = ScrStrBufs_new(heap_id);
+ struct MsgData * msgData;
+ struct String * ret;
+ for (i = 0; i < 2; i++)
+ {
+ if (mailMsg->fields[i] == 0xFFFF)
+ break;
+ FUN_0200B518(mgr, (u32)i, mailMsg->fields[i]);
+ }
+ msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, UNK_020ED54C[mailMsg->msg_bank], heap_id);
+ ret = ReadMsgData_ExpandPlaceholders(mgr, msgData, mailMsg->msg_no, heap_id);
+ DestroyMsgData(msgData);
+ ScrStrBufs_delete(mgr);
+ return ret;
+}
+
+struct String * MailMsg_GetRawString(struct MailMessage * mailMsg, u32 heap_id)
+{
+ return ReadMsgData_NewNarc_NewString(NARC_MSGDATA_MSG, UNK_020ED54C[mailMsg->msg_bank], mailMsg->msg_no, heap_id);
+}
+
+BOOL MailMsg_IsInit(struct MailMessage * mailMsg)
+{
+ return mailMsg->msg_bank != 0xFFFF;
+}
+
+BOOL MailMsg_AllFieldsAreInit(struct MailMessage * mailMsg)
+{
+ s32 i;
+ u32 n = MailMsg_NumFields(mailMsg->msg_bank, mailMsg->msg_no);
+ for (i = 0; i < n; i++)
+ {
+ if (mailMsg->fields[i] == 0xFFFF)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u32 MailMsg_NumFields(u16 bank, u16 num)
+{
+ struct String * str;
+ const u16 * cstr;
+ u32 count;
+ GF_ASSERT(bank < 5);
+ GF_ASSERT(num < MailMsg_NumMsgsInBank(bank));
+ str = ReadMsgData_NewNarc_NewString(NARC_MSGDATA_MSG, UNK_020ED54C[bank], num, 0);
+ cstr = String_c_str(str);
+ count = 0;
+ while (*cstr != EOS)
+ {
+ if (*cstr == 0xFFFE)
+ {
+ if (MsgArray_ControlCodeIsStrVar(cstr))
+ count++;
+ cstr = MsgArray_SkipControlCode(cstr);
+ }
+ else
+ cstr++;
+ }
+ String_dtor(str);
+ return count;
+}
+
+u16 MailMsg_GetFieldI(struct MailMessage * mailMsg, u32 a1)
+{
+ return mailMsg->fields[a1];
+}
+
+u16 MailMsg_GetMsgBank(struct MailMessage * mailMsg)
+{
+ return mailMsg->msg_bank;
+}
+
+u16 MailMsg_GetMsgNo(struct MailMessage * mailMsg)
+{
+ return mailMsg->msg_no;
+}
+
+BOOL MailMsg_compare(struct MailMessage * mailMsg, struct MailMessage * a1)
+{
+ s32 i;
+ if (mailMsg->msg_bank != a1->msg_bank || mailMsg->msg_no != a1->msg_no)
+ return FALSE;
+ for (i = 0; i < 2; i++)
+ {
+ if (mailMsg->fields[i] != a1->fields[i])
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void MailMsg_copy(struct MailMessage * mailMsg, const struct MailMessage * a1)
+{
+ *mailMsg = *a1;
+}
+
+u32 MailMsg_NumMsgsInBank(u16 bank)
+{
+ return (u32)((bank < 5) ? 20 : 0);
+}
+
+void MailMsg_SetMsgBankAndNum(struct MailMessage * mailMsg, u16 bank, u16 num)
+{
+ GF_ASSERT(bank < 5);
+ mailMsg->msg_bank = bank;
+ mailMsg->msg_no = num;
+}
+
+void MailMsg_SetFieldI(struct MailMessage * mailMsg, u32 idx, u16 word)
+{
+ GF_ASSERT(idx < 2);
+ mailMsg->fields[idx] = word;
+}
+
+void MailMsg_SetTrailingFieldsEmpty(struct MailMessage * mailMsg)
+{
+ u32 n;
+ for (n = MailMsg_NumFields(mailMsg->msg_bank, mailMsg->msg_no); n < 2; n++)
+ {
+ mailMsg->fields[n] = 0xFFFF;
+ }
+}
diff --git a/arm9/src/msgdata.c b/arm9/src/msgdata.c
index 13d1a9da..b3526f55 100644
--- a/arm9/src/msgdata.c
+++ b/arm9/src/msgdata.c
@@ -4,7 +4,6 @@
#include "heap.h"
#include "MI_memory.h"
#include "string16.h"
-#include "proto.h"
#pragma thumb on
@@ -350,7 +349,7 @@ void GetSpeciesNameIntoArray(u16 species, u32 heap_id, u16 * dest)
DestroyMsgData(msgData);
}
-struct String * ReadMsgData_ExpandPlaceholders(u32 * a0, struct MsgData * msgData, u32 msgno, u32 a3)
+struct String * ReadMsgData_ExpandPlaceholders(struct ScrStrBufs * a0, struct MsgData * msgData, u32 msgno, u32 a3)
{
struct String * ret = NULL;
struct String * r4 = String_ctor(1024, 0);
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index 1f48d0fc..fb1ad894 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -12,6 +12,7 @@
#include "string_util.h"
#include "text.h"
#include "msgdata.h"
+#include "itemtool.h"
#include "constants/abilities.h"
#include "constants/items.h"
#include "constants/moves.h"
diff --git a/include/mail.h b/include/mail.h
index 47d8a777..078b314a 100644
--- a/include/mail.h
+++ b/include/mail.h
@@ -2,8 +2,9 @@
#define POKEDIAMOND_SEALS_H
#include "save_block_2.h"
+#include "mail_message.h"
-union MailMessage
+union MailPatternData
{
u16 raw;
struct {
@@ -20,9 +21,9 @@ struct Mail
u8 author_version; // version
u8 mail_type; // mail type
u16 author_name[OT_NAME_LENGTH + 1]; // author name
- union MailMessage unk_18[3];
+ union MailPatternData unk_18[3];
u8 padding_1E[2];
- u16 unk_20[3][4];
+ struct MailMessage unk_20[3];
};
struct Mail * Mail_new(u32 heap_id);
@@ -40,8 +41,8 @@ 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 MailMessage * Mail_GetUnk20Array(struct Mail * mail, u32 idx);
+void Mail_CopyToUnk20Array(struct Mail * mail, const struct MailMessage * src, u32 idx);
struct Mail * Sav2_Mailbox_get(struct SaveBlock2 * sav2);
u32 Sav2_Mailbox_sizeof(void);
void Sav2_Mailbox_init(struct Mail * mail);
diff --git a/include/mail_message.h b/include/mail_message.h
new file mode 100644
index 00000000..5772fdd3
--- /dev/null
+++ b/include/mail_message.h
@@ -0,0 +1,30 @@
+#ifndef POKEDIAMOND_MAIL_MESSAGE_H
+#define POKEDIAMOND_MAIL_MESSAGE_H
+
+struct MailMessage
+{
+ u16 msg_bank;
+ u16 msg_no;
+ u16 fields[2];
+};
+
+void MailMsg_init(struct MailMessage * mailMsg);
+void MailMsg_init_withBank(struct MailMessage * mailMsg, u16 bank);
+void MailMsg_init_default(struct MailMessage * mailMsg);
+void MailMsg_init_fromTemplate(struct MailMessage * mailMsg, u32 a1);
+struct String * MailMsg_GetExpandedString(struct MailMessage * mailMsg, u32 heap_id);
+struct String * MailMsg_GetRawString(struct MailMessage * mailMsg, u32 heap_id);
+BOOL MailMsg_IsInit(struct MailMessage * mailMsg);
+BOOL MailMsg_AllFieldsAreInit(struct MailMessage * mailMsg);
+u32 MailMsg_NumFields(u16 bank, u16 num);
+u16 MailMsg_GetFieldI(struct MailMessage * mailMsg, u32 a1);
+u16 MailMsg_GetMsgBank(struct MailMessage * mailMsg);
+u16 MailMsg_GetMsgNo(struct MailMessage * mailMsg);
+BOOL MailMsg_compare(struct MailMessage * mailMsg, struct MailMessage * a1);
+void MailMsg_copy(struct MailMessage * mailMsg, const struct MailMessage * a1);
+u32 MailMsg_NumMsgsInBank(u16 bank);
+void MailMsg_SetMsgBankAndNum(struct MailMessage * mailMsg, u16 bank, u16 num);
+void MailMsg_SetFieldI(struct MailMessage * mailMsg, u32 idx, u16 word);
+void MailMsg_SetTrailingFieldsEmpty(struct MailMessage * mailMsg);
+
+#endif //POKEDIAMOND_MAIL_MESSAGE_H
diff --git a/include/msgdata.h b/include/msgdata.h
index c2f37274..855856ff 100644
--- a/include/msgdata.h
+++ b/include/msgdata.h
@@ -3,6 +3,7 @@
#include "filesystem.h"
#include "string16.h"
+#include "script_buffers.h"
struct MsgDataAlloc
{
@@ -38,7 +39,7 @@ struct String * NewString_ReadMsgData(struct MsgData *, u32);
u16 MsgDataGetCount(struct MsgData * msgData);
void ReadMsgDataIntoU16Array(struct MsgData * msgData, u32 msg_no, u16 * dest);
void GetSpeciesNameIntoArray(u16 species, u32 heap_id, u16 * dest);
-struct String * ReadMsgData_ExpandPlaceholders(u32 * a0, struct MsgData * msgData, u32 msgno, u32 heap_id);
+struct String * ReadMsgData_ExpandPlaceholders(struct ScrStrBufs * a0, struct MsgData * msgData, u32 msgno, u32 heap_id);
struct String * GetMoveName(u32 move, u32 heapno);
struct String * GetSpeciesName(u16 species, u32 heap_id);
diff --git a/include/proto.h b/include/proto.h
index 67a295ac..365c0ecd 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -8,7 +8,6 @@
#include "player_data.h" // for struct definitions
int FUN_0206AE00(int x);
-u32 GetItemAttr(u16 item, u32 a1, u32 a2);
int FUN_02014C3C(u8);
void FUN_02014C54(int, int, struct UnkStruct_02069038 *, u8);
u32 IsNighttime(void); // is day or night
@@ -17,6 +16,5 @@ void FUN_02005E80(int);
void FUN_02005E90(int, int, int, int);
void FUN_020056AC(int, int, int, int, int);
void FUN_020808AC(struct BoxPokemon *, struct PlayerData *, int, u32, u32);
-void StringExpandPlaceholders(u32 *, struct String *, struct String *);
#endif //POKEDIAMOND_PROTO_H
diff --git a/include/script_buffers.h b/include/script_buffers.h
index 76d4eb71..63aaf65d 100644
--- a/include/script_buffers.h
+++ b/include/script_buffers.h
@@ -1,6 +1,9 @@
#ifndef POKEDIAMOND_SCRIPT_BUFFERS_H
#define POKEDIAMOND_SCRIPT_BUFFERS_H
+#include "pokemon.h"
+#include "pokemon_storage_system.h"
+
struct UnkStruct_0200AA80_sub_sub
{
u8 data[4];