From 1961a7bfb19736c003cfd046875e66f85f30cd55 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 4 Sep 2026 19:05:29 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-31):=20S79=20#9=20(5)=20=E2=80=94=20?= =?UTF-8?q?main:=20func=5F8002AC98=20(114=20ins)=20banked:=20the=20generic?= =?UTF-8?q?=20arm's=20val=20=3D=20r=20+=20b=20routed=20through=20a=20fresh?= =?UTF-8?q?=20s32=20temp=20({=20s32=20xt=20=3D=20r=20+=20b;=20val=20=3D=20?= =?UTF-8?q?xt;=20},=20with=20b=20widened=20to=20s32)=20so=20expand=5Fbinop?= =?UTF-8?q?'s=20target=3D=3Dop1=20swap=20does=20not=20fire=20=E2=80=94=20t?= =?UTF-8?q?he=20same=20lever=20as=20func=5F80015608;=20gate=5Fmain=20BYTE-?= =?UTF-8?q?IDENTICAL=20143dbb89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/800.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/src/800.c b/src/800.c index d71a69736..dd95daeac 100644 --- a/src/800.c +++ b/src/800.c @@ -21166,7 +21166,87 @@ void func_8002AC00(s32 a0) *(u16*)(s0 - 2) = (u16)v0; } -INCLUDE_ASM("asm/nonmatchings/800", func_8002AC98); +extern s32 func_800291B4(s32); +extern u16 D_800A6588[]; +extern u8 D_8010F46C[]; +extern u8 D_80078EBA; +void func_8002AC98(void) +{ +register u16 *base __asm__("$20"); + s16 i; + s16 val; + s32 t; + s32 r; + s32 idx; + s16 rc; + s32 b; + base = D_800A6588; + if (D_80078EBA == 0) + { + for (i = 0; i < 0x40; i++) + { + t = func_800291B4(((s16) i) + 0x63) & 0xF; + if (t != 0) + { + r = rand() & 0x1F; + switch (t) + { + case 1: + rc = r; + if ((rc != 0) && (rc != 0xB)) + { + b = base[i] - 0xB; + { s32 xt = r + b; val = xt; } + } + else + { + val = ((s16) base[i]) >> 1; + } + break; + + case 2: + if (r != 0) + { + b = base[i] - 0xB; + { s32 xt = r + b; val = xt; } + } + break; + + case 3: + rc = r; + if ((rc != 0) && (rc != 0xB)) + { + b = base[i] - 0xB; + { s32 xt = r + b; val = xt; } + } + else + { + val = base[i] * 2; + } + break; + + } + + idx = i + 1; + if (val < (*((s16 *) (&D_8010F46C[idx * 8])))) + { + base[i] = *((s16 *) (&D_8010F46C[idx * 8])); + } + else + if (((*((s16 *) (&D_8010F46C[idx * 8]))) * 4) < val) + { + rc = 4; + base[i] = (*((s16 *) (&D_8010F46C[idx * 8]))) * rc; + } + else + { + base[i] = val; + } + } + } + + } +} s32 func_8002AE60(void) { s16 i;