feat(decomp): parallel gate — 2 fns across 2 binaries (8 workers)

ov_SC02_003    func_8017F950
  ov_SC06_011    func_8017EEEC
This commit is contained in:
Drew T
2026-09-01 21:59:32 -06:00
parent f1cdd21134
commit 481a282be5
2 changed files with 144 additions and 2 deletions
+77 -1
View File
@@ -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);
}
+67 -1
View File
@@ -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;
}
}