From dc5acb446e249de3cbfbc152ed7599d4cf15d5cc Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Tue, 22 Mar 2022 01:36:08 +0200 Subject: [PATCH] Decompile the rest of text.c --- asm/text.s | 1203 -------------------------------------- data/data_08108E6C.s | 2 +- include/fileselect.h | 27 +- include/message.h | 7 +- include/structures.h | 10 +- linker.ld | 1 - src/fileselect.c | 4 +- src/menu/kinstone_menu.c | 22 +- src/message.c | 22 +- src/text.c | 603 ++++++++++++++++++- 10 files changed, 647 insertions(+), 1254 deletions(-) delete mode 100644 asm/text.s 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++;