From 481a282be571dff818612860f1658132ab992f96 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 1 Sep 2026 21:59:32 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20parallel=20gate=20=E2=80=94=202?= =?UTF-8?q?=20fns=20across=202=20binaries=20(8=20workers)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ov_SC02_003 func_8017F950 ov_SC06_011 func_8017EEEC --- src/ov_SC02_003/ov_SC02_003_jr_8017F950.c | 78 ++++++++++++++++++++++- src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.c | 68 +++++++++++++++++++- 2 files changed, 144 insertions(+), 2 deletions(-) diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8017F950.c b/src/ov_SC02_003/ov_SC02_003_jr_8017F950.c index d49e05a24..d0b85d3a6 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8017F950.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8017F950.c @@ -1,3 +1,79 @@ #include "common.h" -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8017F950", func_8017F950); + +void func_8017F950(s32 arg0) +{ + typedef struct { u32 w[4]; } St801D9204; + extern void func_80019064(void *a0); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8012B23C(s32 a0); + extern void func_8012B2CC(s32 a0); + extern void func_8012E9C0(s32 a0); + extern s32 func_80143B6C(s32 a0, s32 a1); + extern void func_8017FC9C(s32 a0); + extern void func_8017FCB0(s32 a0); + extern void func_8017FD2C(s32 a0); + extern void func_8017FD44(s32 a0); + extern void func_8017FD80(s32 a0); + extern void func_8017FDE8(s32 a0); + extern void func_8017FE68(s32 a0); + extern void func_801801EC(s32 a0); + extern void func_80180A64(s32 a0); + extern u8 D_80062BDC; + extern char D_801A681C[]; + extern St801D9204 D_801E6A00; + St801D9204 local = D_801E6A00; + + if (*(u8 *)(arg0 + 0x5E) == 5) { + func_80019064(&D_80062BDC); + } + if (*(u16 *)(arg0 + 0x5E) == 0x1F) { + func_80180A64(arg0); + return; + } + *(u8 *)(arg0 + 0xC1) = 0; + func_8012E9C0(arg0); + *(u16 *)(arg0 + 0x76) = *(u16 *)(arg0 + 0x76) - *(u16 *)(arg0 + 0x60); + *(u16 *)(arg0 + 0x5C) &= 0xFFFE; + *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12) = (*(u16 *)(arg0 + 0x62) + 0x800) & 0xFFF; + func_8012B2CC(arg0); + func_8012B23C(arg0); + *(s16 *)(arg0 + 2) = 3; + func_80143B6C(arg0, 0); + switch (*(u8 *)(arg0 + 0x5E)) { + case 13: + func_8017FC9C(arg0); + return; + case 14: + func_8017FCB0(arg0); + return; + case 10: + func_8017FD44(arg0); + return; + case 9: + func_8017FD80(arg0); + return; + case 17: + func_8017FDE8(arg0); + return; + case 33: + func_8017FD2C(arg0); + return; + case 15: + if (*(s16 *)(arg0 + 0x76) > 0) { + func_801801EC(arg0); + return; + } + break; + default: + if (*(s16 *)(arg0 + 0x76) > 0) { + *(u16 *)(arg0 + 0x34) = 0; + *(s32 *)(arg0 + 0x1C) = 0x10; + func_8012A828(arg0, D_801A681C); + return; + } + break; + } + func_8017FE68(arg0); +} + diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.c b/src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.c index 89db3232f..df80863af 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.c @@ -1,6 +1,72 @@ #include "common.h" -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8017EEEC", func_8017EEEC); + + +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8017F364(void); + +void func_8017EEEC(void *a0) { + extern u8 D_801202A0[]; + extern void *D_80126CC8; + extern u8 D_8019FDD4[]; + extern s16 D_801A0774; + 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_801A0774); + *(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_8017F364(); + } + 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_8019FDD4); + *(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; + } +} +