From d0fcc152fb647bef2de5083c310d76b512a80501 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 27 Sep 2024 16:52:14 +0200 Subject: [PATCH] sub_8008E58 --- asm/text.s | 350 ---------------------------------------------------- src/text2.c | 161 ++++++++++++++++++++++++ 2 files changed, 161 insertions(+), 350 deletions(-) diff --git a/asm/text.s b/asm/text.s index 9ec247abe..1b5253b9d 100644 --- a/asm/text.s +++ b/asm/text.s @@ -7,356 +7,6 @@ - thumb_func_start CallPrepareTextbox_8008C54 -CallPrepareTextbox_8008C54: - push {lr} - adds r1, r0, 0 - ldr r0, _08008C64 - bl PrepareTextbox_8008C6C - pop {r0} - bx r0 - .align 2, 0 -_08008C64: .4byte gUnknown_2027370 - thumb_func_end CallPrepareTextbox_8008C54 - - thumb_func_start nullsub_169 -nullsub_169: - bx lr - thumb_func_end nullsub_169 - - thumb_func_start PrepareTextbox_8008C6C -PrepareTextbox_8008C6C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r9, r0 - mov r8, r1 - lsls r0, r1, 3 - add r0, r8 - lsls r0, 3 - mov r1, r9 - adds r6, r1, r0 - adds r0, r6, 0 - adds r0, 0x45 - ldrb r0, [r0] - cmp r0, 0 - bne _08008CBE - movs r2, 0x4 - ldrsh r0, [r6, r2] - movs r7, 0x8 - ldrsh r1, [r6, r7] - muls r0, r1 - lsls r4, r0, 5 - movs r5, 0 - movs r0, 0x44 - adds r0, r6 - mov r10, r0 - cmp r5, r4 - bge _08008D1E -_08008CA8: - lsrs r1, r5, 2 - lsls r1, 2 - ldr r0, [r6, 0x18] - adds r0, r1 - movs r1, 0x20 - bl CpuClear - adds r5, 0x20 - cmp r5, r4 - blt _08008CA8 - b _08008D1E -_08008CBE: - movs r1, 0x4 - ldrsh r0, [r6, r1] - movs r2, 0x8 - ldrsh r1, [r6, r2] - subs r1, 0x1 - muls r1, r0 - lsls r1, 5 - str r1, [sp, 0x8] - ldr r4, [r6, 0x18] - movs r5, 0 - movs r7, 0x44 - adds r7, r6 - mov r10, r7 - cmp r5, r0 - bge _08008D04 - movs r0, 0x1 - negs r0, r0 - mov r12, r0 - movs r1, 0 - ldr r3, _08008D84 - ldr r2, _08008D88 -_08008CE8: - mov r7, r12 - stm r4!, {r7} - stm r4!, {r3} - stm r4!, {r2} - stm r4!, {r1} - stm r4!, {r1} - stm r4!, {r1} - stm r4!, {r1} - stm r4!, {r1} - adds r5, 0x1 - movs r7, 0x4 - ldrsh r0, [r6, r7] - cmp r5, r0 - blt _08008CE8 -_08008D04: - movs r5, 0 - ldr r0, [sp, 0x8] - cmp r5, r0 - bge _08008D1E -_08008D0C: - adds r0, r4, 0 - movs r1, 0x20 - bl CpuClear - adds r4, 0x20 - adds r5, 0x20 - ldr r1, [sp, 0x8] - cmp r5, r1 - blt _08008D0C -_08008D1E: - ldr r0, [r6, 0xC] - cmp r0, 0x6 - bne _08008D60 - adds r5, r6, 0 - adds r5, 0x46 - movs r4, 0 - movs r0, 0x1 - strb r0, [r5] - movs r2, 0x4 - ldrsh r0, [r6, r2] - lsls r0, 3 - str r0, [sp] - movs r0, 0xE - str r0, [sp, 0x4] - mov r0, r9 - mov r1, r8 - movs r2, 0 - movs r3, 0xA - bl sub_8007958 - movs r7, 0x4 - ldrsh r0, [r6, r7] - lsls r0, 3 - str r0, [sp] - movs r0, 0xD - str r0, [sp, 0x4] - mov r0, r9 - mov r1, r8 - movs r2, 0 - movs r3, 0xB - bl sub_8007958 - strb r4, [r5] -_08008D60: - ldr r0, [r6, 0x28] - str r0, [r6, 0x30] - ldr r0, [r6, 0x1C] - str r0, [r6, 0x34] - ldr r0, [r6, 0x2C] - str r0, [r6, 0x38] - movs r0, 0x1 - mov r1, r10 - strb r0, [r1] - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008D84: .4byte 0xeeeeeeee -_08008D88: .4byte 0xdddddddd - thumb_func_end PrepareTextbox_8008C6C - - thumb_func_start sub_8008D8C -sub_8008D8C: - push {lr} - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 3 - ldr r0, _08008DA4 - adds r1, r0 - ldr r0, [r1, 0x38] - cmp r0, 0 - beq _08008DA0 - movs r0, 0x1 -_08008DA0: - pop {r1} - bx r1 - .align 2, 0 -_08008DA4: .4byte gUnknown_2027370 - thumb_func_end sub_8008D8C - - thumb_func_start sub_8008DA8 -sub_8008DA8: - movs r0, 0 - bx lr - thumb_func_end sub_8008DA8 - - thumb_func_start sub_8008DAC -sub_8008DAC: - ldr r3, _08008DC0 - lsls r0, 1 - lsls r1, 6 - adds r0, r1 - adds r0, r3 - strh r2, [r0] - ldr r1, _08008DC4 - movs r0, 0x1 - strb r0, [r1] - bx lr - .align 2, 0 -_08008DC0: .4byte gUnknown_202B038 -_08008DC4: .4byte gUnknown_20274A5 - thumb_func_end sub_8008DAC - - thumb_func_start sub_8008DC8 -sub_8008DC8: - push {r4,lr} - ldr r4, _08008DEC - lsls r0, 1 - lsls r1, 6 - adds r0, r1 - adds r1, r0, r4 - strh r2, [r1] - movs r1, 0x80 - lsls r1, 4 - adds r4, r1 - adds r0, r4 - strh r3, [r0] - ldr r1, _08008DF0 - movs r0, 0x1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008DEC: .4byte gUnknown_202B038 -_08008DF0: .4byte gUnknown_20274A5 - thumb_func_end sub_8008DC8 - - thumb_func_start sub_8008DF4 -sub_8008DF4: - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r3, r2, 0 - ldrb r0, [r3] - ldr r1, _08008E4C - mov r12, r1 - cmp r0, 0 - beq _08008E3E - ldr r6, _08008E50 -_08008E08: - ldrb r1, [r3] - adds r0, r1, 0 - subs r0, 0x61 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x19 - bhi _08008E1E - adds r0, r1, 0 - subs r0, 0x20 - lsls r0, 24 - lsrs r1, r0, 24 -_08008E1E: - lsls r2, r4, 1 - lsls r0, r5, 6 - adds r2, r0 - adds r2, r6 - movs r7, 0x96 - lsls r7, 2 - adds r0, r1, r7 - ldr r7, _08008E54 - adds r1, r7, 0 - orrs r0, r1 - strh r0, [r2] - adds r3, 0x1 - adds r4, 0x1 - ldrb r0, [r3] - cmp r0, 0 - bne _08008E08 -_08008E3E: - movs r0, 0x1 - mov r1, r12 - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008E4C: .4byte gUnknown_20274A5 -_08008E50: .4byte gUnknown_202B038 -_08008E54: .4byte 0xfffff000 - thumb_func_end sub_8008DF4 - - thumb_func_start sub_8008E58 -sub_8008E58: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - mov r8, r1 - adds r4, r2, 0 - ldrb r0, [r4] - ldr r7, _08008EC4 - cmp r0, 0 - beq _08008EB4 - adds r1, r0, 0 - cmp r3, 0 - beq _08008EB4 - ldr r0, _08008EC8 - mov r12, r0 -_08008E76: - adds r0, r1, 0 - subs r0, 0x61 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x19 - bhi _08008E8A - adds r0, r1, 0 - subs r0, 0x20 - lsls r0, 24 - lsrs r1, r0, 24 -_08008E8A: - lsls r2, r5, 1 - mov r6, r8 - lsls r0, r6, 6 - adds r2, r0 - add r2, r12 - movs r6, 0x96 - lsls r6, 2 - adds r0, r1, r6 - ldr r6, _08008ECC - adds r1, r6, 0 - orrs r0, r1 - strh r0, [r2] - adds r4, 0x1 - adds r5, 0x1 - subs r3, 0x1 - ldrb r0, [r4] - cmp r0, 0 - beq _08008EB4 - adds r1, r0, 0 - cmp r3, 0 - bne _08008E76 -_08008EB4: - movs r0, 0x1 - strb r0, [r7] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08008EC4: .4byte gUnknown_20274A5 -_08008EC8: .4byte gUnknown_202B038 -_08008ECC: .4byte 0xfffff000 - thumb_func_end sub_8008E58 thumb_func_start sub_8008ED0 sub_8008ED0: diff --git a/src/text2.c b/src/text2.c index 86473eb7f..f7b6be917 100644 --- a/src/text2.c +++ b/src/text2.c @@ -3210,3 +3210,164 @@ void sub_80089AC(const UnkTextStruct2 *r4, UnkTextStruct2_sub *r5_Str) } } } + +void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId); + +void CallPrepareTextbox_8008C54(u32 strId) +{ + PrepareTextbox_8008C6C(gUnknown_2027370, strId); +} + +UNUSED void nullsub_169(void) {} + +void PrepareTextbox_8008C6C(UnkTextStruct1 *strArr, u32 strId) +{ + s32 i; + UnkTextStruct1 *strPtr = &strArr[strId]; + + if (!strPtr->unk45) { + s32 count = (strPtr->unk4 * strPtr->unk8) * 32; + for (i = 0; i < count; i += 32) { + CpuClear(&strPtr->unk18[i / 4u], 32); + } + } + else { + s32 count = (strPtr->unk4 * (strPtr->unk8 - 1)) * 32; + u32 *ptr = strPtr->unk18; + for (i = 0; i < strPtr->unk4; i++) { + *(ptr++) = 0xFFFFFFFF; + *(ptr++) = 0xEEEEEEEE; + *(ptr++) = 0xDDDDDDDD; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + *(ptr++) = 0; + } + for (i = 0; i < count; i += 32) { + CpuClear(ptr, 32); + ptr += 8; + } + } + + if (strPtr->unkC == 6) { + strPtr->unk46 = 1; + sub_8007958(strArr, strId, 0, 10, strPtr->unk4 * 8, 0xE); + sub_8007958(strArr, strId, 0, 11, strPtr->unk4 * 8, 0xD); + strPtr->unk46 = 0; + } + + strPtr->unk30 = strPtr->unk28; + strPtr->unk34 = strPtr->unk1C; + strPtr->unk38 = strPtr->unk2C; + strPtr->unk44 = 1; +} + +bool8 sub_8008D8C(u32 strId) +{ + UnkTextStruct1 *strPtr = &gUnknown_2027370[strId]; + return (strPtr->unk38 != 0); +} + +UNUSED bool8 sub_8008DA8(void) +{ + return FALSE; +} + +UNUSED void sub_8008DAC(s32 a0, s32 a1, s32 a2) +{ + gUnknown_202B038[0][a1][a0] = a2; + gUnknown_20274A5 = 1; +} + +void sub_8008DC8(s32 a0, s32 a1, s32 a2, s32 a3) +{ + gUnknown_202B038[0][a1][a0] = a2; + gUnknown_202B038[1][a1][a0] = a3; + gUnknown_20274A5 = 1; +} + +UNUSED void sub_8008DF4(s32 a0, s32 a1, u8 *a2) +{ + u8 r1; + + while (1) { + if (*a2 == 0) + break; + + r1 = *a2; + if (r1 >= 97 && r1 <= 122) { + r1 -= 32; + } + gUnknown_202B038[0][a1][a0] = 0xF000 | (r1 + 0x258); + a2++; + a0++; + } + gUnknown_20274A5 = 1; +} + +UNUSED void sub_8008E58(s32 a0, s32 a1, u8 *a2, s32 a3) +{ + u8 r1; + + while (1) { + if (*a2 == 0) + break; + + r1 = *a2; + if (a3 == 0) + break; + + if (r1 >= 97 && r1 <= 122) { + r1 -= 32; + } + gUnknown_202B038[0][a1][a0] = 0xF000 | (r1 + 0x258); + a2++; + a0++; + a3--; + } + gUnknown_20274A5 = 1; +} + +extern s16 gCharacterSpacing; + +s32 sub_8008ED0(const u8 *str) +{ + s32 ret = 0; + + while (1) { + u32 chr; + + str = xxx_get_next_char_from_string(str, &chr); + if (chr == 0) + break; + if (chr == 0xD) + break; + if (chr == 0xA) + break; + if (chr == 0x82A0 || chr == 0x82A2) + continue; + + if (chr == 0x23) { + switch (*str) { + case 0x6E: + return ret; + case 0x5B: + return ret; + case 0x50: + return ret; + } + } + else if (chr == 0x60) { + ret += 6; + } + else { + unkChar *ptr = GetCharacter(chr); + if (ptr != NULL) { + ret += ptr->unk6 + gCharacterSpacing; + } + } + } + + return ret; +}