From a7c7f88cd888a1282c03d8b12ec1a51e247f9c10 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Wed, 31 Mar 2021 02:07:06 +0200 Subject: [PATCH 1/3] decomp more textbox stuff --- asm/code_08056418.s | 1262 ----------------- asm/code_0807F0D8.s | 4 +- asm/managerF.s | 4 +- asm/non_matching/textbox/DeleteWindow.inc | 50 + asm/non_matching/textbox/DispMessageFrame.inc | 135 ++ asm/non_matching/textbox/DispString.inc | 52 + asm/non_matching/textbox/sub_080564EC.inc | 10 +- asm/non_matching/textbox/sub_08056750.inc | 319 +++++ asm/non_matching/textbox/sub_08056FEC.inc | 50 + include/functions.h | 4 +- include/structures.h | 10 + include/textbox.h | 61 +- linker.ld | 6 +- src/code_0805F9A0.c | 10 - src/textbox.c | 643 ++++++++- 15 files changed, 1260 insertions(+), 1360 deletions(-) create mode 100644 asm/non_matching/textbox/DeleteWindow.inc create mode 100644 asm/non_matching/textbox/DispMessageFrame.inc create mode 100644 asm/non_matching/textbox/DispString.inc create mode 100644 asm/non_matching/textbox/sub_08056750.inc create mode 100644 asm/non_matching/textbox/sub_08056FEC.inc diff --git a/asm/code_08056418.s b/asm/code_08056418.s index 144005f4..c83ed8a8 100644 --- a/asm/code_08056418.s +++ b/asm/code_08056418.s @@ -6,1268 +6,6 @@ .text - thumb_func_start sub_080566B8 -sub_080566B8: @ 0x080566B8 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x95 - ldrb r0, [r1] - cmp r0, #0 - beq _080566CC - subs r0, #1 - strb r0, [r1] - b _0805674E -_080566CC: - ldr r0, _08056740 @ =gInput - ldrh r1, [r0] - movs r0, #2 - ands r0, r1 - movs r2, #1 - cmp r0, #0 - beq _080566DC - movs r2, #8 -_080566DC: - adds r1, r4, #0 - adds r1, #0x92 - ldrb r0, [r1] - subs r0, r0, r2 - strb r0, [r1] - lsls r0, r0, #0x18 - adds r7, r1, #0 - cmp r0, #0 - bgt _0805674E - movs r5, #0 - ldr r2, _08056744 @ =gUnk_08107C0C -_080566F2: - adds r5, #1 - ldrb r0, [r4, #2] - adds r0, r0, r2 - ldrb r0, [r0] - ldrb r3, [r1] - adds r0, r0, r3 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - ble _080566F2 - movs r6, #0 -_08056708: - adds r0, r4, #0 - bl sub_08056750 - lsls r0, r0, #0x10 - lsrs r1, r0, #0x10 - cmp r1, #0 - beq _08056732 - adds r0, r4, #0 - adds r0, #0x95 - ldrb r0, [r0] - cmp r0, #0 - bne _08056732 - adds r0, r4, #0 - adds r0, #0x8a - ldrb r0, [r0] - cmp r0, #0 - bne _08056732 - adds r6, r6, r1 - subs r5, #1 - cmp r5, #0 - bgt _08056708 -_08056732: - cmp r6, #0 - beq _0805674C - ldr r0, _08056748 @ =gUnk_02022780 - adds r0, #0x9d - movs r1, #1 - strb r1, [r0] - b _0805674E - .align 2, 0 -_08056740: .4byte gInput -_08056744: .4byte gUnk_08107C0C -_08056748: .4byte gUnk_02022780 -_0805674C: - strb r6, [r7] -_0805674E: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08056750 -sub_08056750: @ 0x08056750 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrh r7, [r5, #0x24] - cmp r7, #0 - beq _0805675C - b _0805694C -_0805675C: - adds r4, r5, #0 - adds r4, #0x20 - adds r0, r4, #0 - bl sub_0805EFE8 - adds r7, r0, #0 - cmp r7, #0xe - bls _0805676E - b _08056942 -_0805676E: - lsls r0, r7, #2 - ldr r1, _08056778 @ =_0805677C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08056778: .4byte _0805677C -_0805677C: @ jump table - .4byte _080567B8 @ case 0 - .4byte _080567DE @ case 1 - .4byte _08056802 @ case 2 - .4byte _0805680A @ case 3 - .4byte _08056812 @ case 4 - .4byte _08056838 @ case 5 - .4byte _08056844 @ case 6 - .4byte _08056858 @ case 7 - .4byte _0805688C @ case 8 - .4byte _08056894 @ case 9 - .4byte _080568AC @ case 10 - .4byte _08056942 @ case 11 - .4byte _080568B2 @ case 12 - .4byte _08056914 @ case 13 - .4byte _0805693A @ case 14 -_080567B8: - ldr r0, _080567D4 @ =gUnk_02000040 - ldrb r0, [r0] - cmp r0, #1 - bne _080567D8 - adds r1, r5, #0 - adds r1, #0x89 - movs r0, #5 - strb r0, [r1] - movs r0, #0 - movs r1, #0 - bl sub_08056ABC - b _08056942 - .align 2, 0 -_080567D4: .4byte gUnk_02000040 -_080567D8: - adds r1, r5, #0 - adds r1, #0x89 - b _0805692C -_080567DE: - adds r1, r5, #0 - adds r1, #0x8a - movs r0, #2 - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x98 - ldrb r0, [r0] - cmp r0, #0 - bne _080567F8 - movs r0, #1 - bl sub_08056BDC - b _08056942 -_080567F8: - adds r1, r5, #0 - adds r1, #0x89 - movs r0, #3 - strb r0, [r1] - b _08056942 -_08056802: - movs r0, #3 - bl sub_080564C8 - b _08056942 -_0805680A: - movs r0, #4 - bl sub_080564C8 - b _08056942 -_08056812: - adds r0, r4, #0 - movs r1, #0 - bl sub_GetFontStrWidth - adds r3, r0, #0 - adds r4, r5, #0 - adds r4, #0x56 - adds r0, r5, #0 - adds r0, #0x54 - ldrh r0, [r0] - ldrh r2, [r4] - subs r0, r0, r2 - subs r0, r0, r3 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r0, r0, #1 - adds r2, r2, r0 - strh r2, [r4] - b _08056942 -_08056838: - ldr r1, _08056840 @ =gTextBox - ldrh r0, [r5, #0x22] - strb r0, [r1, #1] - b _08056942 - .align 2, 0 -_08056840: .4byte gTextBox -_08056844: - ldr r0, _08056854 @ =gUnk_0200005C - ldrh r1, [r5, #0x22] - movs r2, #0x1f - ands r1, r2 - bl WriteBit - b _08056942 - .align 2, 0 -_08056854: .4byte gUnk_0200005C -_08056858: - ldrh r3, [r5, #0x22] - cmp r3, #0xe - beq _08056864 - cmp r3, #0xf - beq _08056874 - b _0805687A -_08056864: - adds r0, r5, #0 - adds r0, #0x8f - ldrb r0, [r0] - adds r1, r5, #0 - adds r1, #0x91 - strb r0, [r1] - movs r3, #2 - b _0805687A -_08056874: - adds r0, r5, #0 - adds r0, #0x91 - ldrb r3, [r0] -_0805687A: - adds r1, r5, #0 - adds r1, #0x90 - movs r0, #0 - strb r0, [r1] - adds r0, r5, #0 - adds r1, r3, #0 - bl sub_080569C4 - b _08056942 -_0805688C: - ldrh r0, [r5, #0x22] - bl SoundReq - b _08056942 -_08056894: - ldr r1, _080568A8 @ =gUnk_02022780 - ldrh r0, [r5, #0x22] - strb r0, [r1, #3] - ldrh r0, [r5, #0x22] - adds r1, r5, #0 - adds r1, #0x53 - ldrb r1, [r1] - bl sub_08056F88 - b _08056942 - .align 2, 0 -_080568A8: .4byte gUnk_02022780 -_080568AC: - ldrh r0, [r5, #0x22] - strb r0, [r5, #7] - b _08056942 -_080568B2: - ldr r6, _0805690C @ =gUnk_02000040 - ldrb r0, [r6] - cmp r0, #1 - beq _080568D2 - adds r0, r6, #0 - movs r1, #4 - bl MemClear - ldr r4, _08056910 @ =gUnk_02024030 - adds r0, r4, #0 - movs r1, #0x18 - bl MemClear - movs r0, #1 - strb r0, [r4] - strb r0, [r6] -_080568D2: - ldr r2, _08056910 @ =gUnk_02024030 - movs r0, #2 - ldrsb r0, [r2, r0] - cmp r0, #3 - bgt _08056942 - lsls r0, r0, #1 - adds r1, r2, #0 - adds r1, #0x10 - adds r0, r0, r1 - ldrh r1, [r5, #0x26] - strh r1, [r0] - movs r0, #2 - ldrsb r0, [r2, r0] - lsls r0, r0, #1 - adds r1, r2, #0 - adds r1, #8 - adds r0, r0, r1 - adds r3, r5, #0 - adds r3, #0x56 - ldrh r1, [r3] - strh r1, [r0] - ldrb r0, [r2, #2] - adds r0, #1 - strb r0, [r2, #2] - ldrh r0, [r3] - adds r0, #8 - strh r0, [r3] - b _08056942 - .align 2, 0 -_0805690C: .4byte gUnk_02000040 -_08056910: .4byte gUnk_02024030 -_08056914: - ldrh r3, [r5, #0x22] - cmp r3, #0xfe - beq _08056928 - cmp r3, #0xff - bne _08056932 - adds r1, r5, #0 - adds r1, #0x8e - movs r0, #1 - strb r0, [r1] - b _08056942 -_08056928: - adds r1, r5, #0 - adds r1, #0x8e -_0805692C: - movs r0, #2 - strb r0, [r1] - b _08056942 -_08056932: - adds r0, r5, #0 - adds r0, #0x95 - strb r3, [r0] - b _08056942 -_0805693A: - ldrh r1, [r5, #0x22] - adds r0, r5, #0 - adds r0, #0x94 - strb r1, [r0] -_08056942: - lsrs r0, r7, #8 - cmp r0, #0 - bne _0805694C - movs r0, #0 - b _080569C2 -_0805694C: - ldr r0, _08056960 @ =gUnk_02022780 - adds r0, #0x99 - ldrb r0, [r0] - cmp r0, #2 - beq _08056964 - movs r0, #3 - bl sub_080564C8 - movs r0, #0 - b _080569C2 - .align 2, 0 -_08056960: .4byte gUnk_02022780 -_08056964: - ldr r1, _08056994 @ =gTextBox - ldrb r0, [r1, #1] - cmp r0, #0 - bne _08056970 - movs r0, #0x80 - strb r0, [r1, #1] -_08056970: - movs r0, #0 - strh r0, [r5, #0x24] - lsrs r0, r7, #8 - cmp r0, #7 - bne _08056998 - adds r0, r5, #0 - adds r0, #0x8f - ldrb r0, [r0] - movs r1, #0x80 - adds r2, r5, #0 - adds r2, #0x90 - orrs r1, r0 - strb r1, [r2] - adds r0, r5, #0 - movs r1, #0 - bl sub_080569C4 - b _080569B4 - .align 2, 0 -_08056994: .4byte gTextBox -_08056998: - adds r2, r5, #0 - adds r2, #0x90 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080569B4 - ldrb r3, [r2] - movs r0, #0 - strb r0, [r2] - adds r0, r5, #0 - adds r1, r3, #0 - bl sub_080569C4 -_080569B4: - adds r1, r5, #0 - adds r1, #0x50 - adds r0, r7, #0 - bl sub_0805F7DC - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 -_080569C2: - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080569C4 -sub_080569C4: @ 0x080569C4 - movs r2, #7 - ands r2, r1 - adds r1, r0, #0 - adds r1, #0x8f - strb r2, [r1] - adds r0, #0x52 - strb r2, [r0] - bx lr - - thumb_func_start sub_080569D4 -sub_080569D4: @ 0x080569D4 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r0, _080569F0 @ =gUnk_02024030 - movs r5, #3 - ldrsb r5, [r0, r5] - ldr r0, _080569F4 @ =gInput - ldrh r0, [r0, #2] - cmp r0, #8 - beq _08056A02 - cmp r0, #8 - bgt _080569F8 - cmp r0, #1 - beq _08056A02 - b _08056A6A - .align 2, 0 -_080569F0: .4byte gUnk_02024030 -_080569F4: .4byte gInput -_080569F8: - cmp r0, #0x10 - beq _08056A68 - cmp r0, #0x20 - beq _08056A64 - b _08056A6A -_08056A02: - ldr r0, _08056A18 @ =gUnk_02024030 - lsls r1, r5, #1 - adds r0, #0x10 - adds r1, r1, r0 - ldrh r1, [r1] - cmp r1, #0 - bne _08056A20 - ldr r1, _08056A1C @ =gUnk_08107C14 - adds r0, r6, #0 - adds r0, #0x20 - b _08056A30 - .align 2, 0 -_08056A18: .4byte gUnk_02024030 -_08056A1C: .4byte gUnk_08107C14 -_08056A20: - strh r1, [r6, #8] - adds r4, r6, #0 - adds r4, #0x20 - adds r0, r4, #0 - bl sub_0805EEB4 - ldr r1, _08056A58 @ =gUnk_08107C0F - adds r0, r4, #0 -_08056A30: - bl sub_0805EF40 - ldr r2, _08056A5C @ =gUnk_02000040 - ldr r0, _08056A60 @ =gUnk_02024030 - ldrb r1, [r0, #3] - strb r1, [r2, #1] - movs r1, #3 - strb r1, [r2] - movs r1, #0x18 - bl MemClear - movs r0, #0x6a - bl SoundReq - adds r1, r6, #0 - adds r1, #0x89 - movs r0, #1 - strb r0, [r1] - b _08056A6A - .align 2, 0 -_08056A58: .4byte gUnk_08107C0F -_08056A5C: .4byte gUnk_02000040 -_08056A60: .4byte gUnk_02024030 -_08056A64: - subs r5, #1 - b _08056A6A -_08056A68: - adds r5, #1 -_08056A6A: - ldr r4, _08056A8C @ =gUnk_02024030 - movs r1, #2 - ldrsb r1, [r4, r1] - adds r0, r5, r1 - bl __modsi3 - adds r5, r0, #0 - movs r6, #3 - ldrsb r6, [r4, r6] - cmp r5, r6 - beq _08056A90 - strb r5, [r4, #3] - movs r0, #0x69 - bl SoundReq - movs r1, #1 - b _08056A92 - .align 2, 0 -_08056A8C: .4byte gUnk_02024030 -_08056A90: - movs r1, #0 -_08056A92: - ldr r2, _08056AB4 @ =gUnk_02000040 - ldrb r0, [r2] - cmp r0, #1 - bne _08056AA4 - ldr r1, _08056AB8 @ =gUnk_02024030 - movs r0, #2 - strb r0, [r2] - strb r0, [r1] - movs r1, #1 -_08056AA4: - cmp r1, #0 - beq _08056AB0 - adds r0, r5, #0 - adds r1, r6, #0 - bl sub_08056ABC -_08056AB0: - pop {r4, r5, r6, pc} - .align 2, 0 -_08056AB4: .4byte gUnk_02000040 -_08056AB8: .4byte gUnk_02024030 - - thumb_func_start sub_08056ABC -sub_08056ABC: @ 0x08056ABC - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - ldr r7, _08056B14 @ =gUnk_02022780 - movs r0, #0x56 - adds r0, r0, r7 - mov sb, r0 - ldrh r0, [r0] - mov r8, r0 - ldr r4, _08056B18 @ =gUnk_02024030 - lsls r1, r1, #1 - adds r4, #8 - adds r1, r1, r4 - ldrh r0, [r1] - mov r1, sb - strh r0, [r1] - adds r6, r7, #0 - adds r6, #0x50 - movs r0, #0 - adds r1, r6, #0 - bl sub_0805F8E4 - lsls r5, r5, #1 - adds r5, r5, r4 - ldrh r0, [r5] - mov r1, sb - strh r0, [r1] - movs r0, #1 - adds r1, r6, #0 - bl sub_0805F8E4 - mov r1, r8 - mov r0, sb - strh r1, [r0] - adds r1, r7, #0 - adds r1, #0x9d - movs r0, #1 - strb r0, [r1] - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08056B14: .4byte gUnk_02022780 -_08056B18: .4byte gUnk_02024030 - - thumb_func_start sub_08056B1C -sub_08056B1C: @ 0x08056B1C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _08056B44 @ =gTextBox - movs r0, #0 - strb r0, [r1, #1] - adds r1, r4, #0 - adds r1, #0x94 - ldrb r0, [r1] - adds r5, r0, #0 - cmp r5, #0 - beq _08056B48 - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08056B7A - subs r1, #0xb - movs r0, #4 - b _08056B78 - .align 2, 0 -_08056B44: .4byte gTextBox -_08056B48: - ldr r0, _08056B68 @ =gInput - ldrh r1, [r0, #2] - ldr r0, _08056B6C @ =0x000001F3 - ands r0, r1 - cmp r0, #0 - beq _08056B70 - movs r0, #0x68 - bl SoundReq - adds r0, r4, #0 - adds r0, #0x9a - strb r5, [r0] - adds r1, r4, #0 - adds r1, #0x89 - movs r0, #4 - b _08056B78 - .align 2, 0 -_08056B68: .4byte gInput -_08056B6C: .4byte 0x000001F3 -_08056B70: - adds r1, r4, #0 - adds r1, #0x9a - ldrb r0, [r1] - adds r0, #1 -_08056B78: - strb r0, [r1] -_08056B7A: - pop {r4, r5, pc} - - thumb_func_start sub_08056B7C -sub_08056B7C: @ 0x08056B7C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - bl sub_08056BDC - adds r0, r4, #0 - adds r0, #0x8f - ldrb r0, [r0] - movs r1, #0x40 - orrs r1, r0 - adds r0, r4, #0 - bl sub_080569C4 - adds r4, #0x89 - movs r0, #1 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08056BA0 -sub_08056BA0: @ 0x08056BA0 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08056BD0 @ =gTextBox - movs r0, #0 - strb r0, [r1, #1] - movs r0, #7 - bl sub_08056C54 - adds r4, #0x8e - ldrb r0, [r4] - cmp r0, #1 - beq _08056BCE - cmp r0, #2 - beq _08056BC8 - ldr r0, _08056BD4 @ =gInput - ldrh r1, [r0, #2] - ldr r0, _08056BD8 @ =0x000001F3 - ands r0, r1 - cmp r0, #0 - beq _08056BCE -_08056BC8: - movs r0, #4 - bl sub_080564C8 -_08056BCE: - pop {r4, pc} - .align 2, 0 -_08056BD0: .4byte gTextBox -_08056BD4: .4byte gInput -_08056BD8: .4byte 0x000001F3 - - thumb_func_start sub_08056BDC -sub_08056BDC: @ 0x08056BDC - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _08056C24 @ =gUnk_02022780 - adds r0, r4, #0 - adds r0, #0x98 - strb r5, [r0] - cmp r5, #0 - bne _08056C30 - movs r0, #1 - rsbs r0, r0, #0 - ldr r1, _08056C28 @ =gUnk_02000D00 - movs r2, #0xd0 - lsls r2, r2, #4 - bl MemFill32 - bl sub_08056F70 - adds r1, r4, #0 - adds r1, #0x9e - ldr r0, _08056C2C @ =0x0000F082 - strh r0, [r1] - adds r1, #2 - adds r0, #1 - strh r0, [r1] - adds r1, #2 - adds r0, #0x33 - strh r0, [r1] - adds r1, #2 - adds r0, #1 - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x56 - strh r5, [r0] - subs r1, #0x50 - movs r0, #0xd0 - b _08056C3C - .align 2, 0 -_08056C24: .4byte gUnk_02022780 -_08056C28: .4byte gUnk_02000D00 -_08056C2C: .4byte 0x0000F082 -_08056C30: - adds r1, r4, #0 - adds r1, #0x56 - movs r0, #0xd0 - strh r0, [r1] - subs r1, #2 - adds r0, #0xd0 -_08056C3C: - strh r0, [r1] - ldr r0, _08056C50 @ =gUnk_02022780 - adds r1, r0, #0 - adds r1, #0x8f - ldrb r2, [r1] - movs r1, #0x40 - orrs r1, r2 - bl sub_080569C4 - pop {r4, r5, pc} - .align 2, 0 -_08056C50: .4byte gUnk_02022780 - - thumb_func_start sub_08056C54 -sub_08056C54: @ 0x08056C54 - ldr r2, _08056C60 @ =gTextBox - ldr r1, _08056C64 @ =gUnk_02022780 - strb r0, [r1] - strb r0, [r2] - bx lr - .align 2, 0 -_08056C60: .4byte gTextBox -_08056C64: .4byte gUnk_02022780 - - thumb_func_start DeleteWindow -DeleteWindow: @ 0x08056C68 - push {r4, r5, r6, lr} - ldr r5, _08056CB8 @ =gUnk_02036A38 - ldrb r0, [r5, #1] - cmp r0, #0 - beq _08056CB4 - movs r0, #0 - strb r0, [r5, #1] - ldrb r0, [r5, #5] - lsls r0, r0, #5 - ldrb r1, [r5, #4] - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, _08056CBC @ =gBG0Buffer - adds r1, r0, r1 - ldrb r0, [r5, #7] - adds r0, #2 - movs r6, #0 -_08056C8A: - movs r2, #0 - adds r4, r1, #0 - adds r4, #0x40 - subs r3, r0, #1 -_08056C92: - strh r6, [r1] - adds r1, #2 - adds r2, #1 - ldrb r0, [r5, #6] - adds r0, #2 - cmp r2, r0 - blt _08056C92 - adds r1, r4, #0 - adds r0, r3, #0 - cmp r0, #0 - bgt _08056C8A - ldrb r0, [r5, #5] - ldrb r1, [r5, #7] - bl sub_0801C4A0 - bl sub_0801C494 -_08056CB4: - pop {r4, r5, r6, pc} - .align 2, 0 -_08056CB8: .4byte gUnk_02036A38 -_08056CBC: .4byte gBG0Buffer - - thumb_func_start sub_08056CC0 -sub_08056CC0: @ 0x08056CC0 - push {r4, r5, r6, r7, lr} - movs r7, #0 - ldr r2, _08056CE0 @ =gUnk_02022780 - adds r3, r2, #0 - adds r3, #0x9b - ldrb r1, [r3] - adds r1, r1, r0 - strb r1, [r3] - lsls r1, r1, #0x18 - asrs r1, r1, #0x18 - mov ip, r2 - cmp r1, #0 - bgt _08056CE4 - strb r7, [r3] - b _08056CEC - .align 2, 0 -_08056CE0: .4byte gUnk_02022780 -_08056CE4: - cmp r1, #7 - ble _08056CEE - movs r0, #8 - strb r0, [r3] -_08056CEC: - movs r7, #1 -_08056CEE: - ldr r2, _08056D54 @ =gUnk_02036A40 - mov r4, ip - adds r1, r4, #0 - adds r1, #0x9b - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08056D58 - adds r5, r0, #0 - ldrb r0, [r4, #4] - lsls r0, r0, #1 - muls r0, r5, r0 - lsrs r3, r0, #4 - strb r3, [r2, #6] - movs r6, #1 - adds r0, r3, #0 - ands r0, r6 - ldrb r1, [r4, #4] - cmp r0, #0 - beq _08056D1A - adds r0, r3, #1 - strb r0, [r2, #6] -_08056D1A: - lsrs r1, r1, #1 - ldrb r0, [r4, #6] - adds r1, r1, r0 - ldrb r0, [r2, #6] - lsrs r0, r0, #1 - subs r1, r1, r0 - strb r1, [r2, #4] - ldrb r0, [r4, #5] - lsls r0, r0, #1 - muls r0, r5, r0 - lsrs r3, r0, #4 - strb r3, [r2, #7] - adds r0, r3, #0 - ands r0, r6 - ldrb r1, [r4, #5] - cmp r0, #0 - beq _08056D40 - adds r0, r3, #1 - strb r0, [r2, #7] -_08056D40: - lsrs r1, r1, #1 - mov r3, ip - ldrb r3, [r3, #7] - adds r1, r1, r3 - ldrb r0, [r2, #7] - lsrs r0, r0, #1 - subs r1, r1, r0 - strb r1, [r2, #5] - b _08056D66 - .align 2, 0 -_08056D54: .4byte gUnk_02036A40 -_08056D58: - movs r0, #0xff - strb r0, [r2, #5] - movs r0, #1 - rsbs r0, r0, #0 - strb r0, [r2, #4] - strb r0, [r2, #7] - strb r0, [r2, #6] -_08056D66: - movs r0, #1 - strb r0, [r2, #1] - adds r0, r7, #0 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start CreateWindow -CreateWindow: @ 0x08056D70 - push {r4, lr} - ldr r0, _08056DB4 @ =gUnk_02022780 - adds r0, #0x9b - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _08056DB0 - ldr r4, _08056DB8 @ =gUnk_02036A40 - ldrb r0, [r4, #5] - lsls r0, r0, #5 - ldrb r1, [r4, #4] - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, _08056DBC @ =gBG0Buffer - adds r0, r0, r1 - ldr r3, _08056DC0 @ =0x0000F07B - ldrb r1, [r4, #6] - ldrb r2, [r4, #7] - bl DispMessageFrame - bl DispString - bl DispCursor - ldr r2, _08056DC4 @ =gUnk_02036A38 - ldr r0, [r4] - ldr r1, [r4, #4] - str r0, [r2] - str r1, [r2, #4] - bl sub_0801C494 -_08056DB0: - pop {r4, pc} - .align 2, 0 -_08056DB4: .4byte gUnk_02022780 -_08056DB8: .4byte gUnk_02036A40 -_08056DBC: .4byte gBG0Buffer -_08056DC0: .4byte 0x0000F07B -_08056DC4: .4byte gUnk_02036A38 - - thumb_func_start DispMessageFrame -DispMessageFrame: @ 0x08056DC8 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r7, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - mov r8, r3 - adds r3, r7, #0 - lsls r0, r6, #6 - adds r0, #0x40 - adds r2, r3, r0 - mov r0, r8 - strh r0, [r3] - adds r3, #2 - movs r1, #0x80 - lsls r1, r1, #4 - mov sb, r1 - mov r0, r8 - mov r5, sb - orrs r0, r5 - strh r0, [r2] - adds r2, #2 - cmp r4, #0 - ble _08056E4C - mov r0, r8 - adds r0, #1 - strh r0, [r3] - adds r3, #2 - adds r1, r0, #0 - orrs r1, r5 - strh r1, [r2] - adds r2, #2 - subs r4, #2 - adds r1, r4, #0 - subs r4, #1 - mov ip, r0 - cmp r1, #0 - ble _08056E30 - mov r5, r8 - adds r5, #2 - adds r1, r5, #0 - mov r0, sb - orrs r1, r0 -_08056E20: - strh r5, [r3] - adds r3, #2 - strh r1, [r2] - adds r2, #2 - adds r0, r4, #0 - subs r4, #1 - cmp r0, #0 - bgt _08056E20 -_08056E30: - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r1, #0 - mov r1, ip - orrs r1, r0 - strh r1, [r3] - adds r3, #2 - movs r5, #0xc0 - lsls r5, r5, #4 - adds r0, r5, #0 - mov r1, ip - orrs r1, r0 - strh r1, [r2] - adds r2, #2 -_08056E4C: - movs r0, #0x80 - lsls r0, r0, #3 - adds r5, r0, #0 - mov r0, r8 - orrs r0, r5 - strh r0, [r3] - movs r0, #0xc0 - lsls r0, r0, #4 - adds r1, r0, #0 - mov r0, r8 - orrs r0, r1 - strh r0, [r2] - adds r7, #0x40 - adds r3, #0x40 - cmp r6, #0 - ble _08056EB6 - mov r0, r8 - adds r0, #3 - strh r0, [r7] - adds r1, r0, #0 - orrs r1, r5 - strh r1, [r3] - adds r7, #0x40 - adds r3, #0x40 - subs r6, #2 - adds r1, r6, #0 - subs r6, #1 - adds r2, r0, #0 - cmp r1, #0 - ble _08056EA0 - mov r4, r8 - adds r4, #4 - adds r1, r4, #0 - orrs r1, r5 -_08056E90: - strh r4, [r7] - strh r1, [r3] - adds r7, #0x40 - adds r3, #0x40 - adds r0, r6, #0 - subs r6, #1 - cmp r0, #0 - bgt _08056E90 -_08056EA0: - movs r1, #0x80 - lsls r1, r1, #4 - adds r0, r1, #0 - adds r1, r2, #0 - orrs r1, r0 - strh r1, [r7] - movs r5, #0xc0 - lsls r5, r5, #4 - adds r0, r5, #0 - orrs r2, r0 - strh r2, [r3] -_08056EB6: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start DispString -DispString: @ 0x08056EC0 - push {r4, r5, r6, r7, lr} - ldr r6, _08056F10 @ =gUnk_02036A40 - ldrb r0, [r6, #6] - cmp r0, #0 - beq _08056F0E - ldrb r0, [r6, #7] - cmp r0, #0 - beq _08056F0E - adds r4, r0, #0 - ldrb r0, [r6, #5] - lsls r0, r0, #5 - ldrb r1, [r6, #4] - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, _08056F14 @ =gUnk_02034CB2 - adds r5, r0, r1 - movs r0, #4 - subs r0, r0, r4 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r1, r0, #1 - ldr r7, _08056F18 @ =gUnk_0202281E -_08056EEC: - ldrb r3, [r6, #6] - lsls r0, r1, #1 - adds r0, r0, r7 - ldrh r2, [r0] - adds r5, #0x40 - adds r0, r1, #1 - subs r4, #1 - adds r1, r5, #0 -_08056EFC: - strh r2, [r1] - adds r1, #2 - adds r2, #2 - subs r3, #1 - cmp r3, #0 - bgt _08056EFC - adds r1, r0, #0 - cmp r4, #0 - bne _08056EEC -_08056F0E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08056F10: .4byte gUnk_02036A40 -_08056F14: .4byte gUnk_02034CB2 -_08056F18: .4byte gUnk_0202281E - - thumb_func_start DispCursor -DispCursor: @ 0x08056F1C - push {lr} - ldr r0, _08056F58 @ =gUnk_02022780 - adds r0, #0x98 - ldr r0, [r0] - ldr r1, _08056F5C @ =0x0010FF00 - ands r0, r1 - ldr r1, _08056F60 @ =0x00100200 - cmp r0, r1 - bne _08056F54 - ldr r2, _08056F64 @ =gUnk_02036A40 - ldrb r1, [r2, #5] - lsls r1, r1, #5 - ldrb r0, [r2, #4] - adds r1, r1, r0 - lsls r1, r1, #1 - ldr r0, _08056F68 @ =gBG0Buffer - adds r1, r1, r0 - ldrb r0, [r2, #7] - adds r0, #1 - lsls r0, r0, #5 - subs r0, #2 - ldrb r2, [r2, #6] - adds r0, r0, r2 - lsls r0, r0, #1 - adds r1, r1, r0 - ldr r2, _08056F6C @ =0x0000F080 - adds r0, r2, #0 - strh r0, [r1] -_08056F54: - pop {pc} - .align 2, 0 -_08056F58: .4byte gUnk_02022780 -_08056F5C: .4byte 0x0010FF00 -_08056F60: .4byte 0x00100200 -_08056F64: .4byte gUnk_02036A40 -_08056F68: .4byte gBG0Buffer -_08056F6C: .4byte 0x0000F080 - - thumb_func_start sub_08056F70 -sub_08056F70: @ 0x08056F70 - push {lr} - ldr r0, _08056F80 @ =gUnk_02000D00 - ldr r1, _08056F84 @ =0x0600D040 - movs r2, #0xd0 - lsls r2, r2, #4 - bl LoadResourceAsync - pop {pc} - .align 2, 0 -_08056F80: .4byte gUnk_02000D00 -_08056F84: .4byte 0x0600D040 - - thumb_func_start sub_08056F88 -sub_08056F88: @ 0x08056F88 - push {r4, lr} - adds r3, r0, #0 - adds r4, r1, #0 - cmp r3, #0xf - bls _08056F94 - movs r3, #0 -_08056F94: - lsls r2, r3, #4 - orrs r2, r4 - ldr r0, _08056FB4 @ =gUnk_02022780 - adds r1, r0, #0 - adds r1, #0x9c - ldrb r0, [r1] - cmp r0, r2 - beq _08056FB0 - strb r2, [r1] - ldr r2, _08056FB8 @ =0x0600CF60 - adds r0, r3, #0 - adds r1, r4, #0 - bl sub_0805F918 -_08056FB0: - pop {r4, pc} - .align 2, 0 -_08056FB4: .4byte gUnk_02022780 -_08056FB8: .4byte 0x0600CF60 - - thumb_func_start sub_08056FBC -sub_08056FBC: @ 0x08056FBC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x68 - bl sub_08056FEC - ldr r0, [r4, #0x14] - adds r1, r4, #0 - adds r1, #0x70 - bl sub_08056FEC - ldr r0, [r4, #0x18] - adds r1, r4, #0 - adds r1, #0x78 - bl sub_08056FEC - ldr r0, [r4, #0x1c] - adds r1, r4, #0 - adds r1, #0x80 - bl sub_08056FEC - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08056FEC -sub_08056FEC: @ 0x08056FEC - push {r4, r5, r6, r7, lr} - sub sp, #8 - adds r2, r0, #0 - adds r5, r1, #0 - bl sub_0801D51C - adds r2, r0, #0 - ldr r0, _08057040 @ =0x0FFFFFFF - ands r2, r0 - movs r4, #0 - movs r3, #0xf -_08057002: - mov r0, sp - adds r1, r0, r4 - adds r0, r2, #0 - ands r0, r3 - strb r0, [r1] - adds r4, #1 - lsrs r2, r2, #4 - cmp r2, #0 - bne _08057002 - movs r3, #0 - subs r2, r4, #1 - cmp r2, #0 - blt _08057032 - movs r6, #0x30 -_0805701E: - adds r1, r5, r3 - mov r7, sp - adds r0, r7, r2 - ldrb r0, [r0] - orrs r0, r6 - strb r0, [r1] - adds r3, #1 - subs r2, #1 - cmp r2, #0 - bge _0805701E -_08057032: - adds r1, r5, r3 - movs r0, #0 - strb r0, [r1] - adds r0, r4, #0 - add sp, #8 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08057040: .4byte 0x0FFFFFFF - thumb_func_start sub_08057044 sub_08057044: @ 0x08057044 push {r4, r5, lr} diff --git a/asm/code_0807F0D8.s b/asm/code_0807F0D8.s index 22e915bf..5e4b35af 100644 --- a/asm/code_0807F0D8.s +++ b/asm/code_0807F0D8.s @@ -1241,7 +1241,7 @@ sub_0807F970: @ 0x0807F970 push {lr} adds r2, r1, #0 movs r3, #0 - ldr r1, _0807F988 @ =gUnk_02022780 + ldr r1, _0807F988 @ =gCurrentTextBox ldr r0, [r2, #4] ldrh r1, [r1, #0x28] cmp r0, r1 @@ -1251,7 +1251,7 @@ _0807F982: str r3, [r2, #0x14] pop {pc} .align 2, 0 -_0807F988: .4byte gUnk_02022780 +_0807F988: .4byte gCurrentTextBox thumb_func_start sub_0807F98C sub_0807F98C: @ 0x0807F98C diff --git a/asm/managerF.s b/asm/managerF.s index 1e268250..cded2d58 100644 --- a/asm/managerF.s +++ b/asm/managerF.s @@ -618,7 +618,7 @@ sub_08059368: @ 0x08059368 adds r2, r0, #0 movs r0, #1 strb r0, [r2, #0xc] - ldr r1, _08059388 @ =gUnk_02022780 + ldr r1, _08059388 @ =gCurrentTextBox ldrh r0, [r2, #0x3c] ldrh r1, [r1, #0x28] cmp r0, r1 @@ -629,7 +629,7 @@ sub_08059368: @ 0x08059368 _08059384: pop {pc} .align 2, 0 -_08059388: .4byte gUnk_02022780 +_08059388: .4byte gCurrentTextBox thumb_func_start sub_0805938C sub_0805938C: @ 0x0805938C diff --git a/asm/non_matching/textbox/DeleteWindow.inc b/asm/non_matching/textbox/DeleteWindow.inc new file mode 100644 index 00000000..5233214c --- /dev/null +++ b/asm/non_matching/textbox/DeleteWindow.inc @@ -0,0 +1,50 @@ + + .section .text + + .syntax unified + + push {r4, r5, r6, lr} + ldr r5, _08056CB8 @ =gCurrentWindow + ldrb r0, [r5, #1] + cmp r0, #0 + beq _08056CB4 + movs r0, #0 + strb r0, [r5, #1] + ldrb r0, [r5, #5] + lsls r0, r0, #5 + ldrb r1, [r5, #4] + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r1, _08056CBC @ =gBG0Buffer + adds r1, r0, r1 + ldrb r0, [r5, #7] + adds r0, #2 + movs r6, #0 +_08056C8A: + movs r2, #0 + adds r4, r1, #0 + adds r4, #0x40 + subs r3, r0, #1 +_08056C92: + strh r6, [r1] + adds r1, #2 + adds r2, #1 + ldrb r0, [r5, #6] + adds r0, #2 + cmp r2, r0 + blt _08056C92 + adds r1, r4, #0 + adds r0, r3, #0 + cmp r0, #0 + bgt _08056C8A + ldrb r0, [r5, #5] + ldrb r1, [r5, #7] + bl sub_0801C4A0 + bl sub_0801C494 +_08056CB4: + pop {r4, r5, r6, pc} + .align 2, 0 +_08056CB8: .4byte gCurrentWindow +_08056CBC: .4byte gBG0Buffer + + .syntax divided diff --git a/asm/non_matching/textbox/DispMessageFrame.inc b/asm/non_matching/textbox/DispMessageFrame.inc new file mode 100644 index 00000000..f7d118df --- /dev/null +++ b/asm/non_matching/textbox/DispMessageFrame.inc @@ -0,0 +1,135 @@ + + .syntax unified + + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r7, r0, #0 + adds r4, r1, #0 + adds r6, r2, #0 + mov r8, r3 + adds r3, r7, #0 + lsls r0, r6, #6 + adds r0, #0x40 + adds r2, r3, r0 + mov r0, r8 + strh r0, [r3] + adds r3, #2 + movs r1, #0x80 + lsls r1, r1, #4 + mov sb, r1 + mov r0, r8 + mov r5, sb + orrs r0, r5 + strh r0, [r2] + adds r2, #2 + cmp r4, #0 + ble _08056E4C + mov r0, r8 + adds r0, #1 + strh r0, [r3] + adds r3, #2 + adds r1, r0, #0 + orrs r1, r5 + strh r1, [r2] + adds r2, #2 + subs r4, #2 + adds r1, r4, #0 + subs r4, #1 + mov ip, r0 + cmp r1, #0 + ble _08056E30 + mov r5, r8 + adds r5, #2 + adds r1, r5, #0 + mov r0, sb + orrs r1, r0 +_08056E20: + strh r5, [r3] + adds r3, #2 + strh r1, [r2] + adds r2, #2 + adds r0, r4, #0 + subs r4, #1 + cmp r0, #0 + bgt _08056E20 +_08056E30: + movs r1, #0x80 + lsls r1, r1, #3 + adds r0, r1, #0 + mov r1, ip + orrs r1, r0 + strh r1, [r3] + adds r3, #2 + movs r5, #0xc0 + lsls r5, r5, #4 + adds r0, r5, #0 + mov r1, ip + orrs r1, r0 + strh r1, [r2] + adds r2, #2 +_08056E4C: + movs r0, #0x80 + lsls r0, r0, #3 + adds r5, r0, #0 + mov r0, r8 + orrs r0, r5 + strh r0, [r3] + movs r0, #0xc0 + lsls r0, r0, #4 + adds r1, r0, #0 + mov r0, r8 + orrs r0, r1 + strh r0, [r2] + adds r7, #0x40 + adds r3, #0x40 + cmp r6, #0 + ble _08056EB6 + mov r0, r8 + adds r0, #3 + strh r0, [r7] + adds r1, r0, #0 + orrs r1, r5 + strh r1, [r3] + adds r7, #0x40 + adds r3, #0x40 + subs r6, #2 + adds r1, r6, #0 + subs r6, #1 + adds r2, r0, #0 + cmp r1, #0 + ble _08056EA0 + mov r4, r8 + adds r4, #4 + adds r1, r4, #0 + orrs r1, r5 +_08056E90: + strh r4, [r7] + strh r1, [r3] + adds r7, #0x40 + adds r3, #0x40 + adds r0, r6, #0 + subs r6, #1 + cmp r0, #0 + bgt _08056E90 +_08056EA0: + movs r1, #0x80 + lsls r1, r1, #4 + adds r0, r1, #0 + adds r1, r2, #0 + orrs r1, r0 + strh r1, [r7] + movs r5, #0xc0 + lsls r5, r5, #4 + adds r0, r5, #0 + orrs r2, r0 + strh r2, [r3] +_08056EB6: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + + .syntax divided diff --git a/asm/non_matching/textbox/DispString.inc b/asm/non_matching/textbox/DispString.inc new file mode 100644 index 00000000..c61d52ec --- /dev/null +++ b/asm/non_matching/textbox/DispString.inc @@ -0,0 +1,52 @@ + + .syntax unified + + push {r4, r5, r6, r7, lr} + ldr r6, _08056F10 @ =gNewWindow + ldrb r0, [r6, #6] + cmp r0, #0 + beq _08056F0E + ldrb r0, [r6, #7] + cmp r0, #0 + beq _08056F0E + adds r4, r0, #0 + ldrb r0, [r6, #5] + lsls r0, r0, #5 + ldrb r1, [r6, #4] + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r1, _08056F14 @ =gUnk_02034CB2 + adds r5, r0, r1 + movs r0, #4 + subs r0, r0, r4 + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r1, r0, #1 + ldr r7, _08056F18 @ =gUnk_0202281E +_08056EEC: + ldrb r3, [r6, #6] + lsls r0, r1, #1 + adds r0, r0, r7 + ldrh r2, [r0] + adds r5, #0x40 + adds r0, r1, #1 + subs r4, #1 + adds r1, r5, #0 +_08056EFC: + strh r2, [r1] + adds r1, #2 + adds r2, #2 + subs r3, #1 + cmp r3, #0 + bgt _08056EFC + adds r1, r0, #0 + cmp r4, #0 + bne _08056EEC +_08056F0E: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08056F10: .4byte gNewWindow +_08056F14: .4byte gUnk_02034CB2 +_08056F18: .4byte gUnk_0202281E + + .syntax divided diff --git a/asm/non_matching/textbox/sub_080564EC.inc b/asm/non_matching/textbox/sub_080564EC.inc index e76e5fa6..dd505979 100644 --- a/asm/non_matching/textbox/sub_080564EC.inc +++ b/asm/non_matching/textbox/sub_080564EC.inc @@ -1,12 +1,12 @@ .syntax unified push {r4, lr} - ldr r0, _08056598 @ =gUnk_02036A40 + ldr r0, _08056598 @ =gNewWindow movs r1, #8 bl MemClear ldr r0, _0805659C @ =gUnk_02024030 movs r1, #0x18 bl MemClear - ldr r4, _080565A0 @ =gUnk_02022780 + ldr r4, _080565A0 @ =gCurrentTextBox adds r0, r4, #0 movs r1, #0xa8 bl MemClear @@ -61,7 +61,7 @@ _08056560: strb r0, [r3, #1] movs r0, #0 strb r0, [r3, #2] - ldr r4, _080565A0 @ =gUnk_02022780 + ldr r4, _080565A0 @ =gCurrentTextBox adds r0, r4, #0 bl sub_08056FBC ldr r0, _080565AC @ =gUnk_08107BE0 @@ -80,9 +80,9 @@ _08056560: movs r0, #1 pop {r4, pc} .align 2, 0 -_08056598: .4byte gUnk_02036A40 +_08056598: .4byte gNewWindow _0805659C: .4byte gUnk_02024030 -_080565A0: .4byte gUnk_02022780 +_080565A0: .4byte gCurrentTextBox _080565A4: .4byte gTextBox _080565A8: .4byte gSave _080565AC: .4byte gUnk_08107BE0 diff --git a/asm/non_matching/textbox/sub_08056750.inc b/asm/non_matching/textbox/sub_08056750.inc new file mode 100644 index 00000000..fafe63d6 --- /dev/null +++ b/asm/non_matching/textbox/sub_08056750.inc @@ -0,0 +1,319 @@ + + .section .text + + .syntax unified + + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + ldrh r7, [r5, #0x24] + cmp r7, #0 + beq _0805675C + b _0805694C +_0805675C: + adds r4, r5, #0 + adds r4, #0x20 + adds r0, r4, #0 + bl sub_0805EFE8 + adds r7, r0, #0 + cmp r7, #0xe + bls _0805676E + b _08056942 +_0805676E: + lsls r0, r7, #2 + ldr r1, _08056778 @ =_0805677C + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08056778: .4byte _0805677C +_0805677C: @ jump table + .4byte _080567B8 @ case 0 + .4byte _080567DE @ case 1 + .4byte _08056802 @ case 2 + .4byte _0805680A @ case 3 + .4byte _08056812 @ case 4 + .4byte _08056838 @ case 5 + .4byte _08056844 @ case 6 + .4byte _08056858 @ case 7 + .4byte _0805688C @ case 8 + .4byte _08056894 @ case 9 + .4byte _080568AC @ case 10 + .4byte _08056942 @ case 11 + .4byte _080568B2 @ case 12 + .4byte _08056914 @ case 13 + .4byte _0805693A @ case 14 +_080567B8: + ldr r0, _080567D4 @ =gUnk_02000040 + ldrb r0, [r0] + cmp r0, #1 + bne _080567D8 + adds r1, r5, #0 + adds r1, #0x89 + movs r0, #5 + strb r0, [r1] + movs r0, #0 + movs r1, #0 + bl sub_08056ABC + b _08056942 + .align 2, 0 +_080567D4: .4byte gUnk_02000040 +_080567D8: + adds r1, r5, #0 + adds r1, #0x89 + b _0805692C +_080567DE: + adds r1, r5, #0 + adds r1, #0x8a + movs r0, #2 + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0x98 + ldrb r0, [r0] + cmp r0, #0 + bne _080567F8 + movs r0, #1 + bl sub_08056BDC + b _08056942 +_080567F8: + adds r1, r5, #0 + adds r1, #0x89 + movs r0, #3 + strb r0, [r1] + b _08056942 +_08056802: + movs r0, #3 + bl sub_080564C8 + b _08056942 +_0805680A: + movs r0, #4 + bl sub_080564C8 + b _08056942 +_08056812: + adds r0, r4, #0 + movs r1, #0 + bl sub_GetFontStrWidth + adds r3, r0, #0 + adds r4, r5, #0 + adds r4, #0x56 + adds r0, r5, #0 + adds r0, #0x54 + ldrh r0, [r0] + ldrh r2, [r4] + subs r0, r0, r2 + subs r0, r0, r3 + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r0, r0, #1 + adds r2, r2, r0 + strh r2, [r4] + b _08056942 +_08056838: + ldr r1, _08056840 @ =gTextBox + ldrh r0, [r5, #0x22] + strb r0, [r1, #1] + b _08056942 + .align 2, 0 +_08056840: .4byte gTextBox +_08056844: + ldr r0, _08056854 @ =gUnk_0200005C + ldrh r1, [r5, #0x22] + movs r2, #0x1f + ands r1, r2 + bl WriteBit + b _08056942 + .align 2, 0 +_08056854: .4byte gUnk_0200005C +_08056858: + ldrh r3, [r5, #0x22] + cmp r3, #0xe + beq _08056864 + cmp r3, #0xf + beq _08056874 + b _0805687A +_08056864: + adds r0, r5, #0 + adds r0, #0x8f + ldrb r0, [r0] + adds r1, r5, #0 + adds r1, #0x91 + strb r0, [r1] + movs r3, #2 + b _0805687A +_08056874: + adds r0, r5, #0 + adds r0, #0x91 + ldrb r3, [r0] +_0805687A: + adds r1, r5, #0 + adds r1, #0x90 + movs r0, #0 + strb r0, [r1] + adds r0, r5, #0 + adds r1, r3, #0 + bl sub_080569C4 + b _08056942 +_0805688C: + ldrh r0, [r5, #0x22] + bl SoundReq + b _08056942 +_08056894: + ldr r1, _080568A8 @ =gCurrentTextBox + ldrh r0, [r5, #0x22] + strb r0, [r1, #3] + ldrh r0, [r5, #0x22] + adds r1, r5, #0 + adds r1, #0x53 + ldrb r1, [r1] + bl sub_08056F88 + b _08056942 + .align 2, 0 +_080568A8: .4byte gCurrentTextBox +_080568AC: + ldrh r0, [r5, #0x22] + strb r0, [r5, #7] + b _08056942 +_080568B2: + ldr r6, _0805690C @ =gUnk_02000040 + ldrb r0, [r6] + cmp r0, #1 + beq _080568D2 + adds r0, r6, #0 + movs r1, #4 + bl MemClear + ldr r4, _08056910 @ =gUnk_02024030 + adds r0, r4, #0 + movs r1, #0x18 + bl MemClear + movs r0, #1 + strb r0, [r4] + strb r0, [r6] +_080568D2: + ldr r2, _08056910 @ =gUnk_02024030 + movs r0, #2 + ldrsb r0, [r2, r0] + cmp r0, #3 + bgt _08056942 + lsls r0, r0, #1 + adds r1, r2, #0 + adds r1, #0x10 + adds r0, r0, r1 + ldrh r1, [r5, #0x26] + strh r1, [r0] + movs r0, #2 + ldrsb r0, [r2, r0] + lsls r0, r0, #1 + adds r1, r2, #0 + adds r1, #8 + adds r0, r0, r1 + adds r3, r5, #0 + adds r3, #0x56 + ldrh r1, [r3] + strh r1, [r0] + ldrb r0, [r2, #2] + adds r0, #1 + strb r0, [r2, #2] + ldrh r0, [r3] + adds r0, #8 + strh r0, [r3] + b _08056942 + .align 2, 0 +_0805690C: .4byte gUnk_02000040 +_08056910: .4byte gUnk_02024030 +_08056914: + ldrh r3, [r5, #0x22] + cmp r3, #0xfe + beq _08056928 + cmp r3, #0xff + bne _08056932 + adds r1, r5, #0 + adds r1, #0x8e + movs r0, #1 + strb r0, [r1] + b _08056942 +_08056928: + adds r1, r5, #0 + adds r1, #0x8e +_0805692C: + movs r0, #2 + strb r0, [r1] + b _08056942 +_08056932: + adds r0, r5, #0 + adds r0, #0x95 + strb r3, [r0] + b _08056942 +_0805693A: + ldrh r1, [r5, #0x22] + adds r0, r5, #0 + adds r0, #0x94 + strb r1, [r0] +_08056942: + lsrs r0, r7, #8 + cmp r0, #0 + bne _0805694C + movs r0, #0 + b _080569C2 +_0805694C: + ldr r0, _08056960 @ =gCurrentTextBox + adds r0, #0x99 + ldrb r0, [r0] + cmp r0, #2 + beq _08056964 + movs r0, #3 + bl sub_080564C8 + movs r0, #0 + b _080569C2 + .align 2, 0 +_08056960: .4byte gCurrentTextBox +_08056964: + ldr r1, _08056994 @ =gTextBox + ldrb r0, [r1, #1] + cmp r0, #0 + bne _08056970 + movs r0, #0x80 + strb r0, [r1, #1] +_08056970: + movs r0, #0 + strh r0, [r5, #0x24] + lsrs r0, r7, #8 + cmp r0, #7 + bne _08056998 + adds r0, r5, #0 + adds r0, #0x8f + ldrb r0, [r0] + movs r1, #0x80 + adds r2, r5, #0 + adds r2, #0x90 + orrs r1, r0 + strb r1, [r2] + adds r0, r5, #0 + movs r1, #0 + bl sub_080569C4 + b _080569B4 + .align 2, 0 +_08056994: .4byte gTextBox +_08056998: + adds r2, r5, #0 + adds r2, #0x90 + ldrb r1, [r2] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080569B4 + ldrb r3, [r2] + movs r0, #0 + strb r0, [r2] + adds r0, r5, #0 + adds r1, r3, #0 + bl sub_080569C4 +_080569B4: + adds r1, r5, #0 + adds r1, #0x50 + adds r0, r7, #0 + bl sub_0805F7DC + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 +_080569C2: + pop {r4, r5, r6, r7, pc} + + .syntax divided diff --git a/asm/non_matching/textbox/sub_08056FEC.inc b/asm/non_matching/textbox/sub_08056FEC.inc new file mode 100644 index 00000000..aa1b66b2 --- /dev/null +++ b/asm/non_matching/textbox/sub_08056FEC.inc @@ -0,0 +1,50 @@ + + .syntax unified + + push {r4, r5, r6, r7, lr} + sub sp, #8 + adds r2, r0, #0 + adds r5, r1, #0 + bl sub_0801D51C + adds r2, r0, #0 + ldr r0, _08057040 @ =0x0FFFFFFF + ands r2, r0 + movs r4, #0 + movs r3, #0xf +_08057002: + mov r0, sp + adds r1, r0, r4 + adds r0, r2, #0 + ands r0, r3 + strb r0, [r1] + adds r4, #1 + lsrs r2, r2, #4 + cmp r2, #0 + bne _08057002 + movs r3, #0 + subs r2, r4, #1 + cmp r2, #0 + blt _08057032 + movs r6, #0x30 +_0805701E: + adds r1, r5, r3 + mov r7, sp + adds r0, r7, r2 + ldrb r0, [r0] + orrs r0, r6 + strb r0, [r1] + adds r3, #1 + subs r2, #1 + cmp r2, #0 + bge _0805701E +_08057032: + adds r1, r5, r3 + movs r0, #0 + strb r0, [r1] + adds r0, r4, #0 + add sp, #8 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08057040: .4byte 0x0FFFFFFF + + .syntax divided diff --git a/include/functions.h b/include/functions.h index 5c62cced..06a73d2c 100644 --- a/include/functions.h +++ b/include/functions.h @@ -267,10 +267,10 @@ extern void sub_080564C8(u32); extern void sub_08056F70(void); extern void DeleteWindow(void); extern void CreateWindow(void); -extern void sub_0805EEB4(u8*, u32, u32); -extern void sub_08056FBC(void*); +extern void sub_0805EEB4(u8*, u32); extern void sub_08056C54(u32); extern void sub_08056BDC(u32); extern void sub_08056F88(u32, u32); extern u32 sub_08056CC0(u32); +extern void sub_0805F8E4(u32 r0, WStruct* r1); #endif diff --git a/include/structures.h b/include/structures.h index d47ee7a1..a40ba2fa 100644 --- a/include/structures.h +++ b/include/structures.h @@ -185,4 +185,14 @@ extern EntityHandler gUnk_03003DC0; extern u8 gUnk_02022740[]; extern u8 gUnk_02034490[]; +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u16 unk4; + u16 unk6; + void* unk8; +} WStruct; + #endif diff --git a/include/textbox.h b/include/textbox.h index 817d50a0..62b51674 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -3,6 +3,7 @@ #include "global.h" #include "entity.h" +#include "structures.h" typedef struct { u8 doTextBox; @@ -18,25 +19,23 @@ typedef struct { u16 field_0xc; u16 field_0xe; u32 field_0x10; + u32 field_0x14; + u32 field_0x18; + u32 field_0x1c; } TextBox; extern TextBox gTextBox; typedef struct { - u8 _0; - u8 _1; - u8 _2; - u8 _3[5]; - u16 _8; - u8 _b[0x16]; + TextBox textBox; u8 _20; u8 _21; - u8 _22[0xa]; + u16 _22; + u16 _24; + u16 _26; + u8 _28[0x4]; void* _2c; - u8 _30[0x23]; - u8 _53; - u16 _54; - u8 _56[0x2]; - void* _58; + u8 _30[0x20]; + WStruct _50; u8 _5c; u8 _5d; u8 _5e[24]; @@ -45,16 +44,38 @@ typedef struct { u8 _88; u8 _89; u8 _8a; - u8 _8b[0xe]; - u8 _99; - u8 _9a; - u8 _9b; + u8 _8b; + u8 _8c; + u8 _8d; + u8 _8e; + u8 _8f; + u8 _90; + u8 _91; + s8 _92; + u8 _93; + u8 _94; + u8 _95; + u8 _96; + u8 _97; + union { + u32 word; + struct { + u8 b0; + u8 b1; + u8 b2; + s8 b3; + } bytes; + } _98; u8 _9c; u8 _9d; - u8 _9e[0xa]; -} struct_02022780; -extern struct_02022780 gUnk_02022780; -static_assert(sizeof(struct_02022780) == 0xa8); + u16 _9e; + u16 _a0; + u16 _a2; + u16 _a4; + u16 _a6; +} CurrentTextBox; +extern CurrentTextBox gCurrentTextBox; +static_assert(sizeof(CurrentTextBox) == 0xa8); /** * @brief Initialize the message system. diff --git a/linker.ld b/linker.ld index 6d1e6d44..b9d4e01c 100644 --- a/linker.ld +++ b/linker.ld @@ -85,7 +85,7 @@ SECTIONS { . = 0x00022730; gUnk_02022730 = .; . = 0x00022740; gUnk_02022740 = .; . = 0x00022750; gPlayerScriptExecutionContext = .; - . = 0x00022780; gUnk_02022780 = .; + . = 0x00022780; gCurrentTextBox = .; . = 0x000227DC; gUnk_020227DC = .; . = 0x000227E8; gUnk_020227E8 = .; . = 0x000227F0; gUnk_020227F0 = .; @@ -146,8 +146,8 @@ SECTIONS { . = 0x00036540; gUnk_02036540 = .; . = 0x00036570; gScriptExecutionContextArray = .; . = 0x000369F0; gUnk_020369F0 = .; - . = 0x00036A38; gUnk_02036A38 = .; - . = 0x00036A40; gUnk_02036A40 = .; + . = 0x00036A38; gCurrentWindow = .; + . = 0x00036A40; gNewWindow = .; . = 0x00036A50; gEEPROMConfig = .; . = 0x00036A58; gUnk_02036A58 = .; . = 0x00036AD8; gUnk_02036AD8 = .; diff --git a/src/code_0805F9A0.c b/src/code_0805F9A0.c index 66ac2ba9..856357d5 100644 --- a/src/code_0805F9A0.c +++ b/src/code_0805F9A0.c @@ -21,16 +21,6 @@ typedef struct { u8 unk1; } UStruct; -typedef struct { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u16 unk4; - u16 unk6; - void* unk8; -} WStruct; - void sub_0805F820(WStruct* r0, u32* r1); u32 sub_0805F7DC(u32 r0, WStruct* r1) { diff --git a/src/textbox.c b/src/textbox.c index 6a9cf031..4ae42c5b 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -8,12 +8,28 @@ #include "structures.h" #include "save.h" +extern void WriteBit(u32*, u32); +extern void sub_0805EF40(u8*, u8*); +extern void sub_0801C4A0(u32, u32); +extern void sub_0801C494(void); +extern void sub_0805F918(u32, u32, u32); +extern u32 sub_0801D51C(u32, u8*, u32); + +u32 sub_08056FEC(u32, u8*); + u32 sub_080564DC(void); u32 sub_080564EC(void); u32 sub_08056654(void); u32 sub_080565B4(void); u32 sub_080565F8(void); u32 sub_08056640(void); +u16 sub_08056750(CurrentTextBox*); +u32 sub_0805EFE8(u8*); +void sub_08056ABC(u32, u32); +void sub_080569C4(CurrentTextBox*, u32); +u16 sub_0805F7DC(u32, u8*); +u32 sub_GetFontStrWidth(u8*, u32); +void sub_08056FBC(CurrentTextBox*); u32 (*const gUnk_08107BC8[])(void) = { sub_080564DC, sub_080564EC, sub_08056654, sub_080565B4, sub_080565F8, sub_08056640, @@ -24,23 +40,47 @@ u8* const gUnk_08107BE0[] = { &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800, }; -void sub_08056684(struct_02022780*); -void sub_080566B8(struct_02022780*); -void sub_08056BA0(struct_02022780*); -void sub_08056B1C(struct_02022780*); -void sub_08056B7C(struct_02022780*); -void sub_080569D4(struct_02022780*); +void sub_08056684(CurrentTextBox*); +void sub_080566B8(CurrentTextBox*); +void sub_08056BA0(CurrentTextBox*); +void sub_08056B1C(CurrentTextBox*); +void sub_08056B7C(CurrentTextBox*); +void sub_080569D4(CurrentTextBox*); -void (*const gUnk_08107BF4[])(struct_02022780*) = { +void (*const gUnk_08107BF4[])(CurrentTextBox*) = { sub_08056684, sub_080566B8, sub_08056BA0, sub_08056B1C, sub_08056B7C, sub_080569D4, }; -extern u32 gUnk_02036A40; -extern u32 gUnk_02036A38; -extern u8 gUnk_02024030; +typedef struct Window { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +} Window; +extern Window gCurrentWindow; +extern Window gNewWindow; + +extern struct { + u8 unk_00; + u8 unk_01[1]; + s8 unk_02; + s8 unk_03; + u8 unk_04[4]; + u16 unk_08[4]; + u16 unk_10[4]; +} gUnk_02024030; + +extern u32 gUnk_0200005C; + extern u8 gUnk_020227A0; extern u8 gUnk_02000D00; +extern const u8 gUnk_08107C0C[]; + s32 sub_08056338(void) { s32 result; @@ -78,8 +118,8 @@ void TextboxNoOverlap(u32 index, Entity* ent) { } } -void sub_080563C8(u32 param_1, u32 param_2) { - TextboxAtPosition(param_1, 1, param_2); +void sub_080563C8(u32 index, u32 y) { + TextboxAtPosition(index, 1, y); } void TextboxAtPosition(u32 index, u32 x, u32 y) { @@ -89,7 +129,7 @@ void TextboxAtPosition(u32 index, u32 x, u32 y) { } void ShowTextbox(u32 index) { - MemClear(&gTextBox, 32); + MemClear(&gTextBox, sizeof(gTextBox)); gTextBox.textIndex = index; gTextBox.textSpeed = 99; gTextBox.textWindowWidth = 26; @@ -100,10 +140,10 @@ void ShowTextbox(u32 index) { } void MessageInitialize(void) { - MemClear(&gTextBox, 32); - MemClear(&gUnk_02022780, 168); - MemClear(&gUnk_02036A40, 8); - MemClear(&gUnk_02036A38, 8); + MemClear(&gTextBox, sizeof(gTextBox)); + MemClear(&gCurrentTextBox, sizeof(gCurrentTextBox)); + MemClear(&gNewWindow, sizeof(gNewWindow)); + MemClear(&gCurrentWindow, sizeof(gCurrentWindow)); MemClear(&gUnk_02000040, 4); } @@ -111,19 +151,19 @@ void MessageUpdate(void) { int iVar1; if (gTextBox.doTextBox == 1) { - MemClear((u32*)&gUnk_02022780, sizeof(gUnk_02022780)); + MemClear((u32*)&gCurrentTextBox, sizeof(gCurrentTextBox)); sub_080564C8(1); } - if (gUnk_02022780._8a != 0) { - gUnk_02022780._8a--; + if (gCurrentTextBox._8a != 0) { + gCurrentTextBox._8a--; } else { do { - iVar1 = gUnk_08107BC8[gUnk_02022780._88](); + iVar1 = gUnk_08107BC8[gCurrentTextBox._88](); } while (iVar1 != 0); } - if (gUnk_02022780._9d != 0) { - gUnk_02022780._9d = 0; + if (gCurrentTextBox._9d != 0) { + gCurrentTextBox._9d = 0; sub_08056F70(); } DeleteWindow(); @@ -131,12 +171,12 @@ void MessageUpdate(void) { } void sub_080564C8(u32 a1) { - gUnk_02022780._88 = a1; - gUnk_02022780._89 = 0; + gCurrentTextBox._88 = a1; + gCurrentTextBox._89 = 0; } u32 sub_080564DC(void) { - gUnk_02022780._99 = 0; + gCurrentTextBox._98.bytes.b1 = 0; return 0; } @@ -147,18 +187,18 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) { u32 i; char c; - MemClear((void*)&gUnk_02036A40, 8); + MemClear((void*)&gNewWindow, 8); MemClear((void*)&gUnk_02024030, 0x18); - MemClear((void*)&gUnk_02022780, 0xa8); - MemCopy(&gTextBox, &gUnk_02022780, 32); - if (gUnk_02022780._2 == 0x63) { - gUnk_02022780._2 = gUnk_02000000->messageSpeed; + MemClear((void*)&gCurrentTextBox, sizeof(gCurrentTextBox)); + MemCopy(&gTextBox, &gCurrentTextBox, sizeof(gTextBox)); + if (gCurrentTextBox.textBox.textSpeed == 0x63) { + gCurrentTextBox.textBox.textSpeed = gUnk_02000000->messageSpeed; } - gUnk_02022780._9c = 0xff; - sub_0805EEB4(&gUnk_02022780._20, gUnk_02022780._8, 32); - gUnk_02022780._5c = 2; - gUnk_02022780._5d = 0xe; - dest = gUnk_02022780._5e; + gCurrentTextBox._9c = 0xff; + sub_0805EEB4(&gCurrentTextBox._20, gCurrentTextBox.textBox.textIndex /*, 32*/); + gCurrentTextBox._5c = 2; + gCurrentTextBox._5d = 0xe; + dest = gCurrentTextBox._5e; for (i = 0; i < 6; ++i) { c = gSave.playerName[i]; @@ -170,10 +210,10 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) { dest[0] = 2; dest[1] = 15; dest[2] = 0; - sub_08056FBC(&gUnk_02022780); - gUnk_02022780._2c = &gUnk_08107BE0; - gUnk_02022780._58 = &gUnk_02000D00; - gUnk_02022780._54 = 0xd0; + sub_08056FBC(&gCurrentTextBox); + gCurrentTextBox._2c = &gUnk_08107BE0; + gCurrentTextBox._50.unk8 = &gUnk_02000D00; + gCurrentTextBox._50.unk4 = 0xd0; sub_08056C54(2); sub_08056BDC(0); sub_080564C8(2); @@ -182,36 +222,36 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) { END_NONMATCH u32 sub_080565B4(void) { - if (gUnk_02022780._89 == 0) { - gUnk_02022780._89 = 1; - gUnk_02022780._99 = 1; - sub_08056F88(gUnk_02022780._3[0], gUnk_02022780._53); + if (gCurrentTextBox._89 == 0) { + gCurrentTextBox._89 = 1; + gCurrentTextBox._98.bytes.b1 = 1; + sub_08056F88(gCurrentTextBox.textBox.unk3, gCurrentTextBox._50.unk3); SoundReq(SFX_TEXTBOX_OPEN); } if (sub_08056CC0(1)) { - gUnk_02022780._99 = 2; + gCurrentTextBox._98.bytes.b1 = 2; sub_080564C8(2); } return 0; } u32 sub_080565F8(void) { - if (gUnk_02022780._89 == 0) { - gUnk_02022780._89 = 1; - gUnk_02022780._99 = 3; + if (gCurrentTextBox._89 == 0) { + gCurrentTextBox._89 = 1; + gCurrentTextBox._98.bytes.b1 = 3; sub_08056BDC(0); SoundReq(SFX_TEXTBOX_CLOSE); } if (sub_08056CC0(-1)) { - gUnk_02022780._99 = 0; + gCurrentTextBox._98.bytes.b1 = 0; sub_080564C8(2); } return 0; } -u32 sub_08056640() { +u32 sub_08056640(void) { sub_08056C54(0); sub_080564C8(0); return 0; @@ -219,17 +259,512 @@ u32 sub_08056640() { u32 sub_08056654(void) { sub_08056C54(4); - gUnk_08107BF4[gUnk_02022780._89](&gUnk_02022780); + gUnk_08107BF4[gCurrentTextBox._89](&gCurrentTextBox); sub_08056CC0(0); return 0; } -void sub_08056684(struct_02022780* this) { - if ((gUnk_02022780._20 & 1) == 0) { - if (gUnk_02022780._99 == '\0') { +void sub_08056684(CurrentTextBox* this) { + if ((gCurrentTextBox._20 & 1) == 0) { + if (gCurrentTextBox._98.bytes.b1 == '\0') { sub_080564C8(5); } } else { this->_89 = 1; } } + +void sub_080566B8(CurrentTextBox* param_1) { + u32 uVar3; + s32 iVar4; + int iVar5; + int iVar6; + + if (param_1->_95 != 0) { + param_1->_95--; + } else { + if ((gInput.heldKeys & B_BUTTON) != 0) { + iVar4 = 8; + } else { + iVar4 = 1; + } + param_1->_92 -= iVar4; + if (param_1->_92 < 1) { + iVar5 = 0; + do { + iVar5++; + param_1->_92 += gUnk_08107C0C[param_1->textBox.textSpeed]; + } while (param_1->_92 < 1); + iVar6 = 0; + do { + uVar3 = sub_08056750(param_1); + if (((uVar3 == 0) || (param_1->_95 != 0)) || (param_1->_8a != 0)) + break; + iVar6 += uVar3; + iVar5--; + } while (0 < iVar5); + if (iVar6 != 0) { + gCurrentTextBox._9d = 1; + } else { + param_1->_92 = 0; + } + } + } +} + +NONMATCH("asm/non_matching/textbox/sub_08056750.inc", u16 sub_08056750(CurrentTextBox* param_1)) { + s32 r0, r1, r2, r3; + u32 r7; + s32 tmp; + u32 t; + u32* t2; + + r7 = param_1->_24; + + if (r7 == 0) { + r7 = sub_0805EFE8(¶m_1->_20); + switch (r7) { + case 0: + if (gUnk_02000040.unk_00 == 1) { + param_1->_89 = 5; + sub_08056ABC(0, 0); + } else { + param_1->_89 = 2; + } + break; + case 1: + param_1->_8a = 2; + if (param_1->_98.bytes.b0 == 0) { + sub_08056BDC(1); + } else { + param_1->_89 = 3; + } + break; + case 2: + sub_080564C8(3); + break; + case 3: + sub_080564C8(4); + break; + case 4: + param_1->_50.unk6 += + (param_1->_50.unk4 - param_1->_50.unk6 - sub_GetFontStrWidth(¶m_1->_20, 0)) / 2; + break; + case 5: + gTextBox.unk = param_1->_22; + break; + case 6: + t2 = &gUnk_0200005C; + t = param_1->_22; + WriteBit(t2, 0x1f & t); + break; + case 7: + switch (param_1->_22) { + case 0xe: + param_1->_91 = param_1->_8f; + r3 = 2; + break; + case 0xf: + r3 = param_1->_91; + break; + default: + r3 = param_1->_22; + break; + } + param_1->_90 = 0; + sub_080569C4(param_1, r3); + break; + case 8: + SoundReq(param_1->_22); + break; + case 9: + gCurrentTextBox.textBox.unk3 = param_1->_22; + sub_08056F88(param_1->_22, param_1->_50.unk3); + break; + case 10: + param_1->textBox.textWindowPosY = param_1->_22; + break; + case 12: + if (gUnk_02000040.unk_00 != 1) { + MemClear(&gUnk_02000040, 4); + MemClear(&gUnk_02024030, sizeof(gUnk_02024030)); + gUnk_02024030.unk_00 = 1; + gUnk_02000040.unk_00 = 1; + } + if (gUnk_02024030.unk_02 > 3) + break; + + gUnk_02024030.unk_10[gUnk_02024030.unk_02] = param_1->_26; + gUnk_02024030.unk_08[gUnk_02024030.unk_02] = param_1->_50.unk6; + gUnk_02024030.unk_02++; + param_1->_50.unk6 += 8; + break; + case 13: + switch (param_1->_22) { + case 0xff: + param_1->_8e = 1; + break; + case 0xfe: + param_1->_8e = 2; + break; + default: + param_1->_95 = param_1->_22; + break; + } + break; + case 14: + r1 = param_1->_22; + param_1->_94 = r1; + break; + default: + break; + } + if (r7 >> 8 == 0) + return 0; + } + if (gCurrentTextBox._98.bytes.b1 != 2) { + sub_080564C8(3); + return 0; + } + if (gTextBox.unk == 0) { + gTextBox.unk = 0x80; + } + param_1->_24 = 0; + if (r7 >> 8 == 7) { + param_1->_90 = param_1->_8f | 0x80; + sub_080569C4(param_1, 0); + } else { + if ((param_1->_90 & 0x80) != 0) { + r3 = param_1->_90; + param_1->_90 = 0; + sub_080569C4(param_1, r3); + } + } + return sub_0805F7DC(r7, ¶m_1->_30[0x20]); +} +END_NONMATCH + +void sub_080569C4(CurrentTextBox* ctb, u32 unk) { + u32 temp = unk & 0x7; + ctb->_8f = temp; + ctb->_50.unk2 = temp; +} + +extern u8 gUnk_08107C14; +extern u8 gUnk_08107C0F; +void sub_080569D4(CurrentTextBox* ctb) { + s32 r1, r5, r6; + u32 error; + u8* ptr1; + u8* ptr2; + + r5 = gUnk_02024030.unk_03; + switch (gInput.newKeys) { + case START_BUTTON: + case A_BUTTON: + r1 = gUnk_02024030.unk_10[r5]; + if (r1 == 0) { + ptr2 = &gUnk_08107C14; + ptr1 = &ctb->_20; + } else { + ctb->textBox.textIndex = r1; + sub_0805EEB4(&ctb->_20, r1); + ptr2 = &gUnk_08107C0F; + ptr1 = &ctb->_20; + } + sub_0805EF40(ptr1, ptr2); + gUnk_02000040.unk_01 = gUnk_02024030.unk_03; + gUnk_02000040.unk_00 = 3; + MemClear(&gUnk_02024030, sizeof(gUnk_02024030)); + SoundReq(0x6a); // SFX_TEXTBOX_SELECT + ctb->_89 = 1; + break; + case DPAD_LEFT: + r5--; + break; + case DPAD_RIGHT: + r5++; + break; + default: + break; + } + r5 = (r5 + gUnk_02024030.unk_02) % gUnk_02024030.unk_02; + r6 = gUnk_02024030.unk_03; + if (r5 != r6) { + gUnk_02024030.unk_03 = r5; + SoundReq(0x69); // SFX_TEXTBOX_CHOICE + error = 1; + } else { + error = 0; + } + if (gUnk_02000040.unk_00 == 1) { + gUnk_02024030.unk_00 = gUnk_02000040.unk_00 = 2; + error = 1; + } + if (error != 0) { + sub_08056ABC(r5, r6); + } +} + +void sub_08056ABC(u32 unk_0, u32 unk_1) { + u16 t; + t = gCurrentTextBox._50.unk6; + gCurrentTextBox._50.unk6 = gUnk_02024030.unk_08[unk_1]; + sub_0805F8E4(0, &gCurrentTextBox._50); + gCurrentTextBox._50.unk6 = gUnk_02024030.unk_08[unk_0]; + sub_0805F8E4(1, &gCurrentTextBox._50); + gCurrentTextBox._50.unk6 = t; + gCurrentTextBox._9d = 1; +} + +void sub_08056B1C(CurrentTextBox* ctb) { + u32 t; + u8* ptr; + gTextBox.unk = 0; + if (ctb->_94 != 0) { + ctb->_94--; + if (ctb->_94 != 0) + return; + ptr = &ctb->_89; + t = 4; + } else { + if ((gInput.newKeys & 0x1f3) != 0) { + SoundReq(0x68); // SFX_TEXTBOX_SWAP + ctb->_98.bytes.b2 = 0; + ptr = &ctb->_89; + t = 4; + } else { + ptr = &ctb->_98.bytes.b2; + t = *ptr + 1; + } + } + *ptr = t; +} + +void sub_08056B7C(CurrentTextBox* ctb) { + sub_08056BDC(0); + sub_080569C4(ctb, ctb->_8f | 0x40); + ctb->_89 = 1; +} + +void sub_08056BA0(CurrentTextBox* ctb) { + gTextBox.unk = 0; + sub_08056C54(7); + if ((ctb->_8e != 1) && ((ctb->_8e == 2 || ((gInput.newKeys & 0x1f3) != 0)))) { + sub_080564C8(4); + } +} + +void sub_08056BDC(u32 unk) { + gCurrentTextBox._98.bytes.b0 = unk; + if (unk == 0) { + MemFill32(-1, &gUnk_02000D00, 0xd00); + sub_08056F70(); + gCurrentTextBox._9e = 0xf082; + gCurrentTextBox._a0 = 0xf083; + gCurrentTextBox._a2 = 0xf0b6; + gCurrentTextBox._a4 = 0xf0b7; + gCurrentTextBox._50.unk6 = 0; + gCurrentTextBox._50.unk4 = 0xd0; + } else { + gCurrentTextBox._50.unk6 = 0xd0; + gCurrentTextBox._50.unk4 = 0x1a0; + } + sub_080569C4(&gCurrentTextBox, gCurrentTextBox._8f | 0x40); +} + +void sub_08056C54(u32 unk) { + gTextBox.doTextBox = gCurrentTextBox.textBox.doTextBox = unk; +} + +void DeleteWindow(void) { + u32 r0; + u16* ptr; + u16* ptr2; + int i, j; + + Window* tp = &gCurrentWindow; + + if (tp->unk1 != 0) { + tp->unk1 = 0; + r0 = tp->unk5 << 5; + r0 += tp->unk4; + ptr = &((u16*)(&gBG0Buffer.filler0))[r0]; + i = tp->unk7 + 2; + do { + j = 0; + do { + ptr[j] = 0; + } while (j++, j < tp->unk6 + 2); + ptr += 0x20; + i--; + } while (i > 0); + sub_0801C4A0(tp->unk5, tp->unk7); + sub_0801C494(); + } +} + +u32 sub_08056CC0(u32 unk) { + u32 iVar1; + u32 uVar2; + u32 uVar3; + Window* ptr; + + uVar3 = 0; + + // inline function? + gCurrentTextBox._98.bytes.b3 += unk; + if (gCurrentTextBox._98.bytes.b3 < 1) { + gCurrentTextBox._98.bytes.b3 = 0; + } else { + if (gCurrentTextBox._98.bytes.b3 < 8) + goto LAB_08056cee; + gCurrentTextBox._98.bytes.b3 = 8; + } + uVar3 = 1; +LAB_08056cee: + ptr = &gNewWindow; + if (gCurrentTextBox._98.bytes.b3 != 0) { + iVar1 = gCurrentTextBox._98.bytes.b3; + uVar2 = (iVar1 * (gCurrentTextBox.textBox.textWindowWidth << 1)) / 16; + ptr->unk6 = uVar2; + if ((uVar2 & 1) != 0) { + ptr->unk6++; + } + ptr->unk4 = + ((gCurrentTextBox.textBox.textWindowWidth / 2) + gCurrentTextBox.textBox.textWindowPosX) - (ptr->unk6 / 2); + uVar2 = (iVar1 * (gCurrentTextBox.textBox.textWindowHeight << 1)) / 16; + ptr->unk7 = uVar2; + if ((uVar2 & 1) != 0) { + ptr->unk7++; + } + ptr->unk5 = + ((gCurrentTextBox.textBox.textWindowHeight / 2) + gCurrentTextBox.textBox.textWindowPosY) - (ptr->unk7 / 2); + } else { + ptr->unk5 = 0xff; + ptr->unk4 = -1; + ptr->unk7 = -1; + ptr->unk6 = -1; + } + ptr->unk1 = 1; + return uVar3; +} + +void DispMessageFrame(u16*, u32, u32, u32); +extern void DispString(void); +extern void DispCursor(void); + +void CreateWindow(void) { + s32 r0, r3; + u16* ptr; + + r0 = gCurrentTextBox._98.bytes.b3; + if (r0 <= 0) + return; + r0 = ((gNewWindow.unk5 << 5) + gNewWindow.unk4); + ptr = &((u16*)(&gBG0Buffer.filler0))[r0]; + r3 = 0xf07b; + DispMessageFrame(ptr, gNewWindow.unk6, gNewWindow.unk7, r3); + DispString(); + DispCursor(); + gCurrentWindow = gNewWindow; + sub_0801C494(); +} + +NONMATCH("asm/non_matching/textbox/DispMessageFrame.inc", + void DispMessageFrame(u16* buffer, u32 width_, u32 height_, u32 flags_)) { +} +END_NONMATCH + +extern u16 gUnk_02034CB2[]; +extern u16 gUnk_0202281E[]; + +void DispString(void) { + u32 r0, r2, r4; + u16 *r5, *ptr2; + s32 i, j; + + Window* window = &gNewWindow; + + if (window->unk6 != 0) { + if (window->unk7 != 0) { + r4 = window->unk7; + r5 = &gUnk_02034CB2[(window->unk5 << 5) + window->unk4]; + i = (s32)(4 - r4) / 2; + do { + j = window->unk6; + r2 = gUnk_0202281E[i]; + r5 += 0x20; + r0 = i + 1; + r4--; + ptr2 = r5; + do { + *ptr2 = r2; + ptr2++; + r2 += 2; + j--; + } while (j > 0); + i = r0; + } while (r4 != 0); + } + } +} + +void DispCursor(void) { + u32 r0; + u16* ptr; + + if ((gCurrentTextBox._98.word & 0x10ff00) == 0x100200) { + ptr = &((u16*)(gBG0Buffer.filler0))[(gNewWindow.unk5 << 5) + gNewWindow.unk4]; + r0 = (((gNewWindow.unk7 + 1) << 5) - 2); + r0 += gNewWindow.unk6; + ptr += r0; + *ptr = 0xf080; + } +} + +void sub_08056F70(void) { + LoadResourceAsync(&gUnk_02000D00, 0x0600D040, 0xd00); +} + +void sub_08056F88(u32 unk_1, u32 unk_2) { + u32 uVar1; + + if (0xf < unk_1) { + unk_1 = 0; + } + uVar1 = unk_1 << 4 | unk_2; + if (gCurrentTextBox._9c != uVar1) { + gCurrentTextBox._9c = uVar1; + sub_0805F918(unk_1, unk_2, 0x0600CF60); + } +} + +void sub_08056FBC(CurrentTextBox* ctb) { + sub_08056FEC(ctb->textBox.field_0x10, &ctb->_5e[0xa]); + sub_08056FEC(ctb->textBox.field_0x14, &ctb->_5e[0x12]); + sub_08056FEC(ctb->textBox.field_0x18, &ctb->_77[0x1]); + sub_08056FEC(ctb->textBox.field_0x1c, &ctb->_77[0x9]); +} + +NONMATCH("asm/non_matching/textbox/sub_08056FEC.inc", u32 sub_08056FEC(u32 param_1, u8* param_2)) { + u32 uVar1; + int iVar2; + int iVar3; + int iVar4; + u8 local_1c[8]; + + uVar1 = sub_0801D51C(param_1, param_2, param_1); + uVar1 = uVar1 & 0xfffffff; + iVar4 = 0; + do { + local_1c[iVar4++] = uVar1 & 0xf; + uVar1 = uVar1 / 16; + } while (uVar1 != 0); + for (iVar3 = 0; --iVar4 >= 0; iVar3++) { + param_2[iVar3] = local_1c[iVar4] | 0x30; + } + param_2[iVar3] = 0; + return iVar4; +} +END_NONMATCH From bd793c007858a97821f9af00d8894b15a5c7a2a9 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Wed, 31 Mar 2021 19:15:39 +0200 Subject: [PATCH 2/3] code refactoring and naming stuff --- asm/code_080526F8.s | 2 +- asm/code_080A3BD0.s | 2 +- asm/non_matching/textbox/DeleteWindow.inc | 50 --- asm/non_matching/textbox/DispString.inc | 52 --- ...{sub_080564EC.inc => TextBoxFunction1.inc} | 2 +- include/functions.h | 5 - include/save.h | 4 +- include/structures.h | 21 +- include/textbox.h | 13 +- src/debugScreen.c | 6 +- src/enemy/waterDrop.c | 3 +- src/fileScreen.c | 3 +- src/game.c | 3 +- src/manager/manager15.c | 2 - src/manager/manager8.c | 9 +- src/manager/manager9.c | 7 +- src/object/windcrest.c | 1 + src/save.c | 2 + src/textbox.c | 307 +++++++++--------- 19 files changed, 190 insertions(+), 304 deletions(-) delete mode 100644 asm/non_matching/textbox/DeleteWindow.inc delete mode 100644 asm/non_matching/textbox/DispString.inc rename asm/non_matching/textbox/{sub_080564EC.inc => TextBoxFunction1.inc} (98%) diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index 150d4fea..710867c4 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -646,7 +646,7 @@ _08052BEC: _08052BEE: ldrh r0, [r3, #0x36] adds r1, r2, #0 - bl sub_080563C8 + bl TextBoxAtYPosition pop {pc} thumb_func_start sub_08052BF8 diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index 08159cb0..b4fb6f39 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -430,7 +430,7 @@ _080A3F96: bl SoundReq ldr r0, _080A3FC8 @ =0x00000702 movs r1, #0xe - bl sub_080563C8 + bl TextBoxAtYPosition movs r0, #1 strb r0, [r5, #6] movs r0, #0x78 diff --git a/asm/non_matching/textbox/DeleteWindow.inc b/asm/non_matching/textbox/DeleteWindow.inc deleted file mode 100644 index 5233214c..00000000 --- a/asm/non_matching/textbox/DeleteWindow.inc +++ /dev/null @@ -1,50 +0,0 @@ - - .section .text - - .syntax unified - - push {r4, r5, r6, lr} - ldr r5, _08056CB8 @ =gCurrentWindow - ldrb r0, [r5, #1] - cmp r0, #0 - beq _08056CB4 - movs r0, #0 - strb r0, [r5, #1] - ldrb r0, [r5, #5] - lsls r0, r0, #5 - ldrb r1, [r5, #4] - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, _08056CBC @ =gBG0Buffer - adds r1, r0, r1 - ldrb r0, [r5, #7] - adds r0, #2 - movs r6, #0 -_08056C8A: - movs r2, #0 - adds r4, r1, #0 - adds r4, #0x40 - subs r3, r0, #1 -_08056C92: - strh r6, [r1] - adds r1, #2 - adds r2, #1 - ldrb r0, [r5, #6] - adds r0, #2 - cmp r2, r0 - blt _08056C92 - adds r1, r4, #0 - adds r0, r3, #0 - cmp r0, #0 - bgt _08056C8A - ldrb r0, [r5, #5] - ldrb r1, [r5, #7] - bl sub_0801C4A0 - bl sub_0801C494 -_08056CB4: - pop {r4, r5, r6, pc} - .align 2, 0 -_08056CB8: .4byte gCurrentWindow -_08056CBC: .4byte gBG0Buffer - - .syntax divided diff --git a/asm/non_matching/textbox/DispString.inc b/asm/non_matching/textbox/DispString.inc deleted file mode 100644 index c61d52ec..00000000 --- a/asm/non_matching/textbox/DispString.inc +++ /dev/null @@ -1,52 +0,0 @@ - - .syntax unified - - push {r4, r5, r6, r7, lr} - ldr r6, _08056F10 @ =gNewWindow - ldrb r0, [r6, #6] - cmp r0, #0 - beq _08056F0E - ldrb r0, [r6, #7] - cmp r0, #0 - beq _08056F0E - adds r4, r0, #0 - ldrb r0, [r6, #5] - lsls r0, r0, #5 - ldrb r1, [r6, #4] - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, _08056F14 @ =gUnk_02034CB2 - adds r5, r0, r1 - movs r0, #4 - subs r0, r0, r4 - lsrs r1, r0, #0x1f - adds r0, r0, r1 - asrs r1, r0, #1 - ldr r7, _08056F18 @ =gUnk_0202281E -_08056EEC: - ldrb r3, [r6, #6] - lsls r0, r1, #1 - adds r0, r0, r7 - ldrh r2, [r0] - adds r5, #0x40 - adds r0, r1, #1 - subs r4, #1 - adds r1, r5, #0 -_08056EFC: - strh r2, [r1] - adds r1, #2 - adds r2, #2 - subs r3, #1 - cmp r3, #0 - bgt _08056EFC - adds r1, r0, #0 - cmp r4, #0 - bne _08056EEC -_08056F0E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08056F10: .4byte gNewWindow -_08056F14: .4byte gUnk_02034CB2 -_08056F18: .4byte gUnk_0202281E - - .syntax divided diff --git a/asm/non_matching/textbox/sub_080564EC.inc b/asm/non_matching/textbox/TextBoxFunction1.inc similarity index 98% rename from asm/non_matching/textbox/sub_080564EC.inc rename to asm/non_matching/textbox/TextBoxFunction1.inc index dd505979..ddbafe5e 100644 --- a/asm/non_matching/textbox/sub_080564EC.inc +++ b/asm/non_matching/textbox/TextBoxFunction1.inc @@ -72,7 +72,7 @@ _08056560: movs r0, #0xd0 strh r0, [r4] movs r0, #2 - bl sub_08056C54 + bl SetDoTextBox movs r0, #0 bl sub_08056BDC movs r0, #2 diff --git a/include/functions.h b/include/functions.h index 06a73d2c..00118699 100644 --- a/include/functions.h +++ b/include/functions.h @@ -264,13 +264,8 @@ extern void sub_08073904(Entity*); extern u32 sub_08056134(void); extern void sub_08004484(Entity*, Entity*); extern void sub_080564C8(u32); -extern void sub_08056F70(void); -extern void DeleteWindow(void); -extern void CreateWindow(void); extern void sub_0805EEB4(u8*, u32); -extern void sub_08056C54(u32); extern void sub_08056BDC(u32); extern void sub_08056F88(u32, u32); -extern u32 sub_08056CC0(u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); #endif diff --git a/include/save.h b/include/save.h index 6dea6212..6bc0819c 100644 --- a/include/save.h +++ b/include/save.h @@ -2,9 +2,7 @@ #define SAVE_H #include "global.h" -#include "entity.h" -#include "functions.h" -#include "menu.h" +#include "player.h" #include "structures.h" #define FILENAME_LENGTH 6 diff --git a/include/structures.h b/include/structures.h index a40ba2fa..11d66ac8 100644 --- a/include/structures.h +++ b/include/structures.h @@ -148,23 +148,10 @@ typedef struct { } data; } Dialog; -typedef struct { - u8 filler0[0x29C]; - u16 unk29C; - u8 filler29E[0x562]; -} BGBuffer; -extern BGBuffer gBG0Buffer; -extern BGBuffer gBG1Buffer; -extern BGBuffer gBG2Buffer; -static_assert(sizeof(BGBuffer) == 0x800); - -/* -typedef struct { - u16 filler0[0x800]; -} BG3Buffer; -extern BG3Buffer gBG3Buffer; -static_assert(sizeof(BG3Buffer) == 0x1000); -*/ +extern u16 gBG0Buffer[0x400]; +extern u16 gBG1Buffer[0x400]; +extern u16 gBG2Buffer[0x400]; +extern u16 gBG3Buffer[0x800]; struct { u8 filler[0x70]; diff --git a/include/textbox.h b/include/textbox.h index 62b51674..3eca4242 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -36,13 +36,12 @@ typedef struct { void* _2c; u8 _30[0x20]; WStruct _50; - u8 _5c; - u8 _5d; - u8 _5e[24]; + char playerName[0xa]; + u8 _66[0x10]; u8 _76; u8 _77[0x11]; u8 _88; - u8 _89; + u8 state; u8 _8a; u8 _8b; u8 _8c; @@ -63,7 +62,7 @@ typedef struct { u8 b0; u8 b1; u8 b2; - s8 b3; + s8 sizeScale; } bytes; } _98; u8 _9c; @@ -102,9 +101,9 @@ void TextboxAtPosition(u32 index, u32 x, u32 y); * @brief Show a message that attempts not to obscure the entity. * * @param index u32 Message index - * @param ent Entity* Your important entity + * @param entity Entity* Your important entity */ -void TextboxNoOverlap(u32 index, Entity* ent); +void TextboxNoOverlap(u32 index, Entity* entity); /** * @brief Show a message that attempts not to obscure the camera target. diff --git a/src/debugScreen.c b/src/debugScreen.c index bc034e8e..3dac0502 100644 --- a/src/debugScreen.c +++ b/src/debugScreen.c @@ -7,8 +7,6 @@ #include "structures.h" #include "textbox.h" -extern u8 gBG3Buffer[]; - extern void (*const gUnk_08109A30[])(); void HandleDebugTextScreen() { @@ -17,8 +15,8 @@ void HandleDebugTextScreen() { void sub_0805FA04(void) { DispReset(1); - MemClear(&gBG0Buffer, sizeof(BGBuffer)); - MemClear(&gBG3Buffer, 0x1000); + MemClear(&gBG0Buffer, sizeof(gBG0Buffer)); + MemClear(&gBG3Buffer, sizeof(gBG3Buffer)); gScreen.lcd.displayControl = 0x940; gScreen.bg.bg0xOffset = 0; gScreen.bg.bg0yOffset = 0; diff --git a/src/enemy/waterDrop.c b/src/enemy/waterDrop.c index f994b564..918ab7d4 100644 --- a/src/enemy/waterDrop.c +++ b/src/enemy/waterDrop.c @@ -3,12 +3,11 @@ #include "screen.h" #include "random.h" #include "functions.h" +#include "structures.h" void sub_0802A39C(Entity*); void sub_0802A334(Entity*); -extern u16 gBG3Buffer[]; - extern void (*const gUnk_080CD030[])(Entity*); extern const u8 gUnk_080CD03C[]; extern const s8 gUnk_080CD040[]; diff --git a/src/fileScreen.c b/src/fileScreen.c index b55977ca..8e1997d6 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -6,6 +6,7 @@ #include "menu.h" #include "random.h" #include "textbox.h" +#include "functions.h" // copy, erase, start #define NUM_FILE_OPERATIONS 3 @@ -498,7 +499,7 @@ void sub_08050AFC(u32 idx) { SetActiveSave(idx); MemClear(&gBG1Buffer, sizeof(gBG1Buffer)); if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) { - sub_08050B3C(&gBG1Buffer.unk29C); + sub_08050B3C(&gBG1Buffer[0x14E]); } gScreen.bg.bg1Updated = 1; } diff --git a/src/game.c b/src/game.c index 91940328..2b9e9e32 100644 --- a/src/game.c +++ b/src/game.c @@ -1,6 +1,5 @@ #include "global.h" #include "screen.h" -#include "structures.h" #include "screen.h" #include "entity.h" #include "player.h" @@ -10,7 +9,9 @@ #include "save.h" #include "utils.h" #include "fileScreen.h" +#include "menu.h" #include "functions.h" +#include "structures.h" extern u8 gArea; extern Entity gPlayerEntity; diff --git a/src/manager/manager15.c b/src/manager/manager15.c index 295f14c7..c8325b32 100644 --- a/src/manager/manager15.c +++ b/src/manager/manager15.c @@ -426,8 +426,6 @@ void sub_0805A94C(Manager15* this) { gScreen.controls.window1VerticalDimensions = (tmp1 << 8 | tmp2); } -extern u8 gBG3Buffer[]; - #ifdef NON_MATCHING void sub_0805A9CC(Manager15* this) { int tmp1, tmp2; diff --git a/src/manager/manager8.c b/src/manager/manager8.c index aa80b627..582d5640 100644 --- a/src/manager/manager8.c +++ b/src/manager/manager8.c @@ -39,7 +39,6 @@ void sub_08057EFC(Manager8* this) { void sub_08058004(u32, void*, void*); -extern u8 gBG3Buffer[]; extern u8 gUnk_02006F00[]; void sub_08057F20(Manager8* this) { @@ -59,8 +58,8 @@ void sub_08057F20(Manager8* this) { tmp = tmp + (tmp >> 2) + ((0x400 - gRoomControls.width) / 2); gScreen.bg.bg1xOffset = tmp & 0xF; gScreen.bg.bg1yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); - gScreen.bg.bg1Tilemap = gBG3Buffer + 0x800; - sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x800); + gScreen.bg.bg1Tilemap = gBG3Buffer + 0x400; + sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x400); tmp = ((tmp >> 4) << 1); if (this->unk_3c != tmp) { this->unk_3c = tmp; @@ -123,11 +122,11 @@ void sub_080580B0(u32 unk1) { gScreen.affine.bg3Updated = 1; tmp = gRoomControls.roomScrollX - gRoomControls.roomOriginX; // r7 tmp = tmp + (tmp >> 2) + (0x400 - gRoomControls.width) / 2; - sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x800); + sub_08058004(tmp, gUnk_02006F00 + 0x2000, gBG3Buffer + 0x400); gScreen.bg.bg1xOffset = tmp & 0xF; gScreen.bg.bg1yOffset = 0x30 - ((0x30 - (gRoomControls.roomScrollY - gRoomControls.roomOriginY)) >> 1); //? gScreen.bg.bg1Control = 0x1E09; - gScreen.bg.bg1Tilemap = gBG3Buffer + 0x800; + gScreen.bg.bg1Tilemap = gBG3Buffer + 0x400; gScreen.bg.bg1Updated = 1; gScreen.controls.layerFXControl = 0x3C48; gScreen.controls.alphaBlend = 0x609; diff --git a/src/manager/manager9.c b/src/manager/manager9.c index aebc9a96..1baa8d98 100644 --- a/src/manager/manager9.c +++ b/src/manager/manager9.c @@ -13,11 +13,10 @@ typedef struct { void sub_08058204(Manager9*); void sub_08058210(Manager9*); u32 sub_08058244(int); -void sub_080582A0(u32, u32*, u8*); +void sub_080582A0(u32, u32*, u16*); void sub_080582F8(u8*, u8*); extern u32 gUnk_02006F00[]; -extern u8 gBG3Buffer[]; const u16 gUnk_081081EC[] = { 0x30, 0x30, 0x30, 0x38 }; @@ -55,13 +54,13 @@ u32 sub_08058244(int i) { return tmp; } -void sub_080582A0(u32 unk, u32* unk2, u8* unk3) { +void sub_080582A0(u32 unk, u32* unk2, u16* unk3) { int i = 0x20; unk2 += unk >> 4; for (; i != 0; i--) { DmaSet(3, unk2, unk3, 0x80000020); unk2 += 0x40; - unk3 += 0x40; + unk3 += 0x20; } } diff --git a/src/object/windcrest.c b/src/object/windcrest.c index b21c5ee0..91bdb37a 100644 --- a/src/object/windcrest.c +++ b/src/object/windcrest.c @@ -3,6 +3,7 @@ #include "entity.h" #include "save.h" #include "script.h" +#include "functions.h" extern void sub_08078850(Entity*, u32, u32, u8*); diff --git a/src/save.c b/src/save.c index 7cbf89aa..54db1262 100644 --- a/src/save.c +++ b/src/save.c @@ -1,5 +1,7 @@ #include "save.h" #include "gba/eeprom.h" +#include "menu.h" +#include "functions.h" typedef struct SaveFileStatus { u16 checksum1; diff --git a/src/textbox.c b/src/textbox.c index 4ae42c5b..c97d5d6a 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -8,6 +8,12 @@ #include "structures.h" #include "save.h" +#define TEXTBOX_ADVANCE_KEYS (A_BUTTON | B_BUTTON | DPAD_ANY | R_BUTTON) +#define TEXTBOX_PRESS_ANY_ADVANCE_KEYS ((gInput.newKeys & TEXTBOX_ADVANCE_KEYS) != 0) + +#define TEXTBOX_WIDTH 0x20 +#define TEXTBOX_POSITION_INDEX(window) ((window).yPos * TEXTBOX_WIDTH + (window).xPos) + extern void WriteBit(u32*, u32); extern void sub_0805EF40(u8*, u8*); extern void sub_0801C4A0(u32, u32); @@ -17,12 +23,6 @@ extern u32 sub_0801D51C(u32, u8*, u32); u32 sub_08056FEC(u32, u8*); -u32 sub_080564DC(void); -u32 sub_080564EC(void); -u32 sub_08056654(void); -u32 sub_080565B4(void); -u32 sub_080565F8(void); -u32 sub_08056640(void); u16 sub_08056750(CurrentTextBox*); u32 sub_0805EFE8(u8*); void sub_08056ABC(u32, u32); @@ -30,9 +30,28 @@ void sub_080569C4(CurrentTextBox*, u32); u16 sub_0805F7DC(u32, u8*); u32 sub_GetFontStrWidth(u8*, u32); void sub_08056FBC(CurrentTextBox*); +void SetDoTextBox(u32 doTextbox); +void Load_02000D00_Asyc(void); -u32 (*const gUnk_08107BC8[])(void) = { - sub_080564DC, sub_080564EC, sub_08056654, sub_080565B4, sub_080565F8, sub_08056640, +void DeleteWindow(void); +void CreateWindow(void); +u32 CalcWindowSize(u32 fade); + +void DispMessageFrame(u16*, u32, u32, u32); +void DispString(void); +void DispCursor(void); + +typedef u32 (*TextBoxFunction)(void); + +u32 TextBoxFunction0(void); +u32 TextBoxFunction1(void); +u32 HandleTextBox(void); +u32 TextBoxFunctionOpen(void); +u32 TextBoxFunctionClose(void); +u32 TextBoxFunction5(void); + +const TextBoxFunction gTextBoxFunctions[] = { + TextBoxFunction0, TextBoxFunction1, HandleTextBox, TextBoxFunctionOpen, TextBoxFunctionClose, TextBoxFunction5, }; extern u8 gUnk_020227DC, gUnk_020227E8, gUnk_020227F0, gUnk_020227F8, gUnk_02022800; @@ -40,15 +59,18 @@ u8* const gUnk_08107BE0[] = { &gUnk_020227DC, &gUnk_020227E8, &gUnk_020227F0, &gUnk_020227F8, &gUnk_02022800, }; -void sub_08056684(CurrentTextBox*); -void sub_080566B8(CurrentTextBox*); -void sub_08056BA0(CurrentTextBox*); -void sub_08056B1C(CurrentTextBox*); -void sub_08056B7C(CurrentTextBox*); -void sub_080569D4(CurrentTextBox*); +typedef void (*TextBoxHandler)(CurrentTextBox*); -void (*const gUnk_08107BF4[])(CurrentTextBox*) = { - sub_08056684, sub_080566B8, sub_08056BA0, sub_08056B1C, sub_08056B7C, sub_080569D4, +void TextBoxHandler0(CurrentTextBox* this); +void TextBoxHandler1(CurrentTextBox* param_1); +void TextBoxHandlerAdvance(CurrentTextBox* ctb); +void TextBoxHandlerNextBox(CurrentTextBox* ctb); +void TextBoxHandler4(CurrentTextBox* ctb); +void TextBoxHandlerQuestion(CurrentTextBox* ctb); + +const TextBoxHandler gTextBoxHandlers[] = { + TextBoxHandler0, TextBoxHandler1, TextBoxHandlerAdvance, + TextBoxHandlerNextBox, TextBoxHandler4, TextBoxHandlerQuestion, }; typedef struct Window { @@ -56,10 +78,10 @@ typedef struct Window { u8 unk1; u8 unk2; u8 unk3; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; + u8 xPos; + u8 yPos; + u8 width; + u8 height; } Window; extern Window gCurrentWindow; extern Window gNewWindow; @@ -77,7 +99,7 @@ extern struct { extern u32 gUnk_0200005C; extern u8 gUnk_020227A0; -extern u8 gUnk_02000D00; +extern u8 gUnk_02000D00[0xD00]; extern const u8 gUnk_08107C0C[]; @@ -92,7 +114,7 @@ s32 sub_08056338(void) { void sub_08056360(void) { if ((gTextBox.doTextBox & 0x7f) != 0) { - gTextBox.doTextBox = 0x80 | 0x8; + gTextBox.doTextBox = 0x88; } } @@ -104,21 +126,21 @@ void TextboxNoOverlapFollow(u32 index) { } } -void TextboxNoOverlap(u32 index, Entity* ent) { +void TextboxNoOverlap(u32 index, Entity* entity) { s16 y; - s16 h; + s16 height; ShowTextbox(index); - y = ent->y.HALF.HI; - h = ent->height.HALF.HI; + y = entity->y.HALF.HI; + height = entity->height.HALF.HI; - if (((y + h) - gRoomControls.roomScrollY) > 0x58) { + if (((y + height) - gRoomControls.roomScrollY) > 0x58) { gTextBox.textWindowPosY = 1; } } -void sub_080563C8(u32 index, u32 y) { +void TextBoxAtYPosition(u32 index, u32 y) { TextboxAtPosition(index, 1, y); } @@ -159,29 +181,29 @@ void MessageUpdate(void) { gCurrentTextBox._8a--; } else { do { - iVar1 = gUnk_08107BC8[gCurrentTextBox._88](); + iVar1 = gTextBoxFunctions[gCurrentTextBox._88](); } while (iVar1 != 0); } if (gCurrentTextBox._9d != 0) { gCurrentTextBox._9d = 0; - sub_08056F70(); + Load_02000D00_Asyc(); } DeleteWindow(); CreateWindow(); } -void sub_080564C8(u32 a1) { - gCurrentTextBox._88 = a1; - gCurrentTextBox._89 = 0; +void sub_080564C8(u32 unk) { + gCurrentTextBox._88 = unk; + gCurrentTextBox.state = 0; } -u32 sub_080564DC(void) { +u32 TextBoxFunction0(void) { gCurrentTextBox._98.bytes.b1 = 0; return 0; } // regalloc in loop -NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) { +NONMATCH("asm/non_matching/textbox/TextBoxFunction1.inc", u32 TextBoxFunction1(void)) { u32 uVar1; char* dest; u32 i; @@ -195,16 +217,17 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) { gCurrentTextBox.textBox.textSpeed = gUnk_02000000->messageSpeed; } gCurrentTextBox._9c = 0xff; - sub_0805EEB4(&gCurrentTextBox._20, gCurrentTextBox.textBox.textIndex /*, 32*/); - gCurrentTextBox._5c = 2; - gCurrentTextBox._5d = 0xe; - dest = gCurrentTextBox._5e; + sub_0805EEB4(&gCurrentTextBox._20, gCurrentTextBox.textBox.textIndex); + gCurrentTextBox.playerName[0] = 2; + gCurrentTextBox.playerName[1] = 0xe; + dest = &gCurrentTextBox.playerName[2]; - for (i = 0; i < 6; ++i) { + for (i = 0; i < FILENAME_LENGTH; ++i) { c = gSave.playerName[i]; if (c == '\0') break; - dest[i] = c; + *dest = c; + dest++; } dest[0] = 2; @@ -212,69 +235,69 @@ NONMATCH("asm/non_matching/textbox/sub_080564EC.inc", u32 sub_080564EC(void)) { dest[2] = 0; sub_08056FBC(&gCurrentTextBox); gCurrentTextBox._2c = &gUnk_08107BE0; - gCurrentTextBox._50.unk8 = &gUnk_02000D00; + gCurrentTextBox._50.unk8 = gUnk_02000D00; gCurrentTextBox._50.unk4 = 0xd0; - sub_08056C54(2); + SetDoTextBox(2); sub_08056BDC(0); sub_080564C8(2); return 1; } END_NONMATCH -u32 sub_080565B4(void) { - if (gCurrentTextBox._89 == 0) { - gCurrentTextBox._89 = 1; +u32 TextBoxFunctionOpen(void) { + if (gCurrentTextBox.state == 0) { + gCurrentTextBox.state = 1; gCurrentTextBox._98.bytes.b1 = 1; sub_08056F88(gCurrentTextBox.textBox.unk3, gCurrentTextBox._50.unk3); SoundReq(SFX_TEXTBOX_OPEN); } - if (sub_08056CC0(1)) { + if (CalcWindowSize(1)) { gCurrentTextBox._98.bytes.b1 = 2; sub_080564C8(2); } return 0; } -u32 sub_080565F8(void) { - if (gCurrentTextBox._89 == 0) { - gCurrentTextBox._89 = 1; +u32 TextBoxFunctionClose(void) { + if (gCurrentTextBox.state == 0) { + gCurrentTextBox.state = 1; gCurrentTextBox._98.bytes.b1 = 3; sub_08056BDC(0); SoundReq(SFX_TEXTBOX_CLOSE); } - if (sub_08056CC0(-1)) { + if (CalcWindowSize(-1)) { gCurrentTextBox._98.bytes.b1 = 0; sub_080564C8(2); } return 0; } -u32 sub_08056640(void) { - sub_08056C54(0); +u32 TextBoxFunction5(void) { + SetDoTextBox(0); sub_080564C8(0); return 0; } -u32 sub_08056654(void) { - sub_08056C54(4); - gUnk_08107BF4[gCurrentTextBox._89](&gCurrentTextBox); - sub_08056CC0(0); +u32 HandleTextBox(void) { + SetDoTextBox(4); + gTextBoxHandlers[gCurrentTextBox.state](&gCurrentTextBox); + CalcWindowSize(0); return 0; } -void sub_08056684(CurrentTextBox* this) { +void TextBoxHandler0(CurrentTextBox* this) { if ((gCurrentTextBox._20 & 1) == 0) { - if (gCurrentTextBox._98.bytes.b1 == '\0') { + if (gCurrentTextBox._98.bytes.b1 == 0) { sub_080564C8(5); } } else { - this->_89 = 1; + this->state = 1; } } -void sub_080566B8(CurrentTextBox* param_1) { +void TextBoxHandler1(CurrentTextBox* param_1) { u32 uVar3; s32 iVar4; int iVar5; @@ -326,10 +349,10 @@ NONMATCH("asm/non_matching/textbox/sub_08056750.inc", u16 sub_08056750(CurrentTe switch (r7) { case 0: if (gUnk_02000040.unk_00 == 1) { - param_1->_89 = 5; + param_1->state = 5; sub_08056ABC(0, 0); } else { - param_1->_89 = 2; + param_1->state = 2; } break; case 1: @@ -337,7 +360,7 @@ NONMATCH("asm/non_matching/textbox/sub_08056750.inc", u16 sub_08056750(CurrentTe if (param_1->_98.bytes.b0 == 0) { sub_08056BDC(1); } else { - param_1->_89 = 3; + param_1->state = 3; } break; case 2: @@ -452,7 +475,7 @@ void sub_080569C4(CurrentTextBox* ctb, u32 unk) { extern u8 gUnk_08107C14; extern u8 gUnk_08107C0F; -void sub_080569D4(CurrentTextBox* ctb) { +void TextBoxHandlerQuestion(CurrentTextBox* ctb) { s32 r1, r5, r6; u32 error; u8* ptr1; @@ -477,7 +500,7 @@ void sub_080569D4(CurrentTextBox* ctb) { gUnk_02000040.unk_00 = 3; MemClear(&gUnk_02024030, sizeof(gUnk_02024030)); SoundReq(0x6a); // SFX_TEXTBOX_SELECT - ctb->_89 = 1; + ctb->state = 1; break; case DPAD_LEFT: r5--; @@ -517,7 +540,7 @@ void sub_08056ABC(u32 unk_0, u32 unk_1) { gCurrentTextBox._9d = 1; } -void sub_08056B1C(CurrentTextBox* ctb) { +void TextBoxHandlerNextBox(CurrentTextBox* ctb) { u32 t; u8* ptr; gTextBox.unk = 0; @@ -525,13 +548,13 @@ void sub_08056B1C(CurrentTextBox* ctb) { ctb->_94--; if (ctb->_94 != 0) return; - ptr = &ctb->_89; + ptr = &ctb->state; t = 4; } else { - if ((gInput.newKeys & 0x1f3) != 0) { + if (TEXTBOX_PRESS_ANY_ADVANCE_KEYS) { SoundReq(0x68); // SFX_TEXTBOX_SWAP ctb->_98.bytes.b2 = 0; - ptr = &ctb->_89; + ptr = &ctb->state; t = 4; } else { ptr = &ctb->_98.bytes.b2; @@ -541,16 +564,16 @@ void sub_08056B1C(CurrentTextBox* ctb) { *ptr = t; } -void sub_08056B7C(CurrentTextBox* ctb) { +void TextBoxHandler4(CurrentTextBox* ctb) { sub_08056BDC(0); sub_080569C4(ctb, ctb->_8f | 0x40); - ctb->_89 = 1; + ctb->state = 1; } -void sub_08056BA0(CurrentTextBox* ctb) { +void TextBoxHandlerAdvance(CurrentTextBox* ctb) { gTextBox.unk = 0; - sub_08056C54(7); - if ((ctb->_8e != 1) && ((ctb->_8e == 2 || ((gInput.newKeys & 0x1f3) != 0)))) { + SetDoTextBox(7); + if ((ctb->_8e != 1) && (ctb->_8e == 2 || TEXTBOX_PRESS_ANY_ADVANCE_KEYS)) { sub_080564C8(4); } } @@ -558,8 +581,8 @@ void sub_08056BA0(CurrentTextBox* ctb) { void sub_08056BDC(u32 unk) { gCurrentTextBox._98.bytes.b0 = unk; if (unk == 0) { - MemFill32(-1, &gUnk_02000D00, 0xd00); - sub_08056F70(); + MemFill32(0xFFFFFFFF, gUnk_02000D00, sizeof(gUnk_02000D00)); + Load_02000D00_Asyc(); gCurrentTextBox._9e = 0xf082; gCurrentTextBox._a0 = 0xf083; gCurrentTextBox._a2 = 0xf0b6; @@ -573,98 +596,86 @@ void sub_08056BDC(u32 unk) { sub_080569C4(&gCurrentTextBox, gCurrentTextBox._8f | 0x40); } -void sub_08056C54(u32 unk) { - gTextBox.doTextBox = gCurrentTextBox.textBox.doTextBox = unk; +void SetDoTextBox(u32 doTextbox) { + gTextBox.doTextBox = gCurrentTextBox.textBox.doTextBox = doTextbox; } void DeleteWindow(void) { - u32 r0; u16* ptr; - u16* ptr2; int i, j; - Window* tp = &gCurrentWindow; + Window* window = &gCurrentWindow; - if (tp->unk1 != 0) { - tp->unk1 = 0; - r0 = tp->unk5 << 5; - r0 += tp->unk4; - ptr = &((u16*)(&gBG0Buffer.filler0))[r0]; - i = tp->unk7 + 2; + if (window->unk1 != 0) { + window->unk1 = 0; + ptr = &gBG0Buffer[TEXTBOX_POSITION_INDEX(*window)]; + i = window->height + 2; do { j = 0; do { ptr[j] = 0; - } while (j++, j < tp->unk6 + 2); - ptr += 0x20; + } while (j++, j < window->width + 2); + ptr += TEXTBOX_WIDTH; i--; } while (i > 0); - sub_0801C4A0(tp->unk5, tp->unk7); + sub_0801C4A0(window->yPos, window->height); sub_0801C494(); } } -u32 sub_08056CC0(u32 unk) { - u32 iVar1; - u32 uVar2; - u32 uVar3; - Window* ptr; +u32 CalcWindowSize(u32 fade) { + u32 scale; + u32 ret; + Window* window; - uVar3 = 0; + ret = 0; - // inline function? - gCurrentTextBox._98.bytes.b3 += unk; - if (gCurrentTextBox._98.bytes.b3 < 1) { - gCurrentTextBox._98.bytes.b3 = 0; + gCurrentTextBox._98.bytes.sizeScale += fade; + if (gCurrentTextBox._98.bytes.sizeScale < 1) { + gCurrentTextBox._98.bytes.sizeScale = 0; } else { - if (gCurrentTextBox._98.bytes.b3 < 8) + if (gCurrentTextBox._98.bytes.sizeScale < 8) goto LAB_08056cee; - gCurrentTextBox._98.bytes.b3 = 8; + gCurrentTextBox._98.bytes.sizeScale = 8; } - uVar3 = 1; + ret = 1; LAB_08056cee: - ptr = &gNewWindow; - if (gCurrentTextBox._98.bytes.b3 != 0) { - iVar1 = gCurrentTextBox._98.bytes.b3; - uVar2 = (iVar1 * (gCurrentTextBox.textBox.textWindowWidth << 1)) / 16; - ptr->unk6 = uVar2; - if ((uVar2 & 1) != 0) { - ptr->unk6++; + window = &gNewWindow; + if (gCurrentTextBox._98.bytes.sizeScale != 0) { + scale = gCurrentTextBox._98.bytes.sizeScale; + window->width = (scale * (gCurrentTextBox.textBox.textWindowWidth << 1)) / 16; + if ((window->width & 1) != 0) { + window->width++; } - ptr->unk4 = - ((gCurrentTextBox.textBox.textWindowWidth / 2) + gCurrentTextBox.textBox.textWindowPosX) - (ptr->unk6 / 2); - uVar2 = (iVar1 * (gCurrentTextBox.textBox.textWindowHeight << 1)) / 16; - ptr->unk7 = uVar2; - if ((uVar2 & 1) != 0) { - ptr->unk7++; - } - ptr->unk5 = - ((gCurrentTextBox.textBox.textWindowHeight / 2) + gCurrentTextBox.textBox.textWindowPosY) - (ptr->unk7 / 2); - } else { - ptr->unk5 = 0xff; - ptr->unk4 = -1; - ptr->unk7 = -1; - ptr->unk6 = -1; - } - ptr->unk1 = 1; - return uVar3; -} + window->xPos = ((gCurrentTextBox.textBox.textWindowWidth / 2) + gCurrentTextBox.textBox.textWindowPosX) - + (window->width / 2); -void DispMessageFrame(u16*, u32, u32, u32); -extern void DispString(void); -extern void DispCursor(void); + window->height = (scale * (gCurrentTextBox.textBox.textWindowHeight << 1)) / 16; + if ((window->height & 1) != 0) { + window->height++; + } + window->yPos = ((gCurrentTextBox.textBox.textWindowHeight / 2) + gCurrentTextBox.textBox.textWindowPosY) - + (window->height / 2); + } else { + window->yPos = -1; + window->xPos = -1; + window->height = -1; + window->width = -1; + } + window->unk1 = 1; + return ret; +} void CreateWindow(void) { s32 r0, r3; u16* ptr; - r0 = gCurrentTextBox._98.bytes.b3; + r0 = gCurrentTextBox._98.bytes.sizeScale; if (r0 <= 0) return; - r0 = ((gNewWindow.unk5 << 5) + gNewWindow.unk4); - ptr = &((u16*)(&gBG0Buffer.filler0))[r0]; + ptr = &gBG0Buffer[TEXTBOX_POSITION_INDEX(gNewWindow)]; r3 = 0xf07b; - DispMessageFrame(ptr, gNewWindow.unk6, gNewWindow.unk7, r3); + DispMessageFrame(ptr, gNewWindow.width, gNewWindow.height, r3); DispString(); DispCursor(); gCurrentWindow = gNewWindow; @@ -686,13 +697,13 @@ void DispString(void) { Window* window = &gNewWindow; - if (window->unk6 != 0) { - if (window->unk7 != 0) { - r4 = window->unk7; - r5 = &gUnk_02034CB2[(window->unk5 << 5) + window->unk4]; + if (window->width != 0) { + if (window->height != 0) { + r4 = window->height; + r5 = &gUnk_02034CB2[TEXTBOX_POSITION_INDEX(*window)]; i = (s32)(4 - r4) / 2; do { - j = window->unk6; + j = window->width; r2 = gUnk_0202281E[i]; r5 += 0x20; r0 = i + 1; @@ -715,16 +726,16 @@ void DispCursor(void) { u16* ptr; if ((gCurrentTextBox._98.word & 0x10ff00) == 0x100200) { - ptr = &((u16*)(gBG0Buffer.filler0))[(gNewWindow.unk5 << 5) + gNewWindow.unk4]; - r0 = (((gNewWindow.unk7 + 1) << 5) - 2); - r0 += gNewWindow.unk6; + ptr = &gBG0Buffer[TEXTBOX_POSITION_INDEX(gNewWindow)]; + r0 = (((gNewWindow.height + 1) << 5) - 2); + r0 += gNewWindow.width; ptr += r0; *ptr = 0xf080; } } -void sub_08056F70(void) { - LoadResourceAsync(&gUnk_02000D00, 0x0600D040, 0xd00); +void Load_02000D00_Asyc(void) { + LoadResourceAsync(gUnk_02000D00, 0x0600D040, sizeof(gUnk_02000D00)); } void sub_08056F88(u32 unk_1, u32 unk_2) { @@ -741,8 +752,8 @@ void sub_08056F88(u32 unk_1, u32 unk_2) { } void sub_08056FBC(CurrentTextBox* ctb) { - sub_08056FEC(ctb->textBox.field_0x10, &ctb->_5e[0xa]); - sub_08056FEC(ctb->textBox.field_0x14, &ctb->_5e[0x12]); + sub_08056FEC(ctb->textBox.field_0x10, &ctb->_66[0x2]); + sub_08056FEC(ctb->textBox.field_0x14, &ctb->_66[0xa]); sub_08056FEC(ctb->textBox.field_0x18, &ctb->_77[0x1]); sub_08056FEC(ctb->textBox.field_0x1c, &ctb->_77[0x9]); } From c9e1cd1f353d481641dcd1fc1d9f8768fd478a55 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 8 Apr 2021 14:28:11 +0200 Subject: [PATCH 3/3] some more documentation --- src/textbox.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/textbox.c b/src/textbox.c index c97d5d6a..54ec12f8 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -692,7 +692,7 @@ extern u16 gUnk_0202281E[]; void DispString(void) { u32 r0, r2, r4; - u16 *r5, *ptr2; + u16 *ptr, *ptr2; s32 i, j; Window* window = &gNewWindow; @@ -700,15 +700,15 @@ void DispString(void) { if (window->width != 0) { if (window->height != 0) { r4 = window->height; - r5 = &gUnk_02034CB2[TEXTBOX_POSITION_INDEX(*window)]; + ptr = &gUnk_02034CB2[TEXTBOX_POSITION_INDEX(*window)]; i = (s32)(4 - r4) / 2; do { j = window->width; r2 = gUnk_0202281E[i]; - r5 += 0x20; + ptr += TEXTBOX_WIDTH; r0 = i + 1; r4--; - ptr2 = r5; + ptr2 = ptr; do { *ptr2 = r2; ptr2++; @@ -722,14 +722,14 @@ void DispString(void) { } void DispCursor(void) { - u32 r0; + u32 offset; u16* ptr; if ((gCurrentTextBox._98.word & 0x10ff00) == 0x100200) { ptr = &gBG0Buffer[TEXTBOX_POSITION_INDEX(gNewWindow)]; - r0 = (((gNewWindow.height + 1) << 5) - 2); - r0 += gNewWindow.width; - ptr += r0; + offset = (((gNewWindow.height + 1) * TEXTBOX_WIDTH) - 2); + offset += gNewWindow.width; + ptr += offset; *ptr = 0xf080; } }