Match HandleTextFormat

This commit is contained in:
DizzyEggg 2024-10-26 18:12:56 +02:00
parent 428839af0e
commit 78c811ed1d

View File

@ -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;