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

ov_SC03_092    func_8017FA74
  ov_SC03_028    func_80181000
This commit is contained in:
Drew T
2026-09-02 09:35:36 -06:00
parent 11862e3c22
commit 1baa5ec405
5 changed files with 205 additions and 6 deletions
+2 -2
View File
@@ -1704,7 +1704,7 @@ build/src/ov_SC03_028/ov_SC03_028_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC03_028/ov_SC03_028_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_028/ov_SC03_028_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC03_028/ov_SC03_028_jr_8017DF98.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_028/ov_SC03_028_jr_8017DF98.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40
build/src/ov_SC03_028/ov_SC03_028_jr_80184914.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x30
build/src/ov_SC03_028/ov_SC03_028_jr_80185864.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28
build/src/ov_SC03_028/ov_SC03_028_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
@@ -1957,7 +1957,7 @@ build/src/ov_SC03_092/ov_SC03_092_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC03_092/ov_SC03_092_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_092/ov_SC03_092_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_092/ov_SC03_092_jr_8017AE2C.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
build/src/ov_SC03_092/ov_SC03_092_jr_80181694.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC03_092/ov_SC03_092_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC03_092_CHECK_SHA := config/check.ov_SC03_092.sha
+1 -1
View File
@@ -170,7 +170,7 @@ segments:
- [0xc1d58, .rodata, ov_SC03_028_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1d6c, data, tail18]
- [0xc1ea4, .rodata, ov_SC03_028_jr_8017DF98] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1ee4, data, tail19]
- [0xc1f00, data, tail19]
- [0xc1f04, .rodata, ov_SC03_028_jr_80183A74] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1f1c, .rodata, ov_SC03_028_jr_801847E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1f48, data, tail20]
+1 -1
View File
@@ -163,7 +163,7 @@ segments:
- [0x898c0, .rodata, ov_SC03_092_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8994c, data, tail17]
- [0x89950, .rodata, ov_SC03_092_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x89978, data, tail18]
- [0x89990, data, tail18]
- [0x89994, .rodata, ov_SC03_092_jr_8017FE88] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x899a8, .rodata, ov_SC03_092_jr_80181694] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x899d4, data, tail19]
+109 -1
View File
@@ -4510,7 +4510,115 @@ void func_80180B44(s32 a0, s32 a1) {
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80181000);
#include "common.h"
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B1B4(s32 a0, s32 a1);
extern void func_8012B23C(s32 a0);
extern void func_8012CBCC(s32 a0);
extern s32 func_8012B608(s32 a0, s32 a1, s32 a2);
extern s32 func_8012B744(void *a0, void *a1);
extern void Square0(s32 *a0, s32 *a1);
extern s32 rand(void);
extern u8 D_80126B5C;
extern s32 D_80126B64;
extern u8 D_8018F8E4[];
extern void (*D_8018F9A8)(void *);
extern s16 D_8018FB2C[];
extern u8 D_801ADC24[];
extern u8 D_801ADD34[];
extern u8 D_801AE08C[];
extern u8 D_801AE824[];
typedef struct { s16 vx, vy, vz, pad; } SV_80181000;
void func_80181000(s32 a0)
{
s32 vec[4];
SV_80181000 sv;
s32 d;
s32 dy;
s32 r;
s16 t;
sv.vx = 0;
sv.vz = 0x3C0;
d = func_8012B744((void *)(a0 + 4), &sv);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), d, 8);
func_8012B1B4(a0, (s32)&D_8018F9A8);
func_8012CBCC(a0);
dy = (s16)*(u16 *)(a0 + 6);
vec[0] = dy;
vec[2] = *(s16 *)(a0 + 0xE) - 0x3C0;
vec[1] = 0;
*(u16 *)(a0 + 6) -= dy >> 6;
*(u16 *)(a0 + 0xE) -= vec[2] >> 6;
Square0(vec, vec);
if (vec[0] + vec[2] < 0x400) {
t = *(s16 *)(a0 + 0x76);
if (t > 0x50) {
r = rand() & 3;
} else if (t > 0x28) {
r = (rand() & 5) + 3;
} else {
r = (rand() & 5) + 8;
}
switch (D_8018FB2C[r]) {
case 0:
*(s16 *)(a0 + 2) = 7;
func_8012A828(a0, D_801ADC24);
*(s32 *)(a0 + 0x1C) = 0x1E;
break;
case 1:
*(s16 *)(a0 + 2) = 0xC;
func_8012A828(a0, D_801ADD34);
*(s32 *)(a0 + 0x1C) = 0;
*(s16 *)(a0 + 0x84) = 0;
*(s16 *)(a0 + 0xDE) = 0;
*(s16 *)(a0 + 0x34) = 5;
*(s16 *)(a0 + 0xDC) = 0x111 - (*(s16 *)(a0 + 0x76) * 0x88) / 0x78;
break;
case 2:
*(s16 *)(a0 + 2) = 0x16;
func_8012A828(a0, D_801AE824);
func_8012B23C(a0);
*(s16 *)(a0 + 0x16) = -0x1E;
*(s32 *)(a0 + 0x10) = (*(s32 *)&D_80126B5C - *(s32 *)(a0 + 4)) >> 5;
*(s32 *)(a0 + 0x18) = (D_80126B64 - *(s32 *)(a0 + 0xC)) >> 5;
*(s32 *)(a0 + 0x58) = (s32)D_8018F8E4 | 0x40000000 | 0x20000000;
break;
case 3:
*(s16 *)(a0 + 2) = 0xD;
func_8012A828(a0, D_801AE08C);
*(s32 *)(a0 + 0x1C) = 0;
*(s16 *)(a0 + 0x84) = 0;
break;
case 4:
*(s16 *)(a0 + 2) = 0xE;
*(s16 *)(a0 + 0xFE) = 0;
break;
case 5:
*(s16 *)(a0 + 2) = 0x19;
func_8012A828(a0, D_801ADC24);
*(s32 *)(a0 + 0x1C) = 0x1E;
break;
case 6:
*(s16 *)(a0 + 2) = 0xC;
func_8012A828(a0, D_801ADD34);
*(s32 *)(a0 + 0x1C) = 0;
*(s16 *)(a0 + 0x84) = 0;
*(s16 *)(a0 + 0xDE) = 0;
*(s16 *)(a0 + 0x34) = 0x16;
*(s16 *)(a0 + 0xDC) = 0x111 - (*(s16 *)(a0 + 0x76) * 0x88) / 0x78;
break;
}
}
}
extern void func_8012A828(s32 a0, void *a1);
extern s32 func_8012BA10(s32 a0, s32 a1);
+92 -1
View File
@@ -5593,7 +5593,98 @@ void func_8017F8D8(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017FA74);
extern s32 func_8017B368(s32);
extern s32 func_80178970();
extern void func_80178D18(void);
extern s32 func_80029504(void);
void func_8017FA74(s32 arg0)
{
/* NOTE: this typedef is deliberately BLOCK scope. The file-scope
* `typedef ... Tbl8_8017FC44;` lives a few lines below this function and a
* second file-scope copy is a C89 redefinition -- gcc-2.7.2 exits 33
* ("conflicting types for `Tbl8_8017FC44'"), which is what the whole-binary
* gate kept rejecting even though the body is byte-identical. */
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04;
} Tbl8_8017FC44;
extern s32 D_801B2E70;
extern void func_8017FE04(s32 a0);
extern u8 D_80188EF8;
extern u8 D_80188F10;
extern u8 D_80188F30[];
extern u8 D_80188F40[];
extern u8 D_80188F50[];
extern u8 D_80188F70[];
extern Tbl8_8017FC44 D_80189380[];
s32 a0;
s32 v1;
s32 idx;
Tbl8_8017FC44 *rec;
switch (D_801B2E70) {
case 0:
break;
case 1:
((s32 (*)(s32, s32))func_8017B368)(arg0, (s32)D_80188F30);
break;
case 2:
((s32 (*)(s32, s32))func_8017B368)(arg0, (s32)D_80188F40);
break;
case 3:
((s32 (*)(s32, s32))func_8017B368)(arg0, (s32)D_80188F50);
break;
case 4:
((s32 (*)(s32, s32))func_8017B368)(arg0, (s32)D_80188F70);
D_801B2E70 = 0;
break;
}
if (((s32 (*)(s32))func_80178970)(arg0) != 0) {
((void (*)(s32))func_80178D18)(arg0);
v1 = func_80029504();
a0 = 0;
if (v1 >= 0x140) {
if (v1 < 0x14A) {
a0 = 1;
} else if (v1 < 0x172) {
a0 = 2;
} else if (v1 < 0x17C) {
a0 = 3;
} else {
a0 = 4;
}
}
if (a0 == 4) {
func_8017FE04(arg0);
} else {
*(u16 *)(arg0 + 2) = 1;
v1 = func_80029504();
idx = 0;
if (v1 >= 0x140) {
if (v1 < 0x14A) {
idx = 1;
} else if (v1 < 0x172) {
idx = 2;
} else if (v1 < 0x17C) {
idx = 3;
} else {
idx = 4;
}
}
rec = &D_80189380[idx];
func_8012E8E0(arg0, (s32)&D_80188EF8 + rec->unk00 * 8);
func_8012A828(arg0, (void *)rec->unk04);
*(s32 *)(arg0 + 0x58) = (s32)&D_80188F10 | 0x40000000;
*(u16 *)(arg0 + 0x5C) = 0x800;
D_801B2E70 = 0;
}
}
}
typedef struct {
/* 0x00 */ s32 unk00;