From c1ab8fff078b9e7ec085a6ddbdb77b6bab6592ba Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Tue, 8 Aug 2023 09:23:20 -0400 Subject: [PATCH] Fakematch sub_8007AA4 --- src/text2.c | 163 +++++++++++++++------------------------------------- 1 file changed, 45 insertions(+), 118 deletions(-) diff --git a/src/text2.c b/src/text2.c index 300736f7c..2f3039bd3 100644 --- a/src/text2.c +++ b/src/text2.c @@ -1939,14 +1939,15 @@ void sub_8007958(struct UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 co s32 r6; u32 r9; struct unkStruct_80B8824 dataLOL; + s32 lol; r5 = &a0[a1]; - r9 = gUnknown_80B853C[color & 0xf]; + r9 = gUnknown_80B853C[color & 0xF]; r4 = y / 8; - dest = r5->unk18 + ((r5->unk4 * r4 + x / 8) * 8); - dest += (r4 * -8 + y); + dest = r5->unk18 + (((r5->unk4 * r4) + (x / 8)) * 8); + dest += (r4 * -8) + y; r6 = x / 8; if (y / 8 >= r5->unk8) @@ -1955,7 +1956,7 @@ void sub_8007958(struct UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 co dataLOL = gUnknown_80B8824; for (; a4 > 0; a4 -= 8) { - s32 lol = a4; + lol = a4; if (lol > 7) lol = 8; @@ -1999,122 +2000,48 @@ void nullsub_157(void) { } -NAKED // https://decomp.me/scratch/xE2Tn +// https://decomp.me/scratch/4tFKb void sub_8007AA4(struct UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, u32 color) { - asm_unified( - "push {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tsub sp, 0x20\n" - "\tmov r9, r2\n" - "\tadds r5, r3, 0\n" - "\tldr r7, [sp, 0x3C]\n" - "\tldr r3, [sp, 0x40]\n" - "\tlsls r2, r1, 3\n" - "\tadds r2, r1\n" - "\tlsls r2, 3\n" - "\tadds r4, r0, r2\n" - "\tldr r1, _08007B28\n" - "\tmovs r0, 0xF\n" - "\tands r3, r0\n" - "\tlsls r3, 2\n" - "\tadds r3, r1\n" - "\tldr r0, [r3]\n" - "\tldr r1, _08007B2C\n" - "\tadds r1, r0\n" - "\tmov r12, r1\n" - "\tmov r1, sp\n" - "\tldr r0, _08007B30\n" - "\tldm r0!, {r2,r3,r6}\n" - "\tstm r1!, {r2,r3,r6}\n" - "\tldm r0!, {r2,r3,r6}\n" - "\tstm r1!, {r2,r3,r6}\n" - "\tldm r0!, {r2,r3}\n" - "\tstm r1!, {r2,r3}\n" - "\tadds r0, r5, 0\n" - "\tcmp r5, 0\n" - "\tbge _08007AE8\n" - "\tadds r0, r5, 0x7\n" -"_08007AE8:\n" - "\tasrs r3, r0, 3\n" - "\tmovs r0, 0x4\n" - "\tldrsh r6, [r4, r0]\n" - "\tmov r8, r6\n" - "\tmov r0, r8\n" - "\tmuls r0, r3\n" - "\tmov r2, r9\n" - "\tcmp r2, 0\n" - "\tbge _08007AFC\n" - "\tadds r2, 0x7\n" -"_08007AFC:\n" - "\tasrs r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 5\n" - "\tldr r1, [r4, 0x18]\n" - "\tadds r1, r0\n" - "\tlsls r0, r3, 3\n" - "\tsubs r0, r5, r0\n" - "\tlsls r0, 2\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x7\n" - "\tmov r6, r9\n" - "\tands r0, r6\n" - "\tlsls r0, 2\n" - "\tadd r0, sp\n" - "\tldr r0, [r0]\n" - "\tmov r6, r12\n" - "\tands r6, r0\n" - "\tmov r12, r6\n" - "\tcmp r2, r8\n" - "\tbge _08007B6E\n" - "\tb _08007B48\n" - "\t.align 2, 0\n" -"_08007B28: .4byte gUnknown_80B853C\n" -"_08007B2C: .4byte 0x11111111\n" -"_08007B30: .4byte gUnknown_80B8848\n" -"_08007B34:\n" - "\tadds r5, 0x1\n" - "\tadds r1, 0x4\n" - "\tmovs r0, 0x7\n" - "\tands r0, r5\n" - "\tcmp r0, 0\n" - "\tbne _08007B46\n" - "\tldr r0, [r4, 0x20]\n" - "\tlsls r0, 2\n" - "\tadds r1, r0\n" -"_08007B46:\n" - "\tsubs r7, 0x1\n" -"_08007B48:\n" - "\tcmp r7, 0\n" - "\tble _08007B6E\n" - "\tmovs r2, 0x8\n" - "\tldrsh r0, [r4, r2]\n" - "\tcmp r3, r0\n" - "\tbge _08007B6E\n" - "\tldr r0, [r1]\n" - "\tmov r6, r12\n" - "\torrs r0, r6\n" - "\tstr r0, [r1]\n" - "\tldr r0, [r4, 0x3C]\n" - "\tcmp r0, r1\n" - "\tbls _08007B64\n" - "\tstr r1, [r4, 0x3C]\n" -"_08007B64:\n" - "\tldr r0, [r4, 0x40]\n" - "\tcmp r0, r1\n" - "\tbcs _08007B34\n" - "\tstr r1, [r4, 0x40]\n" - "\tb _08007B34\n" -"_08007B6E:\n" - "\tadd sp, 0x20\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); + s32 r2; + s32 r3; + struct UnkTextStruct1 *r4; + u32 ip; + u32 *dest; + struct unkStruct_80B8848 dataLOL; + + r4 = &a0[a1]; + ip = gUnknown_80B853C[color & 0xF] + 0x11111111; + asm("":::"r8"); + dataLOL = gUnknown_80B8848; + a4++; a4--; + r3 = y / 8; + + dest = r4->unk18 + ((r4->unk4 * r3 + x / 8) * 8); + r2 = x / 8; + dest += r3 * -8 + y; + ip &= dataLOL.arr[x & 7]; + + if (r2 >= r4->unk4) + return; + goto thecheck; +label: + y++; + dest++; + if ((y % 8) == 0) + dest += r4->unk20; + a4--; +thecheck: + if (a4 <= 0 || r3 >= r4->unk8) + return; + + dest[0] |= ip; + + if (r4->unk3C > dest) + r4->unk3C = dest; + if (r4->unk40 < dest) + r4->unk40 = dest; + goto label; } void sub_8007B7C(u32 a0, s32 x, s32 y, s32 a3, u32 color)