mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-03 09:10:20 -05:00
Match HandleTextFormat
This commit is contained in:
parent
428839af0e
commit
78c811ed1d
492
src/text2.c
492
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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user