From 78c811ed1def6cdc91bf6bc34fe69353f0a61dfd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Oct 2024 18:12:56 +0200 Subject: [PATCH] Match HandleTextFormat --- src/text2.c | 492 ++++++++++++---------------------------------------- 1 file changed, 112 insertions(+), 380 deletions(-) diff --git a/src/text2.c b/src/text2.c index e6b6856e2..aaff23db6 100644 --- a/src/text2.c +++ b/src/text2.c @@ -3531,123 +3531,125 @@ extern u8 gUnknown_20274A6[]; s32 InterpretColorChar(u8 a0); -#ifdef NONMATCHING -// https://decomp.me/scratch/lp1Fo const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp) { - while (*str == '#') { - if (str[1] == '[') { - const u8 *strBefore = str; - str += 2; - sp->unk21 = 0; - while (*str != '\0') { - if (*str == ']') { + while (1) { + if (str[0] == '#') { + if (str[1] == '[') { + const u8 *strBefore = str; + str += 2; + sp->unk21 = 0; + while (*str != '\0') { + if (*str == ']') { + str++; + break; + } str++; - break; } - str++; - } - if (sp->unk24 != NULL) { - const u8 *strNew = sp->unk24(strBefore, str, sp); - if (strNew != NULL) { - str = strNew; + if (sp->unk24 != NULL) { + const u8 *strNew = sp->unk24(strBefore, str, sp); + if (strNew != NULL) + str = strNew; } - } - if (sp->unk21 != 0) + if (sp->unk21 != 0) + break; + } + else if (str[1] == '=') { + sp->unk0 = str[2]; + str += 3; + if (*str == '.') + str++; + } + else if (str[1] == 'y') { + sp->unk2 = str[2]; + str += 3; + if (*str == '.') + str++; + } + else if (str[1] == '>') { + str = sub_800915C(&sp->unk0, str + 2); + } + else if (str[1] == '.') { + sp->unk0 += str[2]; + str += 3; + } + else if (str[1] == 'n') { + sp->unk0 = sp->unkC; + sp->unk2 += 11; + str += 2; + } + else if (str[1] == ':') { + sp->unk4 = sp->unk0; + str += 2; + } + else if (str[1] == ';') { + sp->unk0 = sp->unk4 + str[2]; + str += 3; + } + else if (str[1] == '+') { + str += 2; + sp->unk0 = (strArr[0].unk4 * 8) - sub_8008ED0(str); + sp->unk0 /= 2; + } + else if (str[1] == 'C') { + sp->unk14 = sp->unk10; + sp->unk10 = InterpretColorChar(str[2]); + str += 3; + } + else if (str[1] == '_') { + sp->unk14 = sp->unk10; + sp->unk10 = gUnknown_202749A[str[2]]; + str += 3; + if (*str == '.') + str++; + } + else if (str[1] == 'R') { + sp->unk10 = sp->unk14; + str += 2; + } + else if (str[1] == 'c') { + sp->unk18 = sp->unk10; + sp->unk10 = InterpretColorChar(str[2]); + str += 3; + } + else if (str[1] == 'r') { + sp->unk10 = sp->unk18; + str += 2; + } + else if (str[1] == 'S') { + gUnknown_20274A6[str[2] & 0x7F] = str[3] & 0x7F; + str += 4; + } + else if (str[1] == 'W') { + str += 2; + sp->unk8 = ((strArr[0].unk0 * 8) + sp->unk0) - 2; + sp->unkA = ((strArr[0].unk2 * 8) + sp->unk2) + 3; + sp->unk20 = 1; break; - } - else if (str[1] == '=') { - sp->unk0 = str[2]; - str += 3; - if (*str == '.') - str++; - } - else if (str[1] == 'y') { - sp->unk2 = str[2]; - str += 3; - if (*str == '.') - str++; - } - else if (str[1] == '>') { - str = sub_800915C(&sp->unk0, str + 2); - } - else if (str[1] == '.') { - sp->unk0 += str[2]; - str += 3; - } - else if (str[1] == 'n') { - sp->unk0 = sp->unkC; - sp->unk2 += 11; - str += 2; - } - else if (str[1] == ':') { - sp->unk0 = sp->unk4; - str += 2; - } - else if (str[1] == ';') { - sp->unk0 = sp->unk4 + str[2]; - str += 3; - } - else if (str[1] == '+') { - str += 2; - sp->unk0 = (strArr[0].unk4 * 8) - sub_8008ED0(str); - sp->unk0 /= 2; - } - else if (str[1] == 'C') { - sp->unk14 = sp->unk10; - sp->unk10 = InterpretColorChar(str[2]); - str += 3; - } - else if (str[1] == '_') { - sp->unk14 = sp->unk10; - sp->unk10 = gUnknown_202749A[str[2]]; - str += 3; - if (*str == '.') - str++; - } - else if (str[1] == 'R') { - sp->unk10 = sp->unk14; - str += 2; - } - else if (str[1] == 'c') { - sp->unk18 = sp->unk10; - sp->unk10 = InterpretColorChar(str[2]); - str += 3; - } - else if (str[1] == 'r') { - sp->unk10 = sp->unk18; - str += 2; - } - else if (str[1] == 'S') { - gUnknown_20274A6[str[2] & 0x7F] = str[3] & 0x7F; - str += 4; - } - else if (str[1] == 'W') { - str += 2; - sp->unk8 = ((strArr[0].unk0 * 8) + sp->unk0) - 2; - sp->unkA = ((strArr[0].unk2 * 8) + sp->unk2) + 3; - sp->unk20 = 1; - break; - } - else if (str[1] == 'P') { - str += 2; - sp->unk2 = 9999; - sp->unk1C = 0; - sp->unk20 = 1; - break; - } - else if (str[1] == 'p') { - str += 2; - sp->unk2 = 9999; - sp->unk1C = 1; - sp->unk20 = 1; - break; - } - else if (str[1] == '~') { - sp->unk2C = str[2]; - sp->unk21 = 1; - str += 3; + } + else if (str[1] == 'P') { + str += 2; + sp->unk2 = 9999; + sp->unk1C = 0; + sp->unk20 = 1; + break; + } + else if (str[1] == 'p') { + str += 2; + sp->unk2 = 9999; + sp->unk1C = 1; + sp->unk20 = 1; + break; + } + else if (str[1] == '~') { + sp->unk2C = str[2]; + sp->unk21 = 1; + str += 3; + } + else { + return str; + } } else { break; @@ -3657,276 +3659,6 @@ const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDraw return str; } -#else -NAKED const u8 *HandleTextFormat(UnkTextStruct1 *strArr, const u8 *str, struct UnkDrawStringStruct *sp) -{ - asm_unified("push {r4-r7,lr}\n" -" mov r7, r9\n" -" mov r6, r8\n" -" push {r6,r7}\n" -" mov r8, r0\n" -" adds r4, r1, 0\n" -" adds r5, r2, 0\n" -" movs r0, 0\n" -" mov r9, r0\n" -" movs r7, 0x1\n" -"_080091C0:\n" -" ldrb r0, [r4]\n" -" cmp r0, 0x23\n" -" beq _080091C8\n" -" b _0800937A\n" -"_080091C8:\n" -" ldrb r0, [r4, 0x1]\n" -" adds r1, r0, 0\n" -" cmp r1, 0x5B\n" -" bne _08009216\n" -" adds r2, r4, 0\n" -" adds r4, 0x2\n" -" adds r0, r5, 0\n" -" adds r0, 0x21\n" -" mov r1, r9\n" -" strb r1, [r0]\n" -" ldrb r1, [r4]\n" -" adds r6, r0, 0\n" -" cmp r1, 0\n" -" beq _080091F6\n" -" cmp r1, 0x5D\n" -" beq _080091F4\n" -"_080091E8:\n" -" adds r4, 0x1\n" -" ldrb r0, [r4]\n" -" cmp r0, 0\n" -" beq _080091F6\n" -" cmp r0, 0x5D\n" -" bne _080091E8\n" -"_080091F4:\n" -" adds r4, 0x1\n" -"_080091F6:\n" -" ldr r3, [r5, 0x24]\n" -" cmp r3, 0\n" -" beq _0800920C\n" -" adds r0, r2, 0\n" -" adds r1, r4, 0\n" -" adds r2, r5, 0\n" -" bl _call_via_r3\n" -" cmp r0, 0\n" -" beq _0800920C\n" -" adds r4, r0, 0\n" -"_0800920C:\n" -" ldrb r0, [r6]\n" -" cmp r0, 0\n" -" beq _08009214\n" -" b _0800937A\n" -"_08009214:\n" -" b _080091C0\n" -"_08009216:\n" -" cmp r1, 0x3D\n" -" bne _08009220\n" -" ldrb r0, [r4, 0x2]\n" -" strh r0, [r5]\n" -" b _080092BA\n" -"_08009220:\n" -" cmp r1, 0x79\n" -" bne _0800922A\n" -" ldrb r0, [r4, 0x2]\n" -" strh r0, [r5, 0x2]\n" -" b _080092BA\n" -"_0800922A:\n" -" cmp r1, 0x3E\n" -" bne _0800923A\n" -" adds r1, r4, 0x2\n" -" adds r0, r5, 0\n" -" bl sub_800915C\n" -" adds r4, r0, 0\n" -" b _080091C0\n" -"_0800923A:\n" -" cmp r1, 0x2E\n" -" bne _08009246\n" -" ldrh r0, [r5]\n" -" ldrb r2, [r4, 0x2]\n" -" adds r0, r2\n" -" b _0800926E\n" -"_08009246:\n" -" cmp r1, 0x6E\n" -" bne _08009258\n" -" ldr r0, [r5, 0xC]\n" -" strh r0, [r5]\n" -" ldrh r0, [r5, 0x2]\n" -" adds r0, 0xB\n" -" strh r0, [r5, 0x2]\n" -" adds r4, 0x2\n" -" b _080091C0\n" -"_08009258:\n" -" cmp r1, 0x3A\n" -" bne _08009264\n" -" ldrh r0, [r5]\n" -" strh r0, [r5, 0x4]\n" -" adds r4, 0x2\n" -" b _080091C0\n" -"_08009264:\n" -" cmp r1, 0x3B\n" -" bne _08009274\n" -" ldrh r0, [r5, 0x4]\n" -" ldrb r3, [r4, 0x2]\n" -" adds r0, r3\n" -"_0800926E:\n" -" strh r0, [r5]\n" -" adds r4, 0x3\n" -" b _080091C0\n" -"_08009274:\n" -" cmp r1, 0x2B\n" -" bne _0800929A\n" -" adds r4, 0x2\n" -" adds r0, r4, 0\n" -" bl sub_8008ED0\n" -" mov r2, r8\n" -" movs r3, 0x4\n" -" ldrsh r1, [r2, r3]\n" -" lsls r1, 3\n" -" subs r1, r0\n" -" strh r1, [r5]\n" -" movs r1, 0\n" -" ldrsh r0, [r5, r1]\n" -" lsrs r1, r0, 31\n" -" adds r0, r1\n" -" asrs r0, 1\n" -" strh r0, [r5]\n" -" b _080091C0\n" -"_0800929A:\n" -" cmp r1, 0x43\n" -" bne _080092A4\n" -" ldr r0, [r5, 0x10]\n" -" str r0, [r5, 0x14]\n" -" b _080092DC\n" -"_080092A4:\n" -" lsls r0, 24\n" -" lsrs r0, 24\n" -" cmp r0, 0x5F\n" -" bne _080092CC\n" -" ldr r0, [r5, 0x10]\n" -" str r0, [r5, 0x14]\n" -" ldr r1, _080092C8\n" -" ldrb r0, [r4, 0x2]\n" -" adds r0, r1\n" -" ldrb r0, [r0]\n" -" str r0, [r5, 0x10]\n" -"_080092BA:\n" -" adds r4, 0x3\n" -" ldrb r0, [r4]\n" -" cmp r0, 0x2E\n" -" beq _080092C4\n" -" b _080091C0\n" -"_080092C4:\n" -" adds r4, 0x1\n" -" b _080091C0\n" -" .align 2, 0\n" -"_080092C8: .4byte gUnknown_202749A\n" -"_080092CC:\n" -" cmp r0, 0x52\n" -" bne _080092D4\n" -" ldr r0, [r5, 0x14]\n" -" b _080092EE\n" -"_080092D4:\n" -" cmp r0, 0x63\n" -" bne _080092E8\n" -" ldr r0, [r5, 0x10]\n" -" str r0, [r5, 0x18]\n" -"_080092DC:\n" -" ldrb r0, [r4, 0x2]\n" -" bl InterpretColorChar\n" -" str r0, [r5, 0x10]\n" -" adds r4, 0x3\n" -" b _080091C0\n" -"_080092E8:\n" -" cmp r0, 0x72\n" -" bne _080092F4\n" -" ldr r0, [r5, 0x18]\n" -"_080092EE:\n" -" str r0, [r5, 0x10]\n" -" adds r4, 0x2\n" -" b _080091C0\n" -"_080092F4:\n" -" cmp r0, 0x53\n" -" bne _08009314\n" -" ldr r3, _08009310\n" -" ldrb r2, [r4, 0x2]\n" -" movs r0, 0x7F\n" -" adds r1, r0, 0\n" -" ands r1, r2\n" -" adds r1, r3\n" -" ldrb r2, [r4, 0x3]\n" -" ands r0, r2\n" -" strb r0, [r1]\n" -" adds r4, 0x4\n" -" b _080091C0\n" -" .align 2, 0\n" -"_08009310: .4byte gUnknown_20274A6\n" -"_08009314:\n" -" cmp r0, 0x57\n" -" bne _0800933A\n" -" adds r4, 0x2\n" -" mov r2, r8\n" -" movs r3, 0\n" -" ldrsh r0, [r2, r3]\n" -" lsls r0, 3\n" -" ldrh r1, [r5]\n" -" adds r0, r1\n" -" subs r0, 0x2\n" -" strh r0, [r5, 0x8]\n" -" movs r3, 0x2\n" -" ldrsh r0, [r2, r3]\n" -" lsls r0, 3\n" -" ldrh r1, [r5, 0x2]\n" -" adds r0, r1\n" -" adds r0, 0x3\n" -" strh r0, [r5, 0xA]\n" -" b _0800935C\n" -"_0800933A:\n" -" cmp r0, 0x50\n" -" bne _08009350\n" -" adds r4, 0x2\n" -" ldr r0, _0800934C\n" -" strh r0, [r5, 0x2]\n" -" mov r2, r9\n" -" str r2, [r5, 0x1C]\n" -" b _0800935C\n" -" .align 2, 0\n" -"_0800934C: .4byte 0x0000270f\n" -"_08009350:\n" -" cmp r0, 0x70\n" -" bne _08009368\n" -" adds r4, 0x2\n" -" ldr r0, _08009364\n" -" strh r0, [r5, 0x2]\n" -" str r7, [r5, 0x1C]\n" -"_0800935C:\n" -" adds r0, r5, 0\n" -" adds r0, 0x20\n" -" strb r7, [r0]\n" -" b _0800937A\n" -" .align 2, 0\n" -"_08009364: .4byte 0x0000270f\n" -"_08009368:\n" -" cmp r0, 0x7E\n" -" bne _0800937A\n" -" ldrb r0, [r4, 0x2]\n" -" str r0, [r5, 0x2C]\n" -" adds r0, r5, 0\n" -" adds r0, 0x21\n" -" strb r7, [r0]\n" -" adds r4, 0x3\n" -" b _080091C0\n" -"_0800937A:\n" -" adds r0, r4, 0\n" -" pop {r3,r4}\n" -" mov r8, r3\n" -" mov r9, r4\n" -" pop {r4-r7}\n" -" pop {r1}\n" -" bx r1\n"); -} -#endif // NONMATCHING - extern s32 gUnknown_202B020; extern s32 gUnknown_202B024;