Fakematch sub_8007AA4

This commit is contained in:
Kermalis
2023-08-08 09:23:20 -04:00
parent a092f40a94
commit c1ab8fff07

View File

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