From c6918cef6fb980d9387dae085bbca21df62413c4 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 25 Aug 2026 22:30:35 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20main=20lane=20m49aab=20?= =?UTF-8?q?=E2=80=94=201=20banked?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit One clean whole-EXE rebuild verified the batch (gate_main), and main re-checked BYTE-IDENTICAL against config/check.us.sha before anything was credited. func_8001C320 --- src/800.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/800.c b/src/800.c index c98a0a1e4e..d7e90b2f5d 100644 --- a/src/800.c +++ b/src/800.c @@ -7422,7 +7422,56 @@ void func_8001C2C4(s32 a0) { *(s32 *)(a0 + 0x24) = 0; } -INCLUDE_ASM("asm/nonmatchings/800", func_8001C320); +void func_8001C320(s32 a0, s32 a1) +{ + extern void func_8001C9D0(void); + extern void func_80052D90(s32 a0, void *a1); + extern void func_80054514(s32 a0, s32 a1); + extern void GsMapModelingData(u32 *p); + extern void GsLinkObject5(); + extern void *GsPresetObject(); + extern u8 D_800AF630[]; + extern u8 D_80063548[]; + extern u16 D_800AF7CC; + extern s32 *D_800AF7C8; + extern u8 D_800A5BD0[]; + + s32 sp10[8]; + register s32 obj __asm__("$17"); + register s32 next __asm__("$19"); + register s32 work __asm__("$20"); + s32 entry; + u16 c2; + + obj = a0; + func_8001C9D0(); + *(u16 *)obj = 1; + *(u16 *)(obj + 2) = 1; + func_80052D90(0, (void *)(obj + 0x30)); + func_80054514(obj + 0x30, (s32)&sp10[0]); + work = (s32)D_800AF630; + *(s32 *)(obj + 0x24) = a1; + if (a1 != 0) { + *(s32 *)(obj + 0x20) = (s32)D_80063548; + next = (s32)D_800AF7C8; + *(u16 *)(obj + 0x2E) = D_800AF7CC; + if (*(s32 *)a1 != 0) { + do { + entry = (*(s32 *)a1 & 0x80FFFFFF) + 4; + a1 += 4; + __asm__ __volatile__("" : "=r"(entry) : "0"(entry)); + GsMapModelingData((u32 *)entry); + c2 = *(u16 *)(work + 0x19C); + *(u16 *)(work + 0x19C) = c2 + 1; + GsLinkObject5((u32 *)(entry + 8), + (void *)&D_800A5BD0[(c2 << 2) + c2 << 2], 0); + next = (s32)GsPresetObject( + (void *)&D_800A5BD0[(c2 << 2) + c2 << 2], (void *)next); + } while (*(s32 *)a1 != 0); + } + *(s32 *)(work + 0x198) = next; + } +} extern void func_8001C9D0(void);