diff --git a/asm/text.s b/asm/text.s index 1b5253b9d..12cbc1f6c 100644 --- a/asm/text.s +++ b/asm/text.s @@ -8,367 +8,6 @@ - thumb_func_start sub_8008ED0 -sub_8008ED0: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r5, 0 - b _08008F64 -_08008EDA: - ldr r0, _08008F18 - cmp r1, r0 - beq _08008F64 - adds r0, 0x2 - cmp r1, r0 - beq _08008F64 - cmp r1, 0x1B - beq _08008F7E - cmp r1, 0x23 - bne _08008F44 - ldrb r0, [r2] - cmp r0, 0x6E - beq _08008F7E - cmp r0, 0x5B - beq _08008F7E - cmp r0, 0x50 - beq _08008F7E - cmp r0, 0x57 - beq _08008F40 - cmp r0, 0x57 - bgt _08008F22 - cmp r0, 0x43 - beq _08008F38 - cmp r0, 0x43 - bgt _08008F1C - cmp r0, 0x2B - beq _08008F40 - cmp r0, 0x3D - beq _08008F34 - b _08008F64 - .align 2, 0 -_08008F18: .4byte 0x000082a0 -_08008F1C: - cmp r0, 0x52 - beq _08008F3C - b _08008F64 -_08008F22: - cmp r0, 0x72 - beq _08008F3C - cmp r0, 0x72 - bgt _08008F30 - cmp r0, 0x63 - beq _08008F38 - b _08008F64 -_08008F30: - cmp r0, 0x7E - bne _08008F64 -_08008F34: - adds r4, r2, 0x2 - b _08008F64 -_08008F38: - adds r4, 0x2 - b _08008F64 -_08008F3C: - adds r4, 0x1 - b _08008F64 -_08008F40: - adds r4, r2, 0x1 - b _08008F64 -_08008F44: - cmp r1, 0x60 - bne _08008F4C - adds r5, 0x6 - b _08008F64 -_08008F4C: - adds r0, r1, 0 - bl GetCharacter - cmp r0, 0 - beq _08008F64 - movs r1, 0x6 - ldrsh r0, [r0, r1] - ldr r1, _08008F88 - movs r2, 0 - ldrsh r1, [r1, r2] - adds r0, r1 - adds r5, r0 -_08008F64: - adds r0, r4, 0 - mov r1, sp - bl xxx_get_next_char_from_string - adds r2, r0, 0 - adds r4, r2, 0 - ldr r1, [sp] - cmp r1, 0 - beq _08008F7E - cmp r1, 0xD - beq _08008F7E - cmp r1, 0xA - bne _08008EDA -_08008F7E: - adds r0, r5, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08008F88: .4byte gCharacterSpacing - thumb_func_end sub_8008ED0 - - thumb_func_start sub_8008F8C -sub_8008F8C: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x20] - ldr r2, [sp, 0x24] - ldr r0, _08008FB8 - str r3, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl xxx_draw_string - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008FB8: .4byte gUnknown_2027370 - thumb_func_end sub_8008F8C - - thumb_func_start PrintStringOnWindow -PrintStringOnWindow: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x20] - ldr r0, _08008FE8 - str r3, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0xD - str r1, [sp, 0xC] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl xxx_draw_string - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08008FE8: .4byte gUnknown_2027370 - thumb_func_end PrintStringOnWindow - - thumb_func_start nullsub_170 -nullsub_170: - bx lr - thumb_func_end nullsub_170 - - thumb_func_start sub_8008FF0 -sub_8008FF0: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - ldr r1, [sp, 0x20] - ldr r0, _0800901C - str r3, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0xD - str r1, [sp, 0xC] - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl xxx_draw_string - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800901C: .4byte gUnknown_2027370 - thumb_func_end sub_8008FF0 - - thumb_func_start nullsub_171 -nullsub_171: - bx lr - thumb_func_end nullsub_171 - - thumb_func_start xxx_draw_string -xxx_draw_string: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x40 - adds r5, r0, 0 - adds r4, r3, 0 - ldr r0, [sp, 0x5C] - mov r8, r0 - ldr r7, [sp, 0x64] - add r0, sp, 0x8 - strh r1, [r0] - strh r2, [r0, 0x2] - str r1, [sp, 0x14] - movs r0, 0x7 - str r0, [sp, 0x18] - add r2, sp, 0x3C - mov r9, r2 - b _08009128 -_0800904A: - ldr r0, _08009058 - cmp r3, r0 - bne _08009060 - ldr r1, _0800905C - movs r0, 0 - str r0, [r1] - b _08009128 - .align 2, 0 -_08009058: .4byte 0x000082a0 -_0800905C: .4byte gCurrentCharmap -_08009060: - ldr r0, _08009070 - cmp r3, r0 - bne _08009078 - ldr r1, _08009074 - movs r0, 0x1 - str r0, [r1] - b _08009128 - .align 2, 0 -_08009070: .4byte 0x000082a2 -_08009074: .4byte gCurrentCharmap -_08009078: - cmp r3, 0x1B - beq _0800914A - cmp r3, 0xD - beq _08009084 - cmp r3, 0xA - bne _08009096 -_08009084: - add r1, sp, 0x8 - ldr r0, [sp, 0x14] - strh r0, [r1] - adds r0, r1, 0 - ldrh r0, [r0, 0x2] - ldr r3, [sp, 0x68] - adds r0, r3 - strh r0, [r1, 0x2] - b _08009128 -_08009096: - cmp r3, 0x1D - bne _080090AA - add r1, sp, 0x8 - ldr r0, [sp, 0x14] - strh r0, [r1] - adds r0, r1, 0 - ldrh r0, [r0, 0x2] - adds r0, 0x5 - strh r0, [r1, 0x2] - b _08009128 -_080090AA: - cmp r3, 0x60 - bne _080090B8 - add r1, sp, 0x8 - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, 0x6 - b _08009126 -_080090B8: - cmp r7, 0 - bne _080090E0 - add r0, sp, 0x8 - movs r6, 0 - ldrsh r1, [r0, r6] - movs r6, 0x2 - ldrsh r2, [r0, r6] - ldr r0, [sp, 0x18] - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - adds r0, r5, 0 - bl xxx_draw_char - add r2, sp, 0x8 - adds r1, r2, 0 - ldrh r1, [r1] - adds r1, r0 - strh r1, [r2] - b _08009128 -_080090E0: - adds r0, r3, 0 - bl GetCharacter - adds r2, r0, 0 - cmp r2, 0 - beq _08009128 - add r0, sp, 0x8 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r0, _08009158 - movs r6, 0 - ldrsh r0, [r0, r6] - adds r0, 0xA - movs r3, 0x6 - ldrsh r2, [r2, r3] - subs r0, r2 - lsrs r2, r0, 31 - adds r0, r2 - asrs r0, 1 - adds r1, r0 - add r0, sp, 0x8 - movs r6, 0x2 - ldrsh r2, [r0, r6] - ldr r3, [sp, 0x3C] - ldr r0, [sp, 0x18] - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - adds r0, r5, 0 - bl xxx_draw_char - add r1, sp, 0x8 - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, r7 -_08009126: - strh r0, [r1] -_08009128: - adds r0, r5, 0 - adds r1, r4, 0 - add r2, sp, 0x8 - bl HandleTextFormat - adds r4, r0, 0 - mov r1, r9 - bl xxx_get_next_char_from_string - adds r4, r0, 0 - ldr r3, [sp, 0x3C] - cmp r3, 0 - beq _0800914A - ldr r2, [sp, 0x60] - cmp r3, r2 - beq _0800914A - b _0800904A -_0800914A: - add sp, 0x40 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08009158: .4byte gCharacterSpacing - thumb_func_end xxx_draw_string - thumb_func_start sub_800915C sub_800915C: push {r4,lr} diff --git a/src/text2.c b/src/text2.c index f7b6be917..10e31fb76 100644 --- a/src/text2.c +++ b/src/text2.c @@ -2839,7 +2839,7 @@ s32 HexDigitValue(u8 chr) return 1; } -u8 *xxx_get_next_char_from_string(u8 *a1, u32 *a0) +const u8 *xxx_get_next_char_from_string(const u8 *a1, u32 *a0) { s32 currChr = *a1; if (currChr == 0x7E) { @@ -3336,9 +3336,11 @@ s32 sub_8008ED0(const u8 *str) s32 ret = 0; while (1) { + const u8 *strPtr; u32 chr; - str = xxx_get_next_char_from_string(str, &chr); + strPtr = xxx_get_next_char_from_string(str, &chr); + str = strPtr; if (chr == 0) break; if (chr == 0xD) @@ -3347,22 +3349,36 @@ s32 sub_8008ED0(const u8 *str) break; if (chr == 0x82A0 || chr == 0x82A2) continue; + if (chr == 0x1B) + break; if (chr == 0x23) { - switch (*str) { - case 0x6E: - return ret; - case 0x5B: - return ret; - case 0x50: - return ret; + if (*strPtr == 0x6E || *strPtr == 0x5B || *strPtr == 0x50) + break; + switch (*strPtr) { + case 0x3D: + case 0x7E: + str = strPtr + 2; + break; + case 0x43: + case 0x63: + str += 2; + break; + case 0x52: + case 0x72: + str++; + break; + case 0x2B: + case 0x57: + str = strPtr + 1; + break; } } else if (chr == 0x60) { ret += 6; } else { - unkChar *ptr = GetCharacter(chr); + const struct unkChar *ptr = GetCharacter(chr); if (ptr != NULL) { ret += ptr->unk6 + gCharacterSpacing; } @@ -3371,3 +3387,91 @@ s32 sub_8008ED0(const u8 *str) return ret; } + +void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 windowId, s32 a5, s32 a6, s32 a7); + +void sub_8008F8C(s32 x, s32 y, const u8 *str, u32 windowId, s32 a4, s32 a5) +{ + xxx_draw_string(gUnknown_2027370, x, y, str, windowId, a4, 0, a5); +} + +void PrintStringOnWindow(s32 x, u32 y, const u8 *str, u32 windowId, u32 a4) +{ + xxx_draw_string(gUnknown_2027370, x, y, str, windowId, a4, 0, 0xD); +} + +UNUSED void nullsub_170(void) {} + +// Identical to PrintStringOnWindow +UNUSED void sub_8008FF0(s32 x, u32 y, const u8 *str, u32 windowId, u32 a4) +{ + xxx_draw_string(gUnknown_2027370, x, y, str, windowId, a4, 0, 0xD); +} + +UNUSED void nullsub_171(void) {} + +struct UnkDrawStringStruct +{ + s16 unk0; + s16 unk2; + s32 unkC; + u32 unk10; + u32 unk14; + u32 unk18; + void *unk24; + u32 unk2C; + u8 fill[24]; + u32 unk3C; +}; + +const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp); + +void xxx_draw_string(UnkTextStruct1 *strArr, s32 x, s32 y, const u8 *str, u32 windowId, s32 a5, s32 a6, s32 a7) +{ + struct UnkDrawStringStruct sp; + + sp.unk0 = x; + sp.unk2 = y; + sp.unk14 = x; + sp.unk18 = 7; + while (1) { + str = HandleTextFormat(strArr, str, &sp); + str = xxx_get_next_char_from_string(str, &sp.unk3C); + if (sp.unk3C == '\0' || sp.unk3C == a5) + break; + + if (sp.unk3C == 0x82A0) { + gCurrentCharmap = 0; + } + else if (sp.unk3C == 0x82A2) { + gCurrentCharmap = 1; + } + else if (sp.unk3C == 0x1B) { + break; + } + else if (sp.unk3C == 0xD || sp.unk3C == 0xA) { + sp.unk0 = sp.unk14; + sp.unk2 += a7; + } + else if (sp.unk3C == 0x1D) { + sp.unk0 = sp.unk14; + sp.unk2 += 5; + } + else if (sp.unk3C == 0x60) { + sp.unk0 += 6; + } + else if (a6 == 0) { + sp.unk0 += xxx_draw_char(strArr, sp.unk0, sp.unk2, sp.unk3C, sp.unk18, windowId); + } + else { + const struct unkChar *chrPtr = GetCharacter(sp.unk3C); + if (chrPtr != NULL) { + s32 x = sp.unk0; + s32 x2 = gCharacterSpacing + 10; + x +=((x2 - chrPtr->unk6) / 2); + xxx_draw_char(strArr, x, sp.unk2, sp.unk3C, sp.unk18, windowId); + sp.unk0 += a6; + } + } + } +}