feat(decomp): parallel gate — 5 fns across 5 binaries (12 workers)

md_MAIN_028    func_800CB8A0
  md_MAIN_003    func_800D24D0
  ov_SC01_006    func_8017F9F8
  ov_SC07_000    func_8017F69C
  ov_SC07_002    func_8017FCA8
This commit is contained in:
Drew T
2026-09-02 01:31:10 -06:00
parent bfea4affd8
commit 27cc083de9
5 changed files with 313 additions and 8 deletions
+73 -1
View File
@@ -346,7 +346,79 @@ void func_800D2454(s32 a0, s32 a1, s32 *a2) {
}
INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003_jr_800D1E18", func_800D24D0);
#include "common.h"
extern s32 D_800EC9DC;
extern s32 D_800A5F1C;
extern void StCdInterrupt(void);
extern s32 D_800EC9B0[];
extern s32 D_800EC9A4[];
extern s32 D_800EC9B8;
extern s16 D_800EC9BC[];
extern s16 D_800EC9BE[];
extern s16 D_800EC9C0[];
extern s32 D_800EC9CC;
extern s16 D_800EC9D0;
extern s16 D_800EC9D2;
extern s16 D_800EC9D4;
extern s16 D_800EC9D6;
extern s32 D_800EC9D8;
extern s32 D_800EC9F0;
extern u16 aD_800EC9BC[] __asm__("D_800EC9BC");
extern void func_800D2C88();
extern void func_800599B8(u16 *, u16 *);
typedef struct { u16 x, y, w, h; } D24D0_Rect;
void func_800D24D0(void) {
D24D0_Rect sp10[2];
s32 s0;
s32 idx;
s32 r;
s16 *p;
s32 n;
if (D_800EC9DC != 0) {
if (D_800A5F1C != 0) {
StCdInterrupt();
D_800A5F1C = 0;
}
}
sp10[0] = *(D24D0_Rect *)&D_800EC9D0;
{
s32 *pb = &D_800EC9B8;
s0 = *pb;
__asm__ __volatile__("" ::: "memory");
*pb = (*pb == 0);
}
if (D_800EC9F0 != 0) {
r = D_800EC9C0[D_800EC9CC * 4] % D_800EC9D4;
if (r != 0) {
D_800EC9F0 = 0;
D_800EC9D0 = D_800EC9D0 + r;
goto join;
}
}
{
s16 *px = &D_800EC9D0;
*px = *px + D_800EC9D4;
}
join:
p = (s16 *)((u8 *)D_800EC9A4 + 0x2C);
idx = D_800EC9CC;
if (*p < D_800EC9BC[idx * 4] + D_800EC9C0[idx * 4]) {
__asm__ __volatile__("");
((void (*)()) func_800D2C88)((&D_800EC9A4[3])[D_800EC9B8],
((D_800EC9D4 << 4) * ((D_800EC9D6 - 1) / 16 + 1)) >> 1);
} else {
D_800EC9D8 = 1;
n = (idx == 0);
D_800EC9CC = n;
*p = *(u16 *)((u8 *)aD_800EC9BC + n * 8);
D_800EC9F0 = 1;
D_800EC9D2 = D_800EC9BE[n * 4];
}
func_800599B8((u16 *)sp10, (u16 *)D_800EC9B0[s0]);
}
extern s32 func_800D27A0();
extern void func_800D3234(s32 a0, s32 a1);
+83 -4
View File
@@ -302,7 +302,86 @@ s32 func_800CB6D4(s32 a0) {
}
INCLUDE_ASM("asm/md_MAIN_028/nonmatchings/md_MAIN_028", func_800CB8A0);
void func_800CB8A0(void *a0) {
extern s32 func_80017DC4(void *a0, void *a1);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern void func_800D20C0(void *a0, void *a1, s32 a2);
extern void func_800D23D0(void *a0);
extern void func_80017E68(void *a0, void *a1);
extern void RotMatrixYXZ(void *a0, void *a1);
extern void func_80048D9C(void *a0, void *a1);
extern s32 func_80017758(void *a0, void *a1);
extern u8 D_800CBECC[];
s16 vecA[4];
s16 rot[4];
u8 info[0x38];
u8 s2vec[0x20];
s16 mtx[16];
u16 fld;
u16 fld2;
s16 ang;
u8 *tbl;
s8 last;
s16 i;
fld = *(u16 *)((s32)a0 + 0x28);
vecA[2] = fld;
vecA[1] = fld;
vecA[0] = fld;
func_80017DC4(vecA, s2vec);
vecA[2] = 0;
vecA[0] = 0;
vecA[1] = -0x2C;
func_8012F14C((s32)a0 + 0x38, (s32)vecA, (s32)vecA);
func_800D20C0(vecA, rot, 5);
func_800D23D0(rot);
*(s16 *)(info + 0x0C) = 0;
*(s16 *)(info + 0x0A) = 0;
*(s16 *)(info + 0x08) = 0;
*(s16 *)(info + 0x1C) = 0;
*(s16 *)(info + 0x14) = 0;
*(s16 *)(info + 0x04) = 0;
fld2 = *(u16 *)((s32)a0 + 0x28);
*(u8 *)(info + 0x26) = 0;
*(u8 *)(info + 0x22) = 0;
*(u8 *)(info + 0x21) = 0;
*(u8 *)(info + 0x20) = 0;
*(u8 *)(info + 0x2A) = 0;
*(u8 *)(info + 0x29) = 0;
*(u8 *)(info + 0x28) = 0;
*(u8 *)(info + 0x2E) = 0;
*(u8 *)(info + 0x2D) = 0;
*(u8 *)(info + 0x2C) = 0;
*(u32 *)(info + 0x30) = 0x50000000;
ang = (s16)fld2 >> 6;
ang = ang + 0x60;
*(s8 *)(info + 0x25) = (s8)ang;
*(s8 *)(info + 0x24) = (s8)ang;
func_80017E68(vecA, s2vec);
RotMatrixYXZ(rot, mtx);
func_80048D9C(s2vec, mtx);
tbl = D_800CBECC;
for (i = 0; i < 4; i++) {
*(s16 *)(info + 0x00) = (s8)*tbl; tbl++;
*(s16 *)(info + 0x02) = (s8)*tbl; tbl++;
*(s16 *)(info + 0x10) = (s8)*tbl; tbl++;
*(s16 *)(info + 0x12) = (s8)*tbl; tbl++;
*(s16 *)(info + 0x18) = (s8)*tbl; tbl++;
last = (s8)*tbl; tbl--;
*(s16 *)(info + 0x1A) = last;
func_80017758(info, s2vec);
}
}
extern u8 D_80078EC1;
extern void (*D_800CBEE0[])();
@@ -321,7 +400,7 @@ void func_800CBA74(int param_1)
typedef struct { s32 w[4]; } Blk_800CBAD0;
void func_800CBAD0(s32 a0) {
extern void func_800CB8A0(s32 a0);
extern void func_800CB8A0();
s32 s;
s32 v;
@@ -349,7 +428,7 @@ L_inc:
void func_800CBBA0(void *a0) {
typedef struct { s32 w[4]; } S16;
extern void func_800CB8A0(s32 a0);
extern void func_800CB8A0();
s32 a1;
s32 n;
s32 m;
@@ -428,7 +507,7 @@ void func_800CBD78(s32 param_1) {
typedef struct { s32 w[4]; } Struct16;
extern void func_800CB8A0(s32 a0);
extern void func_800CB8A0();
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
void func_800CBDD0(s32 a0) {
+52 -1
View File
@@ -3088,7 +3088,58 @@ L874:
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F9F8);
extern B16 D_800A5E88, D_800A5E98, D_800A5EA8;
extern B16 D_801CE030, D_801CE040, D_801CE050;
s32 func_8017F9F8(s32 a0in) {
extern s32 func_8017D9A0(void *);
extern void func_8013C964(void);
extern s32 func_800291B4(s32);
extern s32 func_8001AAA0();
extern s32 func_8001B710();
extern void func_80028620(s32, void *);
register s32 a0 __asm__("$18");
B16 *d;
a0 = a0in;
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0xFC) = 0;
if (*(s16 *)(a0 + 0xFE) == 0 && func_8017D9A0((void *)a0) != 0) {
*(s16 *)(a0 + 0xFE) = 1;
}
if (*(s16 *)(a0 + 0x10A) >= 0x31) {
u16 n = *(u16 *)(a0 + 0x106) + 0x10;
*(s16 *)(a0 + 0x106) = n;
*(s16 *)(a0 + 0x108) = n;
if ((s16)n >= 0x100) {
*(s16 *)(a0 + 0x106) = 0xFF;
*(s16 *)(a0 + 0x108) = 0xFF;
}
*(s16 *)(a0 + 0x10A) -= 3;
return 0;
}
if (*(s16 *)(a0 + 0xFE) == 0) {
return 0;
}
func_8013C964();
d = &D_800A5E88;
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0x108) = 2;
d[0] = D_801CE030;
d[1] = D_801CE040;
d[2] = D_801CE050;
func_80028620(0, d);
func_80028620(1, d + 1);
func_80028620(2, d + 2);
if (*(s16 *)(a0 + 0x100) != 0x1C) {
return 1;
}
if (func_800291B4(0x7E) & 0x20) {
((s32 (*)(s32))func_8001AAA0)(0x3D);
func_8001B710();
}
return 1;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017FBCC);
+56 -1
View File
@@ -4774,7 +4774,62 @@ void func_8017F59C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017F69C);
extern s16 D_801D0B7C;
extern void func_8017F888();
extern u8 D_80186584[];
extern void func_8012AD80();
extern s32 func_8012BEE8();
extern void func_8012B200(u8 *a0);
extern s32 func_80132EF4();
extern void func_8012A828();
extern void func_8012AD44();
extern void func_8002D4C8(s32 a0, s32 a1);
extern u8 D_801CCFA8[];
void func_8017F69C(s32 s0) {
s32 v0;
register s32 obj;
register s32 y;
switch (*(u16 *)(s0 + 0x34)) {
case 0:
func_8012AD80(s0);
if (func_8012BEE8(s0) == 0) {
return;
}
func_8012B200((u8 *)s0);
goto inc;
case 1:
if ((u16)D_801D0B7C != 7) {
return;
}
func_8017F888((s32 *)s0, (s32 *)&D_80186584);
inc:
v0 = *(u16 *)(s0 + 0x34);
*(u16 *)(s0 + 0x34) = v0 + 1;
break;
case 2:
if ((u16)D_801D0B7C != 6) {
return;
}
*(s32 *)(s0 + 0x10) = (*(s32 *)(*(s32 *)(s0 + 0x64) + 4) - *(s32 *)(s0 + 4)) >> 4;
y = *(s32 *)(s0 + 8) + 0x1400000;
*(s32 *)(s0 + 0x14) = (*(s32 *)(*(s32 *)(s0 + 0x64) + 8) - y) >> 4;
*(s32 *)(s0 + 0x18) = (*(s32 *)(*(s32 *)(s0 + 0x64) + 0xC) - *(s32 *)(s0 + 0xC) + 0x200000) >> 4;
*(s32 *)(s0 + 0x1C) = 0x10;
obj = func_80132EF4(s0, 0x77);
if (obj != 0) {
*(s32 *)(obj + 4) += *(s32 *)(s0 + 0x10) * 4;
*(s32 *)(obj + 8) += -0x300000 + (*(s32 *)(s0 + 0x14) * 4);
*(s32 *)(obj + 0xC) += *(s32 *)(s0 + 0x18) * 4;
}
func_8012A828(s0, D_801CCFA8);
func_8012AD44((s32 *)s0, 3);
func_8002D4C8(0xC1A, 0);
return;
}
}
extern void (*D_8018658C[])(void);
+49 -1
View File
@@ -4970,7 +4970,55 @@ void func_8017FBD0(s32 s0) {
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8017FCA8);
void func_8017FCA8(s32 a0)
{
typedef struct { s16 m0, m1, m2, m3; } PosFCA8;
extern s16 D_80126940[4];
extern s32 func_8012E544(s32 a0);
extern void func_80015978(s32 a0, s32 *a1);
extern s32 func_80013294(void *a0, void *a1);
extern s32 ratan2(s32 dx, s32 dy);
extern void func_80181394();
PosFCA8 cur;
PosFCA8 target;
s32 ret;
s32 dist;
s16 clamped;
register s16 va __asm__("$6");
register s16 vb __asm__("$5");
register s32 sc __asm__("$2");
cur = *(PosFCA8 *) D_80126940;
ret = func_8012E544(0x306);
if (ret != 0) {
func_80015978(ret + 4, (s32 *) &target);
if (cur.m1 > -0x200) {
cur.m1 = -0x200;
}
func_80015978(ret + 4, (s32 *) &target);
target.m1 = cur.m1;
dist = func_80013294(&cur, &target) - 0x100;
clamped = dist;
if (clamped < 0) {
clamped = 0;
}
if (clamped > 0x300) {
clamped = 0x300;
}
va = ((clamped * 512) / 0x300) + 0x38;
*(s16 *) (a0 + 0x20) = va;
vb = ((clamped * 111) / 0x300) - 0x70;
*(s16 *) (a0 + 0x30) = vb;
sc = ((clamped * 800) / 0x300) + 0x190;
*(s32 *) (a0 + 0x14) = (s16) sc;
} else {
target = *(PosFCA8 *) D_80126940;
}
func_80181394(a0, &cur, ratan2(cur.m0 - target.m0, cur.m2 - target.m2) & 0xfff);
}
extern s32 func_80029504(void);
extern void func_8017FEC4(s32 a0);