From dd0538ae05fc417c524bb35808477ce17bb0d964 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 25 Aug 2026 21:11:18 -0600 Subject: [PATCH] chore(decomp): commit in-tree banked work before the serial lane --- src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c | 12 +---- src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c | 66 ++++++++++++++++++++++- src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c | 52 +++++++++++++++++- 3 files changed, 118 insertions(+), 12 deletions(-) diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c b/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c index 9340cc011..70a6bb39a 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8017D2DC.c @@ -2787,7 +2787,7 @@ extern void func_80182C10(void); extern void func_80182D04(s32 a0); extern void func_80182EB0(); extern void func_801831EC(void); -extern void func_80183748(); +extern void func_80183748(void *a0); /* ---- scalars ------------------------------------------------------------------ */ extern u16 D_800B99D8; @@ -4493,15 +4493,7 @@ s32 param_1; } -extern s32 D_801EDA1C; -extern s32 func_80182B00(s32 arg0); - -void func_80180890(s32 arg0) { - if (func_80182B00(arg0) != 0 || D_801EDA1C != 0) { - *(s16 *)(arg0 + 2) = 1; - } -} - +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8017D2DC", func_80180890); extern void (*D_80188E10[])(void); diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c b/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c index aa5fc0daa..a981f6f93 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c @@ -4914,7 +4914,71 @@ void func_80181938(void *a0) { } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80181A80); +extern u8 D_801202A0[]; +extern void *D_80126CC8; +extern u8 D_801B72B4[]; +extern u8 D_801B6914[]; +extern void func_8001C214(s32 a0, s32 a1); +extern void func_80180D68(void); + +void func_80181A80(void *a0) { + u16 state = *(u16 *)((s32)a0 + 0x34); + + switch (state) { + case 4: + { + u8 *p = D_801202A0; + s32 i; + + for (i = 0; i < 0x60; i++, p += 0x10C) { + if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) { + func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B72B4); + *(u16 *)((s32)a0 + 0x5C) = 0x8800; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + *(s16 *)((s32)a0 + 0x34) = 3; + } + } + /* fall through */ + } + case 0: + if (D_80126CC8 == a0) { + u16 t0 = *(u16 *)((s32)a0 + 0x88); + u16 t1 = *(u16 *)((s32)a0 + 0x8A); + u16 t2 = *(u16 *)((s32)a0 + 0x8C); + + *(s16 *)((s32)a0 + 0x34) = 1; + *(s16 *)((s32)a0 + 0x5C) = 0; + *(u16 *)((s32)a0 + 0x6) = t0; + *(u16 *)((s32)a0 + 0xA) = t1; + *(u16 *)((s32)a0 + 0xE) = t2; + func_80180D68(); + } + break; + case 1: + break; + case 2: + { + u8 *p = D_801202A0; + s32 i; + + for (i = 0; i < 0x60; i++, p += 0x10C) { + if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) { + func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B6914); + *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x60000040; + *(u16 *)((s32)a0 + 0x5C) = 0x9000; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + *(s16 *)((s32)a0 + 0x34) = 0; + } + } + break; + } + case 3: + break; + default: + break; + } +} + extern void (*D_801B4DA8[])(void); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c index 2ce34022e..ae234a653 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c @@ -4689,7 +4689,57 @@ void func_8017E520(s32 a0) { } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017E5B8); +void func_8017E5B8(s32 a0, s32 a1) { + register s32 self __asm__("$2") = a0; + register s32 tmp __asm__("$3") = a1 * 8; + register s32 c0 __asm__("$4") = 0x1E; + register s32 c1 __asm__("$5") = self; + register s32 off __asm__("$17"); + register s32 k2 __asm__("$18"); + register s32 k1 __asm__("$19"); + register s32 i __asm__("$20"); + register s32 base __asm__("$21"); + register s32 p __asm__("$16"); + extern s32 func_8012C588(s32 a0, s32 a1); + extern void func_80015954(s32 a0, s32 a1); + extern s32 func_80146A6C(s32, void*, s32, s32, s32, s32, s32); + extern s16 D_80185D28[]; + extern s16 D_80185D2A[]; + extern s16 D_80185D2C[]; + extern s16 D_80185D2E[]; + extern u16 D_80185D5A[]; + + i = 0; + off = tmp; + base = (s32) D_80185D28; + __asm__ __volatile__("" : : "r"(tmp)); + k1 = -0xE3; + __asm__ __volatile__("" : : "r"(k1)); + k2 = -0x155; + func_80146A6C(c0, (void *)c1, *(s16 *)((s32)D_80185D28 + off), + *(s16 *)((s32)D_80185D2A + off), + *(s16 *)((s32)D_80185D2C + off), 0, 0); + do { + p = func_8012C588(0x3A6, 0); + if (p != 0) { + func_80015954(off + base, p + 4); + *(s16 *)(p + 0xFC) = *(u16 *)((s32)D_80185D5A + + (*(s16 *)((s32)D_80185D2E + off) << 2)) + k2; + *(s32 *)(p + 0xDC) = 0; + } + p = func_8012C588(0x3A6, 0); + if (p != 0) { + func_80015954(off + base, p + 4); + *(s16 *)(p + 0xFC) = *(u16 *)((s32)D_80185D5A + + (*(s16 *)((s32)D_80185D2E + off) << 2)) + k1; + *(s32 *)(p + 0xDC) = 1; + } + k1 += 0xAA; + i++; + k2 += 0xAA; + } while (i < 4); +} + extern void func_80015954(s32 a0, s32 a1); extern s32 func_8012C588(s32 a0, s32 a1);