summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/text.s1203
-rw-r--r--data/data_08108E6C.s2
-rw-r--r--include/fileselect.h27
-rw-r--r--include/message.h7
-rw-r--r--include/structures.h10
-rw-r--r--linker.ld1
-rw-r--r--src/fileselect.c4
-rw-r--r--src/menu/kinstone_menu.c22
-rw-r--r--src/message.c22
-rw-r--r--src/text.c603
10 files changed, 647 insertions, 1254 deletions
diff --git a/asm/text.s b/asm/text.s
deleted file mode 100644
index 63c05280..00000000
--- a/asm/text.s
+++ /dev/null
@@ -1,1203 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0805EEB4
-sub_0805EEB4: @ 0x0805EEB4
- push {r4, r5, r6, r7, lr}
- adds r7, r0, #0
- adds r3, r1, #0
- strh r3, [r7, #8]
- movs r0, #0x80
- lsls r0, r0, #0x12
- ldrb r1, [r0, #7]
- cmp r1, #1
- bls _0805EED6
- lsrs r0, r3, #8
- cmp r0, #1
- bne _0805EED6
- movs r0, #0x8c
- lsls r0, r0, #1
- cmp r3, r0
- bhi _0805EED6
- movs r1, #3
-_0805EED6:
- ldr r0, _0805EF14 @ =gUnk_08109214
- lsls r1, r1, #2
- adds r1, r1, r0
- ldr r2, [r1]
- lsrs r0, r3, #8
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x16
- adds r0, r0, r2
- ldr r4, [r0]
- adds r2, r2, r4
- lsls r0, r3, #0x18
- lsrs r0, r0, #0x16
- adds r0, r0, r2
- ldr r4, [r0]
- ldr r0, [r1]
- ldr r1, [r0]
- lsrs r1, r1, #2
- ldr r0, [r2]
- lsrs r6, r0, #2
- movs r5, #0
- ldrh r3, [r7, #8]
- lsrs r0, r3, #8
- cmp r0, r1
- bhs _0805EF0E
- lsls r0, r3, #0x18
- lsrs r0, r0, #0x18
- cmp r0, r6
- blo _0805EF18
-_0805EF0E:
- movs r5, #1
- b _0805EF22
- .align 2, 0
-_0805EF14: .4byte gUnk_08109214
-_0805EF18:
- adds r0, r2, r4
- ldrb r0, [r0]
- cmp r0, #0
- bne _0805EF22
- movs r5, #2
-_0805EF22:
- cmp r5, #2
- bhi _0805EF2E
- cmp r5, #1
- blo _0805EF2E
- ldr r2, _0805EF3C @ =gUnk_08109244
- movs r4, #0
-_0805EF2E:
- adds r2, r2, r4
- adds r0, r7, #0
- adds r1, r2, #0
- bl sub_0805EF40
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0805EF3C: .4byte gUnk_08109244
-
- thumb_func_start sub_0805EF40
-sub_0805EF40: @ 0x0805EF40
- push {r4, lr}
- adds r3, r0, #0
- adds r4, r1, #0
- ldrb r2, [r3]
- movs r0, #1
- ands r0, r2
- cmp r0, #0
- beq _0805EF70
- lsls r1, r2, #0x1b
- lsrs r0, r1, #0x1c
- cmp r0, #6
- bls _0805EF5C
- movs r0, #0
- b _0805EF8A
-_0805EF5C:
- lsrs r0, r1, #0x1c
- adds r0, #1
- movs r1, #0xf
- ands r0, r1
- lsls r0, r0, #1
- movs r1, #0x1f
- rsbs r1, r1, #0
- ands r1, r2
- orrs r1, r0
- strb r1, [r3]
-_0805EF70:
- ldrb r0, [r3]
- lsls r0, r0, #0x1b
- lsrs r0, r0, #0x1c
- lsls r0, r0, #2
- adds r1, r3, #0
- adds r1, #0x10
- adds r1, r1, r0
- str r4, [r1]
- ldrb r0, [r3]
- movs r1, #1
- orrs r0, r1
- strb r0, [r3]
- movs r0, #1
-_0805EF8A:
- pop {r4, pc}
-
- thumb_func_start sub_0805EF8C
-sub_0805EF8C: @ 0x0805EF8C
- push {lr}
- adds r2, r0, #0
- ldrb r1, [r2]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0805EFAE
- lsls r0, r1, #0x1b
- lsrs r0, r0, #0x1c
- lsls r0, r0, #2
- adds r2, #0x10
- adds r2, r2, r0
- ldr r1, [r2]
- ldrb r0, [r1]
- adds r1, #1
- str r1, [r2]
- b _0805EFB0
-_0805EFAE:
- movs r0, #0
-_0805EFB0:
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0805EFB4
-sub_0805EFB4: @ 0x0805EFB4
- push {r4, lr}
- adds r3, r0, #0
- ldrb r2, [r3]
- lsls r1, r2, #0x1b
- lsrs r4, r1, #0x1c
- movs r0, #0x1e
- ands r0, r2
- cmp r0, #0
- beq _0805EFDC
- adds r0, r4, #0
- subs r0, #1
- movs r1, #0xf
- ands r0, r1
- lsls r0, r0, #1
- movs r1, #0x1f
- rsbs r1, r1, #0
- ands r1, r2
- orrs r1, r0
- strb r1, [r3]
- b _0805EFE4
-_0805EFDC:
- movs r0, #2
- rsbs r0, r0, #0
- ands r0, r2
- strb r0, [r3]
-_0805EFE4:
- adds r0, r4, #0
- pop {r4, pc}
-
- thumb_func_start GetCharacter
-GetCharacter: @ 0x0805EFE8
- push {r4, r5, r6, r7, lr}
- adds r6, r0, #0
-_0805EFEC:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r5, r0, #0
- strb r5, [r6, #1]
- movs r7, #0
- cmp r5, #0xf
- bls _0805EFFE
- b _0805F22C
-_0805EFFE:
- lsls r0, r5, #2
- ldr r1, _0805F008 @ =_0805F00C
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805F008: .4byte _0805F00C
-_0805F00C: @ jump table
- .4byte _0805F04C @ case 0
- .4byte _0805F058 @ case 1
- .4byte _0805F06E @ case 2
- .4byte _0805F07A @ case 3
- .4byte _0805F090 @ case 4
- .4byte _0805F130 @ case 5
- .4byte _0805F150 @ case 6
- .4byte _0805F196 @ case 7
- .4byte _0805F1C0 @ case 8
- .4byte _0805F1CC @ case 9
- .4byte _0805F1D8 @ case 10
- .4byte _0805F1DC @ case 11
- .4byte _0805F1EC @ case 12
- .4byte _0805F1FC @ case 13
- .4byte _0805F20C @ case 14
- .4byte _0805F21C @ case 15
-_0805F04C:
- adds r0, r6, #0
- bl sub_0805EFB4
- adds r7, r0, #0
- movs r5, #0
- b _0805F232
-_0805F058:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r0, #0
- strh r4, [r6, #2]
- movs r5, #6
- cmp r4, #0xa
- bls _0805F06A
- b _0805F232
-_0805F06A:
- movs r5, #5
- b _0805F232
-_0805F06E:
- adds r0, r6, #0
- bl sub_0805EF8C
- strh r0, [r6, #2]
- movs r5, #7
- b _0805F232
-_0805F07A:
- adds r0, r6, #0
- bl sub_0805EF8C
- lsls r4, r0, #8
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r4, r0
- strh r4, [r6, #2]
- movs r5, #8
- b _0805F232
-_0805F090:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r0, #0
- cmp r4, #0x15
- bhi _0805F12C
- lsls r0, r4, #2
- ldr r1, _0805F0A8 @ =_0805F0AC
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805F0A8: .4byte _0805F0AC
-_0805F0AC: @ jump table
- .4byte _0805F104 @ case 0
- .4byte _0805F104 @ case 1
- .4byte _0805F104 @ case 2
- .4byte _0805F104 @ case 3
- .4byte _0805F104 @ case 4
- .4byte _0805F104 @ case 5
- .4byte _0805F104 @ case 6
- .4byte _0805F104 @ case 7
- .4byte _0805F104 @ case 8
- .4byte _0805F104 @ case 9
- .4byte _0805F104 @ case 10
- .4byte _0805F104 @ case 11
- .4byte _0805F104 @ case 12
- .4byte _0805F104 @ case 13
- .4byte _0805F104 @ case 14
- .4byte _0805F104 @ case 15
- .4byte _0805F108 @ case 16
- .4byte _0805F114 @ case 17
- .4byte _0805F118 @ case 18
- .4byte _0805F11C @ case 19
- .4byte _0805F120 @ case 20
- .4byte _0805F120 @ case 21
-_0805F104:
- movs r5, #9
- b _0805F12C
-_0805F108:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r0, #0
- movs r5, #0xa
- b _0805F12C
-_0805F114:
- movs r5, #2
- b _0805F12C
-_0805F118:
- movs r5, #3
- b _0805F12C
-_0805F11C:
- movs r5, #4
- b _0805F12C
-_0805F120:
- movs r5, #0xb
- movs r1, #0x14
- eors r1, r4
- rsbs r0, r1, #0
- orrs r0, r1
- lsrs r4, r0, #0x1f
-_0805F12C:
- strh r4, [r6, #2]
- b _0805F232
-_0805F130:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r0, #0
- cmp r4, #0xff
- bne _0805F140
- movs r4, #0
- b _0805F14A
-_0805F140:
- lsls r4, r4, #8
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r4, r0
-_0805F14A:
- strh r4, [r6, #6]
- movs r5, #0xc
- b _0805F232
-_0805F150:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r0, #0
- cmp r4, #4
- bls _0805F162
- cmp r4, #5
- beq _0805F17C
- b _0805EFEC
-_0805F162:
- ldr r1, [r6, #0xc]
- cmp r1, #0
- bne _0805F16A
- ldr r1, _0805F178 @ =gUnk_08109230
-_0805F16A:
- lsls r0, r4, #2
- adds r0, r0, r1
- ldr r1, [r0]
- adds r0, r6, #0
- bl sub_0805EF40
- b _0805EFEC
- .align 2, 0
-_0805F178: .4byte gUnk_08109230
-_0805F17C:
- adds r0, r6, #0
- bl sub_0805EF8C
- lsls r4, r0, #8
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r4, r0
- adds r0, r6, #0
- adds r1, r4, #0
- bl sub_0805EEB4
- b _0805EFEC
-_0805F196:
- adds r0, r6, #0
- bl sub_0805EF8C
- lsls r4, r0, #8
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r4, r4, r0
- ldrb r1, [r6]
- movs r0, #2
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #0x1f
- rsbs r1, r1, #0
- ands r0, r1
- strb r0, [r6]
- adds r0, r6, #0
- adds r1, r4, #0
- bl sub_0805EEB4
- b _0805EFEC
-_0805F1C0:
- adds r0, r6, #0
- bl sub_0805EF8C
- strh r0, [r6, #2]
- movs r5, #0xd
- b _0805F232
-_0805F1CC:
- adds r0, r6, #0
- bl sub_0805EF8C
- strh r0, [r6, #2]
- movs r5, #0xe
- b _0805F232
-_0805F1D8:
- movs r5, #1
- b _0805F232
-_0805F1DC:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r5, r0, #0
- movs r0, #0x80
- lsls r0, r0, #3
- orrs r5, r0
- b _0805F232
-_0805F1EC:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r5, r0, #0
- movs r0, #0xe0
- lsls r0, r0, #3
- orrs r5, r0
- b _0805F232
-_0805F1FC:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r5, r0, #0
- movs r0, #0xa0
- lsls r0, r0, #3
- orrs r5, r0
- b _0805F232
-_0805F20C:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r5, r0, #0
- movs r0, #0xc0
- lsls r0, r0, #3
- orrs r5, r0
- b _0805F232
-_0805F21C:
- adds r0, r6, #0
- bl sub_0805EF8C
- adds r5, r0, #0
- movs r0, #0xc0
- lsls r0, r0, #2
- orrs r5, r0
- b _0805F232
-_0805F22C:
- movs r0, #0x80
- lsls r0, r0, #1
- adds r5, r5, r0
-_0805F232:
- cmp r7, #0
- beq _0805F238
- b _0805EFEC
-_0805F238:
- lsrs r0, r5, #8
- cmp r0, #0
- beq _0805F256
- ldrb r0, [r6]
- lsls r0, r0, #0x19
- lsrs r0, r0, #0x1e
- cmp r0, #0
- beq _0805F254
- cmp r0, #1
- bne _0805F254
- adds r0, r5, #0
- bl sub_0805F9A0
- adds r5, r0, #0
-_0805F254:
- strh r5, [r6, #4]
-_0805F256:
- adds r0, r5, #0
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_0805F25C
-sub_0805F25C: @ 0x0805F25C
- push {lr}
- adds r2, r0, #0
- lsrs r3, r2, #8
- movs r0, #0xf
- ands r3, r0
- movs r0, #0xff
- ands r2, r0
- cmp r3, #8
- bhi _0805F2B6
- lsls r0, r3, #2
- ldr r1, _0805F278 @ =_0805F27C
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805F278: .4byte _0805F27C
-_0805F27C: @ jump table
- .4byte _0805F2A0 @ case 0
- .4byte _0805F2A0 @ case 1
- .4byte _0805F2B6 @ case 2
- .4byte _0805F2B6 @ case 3
- .4byte _0805F2B6 @ case 4
- .4byte _0805F2B4 @ case 5
- .4byte _0805F2B4 @ case 6
- .4byte _0805F2B4 @ case 7
- .4byte _0805F2B4 @ case 8
-_0805F2A0:
- cmp r2, #0x7f
- bls _0805F2B6
- movs r0, #0x80
- lsls r0, r0, #0x12
- ldrb r0, [r0, #7]
- cmp r0, #0
- beq _0805F2B6
- subs r2, #0x80
- movs r3, #2
- b _0805F2B6
-_0805F2B4:
- lsls r2, r2, #1
-_0805F2B6:
- ldr r1, _0805F2C4 @ =gUnk_08109248
- lsls r0, r3, #2
- adds r0, r0, r1
- lsls r1, r2, #6
- ldr r0, [r0]
- adds r0, r0, r1
- pop {pc}
- .align 2, 0
-_0805F2C4: .4byte gUnk_08109248
-
- thumb_func_start sub_0805F2C8
-sub_0805F2C8: @ 0x0805F2C8
- push {r4, r5, lr}
- movs r1, #0
- ldr r4, _0805F2EC @ =gUnk_02036540
- adds r5, r4, #0
-_0805F2D0:
- ldrb r0, [r4]
- lsls r0, r0, #0x1f
- cmp r0, #0
- bne _0805F2F0
- adds r0, r5, #0
- movs r1, #0xc
- bl MemClear
- ldrb r0, [r4]
- movs r1, #1
- orrs r0, r1
- strb r0, [r4]
- adds r0, r5, #0
- b _0805F2FC
- .align 2, 0
-_0805F2EC: .4byte gUnk_02036540
-_0805F2F0:
- adds r4, #0xc
- adds r5, #0xc
- adds r1, #1
- cmp r1, #3
- bls _0805F2D0
- movs r0, #0
-_0805F2FC:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0805F300
-sub_0805F300: @ 0x0805F300
- push {lr}
- adds r2, r0, #0
- movs r1, #0
- ldr r0, _0805F314 @ =gUnk_02036540
-_0805F308:
- cmp r0, r2
- bne _0805F318
- movs r1, #0xc
- bl MemClear
- b _0805F320
- .align 2, 0
-_0805F314: .4byte gUnk_02036540
-_0805F318:
- adds r0, #0xc
- adds r1, #1
- cmp r1, #3
- bls _0805F308
-_0805F320:
- pop {pc}
- .align 2, 0
-
- thumb_func_start GetFontStrWith
-GetFontStrWith: @ 0xGetFontStrWidth
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #0x38
- adds r7, r1, #0
- mov r1, sp
- movs r2, #0x30
- bl MemCopy
- movs r0, #0
- str r0, [sp, #0x34]
- movs r1, #0
- str r1, [sp, #0x30]
- mov sl, r1
- mov r8, r1
- b _0805F34C
-_0805F348:
- cmp r6, #0
- beq _0805F41E
-_0805F34C:
- movs r5, #0
- movs r2, #1
- mov sb, r2
-_0805F352:
- mov r0, sp
- bl GetCharacter
- adds r6, r0, #0
- cmp r6, #0xe
- bhi _0805F3B4
- lsls r0, r6, #2
- ldr r1, _0805F368 @ =_0805F36C
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805F368: .4byte _0805F36C
-_0805F36C: @ jump table
- .4byte _0805F402 @ case 0
- .4byte _0805F402 @ case 1
- .4byte _0805F3FC @ case 2
- .4byte _0805F3FC @ case 3
- .4byte _0805F3FC @ case 4
- .4byte _0805F3FC @ case 5
- .4byte _0805F3FC @ case 6
- .4byte _0805F3FC @ case 7
- .4byte _0805F3FC @ case 8
- .4byte _0805F3FC @ case 9
- .4byte _0805F3FC @ case 10
- .4byte _0805F3AC @ case 11
- .4byte _0805F3A8 @ case 12
- .4byte _0805F3FC @ case 13
- .4byte _0805F3FC @ case 14
-_0805F3A8:
- adds r5, #8
- b _0805F3FC
-_0805F3AC:
- mov r0, sp
- ldrh r0, [r0, #2]
- mov r8, r0
- b _0805F3FC
-_0805F3B4:
- mov r0, r8
- cmp r0, #0
- bne _0805F3DE
- adds r0, r6, #0
- bl sub_0805F25C
- adds r4, r0, #0
- lsrs r0, r6, #8
- cmp r0, #4
- bls _0805F3D2
- ldr r0, [r4, #0x40]
- bl sub_0805F7A0
- lsrs r0, r0, #8
- adds r5, r5, r0
-_0805F3D2:
- ldr r0, [r4]
- bl sub_0805F7A0
- lsrs r0, r0, #8
- adds r5, r5, r0
- b _0805F3EA
-_0805F3DE:
- lsrs r0, r6, #8
- cmp r0, #4
- bls _0805F3E8
- adds r5, #0x10
- b _0805F3EA
-_0805F3E8:
- adds r5, #8
-_0805F3EA:
- mov r0, sp
- ldrb r1, [r0]
- movs r0, #0x60
- ands r0, r1
- cmp r0, #0x20
- bne _0805F3FC
- cmp r5, #1
- bls _0805F3FC
- subs r5, #1
-_0805F3FC:
- mov r1, sb
- cmp r1, #0
- bne _0805F352
-_0805F402:
- cmp r5, sl
- bls _0805F408
- mov sl, r5
-_0805F408:
- cmp r5, #0
- beq _0805F414
- ldr r2, [sp, #0x30]
- adds r2, #1
- str r2, [sp, #0x30]
- b _0805F41A
-_0805F414:
- ldr r0, [sp, #0x34]
- adds r0, #1
- str r0, [sp, #0x34]
-_0805F41A:
- cmp r7, #0
- bne _0805F348
-_0805F41E:
- cmp r7, #0
- bne _0805F426
- mov r0, sl
- b _0805F434
-_0805F426:
- ldr r1, [sp, #0x34]
- lsls r0, r1, #0x18
- ldr r2, [sp, #0x30]
- lsls r1, r2, #0x10
- orrs r0, r1
- mov r1, sl
- orrs r0, r1
-_0805F434:
- add sp, #0x38
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0805F440
-sub_0805F440: @ 0x0805F440
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- movs r1, #0x30
- bl MemClear
- ldr r0, _0805F45C @ =0x0000FFFF
- cmp r5, r0
- bls _0805F460
- adds r0, r4, #0
- adds r1, r5, #0
- bl sub_0805EF40
- b _0805F468
- .align 2, 0
-_0805F45C: .4byte 0x0000FFFF
-_0805F460:
- adds r0, r4, #0
- adds r1, r5, #0
- bl sub_0805EEB4
-_0805F468:
- pop {r4, r5, pc}
- .align 2, 0
-
- thumb_func_start sub_0805F46C
-sub_0805F46C: @ 0x0805F46C
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- sub sp, #0x48
- adds r6, r0, #0
- adds r5, r1, #0
- bl sub_0805F2C8
- mov r8, r0
- cmp r0, #0
- bne _0805F486
- b _0805F5BC
-_0805F486:
- add r4, sp, #0x30
- adds r0, r5, #0
- adds r1, r4, #0
- movs r2, #0x18
- bl MemCopy
- mov r0, sp
- adds r1, r6, #0
- bl sub_0805F440
- mov r3, sp
- ldrb r0, [r4, #0x17]
- movs r1, #3
- ands r1, r0
- lsls r1, r1, #5
- ldrb r2, [r3]
- movs r0, #0x61
- rsbs r0, r0, #0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r4, #0x17]
- lsls r1, r1, #4
- mov r0, r8
- ldrb r2, [r0]
- movs r0, #0xf
- ands r0, r2
- orrs r0, r1
- mov r1, r8
- strb r0, [r1]
- ldrb r0, [r4, #0x12]
- strh r0, [r1, #4]
- ldr r0, [r4, #8]
- str r0, [r1, #8]
- ldrb r0, [r4, #0x15]
- strb r0, [r1, #2]
- ldrb r0, [r4, #0x14]
- strb r0, [r1, #3]
- ldrb r1, [r4, #0x13]
- movs r0, #8
- ands r0, r1
- mov sb, r4
- cmp r0, #0
- beq _0805F59E
- lsrs r0, r1, #4
- ldrb r1, [r4, #0x14]
- ldr r2, [r4, #4]
- bl sub_0805F918
- ldr r0, [r4, #4]
- adds r0, #0xe0
- str r0, [r4, #4]
- mov r0, sp
- movs r1, #1
- bl GetFontStrWith
- lsrs r2, r0, #0x18
- ldrb r1, [r4, #0x16]
- muls r2, r1, r2
- asrs r1, r0, #0x10
- lsls r1, r1, #0x18
- lsrs r1, r1, #0x17
- adds r7, r2, r1
- lsls r0, r0, #0x10
- lsrs r4, r0, #0x10
- adds r1, r4, #0
- mov r2, sb
- ldrb r3, [r2, #0x12]
- cmp r3, r1
- bge _0805F514
- adds r1, r3, #0
-_0805F514:
- adds r4, r1, #7
- movs r2, #8
- rsbs r2, r2, #0
- mov r0, sb
- ldrb r1, [r0, #0x13]
- movs r0, #2
- ands r0, r1
- ands r4, r2
- cmp r0, #0
- bne _0805F52A
- adds r4, r3, #0
-_0805F52A:
- ldr r5, [sp, #0x30]
- adds r0, r5, #0
- adds r0, #0x40
- str r0, [sp, #0x30]
- mov r2, sb
- ldrb r1, [r2, #0x13]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0805F54E
- adds r4, #0xf
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r4, r0
- lsrs r0, r4, #3
- adds r0, #2
- subs r5, r5, r0
- b _0805F554
-_0805F54E:
- adds r0, r5, #0
- adds r0, #0x42
- str r0, [sp, #0x30]
-_0805F554:
- lsrs r4, r4, #3
- mov r3, sb
- ldrh r6, [r3, #0x10]
- adds r0, r5, #0
- adds r1, r4, #0
- adds r2, r7, #0
- adds r3, r6, #0
- bl DispMessageFrame
- adds r5, #2
- mov r1, sb
- ldrh r0, [r1, #0x10]
- adds r0, #7
- strh r0, [r1, #0x10]
- ldrh r0, [r1, #0x10]
- subs r6, r0, #1
- adds r0, r7, #0
- subs r7, #1
- cmp r0, #0
- beq _0805F59E
-_0805F57C:
- adds r1, r5, #0
- adds r1, #0x40
- adds r5, r1, #0
- subs r2, r4, #1
- subs r3, r7, #1
- cmp r4, #0
- ble _0805F596
-_0805F58A:
- strh r6, [r1]
- adds r1, #2
- adds r0, r2, #0
- subs r2, #1
- cmp r0, #0
- bgt _0805F58A
-_0805F596:
- adds r0, r7, #0
- adds r7, r3, #0
- cmp r0, #0
- bne _0805F57C
-_0805F59E:
- ldr r0, _0805F5C8 @ =gUnk_02034330
- movs r1, #0x18
- bl MemClear
-_0805F5A6:
- mov r0, sb
- mov r1, sp
- mov r2, r8
- bl sub_0805F5CC
- lsls r0, r0, #0x10
- cmp r0, #0
- bne _0805F5A6
- mov r0, r8
- bl sub_0805F300
-_0805F5BC:
- movs r0, #0
- add sp, #0x48
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0805F5C8: .4byte gUnk_02034330
-
- thumb_func_start sub_0805F5CC
-sub_0805F5CC: @ 0x0805F5CC
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- adds r6, r1, #0
- adds r5, r2, #0
- ldrb r0, [r4, #0x14]
- bl sub_0805F8F8
- ldr r1, [r4, #8]
- ldrb r2, [r4, #0x12]
- adds r2, #7
- movs r3, #0xfc
- lsls r3, r3, #1
- ands r2, r3
- lsls r2, r2, #3
- bl MemFill32
- adds r0, r6, #0
- movs r1, #0
- bl GetFontStrWith
- adds r2, r0, #0
- ldrb r1, [r4, #0x13]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0805F60E
- adds r0, r2, #1
- lsrs r0, r0, #1
- movs r1, #8
- subs r1, r1, r0
- movs r0, #7
- ands r0, r1
- b _0805F610
-_0805F60E:
- movs r0, #0
-_0805F610:
- strh r0, [r5, #6]
- adds r0, r6, #0
- adds r1, r5, #0
- bl sub_0805F6A4
- adds r2, r0, #0
- cmp r2, #0
- beq _0805F660
- ldrh r1, [r5, #6]
- adds r0, r1, #7
- asrs r5, r0, #3
- ldr r2, [r4]
- ldrb r1, [r4, #0x13]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0805F63A
- adds r0, r5, #1
- lsrs r0, r0, #1
- lsls r0, r0, #1
- subs r2, r2, r0
-_0805F63A:
- ldrh r1, [r4, #0x10]
- adds r0, r2, #0
- adds r2, r5, #0
- bl sub_0805F67C
- strh r0, [r4, #0x10]
- ldr r0, [r4]
- adds r0, #0x80
- str r0, [r4]
- lsls r5, r5, #6
- ldr r0, [r4, #8]
- ldr r1, [r4, #4]
- adds r2, r5, #0
- bl MemCopy
- ldr r0, [r4, #4]
- adds r0, r0, r5
- str r0, [r4, #4]
- b _0805F670
-_0805F660:
- ldrb r0, [r6, #1]
- cmp r0, #0xa
- bne _0805F670
- ldrb r1, [r4, #0x16]
- lsls r1, r1, #6
- ldr r0, [r4]
- adds r0, r0, r1
- str r0, [r4]
-_0805F670:
- ldrb r1, [r6, #1]
- rsbs r0, r1, #0
- orrs r0, r1
- lsrs r0, r0, #0x1f
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_0805F67C
-sub_0805F67C: @ 0x0805F67C
- push {r4, lr}
- adds r3, r0, #0
- subs r2, #1
- movs r0, #1
- rsbs r0, r0, #0
- cmp r2, r0
- beq _0805F6A0
- adds r4, r0, #0
-_0805F68C:
- strh r1, [r3]
- adds r1, #1
- adds r0, r3, #0
- adds r0, #0x40
- strh r1, [r0]
- adds r1, #1
- adds r3, #2
- subs r2, #1
- cmp r2, r4
- bne _0805F68C
-_0805F6A0:
- adds r0, r1, #0
- pop {r4, pc}
-
- thumb_func_start sub_0805F6A4
-sub_0805F6A4: @ 0x0805F6A4
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- movs r6, #0
-_0805F6AC:
- adds r0, r5, #0
- bl GetCharacter
- movs r7, #1
- cmp r0, #0xe
- bhi _0805F746
- lsls r0, r0, #2
- ldr r1, _0805F6C4 @ =_0805F6C8
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0805F6C4: .4byte _0805F6C8
-_0805F6C8: @ jump table
- .4byte _0805F768 @ case 0
- .4byte _0805F768 @ case 1
- .4byte _0805F764 @ case 2
- .4byte _0805F764 @ case 3
- .4byte _0805F764 @ case 4
- .4byte _0805F764 @ case 5
- .4byte _0805F764 @ case 6
- .4byte _0805F704 @ case 7
- .4byte _0805F764 @ case 8
- .4byte _0805F764 @ case 9
- .4byte _0805F764 @ case 10
- .4byte _0805F740 @ case 11
- .4byte _0805F70E @ case 12
- .4byte _0805F764 @ case 13
- .4byte _0805F764 @ case 14
-_0805F704:
- ldrh r0, [r5, #2]
- cmp r0, #0xd
- bhi _0805F764
- strb r0, [r4, #2]
- b _0805F764
-_0805F70E:
- ldr r3, _0805F73C @ =gUnk_02034330
- movs r2, #2
- ldrsb r2, [r3, r2]
- cmp r2, #3
- bhi _0805F732
- adds r0, r2, #1
- strb r0, [r3, #2]
- lsls r2, r2, #1
- adds r0, r3, #0
- adds r0, #0x10
- adds r0, r2, r0
- ldrh r1, [r5, #6]
- strh r1, [r0]
- adds r0, r3, #0
- adds r0, #8
- adds r2, r2, r0
- ldrh r0, [r4, #6]
- strh r0, [r2]
-_0805F732:
- ldrh r0, [r4, #6]
- adds r0, #8
- strh r0, [r4, #6]
- adds r6, #8
- b _0805F764
- .align 2, 0
-_0805F73C: .4byte gUnk_02034330
-_0805F740:
- ldrh r0, [r5, #2]
- strb r0, [r4, #1]
- b _0805F764
-_0805F746:
- adds r1, r4, #0
- bl sub_0805F7DC
- adds r6, r6, r0
- ldrb r1, [r5]
- movs r0, #0x60
- ands r0, r1
- cmp r0, #0x20
- bne _0805F764
- ldrh r0, [r4, #6]
- cmp r0, #1
- bls _0805F764
- subs r6, #1
- subs r0, #1
- strh r0, [r4, #6]
-_0805F764:
- cmp r7, #0
- bne _0805F6AC
-_0805F768:
- adds r0, r6, #0
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0805F76C
-sub_0805F76C: @ 0x0805F76C
- push {r4, lr}
- sub sp, #0x30
- adds r2, r0, #0
- adds r4, r1, #0
- mov r0, sp
- adds r1, r2, #0
- bl sub_0805F440
- mov r3, sp
- ldrb r0, [r4]
- lsrs r0, r0, #4
- movs r1, #3
- ands r1, r0
- lsls r1, r1, #5
- ldrb r2, [r3]
- movs r0, #0x61
- rsbs r0, r0, #0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- mov r0, sp
- adds r1, r4, #0
- bl sub_0805F6A4
- add sp, #0x30
- pop {r4, pc}
-
- thumb_func_start sub_0805F7A0
-sub_0805F7A0: @ 0x0805F7A0
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0xf
- movs r2, #0
- b _0805F7B4
-_0805F7AA:
- lsls r1, r1, #4
- adds r2, #1
- cmp r2, #7
- bhi _0805F7BA
- adds r0, r4, #0
-_0805F7B4:
- ands r0, r1
- cmp r1, r0
- beq _0805F7AA
-_0805F7BA:
- adds r3, r2, #0
- cmp r3, #7
- bhi _0805F7D2
- b _0805F7CA
-_0805F7C2:
- lsls r1, r1, #4
- adds r2, #1
- cmp r2, #7
- bhi _0805F7D2
-_0805F7CA:
- adds r0, r4, #0
- ands r0, r1
- cmp r1, r0
- bne _0805F7C2
-_0805F7D2:
- subs r2, r2, r3
- lsls r0, r2, #8
- orrs r0, r3
- pop {r4, pc}
- .align 2, 0
diff --git a/data/data_08108E6C.s b/data/data_08108E6C.s
index 5e50bd0e..8cad3253 100644
--- a/data/data_08108E6C.s
+++ b/data/data_08108E6C.s
@@ -390,7 +390,7 @@ gUnk_081091F8:: @ 081091F8
gUnk_08109202:: @ 08109202
.incbin "data_08108E6C/gUnk_08109202.bin"
-gUnk_08109214:: @ 08109214
+gTranslations:: @ 08109214
.4byte translation
.4byte translation
.4byte translation
diff --git a/include/fileselect.h b/include/fileselect.h
index 2d4d1122..066e3e88 100644
--- a/include/fileselect.h
+++ b/include/fileselect.h
@@ -23,15 +23,16 @@ static_assert(sizeof(ChooseFileState) == 0x30);
// TODO: This occupies the same memory region as gMenu
extern ChooseFileState gChooseFileState;
-typedef struct {
- u8 filler0[0x1];
- u8 unk1;
- u8 charColor;
- u8 bgColor;
- u16 unk4;
- u16 unk6;
- u8* unk8;
-} struct_02036540;
+// typedef struct {
+// u8 unk00 : 4;
+// u8 unk04 : 4;
+// u8 unk1;
+// u8 charColor;
+// u8 bgColor;
+// u16 unk4;
+// u16 unk6;
+// u8* unk8;
+// } struct_02036540;
extern struct_020227E8 gUnk_020227E8[];
@@ -51,13 +52,13 @@ extern struct_02019EE0 gMapDataBottomSpecial;
// TODO size: 0x8000 from ClearTilemaps?
extern void sub_08056FEC(u32, struct_020227E8*);
-extern void sub_0805F46C(u32, Font*);
+extern u32 sub_0805F46C(u32, Font*);
extern void RecoverUI(u32 bottomPt, u32 topPt);
extern void ClearTilemaps(void);
extern void sub_0805194C(u32);
-extern struct_02036540* sub_0805F2C8(void);
-extern void sub_0805F7DC(u32, struct_02036540*);
-extern void sub_0805F300(struct_02036540*);
+extern WStruct* sub_0805F2C8(void);
+extern u32 sub_0805F7DC(u32, WStruct*);
+extern void sub_0805F300(WStruct*);
extern void sub_08050A64(u32);
extern void sub_08050AFC(u32);
extern void sub_08050384();
diff --git a/include/message.h b/include/message.h
index d0fc84a9..4a450767 100644
--- a/include/message.h
+++ b/include/message.h
@@ -25,14 +25,17 @@ typedef struct {
extern Message gMessage;
typedef struct {
- u8 flags;
+ u8 unk00 : 1;
+ u8 unk01 : 4;
+ u8 unk05 : 2;
+ u8 unk06 : 1;
u8 code; // first byte read
u16 param; // second byte read
u16 extended; // ascii adjusted for jp chars
u16 _6;
u16 textIndex;
void* _c;
- u8 buf[32];
+ const u8* buf[8];
} Token;
typedef struct {
diff --git a/include/structures.h b/include/structures.h
index cfa85d7f..00e83b72 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -222,15 +222,19 @@ extern struct {
static_assert(sizeof(gUnk_02034490) == 0x18);
typedef struct {
- u8 unk0;
+ u8 unk00 : 1;
+ u8 unk01 : 3;
+ u8 unk04 : 4;
u8 unk1;
- u8 unk2;
- u8 unk3;
+ u8 charColor;
+ u8 bgColor;
u16 unk4;
u16 unk6;
void* unk8;
} WStruct;
+static_assert(sizeof(WStruct) == 12);
+
typedef struct {
u8 unk0;
u8 unk1;
diff --git a/linker.ld b/linker.ld
index 49fa4f9a..0c778bb7 100644
--- a/linker.ld
+++ b/linker.ld
@@ -501,7 +501,6 @@ SECTIONS {
src/manager/manager39.o(.text);
src/entity.o(.text);
src/code_0805EC04.o(.text); /* objaffine? */
- asm/text.o(.text);
src/text.o(.text);
src/debug.o(.text);
src/playerItem/playerItem14.o(.text);
diff --git a/src/fileselect.c b/src/fileselect.c
index 4d7268a1..b0ce954b 100644
--- a/src/fileselect.c
+++ b/src/fileselect.c
@@ -296,7 +296,7 @@ static void sub_0805066C(void) {
void sub_0805070C(void) {
u32 i;
int j;
- struct_02036540* var0;
+ WStruct* var0;
char* name;
var0 = sub_0805F2C8();
@@ -322,7 +322,7 @@ void sub_0805070C(void) {
void sub_08050790(void) {
u32 i, j;
- struct_02036540* var0;
+ WStruct* var0;
u32 var1;
var0 = sub_0805F2C8();
diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c
index b9d9ca2a..13d95850 100644
--- a/src/menu/kinstone_menu.c
+++ b/src/menu/kinstone_menu.c
@@ -15,16 +15,6 @@
#include "enemy.h"
#include "functions.h"
-typedef struct {
- u8 filler0[0x1];
- u8 unk1;
- u8 charColor;
- u8 bgColor;
- u16 unk4;
- u16 unk6;
- u8* unk8;
-} struct_02036540;
-
extern u32 sub_08000E44(u32);
extern void sub_080A3B74(void);
extern s32 sub_080A3B48(void);
@@ -32,9 +22,9 @@ extern void sub_0805ECEC(u32, u32, u32, u32);
extern void sub_0801C2F0(u32, u32);
extern void sub_0801E6C8(u32);
extern void sub_0801E798(u32);
-extern struct_02036540* sub_0805F2C8(void);
-extern void sub_0805F300(struct_02036540*);
-extern u32 sub_0805F76C(u8*, struct_02036540*);
+extern WStruct* sub_0805F2C8(void);
+extern void sub_0805F300(WStruct*);
+extern u32 sub_0805F76C(u8*, WStruct*);
typedef struct {
void* sourceAddress;
@@ -55,7 +45,7 @@ extern const u8 gGlobalGfxAndPalettes[];
extern u8 gTextGfxBuffer[];
extern u8 gUnk_02002AC0[];
-u32 sub_080A44E0(struct_02036540*, u8*, u32);
+u32 sub_080A44E0(WStruct*, u8*, u32);
u32 sub_080A4418(u32, u32);
u32 sub_080A43DC(u32);
u32 sub_080A43A8(u32);
@@ -601,7 +591,7 @@ void KinstoneMenu_080A4468(void) {
}
u32 KinstoneMenu_080A4494(void) {
- struct_02036540* psVar1;
+ WStruct* psVar1;
u8* r1;
u32 ret;
@@ -624,7 +614,7 @@ u32 KinstoneMenu_080A4494(void) {
return ret;
}
-u32 sub_080A44E0(struct_02036540* param_1, u8* param_2, u32 param_3) {
+u32 sub_080A44E0(WStruct* param_1, u8* param_2, u32 param_3) {
u32 uVar1;
u32 size;
diff --git a/src/message.c b/src/message.c
index d19e9f9f..e4db0a1e 100644
--- a/src/message.c
+++ b/src/message.c
@@ -31,17 +31,17 @@ enum {
};
extern void WriteBit(u32*, u32);
-extern void sub_0805EF40(Token* tok, const u8*);
+extern bool32 sub_0805EF40(Token* tok, const u8*);
extern void RecoverUI(u32 bottomPt, u32 topPt);
extern void RefreshUI(void);
-extern void sub_0805F918(u32, u32, u32);
+extern void sub_0805F918(u32, u32, void*);
extern u32 DecToHex(u32, u8*, u32);
u32 sub_08056FEC(u32, u8*);
u32 GetCharacter(Token* tok);
extern void sub_0805EEB4(Token* tok, u32 textIdx);
-u16 sub_0805F7DC(u32, u8*);
-u32 GetFontStrWith(u8*, u32);
+u32 sub_0805F7DC(u32, WStruct*);
+u32 GetFontStrWith(Token*, u32);
static void StatusUpdate(u32 status);
@@ -270,7 +270,7 @@ END_NONMATCH
if (gTextRender.renderStatus == RENDER_INIT) {
gTextRender.renderStatus = RENDER_UPDATE;
gTextRender._98.bytes.b1 = 1;
- sub_08056F88(gTextRender.message.unk3, gTextRender._50.unk3);
+ sub_08056F88(gTextRender.message.unk3, gTextRender._50.bgColor);
SoundReq(SFX_TEXTBOX_OPEN);
}
@@ -315,7 +315,7 @@ static u32 MsgUpdate(void) {
}
static void TextDispInit(TextRender* this) {
- if ((gTextRender.curToken.flags & 1) == 0) {
+ if (gTextRender.curToken.unk00 == 0) {
if (gTextRender._98.bytes.b1 == 0) {
StatusUpdate(MSG_DIE);
}
@@ -398,7 +398,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
StatusUpdate(MSG_CLOSE);
break;
case 4:
- this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken.flags, 0)) / 2;
+ this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken, 0)) / 2;
break;
case 5:
gMessage.unk = this->curToken.param;
@@ -427,7 +427,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
break;
case 9:
gTextRender.message.unk3 = this->curToken.param;
- sub_08056F88(this->curToken.param, this->_50.unk3);
+ sub_08056F88(this->curToken.param, this->_50.bgColor);
break;
case 10:
this->message.textWindowPosY = this->curToken.param;
@@ -488,14 +488,14 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
PaletteChange(this, palette);
}
}
- return sub_0805F7DC(chr, &this->_50.unk0);
+ return sub_0805F7DC(chr, &this->_50);
}
END_NONMATCH
/*static*/ void PaletteChange(TextRender* this, u32 id) {
u32 temp = id % 8;
this->_8f = temp;
- this->_50.unk2 = temp;
+ this->_50.charColor = temp;
}
const u8 gUnk_08107C0F[] = { 0x8, 0x1e, 0x4, 0x12, 0x0 };
@@ -813,7 +813,7 @@ void sub_08056F88(u32 unk_1, u32 unk_2) {
uVar1 = unk_1 << 4 | unk_2;
if (gTextRender._9c != uVar1) {
gTextRender._9c = uVar1;
- sub_0805F918(unk_1, unk_2, 0x0600CF60);
+ sub_0805F918(unk_1, unk_2, (void*)0x0600CF60);
}
}
diff --git a/src/text.c b/src/text.c
index 01f8ab2e..10b504f8 100644
--- a/src/text.c
+++ b/src/text.c
@@ -4,6 +4,8 @@
#include "functions.h"
#include "asm.h"
#include "enemy.h"
+#include "message.h"
+#include "fileselect.h"
extern u16 gUnk_081092D4;
extern u8 gUnk_081094CE;
@@ -17,6 +19,8 @@ typedef struct {
extern VStruct gUnk_0810942E[];
extern u32 gUnk_0810926C[];
+extern u32* Translations[];
+extern u32 gUnk_08109244;
typedef struct {
u8 unk0;
@@ -24,6 +28,599 @@ typedef struct {
} UStruct;
void sub_0805F820(WStruct* r0, u32* r1);
+bool32 sub_0805EF40(Token* tok, const u8*);
+void sub_0805F440(Token*, u8*);
+u32 sub_0805F6A4(Token*, WStruct*);
+u32 GetCharacter(Token* tok);
+u32 GetFontStrWith(Token*, u32);
+int sub_0805F67C(short*, int, int);
+void sub_0805F918(u32, u32, void*);
+bool32 sub_0805F5CC(Font*, Token*, WStruct*);
+void sub_0805EEB4(Token*, u32);
+u32 sub_0805EF8C(Token*);
+u32 sub_0805EFB4(Token*);
+u32 sub_0805F9A0(u32);
+
+typedef struct {
+ u16 unk0;
+ s8 unk2;
+ s8 unk3;
+ u8 filler[0x4];
+ u16 unk8[4];
+ u16 unk10[4];
+} struct_gUnk_02034330;
+
+extern struct_gUnk_02034330 gUnk_02034330;
+extern WStruct gUnk_02036540[4];
+extern u32* gUnk_08109248[];
+extern u8* gUnk_08109230[];
+extern u32* gTranslations[];
+extern u32 gUnk_08109244;
+
+void sub_0805EEB4(Token* token, u32 textIndex) {
+ u32 langIndex;
+ u32* puVar2;
+ u8* puVar5;
+ int iVar3;
+ u32 uVar4;
+ u32 uVar6;
+ u32 uVar7;
+
+ token->textIndex = (u16)textIndex;
+ langIndex = gSaveHeader->language;
+ if (((1 < langIndex) && (textIndex >> 8 == 1)) && (textIndex < 0x119)) {
+ langIndex = 3;
+ }
+ puVar2 = gTranslations[langIndex];
+ iVar3 = puVar2[(u8)(textIndex >> 8)];
+ puVar2 = (u32*)((int)puVar2 + iVar3);
+ iVar3 = puVar2[(u8)textIndex];
+ uVar6 = *(gTranslations[langIndex]) >> 2;
+ uVar7 = *puVar2 >> 2;
+ uVar4 = 0;
+ if (((token->textIndex >> 8) >= uVar6) || ((u8)token->textIndex >= uVar7)) {
+ uVar4 = 1;
+ } else {
+ if (*(char*)((int)puVar2 + iVar3) == 0) {
+ uVar4 = 2;
+ }
+ }
+ switch (uVar4) {
+ case 1:
+ case 2:
+ puVar2 = &gUnk_08109244;
+ iVar3 = 0;
+ break;
+ }
+ puVar2 = (u32*)((int)puVar2 + iVar3);
+ sub_0805EF40(token, (u8*)puVar2);
+}
+
+bool32 sub_0805EF40(Token* token, const u8* param_2) {
+ if (token->unk00 != 0) {
+ if (6 < token->unk01) {
+ return 0;
+ }
+ token->unk01++;
+ }
+ token->buf[token->unk01] = param_2;
+ token->unk00 = 1;
+ return 1;
+}
+
+u32 sub_0805EF8C(Token* token) {
+ if (token->unk00 == 0) {
+ return 0;
+ }
+ return (token->buf[token->unk01]++)[0];
+}
+
+u32 sub_0805EFB4(Token* token) {
+ u32 rv = token->unk01;
+
+ if (token->unk01 != 0) {
+ token->unk01--;
+ } else {
+ token->unk00 = 0;
+ }
+ return rv;
+}
+
+u32 GetCharacter(Token* token) {
+ u32 uVar3;
+ u32 code;
+ u32 uVar6;
+ u8** ppuVar7;
+ int iVar8;
+
+ do {
+ code = sub_0805EF8C(token);
+ token->code = (u8)code;
+ iVar8 = 0;
+ switch (code) {
+ case 0:
+ iVar8 = sub_0805EFB4(token);
+ code = 0;
+ break;
+ case 1:
+ uVar6 = sub_0805EF8C(token);
+ token->param = (u16)uVar6;
+ code = 6;
+ if (uVar6 < 0xb) {
+ code = 5;
+ }
+ break;
+ case 2:
+ uVar3 = sub_0805EF8C(token);
+ token->param = uVar3;
+ code = 7;
+ break;
+ case 3:
+ uVar6 = sub_0805EF8C(token) << 8;
+ uVar6 += sub_0805EF8C(token);
+ token->param = uVar6;
+ code = 8;
+ break;
+ case 4:
+ uVar6 = sub_0805EF8C(token);
+ switch (uVar6) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ case 0xf:
+ code = 9;
+ break;
+ case 0x10:
+ uVar6 = sub_0805EF8C(token);
+ code = 10;
+ break;
+ case 0x11:
+ code = 2;
+ break;
+ case 0x12:
+ code = 3;
+ break;
+ case 0x13:
+ code = 4;
+ break;
+ case 0x14:
+ case 0x15:
+ code = 0xb;
+ // This is a comparison to 0 but couldn't make it do the bit trick
+ uVar6 = (-(uVar6 ^ 0x14) | (uVar6 ^ 0x14)) >> 0x1f;
+ }
+ token->param = (u16)uVar6;
+ break;
+ case 5:
+ uVar6 = sub_0805EF8C(token);
+ if (uVar6 == 0xff) {
+ uVar6 = 0;
+ } else {
+ uVar6 <<= 8;
+ uVar6 += sub_0805EF8C(token);
+ }
+ token->_6 = uVar6;
+ code = 0xc;
+ break;
+ case 6:
+ uVar6 = sub_0805EF8C(token);
+ switch (uVar6) {
+ case 0 ... 4:
+ ppuVar7 = (u8**)token->_c;
+ if (ppuVar7 == NULL) {
+ ppuVar7 = gUnk_08109230;
+ }
+ sub_0805EF40(token, ppuVar7[uVar6]);
+ break;
+ case 5:
+ uVar6 = sub_0805EF8C(token) << 8;
+ uVar6 += sub_0805EF8C(token);
+ sub_0805EEB4(token, uVar6);
+ break;
+ default:
+ break;
+ }
+ iVar8 = 1;
+ break;
+ case 7:
+ uVar6 = sub_0805EF8C(token) << 8;
+ uVar6 += sub_0805EF8C(token);
+ token->unk00 = 0;
+ token->unk01 = 0;
+ sub_0805EEB4(token, uVar6);
+ iVar8 = 1;
+ break;
+ case 8:
+ uVar3 = sub_0805EF8C(token);
+ token->param = uVar3;
+ code = 0xd;
+ break;
+ case 9:
+ uVar3 = sub_0805EF8C(token);
+ token->param = uVar3;
+ code = 0xe;
+ break;
+ case 10:
+ code = 1;
+ break;
+ case 0xb:
+ code = sub_0805EF8C(token);
+ code |= 0x400;
+ break;
+ case 0xc:
+ code = sub_0805EF8C(token);
+ code |= 0x700;
+ break;
+ case 0xd:
+ code = sub_0805EF8C(token);
+ code |= 0x500;
+ break;
+ case 0xe:
+ code = sub_0805EF8C(token);
+ code |= 0x600;
+ break;
+ case 0xf:
+ code = sub_0805EF8C(token);
+ code |= 0x300;
+ break;
+ default:
+ code += 0x100;
+ break;
+ }
+ } while (iVar8);
+
+ if (code >> 8 != 0) {
+ switch (token->unk05) {
+ case 0:
+ break;
+ case 1:
+ code = sub_0805F9A0(code);
+ break;
+ }
+ token->extended = (u16)code;
+ }
+ return code;
+}
+
+u32* sub_0805F25C(u32 param_1) {
+ u32 uVar1;
+
+ uVar1 = param_1 >> 8 & 0xf;
+ param_1 = param_1 & 0xff;
+ switch (uVar1) {
+ case 0:
+ case 1:
+ if (0x7f < param_1 && gSaveHeader->language != 0) {
+ param_1 = param_1 - 0x80;
+ uVar1 = 2;
+ }
+ break;
+ case 2:
+ case 3:
+ case 4:
+ break;
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ param_1 = param_1 << 1;
+ break;
+ }
+ return gUnk_08109248[uVar1] + param_1 * 0x10;
+}
+
+WStruct* sub_0805F2C8(void) {
+ u32 uVar2;
+
+ for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) {
+ if ((gUnk_02036540[uVar2].unk00) == 0) {
+ MemClear(&gUnk_02036540[uVar2], sizeof(WStruct));
+ gUnk_02036540[uVar2].unk00 = 1;
+ return &gUnk_02036540[uVar2];
+ }
+ }
+
+ return NULL;
+}
+
+void sub_0805F300(WStruct* param_1) {
+ u32 uVar2;
+
+ for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) {
+ if (&gUnk_02036540[uVar2] == param_1) {
+ MemClear(&gUnk_02036540[uVar2], sizeof(WStruct));
+ return;
+ }
+ }
+}
+
+u32 GetFontStrWith(Token* param_1, u32 param_2) {
+ u32 character;
+ u32* puVar2;
+ u32 uVar3;
+ u32 uVar4;
+ u16 uVar5;
+ u32 rv;
+ u32 r9;
+ Token token;
+ int local_28;
+ int local_24;
+
+ MemCopy(param_1, &token, sizeof(Token));
+ local_24 = 0;
+ local_28 = 0;
+ rv = 0;
+ uVar5 = 0;
+ do {
+ uVar4 = 0;
+ r9 = 1;
+ while (r9) {
+ character = GetCharacter(&token);
+ switch (character) {
+ case 0xc:
+ uVar4 += 8;
+ break;
+ case 0xb:
+ uVar5 = token.param;
+ break;
+ case 0:
+ case 1:
+ r9 = 0;
+ break;
+ case 2 ... 10:
+ case 0xd:
+ case 0xe:
+ break;
+ default:
+ if (uVar5 == 0) {
+ puVar2 = (u32*)sub_0805F25C(character);
+ if (4 < character >> 8) {
+ uVar3 = sub_0805F7A0(puVar2[0x10]);
+ uVar4 += (uVar3 >> 8);
+ }
+ uVar3 = sub_0805F7A0(*puVar2);
+ uVar4 += (uVar3 >> 8);
+ } else if (character >> 8 >= 5) {
+ uVar4 += 0x10;
+ } else {
+ uVar4 += 8;
+ }
+ if (token.unk05 == 1 && uVar4 > 1) {
+ uVar4--;
+ }
+ }
+ }
+ if (uVar4 > rv) {
+ rv = uVar4;
+ }
+ if (uVar4 != 0) {
+ local_28++;
+ } else {
+ local_24++;
+ }
+ } while ((param_2 != 0) && (character != 0));
+
+ if (param_2 != 0) {
+ return local_24 << 0x18 | local_28 << 0x10 | rv;
+ }
+ return rv;
+}
+
+void sub_0805F440(Token* param_1, u8* param_2) {
+ MemClear(param_1, sizeof(Token));
+ if ((u32)param_2 >= 0x10000) {
+ sub_0805EF40(param_1, param_2);
+ } else {
+ sub_0805EEB4(param_1, (u32)param_2);
+ }
+}
+
+u32 sub_0805F46C(u32 param_1, Font* param_2) {
+ u32 uVar1;
+ WStruct* pWVar4;
+ u32 uVar5;
+ u16* puVar6;
+ u32 uVar7;
+ u32 uVar8;
+ u16* puVar9;
+ u32 iVar10;
+ Token token;
+ Font font;
+ u32 fontStr;
+ u32 temp2;
+ u32 temp3;
+
+ pWVar4 = sub_0805F2C8();
+ if (pWVar4 != NULL) {
+ MemCopy(param_2, &font, sizeof(Font));
+ sub_0805F440(&token, (u8*)param_1);
+ token.unk05 = font.stylized & 3;
+ pWVar4->unk04 = font.stylized;
+ pWVar4->unk4 = font.width;
+ pWVar4->unk8 = font.buffer_loc;
+ pWVar4->charColor = font._15;
+ pWVar4->bgColor = font.fill_type;
+ if (font.draw_border) {
+ sub_0805F918(font.border_type, font.fill_type, font.gfx_dest);
+ font.gfx_dest = (void*)((int)font.gfx_dest + 0xe0);
+ fontStr = GetFontStrWith(&token, 1);
+ iVar10 = (fontStr >> 0x18) * (u32)font._16 + ((u8)((int)fontStr >> 0x10) << 1);
+ uVar8 = (u16)fontStr;
+ temp3 = uVar8;
+ if (font.width < (s32)temp3) {
+ temp3 = font.width;
+ }
+ uVar8 = (temp3 + 7);
+ temp2 = ~7;
+ uVar8 = font.sm_border ? uVar8 & temp2 : font.width;
+
+ puVar9 = font.dest;
+ font.dest += 0x20;
+
+ if (font.right_align) {
+ uVar8 = (uVar8 + 0xf) & ~0xf;
+ puVar9 -= (uVar8 >> 4) + 1;
+ } else {
+ font.dest += 1;
+ }
+ uVar8 = uVar8 >> 3;
+ param_1 = font.gfx_src;
+ DispMessageFrame(puVar9, uVar8, iVar10, param_1);
+ puVar9 = puVar9 + 1;
+ font.gfx_src = font.gfx_src + 7;
+ param_1 = font.gfx_src - 1;
+ while (iVar10-- > 0) {
+ puVar9 += 0x20;
+ puVar6 = puVar9;
+ for (uVar5 = uVar8; (int)uVar5-- > 0;) {
+ *puVar6++ = param_1;
+ }
+ }
+ }
+ MemClear(&gUnk_02034330, sizeof(gUnk_02034330));
+ while ((s16)sub_0805F5CC(&font, &token, pWVar4) != 0) {}
+ sub_0805F300(pWVar4);
+ }
+ return 0;
+}
+
+bool32 sub_0805F5CC(Font* param_1, Token* param_2, WStruct* param_3) {
+ u16 uVar2;
+ u32 uVar3;
+ int iVar4;
+ u16* puVar5;
+ u32 fontStr;
+
+ uVar3 = sub_0805F8F8(param_1->fill_type);
+ MemFill32(uVar3, param_1->buffer_loc, ((param_1->width + 7) & 0x1f8) << 3);
+ fontStr = GetFontStrWith(param_2, 0);
+ param_3->unk6 = param_1->right_align ? ((8 - ((fontStr + 1) >> 1)) & 7) : 0;
+
+ puVar5 = (u16*)sub_0805F6A4(param_2, param_3);
+ if (puVar5) {
+ iVar4 = (int)(param_3->unk6 + 7) / 8;
+ puVar5 = param_1->dest;
+ if (param_1->right_align) {
+ puVar5 -= (iVar4 + 1U) >> 1;
+ }
+ param_1->gfx_src = sub_0805F67C(puVar5, param_1->gfx_src, iVar4);
+ param_1->dest += 0x40;
+ iVar4 *= 0x40;
+ MemCopy(param_1->buffer_loc, param_1->gfx_dest, iVar4);
+ param_1->gfx_dest = (void*)((int)param_1->gfx_dest + iVar4);
+ } else {
+ if (param_2->code == 10) {
+ param_1->dest += param_1->_16 * 0x20;
+ }
+ }
+ return param_2->code > 0;
+}
+
+int sub_0805F67C(short* param_1, int param_2, int param_3) {
+ for (param_3--; param_3 != -1; param_3--) {
+ param_1[0] = param_2++;
+ param_1[0x20] = param_2++;
+ param_1++;
+ }
+ return param_2;
+}
+
+u32 sub_0805F6A4(Token* param_1, WStruct* param_2) {
+ u32 uVar1;
+ u32 uVar3;
+ int iVar4;
+ u32 r7;
+
+ iVar4 = 0;
+ r7 = 1;
+ do {
+ uVar1 = GetCharacter(param_1);
+ r7 = 1;
+ switch (uVar1) {
+ case 7:
+ if (param_1->param < 0xe) {
+ param_2->charColor = param_1->param;
+ }
+ break;
+ case 0:
+ case 1:
+ r7 = 0;
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 8:
+ case 9:
+ case 10:
+ case 0xd:
+ case 0xe:
+ break;
+
+ case 0xc:
+ uVar3 = gUnk_02034330.unk2;
+ if (uVar3 < 4) {
+ gUnk_02034330.unk2 = uVar3 + 1;
+ gUnk_02034330.unk10[uVar3] = param_1->_6;
+ gUnk_02034330.unk8[uVar3] = param_2->unk6;
+ }
+ param_2->unk6 += 8;
+ iVar4 += 8;
+ break;
+ case 0xb:
+ param_2->unk1 = param_1->param;
+ break;
+ default:
+ iVar4 += sub_0805F7DC(uVar1, param_2);
+ if ((param_1->unk05 == 1) && (1 < param_2->unk6)) {
+ iVar4--;
+ param_2->unk6 = param_2->unk6 - 1;
+ }
+ break;
+ }
+ } while (r7);
+
+ return iVar4;
+}
+
+u32 sub_0805F76C(u8* param_1, WStruct* param_2) {
+ u32 uVar1;
+ Token local_38;
+
+ sub_0805F440(&local_38, param_1);
+ local_38.unk05 = param_2->unk04 & 3;
+ uVar1 = sub_0805F6A4(&local_38, param_2);
+ return uVar1;
+}
+
+u32 sub_0805F7A0(u32 param_1) {
+ u32 uVar1;
+ u32 uVar2;
+ u32 uVar3;
+
+ uVar1 = 0xf;
+ for (uVar2 = 0; uVar2 < 8; uVar2++) {
+ if (uVar1 != (param_1 & uVar1))
+ break;
+ uVar1 <<= 4;
+ }
+ for (uVar3 = uVar2; (uVar2 < 8 && (uVar1 != (param_1 & uVar1))); uVar1 <<= 4, uVar2++) {}
+ uVar2 -= uVar3;
+ return (uVar2 << 8) | uVar3;
+}
u32 sub_0805F7DC(u32 r0, WStruct* r1) {
u32 temp;
@@ -59,6 +656,7 @@ void sub_0805F820(WStruct* r0, u32* r1) {
u8* temp;
void* temp2;
VStruct* temp3;
+ u32 temp4;
if (r0->unk4 - r0->unk6 > 0) {
sub_08002724(r1, &gUnk_02036A58);
@@ -81,11 +679,12 @@ void sub_0805F820(WStruct* r0, u32* r1) {
puVar8 = &gUnk_02036A58 + uVar6;
temp2 = r0->unk8;
- temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
+ temp = gUnk_0810942E[r0->bgColor].filler0[r0->charColor * 2];
uVar7 = r0->unk6;
r0->unk6 += uVar3;
- if (r0->unk0 / 16 != 1) {
+ temp4 = r0->unk04;
+ if (temp4 != 1) {
while (uVar3-- > 0) {
sub_080026C4(puVar8, temp2, temp, uVar7);
puVar8++;