summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-08-06 14:29:31 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-08-06 19:15:10 -0400
commit8e763ab33e7c7b2de1b055687c0ae6fb1e197ff7 (patch)
tree52d55e67e7ef9791a7e55f5727a5ab8603cd7088
parent1d5e9d12ea905a67c818febbb3e58a3e8a7ad3ca (diff)
Decompile unk_02021934
-rw-r--r--arm9/asm/scrcmd.s2
-rw-r--r--arm9/asm/scrcmd_4.s2
-rw-r--r--arm9/asm/scrcmd_9.s2
-rw-r--r--arm9/asm/unk_02002F08.s4
-rw-r--r--arm9/asm/unk_0200AA80.s16
-rw-r--r--arm9/asm/unk_02012CC8.s2
-rw-r--r--arm9/asm/unk_02021934.s983
-rw-r--r--arm9/asm/unk_02021FF8.s2
-rw-r--r--arm9/asm/unk_020238C4.s8
-rw-r--r--arm9/asm/unk_02023AC4.s6
-rw-r--r--arm9/asm/unk_02024E64.s8
-rw-r--r--arm9/asm/unk_02026CD0.s6
-rw-r--r--arm9/asm/unk_020281E0.s4
-rw-r--r--arm9/asm/unk_020286F8.s4
-rw-r--r--arm9/asm/unk_0202B034.s8
-rw-r--r--arm9/asm/unk_0202B870.s4
-rw-r--r--arm9/asm/unk_02033874.s2
-rw-r--r--arm9/asm/unk_020377F0.s8
-rw-r--r--arm9/asm/unk_0204CB20.s2
-rw-r--r--arm9/asm/unk_02060CCC.s6
-rw-r--r--arm9/asm/unk_020653EC.s2
-rw-r--r--arm9/asm/unk_0206ABC4.s2
-rw-r--r--arm9/asm/unk_0206B16C.s4
-rw-r--r--arm9/asm/unk_020772F0.s14
-rw-r--r--arm9/asm/unk_02079C70.s2
-rw-r--r--arm9/asm/unk_0207D5BC.s2
-rw-r--r--arm9/asm/unk_020834D0.s4
-rw-r--r--arm9/asm/unk_020854E0.s2
-rw-r--r--arm9/global.inc30
-rw-r--r--arm9/modules/05/asm/module_05.s2
-rw-r--r--arm9/modules/06/asm/module_06.s4
-rw-r--r--arm9/modules/07/asm/module_07.s16
-rw-r--r--arm9/modules/11/asm/module_11_thumb2.s2
-rw-r--r--arm9/modules/15/asm/module_15.s4
-rw-r--r--arm9/modules/18/asm/module_18.s6
-rw-r--r--arm9/modules/51/asm/module_51.s4
-rw-r--r--arm9/modules/55/asm/module_55.s8
-rw-r--r--arm9/modules/56/asm/module_56.s4
-rw-r--r--arm9/modules/57/asm/module_57.s2
-rw-r--r--arm9/modules/67/asm/module_67.s8
-rw-r--r--arm9/modules/69/asm/module_69.s6
-rw-r--r--arm9/modules/71/asm/module_71.s2
-rw-r--r--arm9/modules/74/asm/module_74.s2
-rw-r--r--arm9/modules/80/asm/module_80.s2
-rw-r--r--arm9/modules/83/asm/module_83.s14
-rw-r--r--arm9/src/msgdata.c8
-rw-r--r--arm9/src/pokemon.c14
-rw-r--r--arm9/src/unk_02021934.c367
-rw-r--r--include/proto.h5
-rw-r--r--include/string16.h27
50 files changed, 525 insertions, 1123 deletions
diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s
index 9ced92c0..a29ee203 100644
--- a/arm9/asm/scrcmd.s
+++ b/arm9/asm/scrcmd.s
@@ -12209,7 +12209,7 @@ FUN_0203FA58: ; 0x0203FA58
str r0, [sp, #0x0]
ldr r1, [sp, #0x0]
add r0, r7, #0x0
- bl FUN_02021CE0
+ bl StringCompare
cmp r0, #0x0
bne _0203FB24
mov r0, #0x1
diff --git a/arm9/asm/scrcmd_4.s b/arm9/asm/scrcmd_4.s
index cb148e1a..16052c26 100644
--- a/arm9/asm/scrcmd_4.s
+++ b/arm9/asm/scrcmd_4.s
@@ -893,7 +893,7 @@ FUN_02040DEC: ; 0x02040DEC
bl FUN_02024F0C
add r1, r0, #0x0
add r0, r4, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, _02040E48 ; =gGameLanguage
mov r3, #0x0
ldrb r0, [r0, #0x0]
diff --git a/arm9/asm/scrcmd_9.s b/arm9/asm/scrcmd_9.s
index c4315fb0..ab9a501c 100644
--- a/arm9/asm/scrcmd_9.s
+++ b/arm9/asm/scrcmd_9.s
@@ -527,7 +527,7 @@ FUN_0204224C: ; 0x0204224C
bl String_ctor
add r1, r7, #0x0
add r4, r0, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [sp, #0x24]
ldr r3, [sp, #0x8]
str r0, [sp, #0x0]
diff --git a/arm9/asm/unk_02002F08.s b/arm9/asm/unk_02002F08.s
index a1fdc78f..c5c300e7 100644
--- a/arm9/asm/unk_02002F08.s
+++ b/arm9/asm/unk_02002F08.s
@@ -29,7 +29,7 @@ _02002F22:
add r0, r0, r4
add r0, #0x94
ldr r0, [r0, #0x0]
- bl FUN_02021934
+ bl StringGetWidth
pop {r4-r6, pc}
.balign 4
_02002F3C: .word UNK_02106FC8
@@ -113,7 +113,7 @@ _02002FB4:
add r0, r0, r4
add r0, #0x94
ldr r0, [r0, #0x0]
- bl FUN_0202199C
+ bl StringGetWidthNoSpacing
pop {r3-r5, pc}
.balign 4
_02002FCC: .word UNK_02106FC8
diff --git a/arm9/asm/unk_0200AA80.s b/arm9/asm/unk_0200AA80.s
index 02fa918d..f8e8e769 100644
--- a/arm9/asm/unk_0200AA80.s
+++ b/arm9/asm/unk_0200AA80.s
@@ -206,7 +206,7 @@ FUN_0200ABC0: ; 0x0200ABC0
bl FUN_0202398C
add r1, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r2, [r5, #0xc]
add r0, r5, #0x0
add r1, r4, #0x0
@@ -225,7 +225,7 @@ FUN_0200ABE4: ; 0x0200ABE4
bl FUN_02024EE8
add r1, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r2, [r5, #0xc]
add r0, r5, #0x0
add r1, r4, #0x0
@@ -906,7 +906,7 @@ FUN_0200B144: ; 0x0200B144
add r2, #0x14
add r4, r1, #0x0
add r1, r2, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r2, [r5, #0xc]
add r0, r5, #0x0
add r1, r4, #0x0
@@ -1658,7 +1658,7 @@ FUN_0200B708: ; 0x0200B708
bl FUN_020287A8
add r1, r0, #0x0
add r0, r4, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r0, #0x1
str r0, [sp, #0x0]
ldr r0, [sp, #0x8]
@@ -1713,11 +1713,11 @@ FUN_0200B7A8: ; 0x0200B7A8
ldr r2, [r0, #0x8]
lsl r0, r1, #0x3
add r0, r2, r0
- ldr r3, _0200B7B4 ; =FUN_02021FF8
+ ldr r3, _0200B7B4 ; =StrUpperFirstChar
ldr r0, [r0, #0x4]
bx r3
.balign 4
-_0200B7B4: .word FUN_02021FF8
+_0200B7B4: .word StrUpperFirstChar
thumb_func_start FUN_0200B7B8
FUN_0200B7B8: ; 0x0200B7B8
@@ -1771,7 +1771,7 @@ _0200B81E:
ldrh r1, [r4, #0x0]
add r0, r6, #0x0
add r4, r4, #0x2
- bl FUN_02021FB0
+ bl StrAddChar
cmp r4, r5
blo _0200B81E
b _0200B838
@@ -1779,7 +1779,7 @@ _0200B82E:
ldrh r1, [r5, #0x0]
add r0, r6, #0x0
add r5, r5, #0x2
- bl FUN_02021FB0
+ bl StrAddChar
_0200B838:
ldrh r1, [r5, #0x0]
ldr r0, _0200B844 ; =0x0000FFFF
diff --git a/arm9/asm/unk_02012CC8.s b/arm9/asm/unk_02012CC8.s
index 0f39b4e8..36770df2 100644
--- a/arm9/asm/unk_02012CC8.s
+++ b/arm9/asm/unk_02012CC8.s
@@ -1503,7 +1503,7 @@ FUN_02013690: ; 0x02013690
bl String_ctor
ldr r1, _020136BC ; =UNK_020ED548
str r0, [r4, #0x4]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
_020136B2:
add r0, r4, #0x0
pop {r3-r5, pc}
diff --git a/arm9/asm/unk_02021934.s b/arm9/asm/unk_02021934.s
deleted file mode 100644
index 337bae11..00000000
--- a/arm9/asm/unk_02021934.s
+++ /dev/null
@@ -1,983 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .rodata
-
- .global UNK_020EE67C
-UNK_020EE67C: ; 0x020EE67C
- .byte 0xA2, 0x00, 0xA3, 0x00, 0xA4, 0x00, 0xA5, 0x00, 0xA6, 0x00, 0xA7, 0x00, 0xA8, 0x00, 0xA9, 0x00
- .byte 0xAA, 0x00, 0xAB, 0x00
-
- .global UNK_020EE690
-UNK_020EE690: ; 0x020EE690
- .byte 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25, 0x01, 0x26, 0x01, 0x27, 0x01, 0x28, 0x01
-
- .global UNK_020EE6A0
-UNK_020EE6A0: ; 0x020EE6A0
- .byte 0x29, 0x01, 0x2A, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00
- .byte 0xE8, 0x03, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00, 0x40, 0x42, 0x0F, 0x00
- .byte 0x80, 0x96, 0x98, 0x00, 0x00, 0xE1, 0xF5, 0x05, 0x00, 0xCA, 0x9A, 0x3B
-
- .text
-
- thumb_func_start FUN_02021934
-FUN_02021934: ; 0x02021934
- push {r3-r7, lr}
- add r5, r1, #0x0
- ldrh r1, [r5, #0x0]
- add r7, r0, #0x0
- mov r4, #0x0
- ldr r0, _02021994 ; =0x0000FFFF
- add r6, r2, #0x0
- str r4, [sp, #0x0]
- cmp r1, r0
- beq _02021986
-_02021948:
- ldr r0, _02021998 ; =0x0000FFFE
- cmp r1, r0
- bne _02021958
- add r0, r5, #0x0
- bl FUN_0201B8B8
- add r5, r0, #0x0
- b _0202197E
-_02021958:
- mov r0, #0xe
- lsl r0, r0, #0xc
- cmp r1, r0
- bne _02021970
- ldr r0, [sp, #0x0]
- sub r1, r4, r6
- cmp r0, r1
- bhs _0202196A
- str r1, [sp, #0x0]
-_0202196A:
- mov r4, #0x0
- add r5, r5, #0x2
- b _0202197E
-_02021970:
- ldr r2, [r7, #0x70]
- add r0, r7, #0x0
- sub r1, r1, #0x1
- blx r2
- add r0, r6, r0
- add r4, r4, r0
- add r5, r5, #0x2
-_0202197E:
- ldrh r1, [r5, #0x0]
- ldr r0, _02021994 ; =0x0000FFFF
- cmp r1, r0
- bne _02021948
-_02021986:
- ldr r0, [sp, #0x0]
- sub r1, r4, r6
- cmp r0, r1
- bhs _02021990
- str r1, [sp, #0x0]
-_02021990:
- ldr r0, [sp, #0x0]
- pop {r3-r7, pc}
- .balign 4
-_02021994: .word 0x0000FFFF
-_02021998: .word 0x0000FFFE
-
- thumb_func_start FUN_0202199C
-FUN_0202199C: ; 0x0202199C
- push {r3-r7, lr}
- add r5, r1, #0x0
- ldrh r1, [r5, #0x0]
- add r6, r0, #0x0
- ldr r0, _020219EC ; =0x0000FFFF
- mov r4, #0x0
- cmp r1, r0
- beq _020219E8
- sub r7, r0, #0x1
-_020219AE:
- cmp r1, r7
- bne _020219D4
- add r0, r5, #0x0
- bl FUN_0201B8E0
- ldr r1, _020219F0 ; =0x00000203
- cmp r0, r1
- bne _020219CA
- add r0, r5, #0x0
- mov r1, #0x0
- bl FUN_0201B914
- add r4, r0, #0x0
- sub r4, #0xc
-_020219CA:
- add r0, r5, #0x0
- bl FUN_0201B8B8
- add r5, r0, #0x0
- b _020219E0
-_020219D4:
- ldr r2, [r6, #0x70]
- add r0, r6, #0x0
- sub r1, r1, #0x1
- blx r2
- add r4, r4, r0
- add r5, r5, #0x2
-_020219E0:
- ldrh r1, [r5, #0x0]
- ldr r0, _020219EC ; =0x0000FFFF
- cmp r1, r0
- bne _020219AE
-_020219E8:
- add r0, r4, #0x0
- pop {r3-r7, pc}
- .balign 4
-_020219EC: .word 0x0000FFFF
-_020219F0: .word 0x00000203
-
- thumb_func_start String_ctor
-String_ctor: ; 0x020219F4
- push {r4, lr}
- add r4, r0, #0x0
- add r0, r1, #0x0
- lsl r1, r4, #0x1
- add r1, #0xa
- bl AllocFromHeap
- cmp r0, #0x0
- beq _02021A14
- ldr r1, _02021A18 ; =0xB6F8D2EC
- str r1, [r0, #0x4]
- strh r4, [r0, #0x0]
- mov r1, #0x0
- strh r1, [r0, #0x2]
- ldr r1, _02021A1C ; =0x0000FFFF
- strh r1, [r0, #0x8]
-_02021A14:
- pop {r4, pc}
- nop
-_02021A18: .word 0xB6F8D2EC
-_02021A1C: .word 0x0000FFFF
-
- thumb_func_start String_dtor
-String_dtor: ; 0x02021A20
- push {r4, lr}
- add r4, r0, #0x0
- bne _02021A2A
- bl ErrorHandling
-_02021A2A:
- ldr r1, [r4, #0x4]
- ldr r0, _02021A44 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021A36
- bl ErrorHandling
-_02021A36:
- ldr r0, _02021A48 ; =0xB6F8D2ED
- str r0, [r4, #0x4]
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r4, pc}
- nop
-_02021A44: .word 0xB6F8D2EC
-_02021A48: .word 0xB6F8D2ED
-
- thumb_func_start StringSetEmpty
-StringSetEmpty: ; 0x02021A4C
- push {r4, lr}
- add r4, r0, #0x0
- bne _02021A56
- bl ErrorHandling
-_02021A56:
- ldr r1, [r4, #0x4]
- ldr r0, _02021A6C ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021A62
- bl ErrorHandling
-_02021A62:
- mov r0, #0x0
- strh r0, [r4, #0x2]
- ldr r0, _02021A70 ; =0x0000FFFF
- strh r0, [r4, #0x8]
- pop {r4, pc}
- .balign 4
-_02021A6C: .word 0xB6F8D2EC
-_02021A70: .word 0x0000FFFF
-
- thumb_func_start StringCopy
-StringCopy: ; 0x02021A74
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x0
- bne _02021A82
- bl ErrorHandling
-_02021A82:
- ldr r1, [r5, #0x4]
- ldr r0, _02021AC8 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021A8E
- bl ErrorHandling
-_02021A8E:
- cmp r4, #0x0
- bne _02021A96
- bl ErrorHandling
-_02021A96:
- ldr r1, [r4, #0x4]
- ldr r0, _02021AC8 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021AA2
- bl ErrorHandling
-_02021AA2:
- ldrh r2, [r4, #0x2]
- ldrh r0, [r5, #0x0]
- cmp r0, r2
- bls _02021AC0
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r2, #0x1
- add r0, #0x8
- add r1, #0x8
- lsl r2, r2, #0x1
- bl memcpy
- ldrh r0, [r4, #0x2]
- strh r0, [r5, #0x2]
- pop {r3-r5, pc}
-_02021AC0:
- bl ErrorHandling
- pop {r3-r5, pc}
- nop
-_02021AC8: .word 0xB6F8D2EC
-
- thumb_func_start StringDup
-StringDup: ; 0x02021ACC
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x0
- bne _02021ADA
- bl ErrorHandling
-_02021ADA:
- ldr r1, [r5, #0x4]
- ldr r0, _02021B00 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021AE6
- bl ErrorHandling
-_02021AE6:
- ldrh r0, [r5, #0x2]
- add r1, r4, #0x0
- add r0, r0, #0x1
- bl String_ctor
- add r4, r0, #0x0
- beq _02021AFA
- add r1, r5, #0x0
- bl StringCopy
-_02021AFA:
- add r0, r4, #0x0
- pop {r3-r5, pc}
- nop
-_02021B00: .word 0xB6F8D2EC
-
- thumb_func_start String16_FormatInteger
-String16_FormatInteger: ; 0x02021B04
- push {r3-r7, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- ldr r0, [sp, #0x20]
- add r6, r1, #0x0
- add r7, r3, #0x0
- str r2, [sp, #0x0]
- str r0, [sp, #0x20]
- cmp r5, #0x0
- bne _02021B1C
- bl ErrorHandling
-_02021B1C:
- ldr r1, [r5, #0x4]
- ldr r0, _02021C1C ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021B28
- bl ErrorHandling
-_02021B28:
- cmp r6, #0x0
- bge _02021B30
- mov r4, #0x1
- b _02021B32
-_02021B30:
- mov r4, #0x0
-_02021B32:
- ldr r0, [sp, #0x0]
- ldrh r1, [r5, #0x0]
- add r0, r0, r4
- cmp r1, r0
- bls _02021C14
- ldr r0, [sp, #0x20]
- cmp r0, #0x0
- bne _02021B48
- ldr r0, _02021C20 ; =UNK_020EE67C
- str r0, [sp, #0x4]
- b _02021B4C
-_02021B48:
- ldr r0, _02021C24 ; =UNK_020EE690
- str r0, [sp, #0x4]
-_02021B4C:
- add r0, r5, #0x0
- bl StringSetEmpty
- cmp r4, #0x0
- beq _02021B74
- mov r0, #0x0
- mvn r0, r0
- mul r6, r0
- ldr r0, [sp, #0x20]
- cmp r0, #0x0
- bne _02021B66
- mov r0, #0xf1
- b _02021B68
-_02021B66:
- ldr r0, _02021C28 ; =0x000001BE
-_02021B68:
- ldrh r2, [r5, #0x2]
- add r1, r2, #0x1
- strh r1, [r5, #0x2]
- lsl r1, r2, #0x1
- add r1, r5, r1
- strh r0, [r1, #0x8]
-_02021B74:
- ldr r0, [sp, #0x0]
- lsl r1, r0, #0x2
- ldr r0, _02021C2C ; =UNK_020EE6A0
- ldr r4, [r0, r1]
- cmp r4, #0x0
- beq _02021C06
-_02021B80:
- add r0, r6, #0x0
- add r1, r4, #0x0
- bl _u32_div_f
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- add r0, r4, #0x0
- mul r0, r1
- sub r6, r6, r0
- cmp r7, #0x2
- bne _02021BB4
- cmp r1, #0xa
- bhs _02021BA2
- ldr r0, [sp, #0x4]
- lsl r1, r1, #0x1
- ldrh r1, [r0, r1]
- b _02021BA4
-_02021BA2:
- mov r1, #0xe2
-_02021BA4:
- ldrh r0, [r5, #0x2]
- add r2, r0, #0x0
- add r2, r2, #0x1
- lsl r0, r0, #0x1
- strh r2, [r5, #0x2]
- add r0, r5, r0
- strh r1, [r0, #0x8]
- b _02021BFA
-_02021BB4:
- cmp r1, #0x0
- bne _02021BBC
- cmp r4, #0x1
- bne _02021BDC
-_02021BBC:
- mov r7, #0x2
- cmp r1, #0xa
- bhs _02021BCA
- ldr r0, [sp, #0x4]
- lsl r1, r1, #0x1
- ldrh r1, [r0, r1]
- b _02021BCC
-_02021BCA:
- mov r1, #0xe2
-_02021BCC:
- ldrh r0, [r5, #0x2]
- add r2, r0, #0x0
- add r2, r2, #0x1
- lsl r0, r0, #0x1
- strh r2, [r5, #0x2]
- add r0, r5, r0
- strh r1, [r0, #0x8]
- b _02021BFA
-_02021BDC:
- cmp r7, #0x1
- bne _02021BFA
- ldr r0, [sp, #0x20]
- cmp r0, #0x0
- bne _02021BEA
- mov r1, #0x1
- b _02021BEC
-_02021BEA:
- ldr r1, _02021C30 ; =0x000001E2
-_02021BEC:
- ldrh r0, [r5, #0x2]
- add r2, r0, #0x0
- add r2, r2, #0x1
- lsl r0, r0, #0x1
- strh r2, [r5, #0x2]
- add r0, r5, r0
- strh r1, [r0, #0x8]
-_02021BFA:
- add r0, r4, #0x0
- mov r1, #0xa
- bl _u32_div_f
- add r4, r0, #0x0
- bne _02021B80
-_02021C06:
- ldrh r0, [r5, #0x2]
- ldr r1, _02021C34 ; =0x0000FFFF
- add sp, #0x8
- lsl r0, r0, #0x1
- add r0, r5, r0
- strh r1, [r0, #0x8]
- pop {r3-r7, pc}
-_02021C14:
- bl ErrorHandling
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02021C1C: .word 0xB6F8D2EC
-_02021C20: .word UNK_020EE67C
-_02021C24: .word UNK_020EE690
-_02021C28: .word 0x000001BE
-_02021C2C: .word UNK_020EE6A0
-_02021C30: .word 0x000001E2
-_02021C34: .word 0x0000FFFF
-
- thumb_func_start FUN_02021C38
-FUN_02021C38: ; 0x02021C38
- push {r3-r7, lr}
- sub sp, #0x10
- str r1, [sp, #0x0]
- mov r1, #0x0
- str r1, [sp, #0x8]
- str r1, [sp, #0xc]
- add r5, r1, #0x0
- ldrh r1, [r0, #0x2]
- mov r7, #0x1
- cmp r1, #0x12
- bls _02021C56
- ldr r0, [sp, #0x8]
- add sp, #0x10
- add r1, r0, #0x0
- pop {r3-r7, pc}
-_02021C56:
- sub r1, r1, #0x1
- str r1, [sp, #0x4]
- bmi _02021CCC
- lsl r1, r1, #0x1
- add r4, r0, r1
-_02021C60:
- ldrh r6, [r4, #0x8]
- mov r3, #0xa
- mov r0, #0x0
- add r1, r6, #0x0
- sub r1, #0xa2
- asr r2, r1, #0x1f
- sub r3, r1, r3
- mov r12, r2
- mov r3, r12
- sbc r3, r0
- blo _02021C98
- ldr r0, _02021CDC ; =0x00000121
- mov r3, #0xa
- sub r1, r6, r0
- asr r2, r1, #0x1f
- mov r0, #0x0
- sub r3, r1, r3
- mov r12, r2
- mov r3, r12
- sbc r3, r0
- blo _02021C98
- ldr r0, [sp, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x0]
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0xc]
- add sp, #0x10
- pop {r3-r7, pc}
-_02021C98:
- add r0, r1, #0x0
- add r1, r2, #0x0
- add r2, r7, #0x0
- add r3, r5, #0x0
- bl _ll_mul
- add r2, r1, #0x0
- ldr r1, [sp, #0x8]
- add r0, r1, r0
- str r0, [sp, #0x8]
- ldr r0, [sp, #0xc]
- adc r0, r2
- str r0, [sp, #0xc]
- add r0, r7, #0x0
- add r1, r5, #0x0
- mov r2, #0xa
- mov r3, #0x0
- bl _ll_mul
- add r7, r0, #0x0
- ldr r0, [sp, #0x4]
- add r5, r1, #0x0
- sub r4, r4, #0x2
- sub r0, r0, #0x1
- str r0, [sp, #0x4]
- bpl _02021C60
-_02021CCC:
- ldr r0, [sp, #0x0]
- mov r1, #0x1
- str r1, [r0, #0x0]
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0xc]
- add sp, #0x10
- pop {r3-r7, pc}
- nop
-_02021CDC: .word 0x00000121
-
- thumb_func_start FUN_02021CE0
-FUN_02021CE0: ; 0x02021CE0
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x0
- bne _02021CEE
- bl ErrorHandling
-_02021CEE:
- ldr r1, [r5, #0x4]
- ldr r0, _02021D34 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021CFA
- bl ErrorHandling
-_02021CFA:
- cmp r4, #0x0
- bne _02021D02
- bl ErrorHandling
-_02021D02:
- ldr r1, [r4, #0x4]
- ldr r0, _02021D34 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021D0E
- bl ErrorHandling
-_02021D0E:
- ldrh r1, [r5, #0x8]
- ldrh r0, [r4, #0x8]
- cmp r1, r0
- bne _02021D2E
- ldr r0, _02021D38 ; =0x0000FFFF
-_02021D18:
- ldrh r1, [r5, #0x8]
- cmp r1, r0
- bne _02021D22
- mov r0, #0x0
- pop {r3-r5, pc}
-_02021D22:
- add r5, r5, #0x2
- add r4, r4, #0x2
- ldrh r2, [r5, #0x8]
- ldrh r1, [r4, #0x8]
- cmp r2, r1
- beq _02021D18
-_02021D2E:
- mov r0, #0x1
- pop {r3-r5, pc}
- nop
-_02021D34: .word 0xB6F8D2EC
-_02021D38: .word 0x0000FFFF
-
- thumb_func_start FUN_02021D3C
-FUN_02021D3C: ; 0x02021D3C
- push {r4, lr}
- add r4, r0, #0x0
- bne _02021D46
- bl ErrorHandling
-_02021D46:
- ldr r1, [r4, #0x4]
- ldr r0, _02021D58 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021D52
- bl ErrorHandling
-_02021D52:
- ldrh r0, [r4, #0x2]
- pop {r4, pc}
- nop
-_02021D58: .word 0xB6F8D2EC
-
- thumb_func_start FUN_02021D5C
-FUN_02021D5C: ; 0x02021D5C
- push {r3-r5, lr}
- add r4, r0, #0x0
- bne _02021D66
- bl ErrorHandling
-_02021D66:
- ldr r1, [r4, #0x4]
- ldr r0, _02021D98 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021D72
- bl ErrorHandling
-_02021D72:
- ldrh r1, [r4, #0x2]
- mov r3, #0x0
- mov r0, #0x1
- cmp r1, #0x0
- ble _02021D94
- mov r1, #0xe
- add r5, r4, #0x0
- lsl r1, r1, #0xc
-_02021D82:
- ldrh r2, [r5, #0x8]
- cmp r2, r1
- bne _02021D8A
- add r0, r0, #0x1
-_02021D8A:
- ldrh r2, [r4, #0x2]
- add r3, r3, #0x1
- add r5, r5, #0x2
- cmp r3, r2
- blt _02021D82
-_02021D94:
- pop {r3-r5, pc}
- nop
-_02021D98: .word 0xB6F8D2EC
-
- thumb_func_start FUN_02021D9C
-FUN_02021D9C: ; 0x02021D9C
- push {r3-r7, lr}
- add r5, r1, #0x0
- add r7, r0, #0x0
- add r6, r2, #0x0
- cmp r5, #0x0
- bne _02021DAC
- bl ErrorHandling
-_02021DAC:
- ldr r1, [r5, #0x4]
- ldr r0, _02021E24 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021DB8
- bl ErrorHandling
-_02021DB8:
- cmp r7, #0x0
- bne _02021DC0
- bl ErrorHandling
-_02021DC0:
- ldr r1, [r7, #0x4]
- ldr r0, _02021E24 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021DCC
- bl ErrorHandling
-_02021DCC:
- mov r4, #0x0
- cmp r6, #0x0
- beq _02021DF6
- ldrh r0, [r5, #0x2]
- cmp r0, #0x0
- ble _02021DF6
- mov r1, #0xe
- add r0, r5, #0x0
- lsl r1, r1, #0xc
-_02021DDE:
- ldrh r2, [r0, #0x8]
- cmp r2, r1
- bne _02021DEC
- sub r6, r6, #0x1
- bne _02021DEC
- add r4, r4, #0x1
- b _02021DF6
-_02021DEC:
- ldrh r2, [r5, #0x2]
- add r4, r4, #0x1
- add r0, r0, #0x2
- cmp r4, r2
- blt _02021DDE
-_02021DF6:
- add r0, r7, #0x0
- bl StringSetEmpty
- ldrh r0, [r5, #0x2]
- cmp r4, r0
- bge _02021E20
- lsl r0, r4, #0x1
- add r6, r5, r0
-_02021E06:
- ldrh r1, [r6, #0x8]
- mov r0, #0xe
- lsl r0, r0, #0xc
- cmp r1, r0
- beq _02021E20
- add r0, r7, #0x0
- bl FUN_02021FB0
- ldrh r0, [r5, #0x2]
- add r4, r4, #0x1
- add r6, r6, #0x2
- cmp r4, r0
- blt _02021E06
-_02021E20:
- pop {r3-r7, pc}
- nop
-_02021E24: .word 0xB6F8D2EC
-
- thumb_func_start FUN_02021E28
-FUN_02021E28: ; 0x02021E28
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x0
- bne _02021E36
- bl ErrorHandling
-_02021E36:
- ldr r1, [r5, #0x4]
- ldr r0, _02021E84 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021E42
- bl ErrorHandling
-_02021E42:
- mov r0, #0x0
- strh r0, [r5, #0x2]
- ldrh r1, [r4, #0x0]
- ldr r0, _02021E88 ; =0x0000FFFF
- cmp r1, r0
- beq _02021E76
- add r1, r0, #0x0
-_02021E50:
- ldrh r2, [r5, #0x0]
- ldrh r0, [r5, #0x2]
- sub r2, r2, #0x1
- cmp r0, r2
- blt _02021E60
- bl ErrorHandling
- b _02021E76
-_02021E60:
- add r2, r0, #0x0
- add r2, r2, #0x1
- strh r2, [r5, #0x2]
- ldrh r2, [r4, #0x0]
- lsl r0, r0, #0x1
- add r0, r5, r0
- add r4, r4, #0x2
- strh r2, [r0, #0x8]
- ldrh r0, [r4, #0x0]
- cmp r0, r1
- bne _02021E50
-_02021E76:
- ldrh r0, [r5, #0x2]
- ldr r1, _02021E88 ; =0x0000FFFF
- lsl r0, r0, #0x1
- add r0, r5, r0
- strh r1, [r0, #0x8]
- pop {r3-r5, pc}
- nop
-_02021E84: .word 0xB6F8D2EC
-_02021E88: .word 0x0000FFFF
-
- thumb_func_start FUN_02021E8C
-FUN_02021E8C: ; 0x02021E8C
- push {r3-r7, lr}
- add r5, r0, #0x0
- add r7, r1, #0x0
- add r4, r2, #0x0
- cmp r5, #0x0
- bne _02021E9C
- bl ErrorHandling
-_02021E9C:
- ldr r1, [r5, #0x4]
- ldr r0, _02021EE8 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021EA8
- bl ErrorHandling
-_02021EA8:
- ldrh r0, [r5, #0x0]
- cmp r4, r0
- bhi _02021EE2
- lsl r6, r4, #0x1
- add r0, r5, #0x0
- add r0, #0x8
- add r1, r7, #0x0
- add r2, r6, #0x0
- bl memcpy
- mov r2, #0x0
- cmp r4, #0x0
- bls _02021ED4
- ldr r0, _02021EEC ; =0x0000FFFF
- add r3, r5, #0x0
-_02021EC6:
- ldrh r1, [r3, #0x8]
- cmp r1, r0
- beq _02021ED4
- add r2, r2, #0x1
- add r3, r3, #0x2
- cmp r2, r4
- blo _02021EC6
-_02021ED4:
- strh r2, [r5, #0x2]
- cmp r2, r4
- bne _02021EE6
- ldr r1, _02021EEC ; =0x0000FFFF
- add r0, r5, r6
- strh r1, [r0, #0x6]
- pop {r3-r7, pc}
-_02021EE2:
- bl ErrorHandling
-_02021EE6:
- pop {r3-r7, pc}
- .balign 4
-_02021EE8: .word 0xB6F8D2EC
-_02021EEC: .word 0x0000FFFF
-
- thumb_func_start FUN_02021EF0
-FUN_02021EF0: ; 0x02021EF0
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r4, r2, #0x0
- cmp r5, #0x0
- bne _02021F00
- bl ErrorHandling
-_02021F00:
- ldr r1, [r5, #0x4]
- ldr r0, _02021F28 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021F0C
- bl ErrorHandling
-_02021F0C:
- ldrh r0, [r5, #0x2]
- add r2, r0, #0x1
- cmp r2, r4
- bhi _02021F22
- add r5, #0x8
- add r0, r6, #0x0
- add r1, r5, #0x0
- lsl r2, r2, #0x1
- bl memcpy
- pop {r4-r6, pc}
-_02021F22:
- bl ErrorHandling
- pop {r4-r6, pc}
- .balign 4
-_02021F28: .word 0xB6F8D2EC
-
- thumb_func_start String_c_str
-String_c_str: ; 0x02021F2C
- push {r4, lr}
- add r4, r0, #0x0
- bne _02021F36
- bl ErrorHandling
-_02021F36:
- ldr r1, [r4, #0x4]
- ldr r0, _02021F48 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021F42
- bl ErrorHandling
-_02021F42:
- add r4, #0x8
- add r0, r4, #0x0
- pop {r4, pc}
- .balign 4
-_02021F48: .word 0xB6F8D2EC
-
- thumb_func_start FUN_02021F4C
-FUN_02021F4C: ; 0x02021F4C
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x0
- bne _02021F5A
- bl ErrorHandling
-_02021F5A:
- ldr r1, [r5, #0x4]
- ldr r0, _02021FAC ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021F66
- bl ErrorHandling
-_02021F66:
- cmp r4, #0x0
- bne _02021F6E
- bl ErrorHandling
-_02021F6E:
- ldr r1, [r4, #0x4]
- ldr r0, _02021FAC ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021F7A
- bl ErrorHandling
-_02021F7A:
- ldrh r2, [r4, #0x2]
- ldrh r0, [r5, #0x2]
- add r1, r0, r2
- add r3, r1, #0x1
- ldrh r1, [r5, #0x0]
- cmp r3, r1
- bgt _02021FA6
- add r1, r5, #0x0
- add r1, #0x8
- lsl r0, r0, #0x1
- add r0, r1, r0
- add r1, r4, #0x0
- add r2, r2, #0x1
- add r1, #0x8
- lsl r2, r2, #0x1
- bl memcpy
- ldrh r1, [r5, #0x2]
- ldrh r0, [r4, #0x2]
- add r0, r1, r0
- strh r0, [r5, #0x2]
- pop {r3-r5, pc}
-_02021FA6:
- bl ErrorHandling
- pop {r3-r5, pc}
- .balign 4
-_02021FAC: .word 0xB6F8D2EC
-
- thumb_func_start FUN_02021FB0
-FUN_02021FB0: ; 0x02021FB0
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r5, #0x0
- bne _02021FBE
- bl ErrorHandling
-_02021FBE:
- ldr r1, [r5, #0x4]
- ldr r0, _02021FF0 ; =0xB6F8D2EC
- cmp r1, r0
- beq _02021FCA
- bl ErrorHandling
-_02021FCA:
- ldrh r2, [r5, #0x2]
- ldrh r0, [r5, #0x0]
- add r1, r2, #0x1
- cmp r1, r0
- bge _02021FE8
- lsl r0, r2, #0x1
- strh r1, [r5, #0x2]
- add r0, r5, r0
- strh r4, [r0, #0x8]
- ldrh r0, [r5, #0x2]
- ldr r1, _02021FF4 ; =0x0000FFFF
- lsl r0, r0, #0x1
- add r0, r5, r0
- strh r1, [r0, #0x8]
- pop {r3-r5, pc}
-_02021FE8:
- bl ErrorHandling
- pop {r3-r5, pc}
- nop
-_02021FF0: .word 0xB6F8D2EC
-_02021FF4: .word 0x0000FFFF
-
- thumb_func_start FUN_02021FF8
-FUN_02021FF8: ; 0x02021FF8
- push {r4, lr}
- add r4, r0, #0x0
- bne _02022002
- bl ErrorHandling
-_02022002:
- ldr r1, [r4, #0x4]
- ldr r0, _02022028 ; =0xB6F8D2EC
- cmp r1, r0
- beq _0202200E
- bl ErrorHandling
-_0202200E:
- ldrh r0, [r4, #0x2]
- cmp r0, #0x0
- beq _02022026
- ldrh r1, [r4, #0x8]
- ldr r0, _0202202C ; =0x00000145
- cmp r1, r0
- blo _02022026
- add r0, #0x19
- cmp r1, r0
- bhi _02022026
- sub r1, #0x1a
- strh r1, [r4, #0x8]
-_02022026:
- pop {r4, pc}
- .balign 4
-_02022028: .word 0xB6F8D2EC
-_0202202C: .word 0x00000145
diff --git a/arm9/asm/unk_02021FF8.s b/arm9/asm/unk_02021FF8.s
index 150d6003..0609835c 100644
--- a/arm9/asm/unk_02021FF8.s
+++ b/arm9/asm/unk_02021FF8.s
@@ -86,7 +86,7 @@ _020220A2:
_020220B2:
ldr r0, [sp, #0x0]
add r1, r4, #0x0
- bl FUN_02021F4C
+ bl StringCat
pop {r3-r7, pc}
.balign 4
_020220BC: .word 0x000001FF
diff --git a/arm9/asm/unk_020238C4.s b/arm9/asm/unk_020238C4.s
index 339a723f..70e0d568 100644
--- a/arm9/asm/unk_020238C4.s
+++ b/arm9/asm/unk_020238C4.s
@@ -115,14 +115,14 @@ _02023970:
thumb_func_start FUN_0202397C
FUN_0202397C: ; 0x0202397C
- ldr r3, _02023988 ; =FUN_02021EF0
+ ldr r3, _02023988 ; =CopyStringToU16Array
add r2, r0, #0x0
add r0, r1, #0x0
add r1, r2, #0x0
mov r2, #0x8
bx r3
.balign 4
-_02023988: .word FUN_02021EF0
+_02023988: .word CopyStringToU16Array
thumb_func_start FUN_0202398C
FUN_0202398C: ; 0x0202398C
@@ -131,13 +131,13 @@ FUN_0202398C: ; 0x0202398C
thumb_func_start FUN_02023990
FUN_02023990: ; 0x02023990
- ldr r3, _0202399C ; =FUN_02021E28
+ ldr r3, _0202399C ; =CopyU16ArrayToString
add r2, r0, #0x0
add r0, r1, #0x0
add r1, r2, #0x0
bx r3
nop
-_0202399C: .word FUN_02021E28
+_0202399C: .word CopyU16ArrayToString
thumb_func_start FUN_020239A0
FUN_020239A0: ; 0x020239A0
diff --git a/arm9/asm/unk_02023AC4.s b/arm9/asm/unk_02023AC4.s
index ea875620..7470de58 100644
--- a/arm9/asm/unk_02023AC4.s
+++ b/arm9/asm/unk_02023AC4.s
@@ -47,14 +47,14 @@ _02023AE0: .word memset
thumb_func_start FUN_02023AE4
FUN_02023AE4: ; 0x02023AE4
- ldr r3, _02023AF0 ; =FUN_02021E8C
+ ldr r3, _02023AF0 ; =CopyU16ArrayToStringN
add r2, r0, #0x0
add r0, r1, #0x0
add r1, r2, #0x0
mov r2, #0xc
bx r3
.balign 4
-_02023AF0: .word FUN_02021E8C
+_02023AF0: .word CopyU16ArrayToStringN
thumb_func_start FUN_02023AF4
FUN_02023AF4: ; 0x02023AF4
@@ -64,7 +64,7 @@ FUN_02023AF4: ; 0x02023AF4
bl String_ctor
add r1, r5, #0x0
add r4, r0, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
diff --git a/arm9/asm/unk_02024E64.s b/arm9/asm/unk_02024E64.s
index 3c770b30..f48042bb 100644
--- a/arm9/asm/unk_02024E64.s
+++ b/arm9/asm/unk_02024E64.s
@@ -88,13 +88,13 @@ FUN_02024EF4: ; 0x02024EF4
add r2, r0, #0x0
add r0, r1, #0x0
ldr r1, _02024F04 ; =0x00000724
- ldr r3, _02024F08 ; =FUN_02021EF0
+ ldr r3, _02024F08 ; =CopyStringToU16Array
add r1, r2, r1
mov r2, #0x8
bx r3
nop
_02024F04: .word 0x00000724
-_02024F08: .word FUN_02021EF0
+_02024F08: .word CopyStringToU16Array
thumb_func_start FUN_02024F0C
FUN_02024F0C: ; 0x02024F0C
@@ -109,10 +109,10 @@ FUN_02024F18: ; 0x02024F18
add r2, r0, #0x0
add r0, r1, #0x0
ldr r1, _02024F28 ; =0x00000734
- ldr r3, _02024F2C ; =FUN_02021EF0
+ ldr r3, _02024F2C ; =CopyStringToU16Array
add r1, r2, r1
mov r2, #0xb
bx r3
nop
_02024F28: .word 0x00000734
-_02024F2C: .word FUN_02021EF0
+_02024F2C: .word CopyStringToU16Array
diff --git a/arm9/asm/unk_02026CD0.s b/arm9/asm/unk_02026CD0.s
index ec6fd057..75016f0b 100644
--- a/arm9/asm/unk_02026CD0.s
+++ b/arm9/asm/unk_02026CD0.s
@@ -112,7 +112,7 @@ FUN_02026D98: ; 0x02026D98
add r4, r2, #0x0
add r1, #0x20
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r5, #0x34
strb r4, [r5, #0x0]
pop {r3-r5, pc}
@@ -2242,13 +2242,13 @@ FUN_02027C84: ; 0x02027C84
thumb_func_start FUN_02027C88
FUN_02027C88: ; 0x02027C88
add r2, r0, #0x0
- ldr r3, _02027C94 ; =FUN_02021E28
+ ldr r3, _02027C94 ; =CopyU16ArrayToString
add r2, #0x20
add r0, r1, #0x0
add r1, r2, #0x0
bx r3
.balign 4
-_02027C94: .word FUN_02021E28
+_02027C94: .word CopyU16ArrayToString
thumb_func_start FUN_02027C98
FUN_02027C98: ; 0x02027C98
diff --git a/arm9/asm/unk_020281E0.s b/arm9/asm/unk_020281E0.s
index edf5e64f..b55e419f 100644
--- a/arm9/asm/unk_020281E0.s
+++ b/arm9/asm/unk_020281E0.s
@@ -291,7 +291,7 @@ _020283D0:
add r1, r2, r1
add r0, r6, #0x0
mov r2, #0x10
- bl FUN_02021EF0
+ bl CopyStringToU16Array
pop {r4-r6, pc}
.balign 4
@@ -330,7 +330,7 @@ _02028414:
add r1, r2, r1
add r0, r6, #0x0
mov r2, #0x10
- bl FUN_02021EF0
+ bl CopyStringToU16Array
pop {r4-r6, pc}
.balign 4
diff --git a/arm9/asm/unk_020286F8.s b/arm9/asm/unk_020286F8.s
index d0ed994b..ffb1a935 100644
--- a/arm9/asm/unk_020286F8.s
+++ b/arm9/asm/unk_020286F8.s
@@ -146,7 +146,7 @@ FUN_020287C0: ; 0x020287C0
add r1, r4, r2
add r0, r3, #0x0
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
pop {r4, pc}
_020287D8:
mov r2, #0x2c
@@ -155,7 +155,7 @@ _020287D8:
add r0, r3, #0x0
add r1, #0x10
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
pop {r4, pc}
.balign 4
diff --git a/arm9/asm/unk_0202B034.s b/arm9/asm/unk_0202B034.s
index 8c604e39..f6d8f57e 100644
--- a/arm9/asm/unk_0202B034.s
+++ b/arm9/asm/unk_0202B034.s
@@ -142,7 +142,7 @@ _0202B0BA:
add r0, r6, #0x0
add r1, #0xc
mov r2, #0xb
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r4, #0x0
mov r1, #0x90
add r2, r6, #0x0
@@ -151,7 +151,7 @@ _0202B0BA:
add r0, r6, #0x0
add r1, #0x22
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
b _0202B17C
_0202B176:
ldr r0, _0202B1EC ; =0x0000FFFF
@@ -359,11 +359,11 @@ _0202B2CE:
ldrb r0, [r5, #0x3]
strb r0, [r4, #0x13]
ldr r0, [r4, #0x0]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r1, r5, #0x0
ldr r0, [r4, #0x4]
add r1, #0x22
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r1, #0x0
_0202B306:
ldrh r0, [r5, #0x32]
diff --git a/arm9/asm/unk_0202B870.s b/arm9/asm/unk_0202B870.s
index b9a2a3b1..eb4d094a 100644
--- a/arm9/asm/unk_0202B870.s
+++ b/arm9/asm/unk_0202B870.s
@@ -277,7 +277,7 @@ _0202BA38:
add r0, r7, #0x0
add r1, #0x8
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r0, [r5, #0x0]
add r6, r6, #0x1
str r0, [r4, #0x4]
@@ -822,7 +822,7 @@ _0202BE14:
add r1, r5, #0x0
ldr r0, [r0, #0xc]
add r1, #0x8
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [r4, #0x0]
add r0, r0, #0x1
str r0, [r4, #0x0]
diff --git a/arm9/asm/unk_02033874.s b/arm9/asm/unk_02033874.s
index 24d12a3a..648cf799 100644
--- a/arm9/asm/unk_02033874.s
+++ b/arm9/asm/unk_02033874.s
@@ -333,7 +333,7 @@ _02033B22:
bl FUN_0202DFFC
add r1, r0, #0x0
ldr r0, [sp, #0x10]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r2, [sp, #0x10]
add r0, r4, #0x0
add r1, r5, #0x0
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index f4394e88..6056f12f 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -1817,7 +1817,7 @@ _020384D6:
bne _020384F2
ldr r0, [r1, #0x18]
ldr r1, [r4, #0x10]
- bl FUN_02021CE0
+ bl StringCompare
cmp r0, #0x0
bne _02038514
ldr r0, [r4, #0xc]
@@ -1990,12 +1990,12 @@ _02038620:
beq _0203866E
ldr r0, [r4, #0x10]
add r1, r5, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
b _0203866E
_02038656:
ldr r0, [r4, #0x10]
add r1, r5, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
b _0203866E
_02038660:
cmp r5, #0x0
@@ -2003,7 +2003,7 @@ _02038660:
ldr r0, [r4, #0xc]
add r1, r5, #0x0
ldr r0, [r0, #0x18]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
_0203866E:
ldr r0, [sp, #0x4]
ldr r1, _0203867C ; =FUN_0203847C
diff --git a/arm9/asm/unk_0204CB20.s b/arm9/asm/unk_0204CB20.s
index 6351a0e1..140bae5d 100644
--- a/arm9/asm/unk_0204CB20.s
+++ b/arm9/asm/unk_0204CB20.s
@@ -6102,7 +6102,7 @@ FUN_0204F9BC: ; 0x0204F9BC
mov r1, #0xf
bl FUN_020239A0
str r0, [sp, #0x0]
- bl FUN_02021D3C
+ bl StringGetLength
cmp r0, #0x0
beq _0204F9FE
ldr r0, _0204FA54 ; =UNK_021C5A68
diff --git a/arm9/asm/unk_02060CCC.s b/arm9/asm/unk_02060CCC.s
index 6bc4b7fb..cd102e3a 100644
--- a/arm9/asm/unk_02060CCC.s
+++ b/arm9/asm/unk_02060CCC.s
@@ -267,7 +267,7 @@ FUN_02060D90: ; 0x02060D90
bl String_ctor
add r1, r7, #0x0
add r4, r0, #0x0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [sp, #0x24]
ldr r3, [sp, #0x8]
str r0, [sp, #0x0]
@@ -327,7 +327,7 @@ FUN_02060E04: ; 0x02060E04
add r0, r4, #0x0
add r1, r5, #0x0
mov r2, #0xb
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r4, #0x0
bl String_dtor
pop {r4-r6, pc}
@@ -436,7 +436,7 @@ FUN_02060ECC: ; 0x02060ECC
add r0, r4, #0x0
add r1, r7, #0x0
mov r2, #0xb
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r4, #0x0
bl String_dtor
_02060F0C:
diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s
index e50c86ca..fcd36a6f 100644
--- a/arm9/asm/unk_020653EC.s
+++ b/arm9/asm/unk_020653EC.s
@@ -1671,7 +1671,7 @@ _020660AE:
bl FUN_020257C4
add r1, r0, #0x0
ldr r0, [r5, #0x8]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldrb r0, [r6, #0x19]
strb r0, [r5, #0x2]
ldrb r1, [r5, #0x0]
diff --git a/arm9/asm/unk_0206ABC4.s b/arm9/asm/unk_0206ABC4.s
index bddf1314..cd1030b7 100644
--- a/arm9/asm/unk_0206ABC4.s
+++ b/arm9/asm/unk_0206ABC4.s
@@ -70,7 +70,7 @@ _0206AC26:
add r6, r0, #0x0
add r1, r5, #0x0
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r6, #0x0
bl String_dtor
_0206AC3E:
diff --git a/arm9/asm/unk_0206B16C.s b/arm9/asm/unk_0206B16C.s
index e5b5bebe..1e7eb1f4 100644
--- a/arm9/asm/unk_0206B16C.s
+++ b/arm9/asm/unk_0206B16C.s
@@ -464,7 +464,7 @@ _0206B492:
mov r2, #0x28
mul r2, r1
add r1, r3, r2
- bl FUN_02021E28
+ bl CopyU16ArrayToString
pop {r3, pc}
_0206B4A8:
bl ErrorHandling
@@ -491,7 +491,7 @@ _0206B4C2:
mul r2, r1
add r1, r3, r2
mov r2, #0x14
- bl FUN_02021EF0
+ bl CopyStringToU16Array
bl FUN_02022830
_0206B4DC:
pop {r3, pc}
diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s
index 6011647b..7515f075 100644
--- a/arm9/asm/unk_020772F0.s
+++ b/arm9/asm/unk_020772F0.s
@@ -1003,7 +1003,7 @@ _0207781A:
add r4, #0x1c
add r1, r4, #0x0
mov r2, #0xa
- bl FUN_02021EF0
+ bl CopyStringToU16Array
pop {r4-r6, pc}
_02077836:
cmp r0, #0x3
@@ -1027,7 +1027,7 @@ _02077836:
add r4, #0x1c
add r1, r4, #0x0
mov r2, #0xa
- bl FUN_02021EF0
+ bl CopyStringToU16Array
pop {r4-r6, pc}
_02077864:
mov r0, #0x1
@@ -1132,7 +1132,7 @@ _0207790E:
add r1, r4, #0x0
ldr r0, [r5, #0x18]
add r1, #0xd8
- bl FUN_02021E28
+ bl CopyU16ArrayToString
_02077932:
mov r0, #0x61
lsl r0, r0, #0x2
@@ -1642,7 +1642,7 @@ FUN_02077CD4: ; 0x02077CD4
beq _02077D88
add r1, r4, r1
mov r2, #0x20
- bl FUN_02021EF0
+ bl CopyStringToU16Array
_02077D88:
add r1, r4, #0x0
mov r0, #0x1
@@ -1866,7 +1866,7 @@ _02077F50:
add r1, r5, #0x0
add r0, r7, #0x0
add r1, #0xd8
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r1, #0x0
str r1, [sp, #0x0]
mov r0, #0x5a
@@ -3814,7 +3814,7 @@ _02078F0A:
add r5, r0, #0x0
ldr r0, [sp, #0x28]
add r1, sp, #0x38
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [sp, #0x20]
sub r3, r6, r5
str r0, [sp, #0x0]
@@ -3944,7 +3944,7 @@ _02079012:
bl FUN_02019620
add r0, r4, #0x0
add r1, sp, #0xc
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r3, _0207906C ; =0x000D0E0F
add r0, r6, r7
add r1, r4, #0x0
diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s
index 24ce0c2e..2c76b714 100644
--- a/arm9/asm/unk_02079C70.s
+++ b/arm9/asm/unk_02079C70.s
@@ -716,7 +716,7 @@ FUN_0207A1A0: ; 0x0207A1A0
cmp r1, #0x0
beq _0207A24C
ldr r0, [r4, r2]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
_0207A24C:
pop {r4, pc}
nop
diff --git a/arm9/asm/unk_0207D5BC.s b/arm9/asm/unk_0207D5BC.s
index d0a7ab43..51c02db7 100644
--- a/arm9/asm/unk_0207D5BC.s
+++ b/arm9/asm/unk_0207D5BC.s
@@ -543,7 +543,7 @@ FUN_0207D958: ; 0x0207D958
add r3, #0xc
ldr r0, [r1, r3]
ldr r1, [r1, r2]
- bl FUN_02021CE0
+ bl StringCompare
cmp r0, #0x0
bne _0207D98E
mov r0, #0x1
diff --git a/arm9/asm/unk_020834D0.s b/arm9/asm/unk_020834D0.s
index 6b8df55d..e86c6f2d 100644
--- a/arm9/asm/unk_020834D0.s
+++ b/arm9/asm/unk_020834D0.s
@@ -550,7 +550,7 @@ FUN_02083888: ; 0x02083888
bl StringSetEmpty
ldr r0, [r4, r7]
add r1, r5, #0x4
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, _020838B0 ; =0x00000584
ldrb r1, [r6, r0]
add r1, r1, #0x1
@@ -567,7 +567,7 @@ FUN_020838B4: ; 0x020838B4
add r0, r2, #0x0
add r1, sp, #0x0
mov r2, #0x8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
mov r0, #0x14
add r1, r0, #0x0
bl AllocFromHeap
diff --git a/arm9/asm/unk_020854E0.s b/arm9/asm/unk_020854E0.s
index cf2ec66b..959d633f 100644
--- a/arm9/asm/unk_020854E0.s
+++ b/arm9/asm/unk_020854E0.s
@@ -302,7 +302,7 @@ FUN_020856F0: ; 0x020856F0
bl FUN_020257C4
add r1, r0, #0x0
ldr r0, [r6, #0x10]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r0, r4, #0x0
bl FUN_020257CC
strb r0, [r6, #0xf]
diff --git a/arm9/global.inc b/arm9/global.inc
index f1baa114..ad2fb8a9 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -14,8 +14,7 @@
.extern CARD_UnlockRom
.extern CARD_WaitBackupAsync
.extern CARDi_CheckPulledOutCore
-.extern CARDi_IdentifyBackupCore
-.extern CARDi_InitCommon
+.extern CARDi_IdentifyBackupCoreStringLength
.extern CARDi_OnFifoRecv
.extern CARDi_ReadRom
.extern CARDi_Request
@@ -1388,26 +1387,26 @@
.extern FUN_020215E0
.extern FUN_02021750
.extern FUN_020218D8
-.extern FUN_02021934
-.extern FUN_0202199C
+.extern StringGetWidth
+.extern StringGetWidthNoSpacing
.extern String_ctor
.extern String_dtor
.extern StringSetEmpty
.extern StringCopy
.extern StringDup
.extern String16_FormatInteger
-.extern FUN_02021C38
-.extern FUN_02021CE0
-.extern FUN_02021D3C
-.extern FUN_02021D5C
-.extern FUN_02021D9C
-.extern FUN_02021E28
-.extern FUN_02021E8C
-.extern FUN_02021EF0
+.extern String_atoi
+.extern StringCompare
+.extern StringGetLength
+.extern StringCountLines
+.extern StringGetLineN
+.extern CopyU16ArrayToString
+.extern CopyU16ArrayToStringN
+.extern CopyStringToU16Array
.extern String_c_str
-.extern FUN_02021F4C
-.extern FUN_02021FB0
-.extern FUN_02021FF8
+.extern StringCat
+.extern StrAddChar
+.extern StrUpperFirstChar
.extern FUN_02022048
.extern FUN_020220C4
.extern FUN_0202212C
@@ -8399,3 +8398,4 @@
.extern MOD06_0224CAAC
.extern MOD06_0224CB54
.extern gSineTable
+.extern CARDi_IdentifyBackupCore
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index f1fdbbd0..f525e8c6 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -27128,7 +27128,7 @@ _021EFF2E:
bl FUN_020283A4
add r1, r0, #0
ldr r0, [r5, #8]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [r5]
ldr r1, [r5, #8]
add r2, r4, #0
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index 950b8916..f74e8b93 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -22563,7 +22563,7 @@ MOD06_02244820: ; 0x02244820
add r4, r0, #0
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r4, #0
bl String_dtor
add r0, r7, #0
@@ -31009,7 +31009,7 @@ _0224886C:
add r5, r0, #0
add r1, sp, #4
mov r2, #0x80
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r5, #0
bl String_dtor
ldr r0, [r4, #8]
diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s
index 5eca8548..fd5e5c2a 100644
--- a/arm9/modules/07/asm/module_07.s
+++ b/arm9/modules/07/asm/module_07.s
@@ -5062,7 +5062,7 @@ MOD07_02214720: ; 0x02214720
ldr r0, [r0, #0x14]
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r1, [sp, #0x10]
ldr r3, [r4, #0x24]
add r0, r5, #0
@@ -5114,7 +5114,7 @@ _022147BC:
ldr r0, [r0, #0x14]
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r1, [sp, #0x14]
ldr r3, [r4, #0x24]
add r0, r5, #0
@@ -5147,7 +5147,7 @@ _02214808:
ldr r0, [r0, #0x14]
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r1, [sp, #0x18]
ldr r3, [r4, #0x24]
add r0, r5, #0
@@ -5180,7 +5180,7 @@ _02214854:
ldr r0, [r0, #0x14]
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r1, [sp, #0x1c]
ldr r3, [r4, #0x24]
add r0, r5, #0
@@ -5215,11 +5215,11 @@ _022148A0:
ldr r0, [r4, #0x18]
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r0, [r4, #0x20]
add r1, r7, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
b _02214914
_022148EA:
add r0, #0x29
@@ -5234,11 +5234,11 @@ _022148EA:
ldr r0, [r4, #0x14]
add r1, r5, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
ldr r0, [r4, #0x1c]
add r1, r7, #0
mov r2, #8
- bl FUN_02021EF0
+ bl CopyStringToU16Array
_02214914:
str r6, [sp]
ldr r0, [r4, #0x24]
diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s
index 9901427c..f080d018 100644
--- a/arm9/modules/11/asm/module_11_thumb2.s
+++ b/arm9/modules/11/asm/module_11_thumb2.s
@@ -41251,7 +41251,7 @@ _022435DC:
add r4, #0x36
add r0, r3, #0
add r1, r4, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
b _02243798
_022435E8:
ldr r0, [r4, #0x4c]
diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s
index 5639bd70..07d6e961 100644
--- a/arm9/modules/15/asm/module_15.s
+++ b/arm9/modules/15/asm/module_15.s
@@ -5041,7 +5041,7 @@ _021D9B9C:
ldr r0, [sp]
mov r1, ip
add r2, r2, #1
- bl FUN_02021E8C
+ bl CopyU16ArrayToStringN
mov r0, #0
pop {r3, r4, r5, r6, r7, pc}
_021D9BB6:
@@ -8617,7 +8617,7 @@ _021DB782:
add r1, r2, r1
add r0, r5, #0
mov r2, #2
- bl FUN_02021E8C
+ bl CopyU16ArrayToStringN
pop {r3, r4, r5, pc}
.align 2, 0
_021DB794: .word MOD15_021DBA4C
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index 673ceb02..a604a281 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -23489,7 +23489,7 @@ MOD18_02244BB4: ; 0x02244BB4
add r1, r5, #0
add r1, #0x94
mov r2, #0x50
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r5, #0
add r0, #0x94
ldrh r2, [r0]
@@ -23542,7 +23542,7 @@ _02244C14:
add r1, r5, #0
ldr r0, [r0]
add r1, #0x94
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r0, r5, #0
add r0, #0x88
add r1, r6, #1
@@ -23550,7 +23550,7 @@ _02244C14:
add r5, #0x94
lsl r1, r1, #1
add r1, r5, r1
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r0, #2
pop {r3, r4, r5, r6, r7, pc}
nop
diff --git a/arm9/modules/51/asm/module_51.s b/arm9/modules/51/asm/module_51.s
index e41127d5..5e3f79d8 100644
--- a/arm9/modules/51/asm/module_51.s
+++ b/arm9/modules/51/asm/module_51.s
@@ -1569,7 +1569,7 @@ _0225548C:
bl FUN_020254F0
add r1, r0, #0
add r0, r4, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r0, r6, #0
add r1, r5, #0
bl FUN_020254F8
@@ -1647,7 +1647,7 @@ _02255530:
mov r0, #0x1c
mul r0, r2
ldr r0, [r4, r0]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [r5]
mov r1, #0x1c
add r2, r0, #0
diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s
index c33392ec..a59e1058 100644
--- a/arm9/modules/55/asm/module_55.s
+++ b/arm9/modules/55/asm/module_55.s
@@ -1967,7 +1967,7 @@ MOD55_021D84C8: ; 0x021D84C8
add r0, #0xd8
ldr r0, [r0]
add r1, sp, #4
- bl FUN_02021C38
+ bl String_atoi
str r0, [sp]
ldr r0, [sp, #4]
add r7, r1, #0
@@ -2081,7 +2081,7 @@ _021D85B2:
add r0, #0xd8
ldr r0, [r0]
add r1, sp, #8
- bl FUN_02021C38
+ bl String_atoi
add r7, r0, #0
ldr r0, [sp, #4]
add r6, r1, #0
@@ -2689,7 +2689,7 @@ _021D8A46:
bl FUN_020283A4
add r1, r0, #0
ldr r0, [r5, #0x38]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, [sp]
add r1, r4, #1
add r0, r0, r6
@@ -5090,7 +5090,7 @@ MOD55_021D9E40: ; 0x021D9E40
bne _021D9EB8
ldr r0, [r0, #0x18]
add r1, r5, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
b _021D9EBE
_021D9EB8:
ldr r0, [r0, #0x18]
diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s
index bcdd979e..9144e290 100644
--- a/arm9/modules/56/asm/module_56.s
+++ b/arm9/modules/56/asm/module_56.s
@@ -795,7 +795,7 @@ _02212456:
add r0, r5, #0
add r0, #0xd4
ldr r0, [r0]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r4, r4, #1
add r5, r5, #4
cmp r4, #0x20
@@ -2872,7 +2872,7 @@ _022134F2:
mov r0, #0x56
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_02021E28
+ bl CopyU16ArrayToString
b _022135DC
_0221350C:
add r0, r4, #0
diff --git a/arm9/modules/57/asm/module_57.s b/arm9/modules/57/asm/module_57.s
index d9ccb89e..22452327 100644
--- a/arm9/modules/57/asm/module_57.s
+++ b/arm9/modules/57/asm/module_57.s
@@ -2819,7 +2819,7 @@ _021D8AE0:
add r1, r6, #0
add r0, r5, #0
add r1, #8
- bl FUN_02021E28
+ bl CopyU16ArrayToString
add r0, r7, #0
mov r2, #0
add r0, #0x10
diff --git a/arm9/modules/67/asm/module_67.s b/arm9/modules/67/asm/module_67.s
index 081effc0..3c03a849 100644
--- a/arm9/modules/67/asm/module_67.s
+++ b/arm9/modules/67/asm/module_67.s
@@ -1692,7 +1692,7 @@ _021D822A:
mov r3, #0x2a
bl ReadMsgData_NewNarc_NewString
add r6, r0, #0
- bl FUN_02021D3C
+ bl StringGetLength
add r5, r0, #0
add r0, r6, #0
bl String_dtor
@@ -1717,7 +1717,7 @@ _021D822A:
add r2, r6, #0
bl FUN_0200B7B8
ldr r0, [r4, #0x58]
- bl FUN_02021D3C
+ bl StringGetLength
add r5, r5, r0
add r0, r6, #0
bl String_dtor
@@ -1732,7 +1732,7 @@ _021D828A:
mov r3, #0x2a
bl ReadMsgData_NewNarc_NewString
add r6, r0, #0
- bl FUN_02021D3C
+ bl StringGetLength
add r5, r5, r0
add r0, r6, #0
bl String_dtor
@@ -3503,7 +3503,7 @@ MOD67_021D9098: ; 0x021D9098
bl String_ctor
add r1, r6, #0
add r4, r0, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r0, #1
str r0, [sp]
mov r0, #2
diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s
index a6cd9d90..c21637a9 100644
--- a/arm9/modules/69/asm/module_69.s
+++ b/arm9/modules/69/asm/module_69.s
@@ -2307,7 +2307,7 @@ MOD69_0222E89C: ; 0x0222E89C
add r5, r0, #0
ldr r0, [r5, #0x1c]
add r4, r1, #0
- bl FUN_02021D5C
+ bl StringCountLines
mov r6, #0
str r0, [sp, #0x10]
cmp r0, #0
@@ -2316,7 +2316,7 @@ _0222E8B2:
ldr r0, [r5, #0x18]
ldr r1, [r5, #0x1c]
add r2, r6, #0
- bl FUN_02021D9C
+ bl StringGetLineN
mov r0, #0
ldr r1, [r5, #0x18]
add r2, r0, #0
@@ -4094,7 +4094,7 @@ _0222F726:
ldr r0, [r5, r1]
add r1, r1, #4
ldr r1, [r5, r1]
- bl FUN_02021CE0
+ bl StringCompare
cmp r0, #0
beq _0222F750
mov r5, #2
diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s
index 111546a5..b60cc139 100644
--- a/arm9/modules/71/asm/module_71.s
+++ b/arm9/modules/71/asm/module_71.s
@@ -4433,7 +4433,7 @@ _0222FA60:
bl FUN_020283A4
add r1, r0, #0
add r0, r6, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
ldr r0, _0222FAD0 ; =0x0000367C
add r1, r6, #0
ldr r0, [r5, r0]
diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s
index 5487f6ef..743c4a76 100644
--- a/arm9/modules/74/asm/module_74.s
+++ b/arm9/modules/74/asm/module_74.s
@@ -1298,7 +1298,7 @@ _021D7EB8:
b _021D7F0C
_021D7F06:
add r1, r6, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
_021D7F0C:
ldr r0, [sp, #4]
add r4, #0x10
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index f346f404..83c24108 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -5013,7 +5013,7 @@ MOD80_0222FD28: ; 0x0222FD28
add r6, r0, #0
add r0, r4, #0
add r1, r7, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r2, #0
ldr r0, _0222FD84 ; =0x000F0200
str r2, [sp]
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index 1824f32f..bece508d 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -3361,7 +3361,7 @@ MOD83_0222F074: ; 0x0222F074
add r7, r0, #0
add r1, r4, r1
mov r2, #0x24
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r7, #0
bl String_dtor
mov r0, #0xc
@@ -3418,7 +3418,7 @@ MOD83_0222F074: ; 0x0222F074
lsl r1, r1, #2
add r1, r4, r1
mov r2, #0xfa
- bl FUN_02021EF0
+ bl CopyStringToU16Array
add r0, r7, #0
bl String_dtor
mov r0, #0xd2
@@ -6052,7 +6052,7 @@ MOD83_022305A4: ; 0x022305A4
add r1, r6, #0
mov r2, #0x24
add r4, r0, #0
- bl FUN_02021E8C
+ bl CopyU16ArrayToStringN
mov r0, #0
mov r1, #6
bl FUN_02002E4C
@@ -8557,7 +8557,7 @@ MOD83_02231A4C: ; 0x02231A4C
lsl r1, r1, #2
add r1, r2, r1
mov r2, #0x24
- bl FUN_02021E8C
+ bl CopyU16ArrayToStringN
mov r3, #0
str r3, [sp]
mov r0, #0xff
@@ -8713,7 +8713,7 @@ MOD83_02231B84: ; 0x02231B84
lsl r1, r1, #2
add r1, r2, r1
mov r2, #0xfa
- bl FUN_02021E8C
+ bl CopyU16ArrayToStringN
mov r3, #0
str r3, [sp]
mov r0, #0xff
@@ -15576,7 +15576,7 @@ _02235004:
ldr r1, [r5, #0x38]
add r7, r0, #0
mov r2, #0x40
- bl FUN_02021E8C
+ bl CopyU16ArrayToStringN
add r0, r5, #0
add r1, r7, #0
add r2, r4, #0
@@ -18164,7 +18164,7 @@ MOD83_02236484: ; 0x02236484
bl String_ctor
add r1, sp, #8
add r6, r0, #0
- bl FUN_02021E28
+ bl CopyU16ArrayToString
mov r1, #1
str r1, [sp]
mov r0, #2
diff --git a/arm9/src/msgdata.c b/arm9/src/msgdata.c
index 5805a7eb..e90c7122 100644
--- a/arm9/src/msgdata.c
+++ b/arm9/src/msgdata.c
@@ -102,7 +102,7 @@ static void ReadMsgData_ExistingTable_ExistingString(struct MsgDataTable * table
{
MI_CpuCopy16((char *)table + alloc.offset, buf, 2 * alloc.length);
Decrypt2(buf, alloc.length, num);
- FUN_02021E8C(dest, buf, alloc.length);
+ CopyU16ArrayToStringN(dest, buf, alloc.length);
FreeToHeap(buf);
}
}
@@ -129,7 +129,7 @@ static struct String * ReadMsgData_ExistingTable_NewString(struct MsgDataTable *
Decrypt2(buf, alloc.length, num);
dest = String_ctor(alloc.length, heap_id);
if (dest != NULL)
- FUN_02021E8C(dest, buf, alloc.length);
+ CopyU16ArrayToStringN(dest, buf, alloc.length);
FreeToHeap(buf);
return dest;
}
@@ -173,7 +173,7 @@ static void ReadMsgData_ExistingNarc_ExistingString(NARC * narc, u32 group, u32
{
NARC_ReadFromMember(narc, group, alloc.offset, size, buf);
Decrypt2(buf, alloc.length, num);
- FUN_02021E8C(dest, buf, alloc.length);
+ CopyU16ArrayToStringN(dest, buf, alloc.length);
FreeToHeap(buf);
return;
}
@@ -223,7 +223,7 @@ static struct String * ReadMsgData_ExistingNarc_NewString(NARC * narc, u32 group
{
NARC_ReadFromMember(narc, group, alloc.offset, size, buf);
Decrypt2(buf, alloc.length, num);
- FUN_02021E8C(dest, buf, alloc.length);
+ CopyU16ArrayToStringN(dest, buf, alloc.length);
FreeToHeap(buf);
}
}
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index e56faac3..eb51d5fb 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -867,7 +867,7 @@ u32 GetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * dest)
}
else
{
- FUN_02021E28(dest, blockC->nickname);
+ CopyU16ArrayToString(dest, blockC->nickname);
}
break;
case MON_DATA_UNK_120:
@@ -911,7 +911,7 @@ u32 GetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * dest)
}
break;
case MON_DATA_OT_NAME_2:
- FUN_02021E28(dest, blockD->otTrainerName);
+ CopyU16ArrayToString(dest, blockD->otTrainerName);
break;
case MON_DATA_EGG_MET_YEAR:
ret = blockD->dateEggReceived[0];
@@ -1321,11 +1321,11 @@ void SetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * value)
break;
case MON_DATA_NICKNAME_4:
GetSpeciesNameIntoArray(blockA->species, 0, namebuf2);
- FUN_02021EF0(value, namebuf3, POKEMON_NAME_LENGTH + 1);
+ CopyStringToU16Array(value, namebuf3, POKEMON_NAME_LENGTH + 1);
blockB->isNicknamed = StringNotEqual(namebuf2, namebuf3);
// fallthrough
case MON_DATA_NICKNAME_3:
- FUN_02021EF0(value, blockC->nickname, POKEMON_NAME_LENGTH + 1);
+ CopyStringToU16Array(value, blockC->nickname, POKEMON_NAME_LENGTH + 1);
break;
case MON_DATA_UNK_120:
blockC->Unused = VALUE(u8);
@@ -1368,7 +1368,7 @@ void SetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * value)
}
break;
case MON_DATA_OT_NAME_2:
- FUN_02021EF0(value, blockD->otTrainerName, OT_NAME_LENGTH + 1);
+ CopyStringToU16Array(value, blockD->otTrainerName, OT_NAME_LENGTH + 1);
break;
case MON_DATA_EGG_MET_YEAR:
blockD->dateEggReceived[0] = VALUE(u8);
@@ -1422,7 +1422,7 @@ void SetBoxMonDataInternal(struct BoxPokemon * boxmon, int attr, void * value)
break;
case MON_DATA_SPECIES_NAME:
speciesName = GetSpeciesName(blockA->species, 0);
- FUN_02021EF0(speciesName, blockC->nickname, POKEMON_NAME_LENGTH + 1);
+ CopyStringToU16Array(speciesName, blockC->nickname, POKEMON_NAME_LENGTH + 1);
String_dtor(speciesName);
break;
}
@@ -3686,7 +3686,7 @@ BOOL FUN_0206A9AC(struct BoxPokemon * boxmon, struct SaveBlock2 * sb2, u32 heap_
struct String * r6 = String_ctor(OT_NAME_LENGTH + 1, heap_id);
BOOL ret = FALSE;
GetBoxMonData(boxmon, MON_DATA_OT_NAME_2, r6);
- if (myId == otId && myGender == otGender && FUN_02021CE0(r7, r6) == 0)
+ if (myId == otId && myGender == otGender && StringCompare(r7, r6) == 0)
ret = TRUE;
String_dtor(r6);
String_dtor(r7);
diff --git a/arm9/src/unk_02021934.c b/arm9/src/unk_02021934.c
new file mode 100644
index 00000000..af76ab97
--- /dev/null
+++ b/arm9/src/unk_02021934.c
@@ -0,0 +1,367 @@
+#include "global.h"
+#include "string16.h"
+#include "heap.h"
+#include "string_util.h"
+#include "unk_0201B8B88.h"
+
+#pragma thumb on
+
+#define ASSERT_STR16(_str) ({ GF_ASSERT(_str != NULL); GF_ASSERT(_str->magic == STR16_MAGIC); })
+
+void StrAddChar(struct String * str, u16 val);
+
+int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6)
+{
+ int ret = 0;
+ u32 r4 = 0;
+ while (*arr != 0xFFFF)
+ {
+ if (*arr == 0xFFFE)
+ {
+ arr = FUN_0201B8B8(arr);
+ }
+ else if (*arr == 0xE000)
+ {
+ if (ret < r4 - r6)
+ ret = (int)(r4 - r6);
+ r4 = 0;
+ arr++;
+ }
+ else
+ {
+ r4 += (r6 + r7->unk_70(r7, *arr - 1));
+ arr++;
+ }
+ }
+ if (ret < r4 - r6)
+ ret = (int)(r4 - r6);
+ return ret;
+}
+
+int StringGetWidthNoSpacing(struct UnkStruct_0202199C * r6, const u16 * arr)
+{
+ int ret = 0;
+ while (*arr != 0xFFFF)
+ {
+ if (*arr == 0xFFFE)
+ {
+ if (FUN_0201B8E0(arr) == 0x0203)
+ {
+ ret = FUN_0201B914(arr, 0) - 12;
+ }
+ arr = FUN_0201B8B8(arr);
+ }
+ else
+ {
+ ret += r6->unk_70(r6, *arr - 1);
+ arr++;
+ }
+ }
+ return ret;
+}
+
+struct String * String_ctor(u32 length, u32 heap_id)
+{
+ struct String * ret = AllocFromHeap(heap_id, length * 2 + 10);
+ if (ret != NULL)
+ {
+ ret->magic = STR16_MAGIC;
+ ret->maxsize = (u16)length;
+ ret->size = 0;
+ ret->data[0] = EOS;
+ }
+ return ret;
+}
+
+void String_dtor(struct String * str)
+{
+ ASSERT_STR16(str);
+ str->magic = STR16_MAGIC | 1;
+ FreeToHeap(str);
+}
+
+void StringSetEmpty(struct String * str)
+{
+ ASSERT_STR16(str);
+ str->size = 0;
+ str->data[0] = EOS;
+}
+
+void StringCopy(struct String * dest, struct String * src)
+{
+ ASSERT_STR16(dest);
+ ASSERT_STR16(src);
+ if (dest->maxsize > src->size)
+ {
+ memcpy(dest->data, src->data, (u32)((src->size + 1) * 2));
+ dest->size = src->size;
+ return;
+ }
+ GF_ASSERT(0);
+}
+
+struct String * StringDup(struct String * src, u32 heap_id)
+{
+ ASSERT_STR16(src);
+ struct String * dest = String_ctor((u32)(src->size + 1), heap_id);
+ if (dest != NULL)
+ StringCopy(dest, src);
+ return dest;
+}
+
+const u16 UNK_020EE67C[10] = {
+ 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
+ 0xA7, 0xA8, 0xA9, 0xAA, 0xAB
+};
+
+const u16 UNK_020EE690[10] = {
+ 0x121, 0x122, 0x123, 0x124, 0x125,
+ 0x126, 0x127, 0x128, 0x129, 0x12A
+};
+
+const u32 UNK_020EE6A4[10] = {
+ 1,
+ 10,
+ 100,
+ 1000,
+ 10000,
+ 100000,
+ 1000000,
+ 10000000,
+ 100000000,
+ 1000000000
+};
+
+void String16_FormatInteger(struct String * str, int num, u32 ndigits, int strConvMode, BOOL whichCharset)
+{
+ ASSERT_STR16(str);
+
+ const u16 * charbase;
+ BOOL isNegative = (num < 0);
+
+ if (str->maxsize > ndigits + isNegative)
+ {
+ charbase = (whichCharset == 0) ? UNK_020EE67C : UNK_020EE690;
+ StringSetEmpty(str);
+ if (isNegative)
+ {
+ num *= -1;
+ u16 hyphen = (u16)((whichCharset == 0) ? 0x00F1 : 0x01BE);
+ str->data[str->size++] = hyphen;
+ }
+ u32 dividend = UNK_020EE6A4[ndigits - 1];
+ while (dividend != 0)
+ {
+ u16 digit = (u16)(num / dividend);
+ num -= dividend * digit;
+ if (strConvMode == 2)
+ {
+ u16 value = (u16)((digit < 10) ? charbase[digit] : 0x00E2);
+ str->data[str->size++] = value;
+ }
+ else if (digit != 0 || dividend == 1)
+ {
+ strConvMode = 2;
+ u16 value = (u16)((digit < 10) ? charbase[digit] : 0x00E2);
+ str->data[str->size++] = value;
+ }
+ else if (strConvMode == 1)
+ {
+ u16 value = (u16)((whichCharset == 0) ? 0x0001 : 0x01E2);
+ str->data[str->size++] = value;
+ }
+ dividend /= 10;
+ }
+ str->data[str->size] = EOS;
+ return;
+ }
+ GF_ASSERT(0);
+}
+
+s64 String_atoi(struct String * str, BOOL * flag)
+{
+ s64 ret = 0;
+ s64 pow10 = 1;
+ if (str->size > 18)
+ {
+ return 0;
+ }
+ int ndigits = str->size - 1;
+ while (ndigits >= 0) {
+ // 0
+ s64 digit = str->data[ndigits] - 0x00A2;
+ if (digit >= 10ull)
+ {
+ // 0
+ digit = str->data[ndigits] - 0x0121;
+ if (digit >= 10ull)
+ {
+ *flag = FALSE;
+ return ret;
+ }
+ }
+ digit *= pow10;
+ ret += digit;
+ pow10 *= 10;
+ ndigits--;
+ }
+ *flag = TRUE;
+ return ret;
+}
+
+BOOL StringCompare(struct String * str1, struct String * str2)
+{
+ ASSERT_STR16(str1);
+ ASSERT_STR16(str2);
+
+ for (int i = 0; str1->data[i] == str2->data[i]; i++)
+ {
+ if (str1->data[i] == EOS)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u16 StringGetLength(struct String * str)
+{
+ ASSERT_STR16(str);
+ return str->size;
+}
+
+int StringCountLines(volatile struct String * str)
+{
+ ASSERT_STR16(str);
+
+ int i, nline;
+ for (i = 0, nline = 1; i < str->size; i++)
+ {
+ if (str->data[i] == 0xE000)
+ nline++;
+ }
+ return nline;
+}
+
+void StringGetLineN(struct String * dest, volatile struct String * src, u32 n)
+{
+ ASSERT_STR16(src);
+ ASSERT_STR16(dest);
+
+ int i = 0;
+ if (n != 0)
+ {
+ for (i = 0; i < src->size; i++)
+ {
+ if (src->data[i] == 0xE000 && --n == 0)
+ {
+ i++;
+ break;
+ }
+ }
+ }
+ StringSetEmpty(dest);
+ for (; i < src->size; i++)
+ {
+ u16 c = src->data[i];
+ if (c == 0xE000)
+ break;
+ StrAddChar(dest, c);
+ }
+}
+
+void CopyU16ArrayToString(struct String * str, u16 * buf)
+{
+ ASSERT_STR16(str);
+
+ for (str->size = 0; *buf != EOS;)
+ {
+ if (str->size >= str->maxsize - 1)
+ {
+ GF_ASSERT(0);
+ break;
+ }
+ str->data[str->size++] = *buf++;
+ }
+ str->data[str->size] = EOS;
+}
+
+void CopyU16ArrayToStringN(struct String * str, u16 * buf, u32 length)
+{
+ ASSERT_STR16(str);
+
+ if (length <= str->maxsize)
+ {
+ memcpy(str->data, buf, length * 2);
+ int i;
+ for (i = 0; i < length; i++)
+ {
+ if (str->data[i] == EOS)
+ break;
+ }
+ str->size = (u16)i;
+ if (i == length)
+ {
+ str->data[length - 1] = EOS;
+ }
+ return;
+ }
+ GF_ASSERT(0);
+}
+
+void CopyStringToU16Array(struct String * str, u16 * buf, u32 length)
+{
+ ASSERT_STR16(str);
+
+ if (str->size + 1 <= length)
+ {
+ memcpy(buf, str->data, (u32)((str->size + 1) * 2));
+ return;
+ }
+ GF_ASSERT(0);
+}
+
+u16 * String_c_str(struct String * str)
+{
+ ASSERT_STR16(str);
+
+ return str->data;
+}
+
+void StringCat(struct String * dest, struct String * src)
+{
+ ASSERT_STR16(dest);
+ ASSERT_STR16(src);
+
+ if (dest->size + src->size + 1 <= dest->maxsize)
+ {
+ memcpy(dest->data + dest->size, src->data, (u32)(2 * (src->size + 1)));
+ dest->size += src->size;
+ return;
+ }
+ GF_ASSERT(0);
+}
+
+void StrAddChar(struct String * str, u16 val)
+{
+ ASSERT_STR16(str);
+
+ if (str->size + 1 < str->maxsize)
+ {
+ str->data[str->size++] = val;
+ str->data[str->size] = EOS;
+ return;
+ }
+ GF_ASSERT(0);
+}
+
+void StrUpperFirstChar(struct String * str)
+{
+ ASSERT_STR16(str);
+
+ if (str->size != 0)
+ {
+ // a z
+ if (str->data[0] >= 0x0145 && str->data[0] <= 0x015E)
+ // (a - A)
+ str->data[0] -= 26;
+ }
+}
diff --git a/include/proto.h b/include/proto.h
index 849d6956..b45c2b48 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -6,10 +6,7 @@
#include "pokemon.h" // for struct definitions
#include "string16.h" // for struct definitions
-void StringCopy(u16 * dest, struct String * src);
-void String_dtor(void * ptr);
-void FUN_02021E28(u16 * dest, u16 * src);
-void FUN_02021EF0(const struct String * src, u16 * dest, u32 count);
+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);
diff --git a/include/string16.h b/include/string16.h
index 71880020..255b44b8 100644
--- a/include/string16.h
+++ b/include/string16.h
@@ -10,11 +10,32 @@ struct String
u8 padding[2];
};
+struct UnkStruct_0202199C
+{
+ u8 filler_00[0x70];
+ int (*unk_70)(struct UnkStruct_0202199C *, int);
+};
+
+#define STR16_MAGIC 0xB6F8D2EC
+
struct String * String_ctor(u32 count, u32 heap_id);
-int FUN_02021CE0(struct String *, struct String *);
-int FUN_0206AE00(int x);
-void FUN_02021E8C(struct String *, u16 *, u32); // copy
+BOOL StringCompare(struct String *, struct String *);
+void CopyU16ArrayToStringN(struct String *, u16 *, u32); // copy
void StringSetEmpty(struct String *); // set empty
struct String * StringDup(struct String *, u32 heap_id);
+int StringGetWidth(struct UnkStruct_0202199C * r7, const u16 * arr, u32 r6);
+int StringGetWidthNoSpacing(struct UnkStruct_0202199C * r6, const u16 * arr);
+void String_dtor(struct String * str);
+void StringCopy(struct String * dest, struct String * src);
+void String16_FormatInteger(struct String * str, int num, u32 ndigits, int strConvMode, BOOL whichCharset);
+s64 String_atoi(struct String * str, BOOL * flag);
+u16 StringGetLength(struct String * str);
+int StringCountLines(volatile struct String * str);
+void StringGetLineN(struct String * dest, volatile struct String * src, u32 n);
+void CopyU16ArrayToString(struct String * str, u16 * buf);
+void CopyStringToU16Array(struct String * str, u16 * buf, u32 length);
+u16 * String_c_str(struct String * str);
+void StringCat(struct String * dest, struct String * src);
+void StrUpperFirstChar(struct String * str);
#endif //POKEDIAMOND_STRING16_H