Decompile mail_message.c

This commit is contained in:
PikalaxALT 2020-08-30 20:23:43 -04:00
parent 73aecdbbbf
commit 3adc93018b
28 changed files with 332 additions and 527 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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]

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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}

View File

@ -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]

View File

@ -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

View File

@ -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)

201
arm9/src/mail_message.c Normal file
View File

@ -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;
}
}

View File

@ -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);

View File

@ -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"

View File

@ -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);

30
include/mail_message.h Normal file
View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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];