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

ov_SC03_089    func_80181F9C
  ov_SC05_001    func_801809B8
  ov_SC05_008    func_80180E84
  ov_SC03_094    func_801814F4
  ov_SC03_118    func_801832E0
  ov_SC06_025    func_80182170
  ov_SC03_105    func_8017FAE8 func_80185680
  ov_SC07_002    func_80185FB0
This commit is contained in:
Drew T
2026-09-01 10:47:13 -06:00
parent f95b895909
commit d349bc053a
10 changed files with 371 additions and 12 deletions
+1 -1
View File
@@ -4513,7 +4513,7 @@ build/src/ov_SC06_025/ov_SC06_025_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC06_025/ov_SC06_025_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_025/ov_SC06_025_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC06_025/ov_SC06_025_jr_8017EEC4.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_025/ov_SC06_025_jr_8017EEC4.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38
build/src/ov_SC06_025/ov_SC06_025_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC06_025_CHECK_SHA := config/check.ov_SC06_025.sha
ov_SC06_025_SYMBOLS := config/symbols.ov_SC06_025.txt
+1 -1
View File
@@ -166,7 +166,7 @@ segments:
- [0x87dc4, .rodata, ov_SC06_025_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x87de4, data, tail18]
- [0x87dec, .rodata, ov_SC06_025_jr_8017EEC4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x87e20, data, tail19]
- [0x87e48, data, tail19]
- [0x8A12C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x8A12F] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+53 -1
View File
@@ -4640,7 +4640,59 @@ void func_80181F60(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80181F9C);
extern u8 D_801202A0[];
extern void func_8002D4C8(s32 a0, s32 a1);
void func_80181F9C(s32 a0)
{
s32 a3;
u8 *a2;
s32 t0;
s32 t1;
s32 v1p;
s32 va;
if (*(s16 *)(a0 + 0xFE) != 0) {
return;
}
a3 = 0;
a2 = D_801202A0;
t1 = 0x12C;
t0 = 1;
for (; a3 < 0x60; a3++, a2 += 0x10C) {
if (*(u16 *)a2 == t1) {
va = *(s16 *)(a2 + 0xA);
if ((u32)(va - *(s16 *)(a0 + 0xA) + 0x30) < 0x51) {
va = *(s16 *)(a2 + 0x6);
if ((u32)(va - *(s16 *)(a0 + 0x6) + 0x80) < 0x101) {
va = *(s16 *)(a2 + 0xE);
if ((u32)(va - *(s16 *)(a0 + 0xE) + 0x80) < 0x101) {
goto found;
}
}
}
}
}
t0 = 0;
found:
if (t0 != 1) {
return;
}
v1p = *(s32 *)(a0 + 0xCC);
if (v1p != 0) {
*(s16 *)(v1p + 0xFC) = 0xC;
}
v1p = *(s32 *)(a0 + 0xD0);
if (v1p != 0) {
*(s16 *)(v1p + 0xFC) = 0xC;
}
*(s16 *)(a0 + 0xFE) = 1;
func_8002D4C8(0x6EB, 0);
}
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, s32 a1);
+29 -1
View File
@@ -5984,7 +5984,35 @@ void func_80181448(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_801814F4);
#include "common.h"
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
extern u8 D_801152A8[];
s32 aF801814F4(s32 arg0, s32 arg1) __asm__("func_801814F4");
s32 aF801814F4(s32 arg0, s32 arg1)
{
extern s32 *D_80126B78;
extern u8 D_801A8D8C[];
s32 buf1[2];
s32 buf2[2];
s32 flag;
((void (*)(s32, s32, s32))func_8012F14C)((s32)D_80126B78 + 0x34, (s32)D_801A8D8C, (s32)buf1);
((void (*)(s32, s32, s32))func_8012F14C)((s32)D_80126B78 + 0x34, (s32)(D_801A8D8C + 8), (s32)buf2);
if (func_80135888(*(s32 *)(arg0 + 0x20), *(s32 *)(arg0 + 0x58), (s32)buf1, (s32)buf2) != 0) {
flag = 1;
if ((*(u16 *)(arg0 + 0x70) & 0xF) != 0) {
flag = 0x2001;
}
func_8012F568(1, flag, *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), arg1, (s32)buf2, (s32)D_801152A8);
return 1;
}
return 0;
}
extern s32 func_8012CC88(s32 a0, s32 a1, s32 a2);
typedef struct {
+89 -3
View File
@@ -4260,7 +4260,7 @@ extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern s32 func_80047948(s32 a0);
extern s32 func_8017FA90(s32 a0, s16 a1, s32 a2);
extern void func_8017FAE8(void *a0);
extern void func_8017FAE8();
typedef struct { u16 vx, vy, vz, pad; } UVEC_8017F55C;
@@ -4472,7 +4472,53 @@ s32 func_8017FA90(s32 a0, s16 a1, s32 a2) {
}
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017FAE8);
#include "common.h"
extern void func_8012EFB8(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
typedef struct { s16 vx, vy, vz, pad; } SVec_8017FAE8;
void func_8017FAE8(s32 a0) {
SVec_8017FAE8 pos;
SVec_8017FAE8 out;
register s32 base __asm__("$16");
s32 q;
pos.vx = *(s16 *)(a0 + 0x6);
pos.vy = *(s16 *)(a0 + 0xA);
pos.vz = *(s16 *)(a0 + 0xE);
((void (*)(void *, void *))func_8012EFB8)(&pos, &out);
base = 0x40;
if (out.vx < 0) {
if (-out.vx >= 0xA1) {
return;
}
} else {
if (out.vx >= 0xA1) {
return;
}
}
if (out.vy < 0) {
if (-out.vy >= 0x79) {
return;
}
} else {
if (out.vy >= 0x79) {
return;
}
}
q = out.vx * 63 / 160;
{
register s32 r __asm__("$5") = base + q;
func_8002D4C8(0x72B, ((r | 0x2000) & 0xFFFF));
}
}
extern void (*D_8018E270[])(void);
@@ -6537,7 +6583,47 @@ void func_80185660(s32 *a0, s32 *a1, s32 a2) {
}
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80185680);
s32 func_80185680(void *a0, void *a1) {
s32 frame_pad[1];
s32 base;
s16 cnt;
s32 ret;
register s32 idx __asm__("$2");
register s32 idc __asm__("$6");
u8 val;
(void)&frame_pad;
cnt = *(s16 *)((u8 *)a1 + 6);
base = *(s32 *)a1;
if (cnt == 0) {
return 1;
}
cnt = cnt - 1;
*(s16 *)((u8 *)a1 + 6) = cnt;
ret = 0;
if (cnt <= 0) {
idx = *(s16 *)((u8 *)a1 + 4);
val = *(u8 *)(base + idx * 12);
idc = idx;
if ((val & 0x40) != 0) {
*(s16 *)((u8 *)a1 + 6) = 0;
return 1;
}
if ((val & 0x80) != 0) {
*(s16 *)((u8 *)a1 + 4) = 0;
ret = 1;
} else {
idx = idc + 1;
*(s16 *)((u8 *)a1 + 4) = idx;
}
*(s16 *)((u8 *)a1 + 6) =
*(u8 *)(base + (*(s16 *)((u8 *)a1 + 4)) * 12) & 0x3F;
*(s32 *)((u8 *)a0 + 0x24) =
base + (*(s16 *)((u8 *)a1 + 4)) * 12;
}
return ret;
}
extern s32 rand(void);
extern void func_8012F214(s32 a0, s32 a1, s32 a2);
+39 -1
View File
@@ -2889,7 +2889,45 @@ void func_80183280(Ent_80183280 *arg) {
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801832E0);
extern void func_8013C0F8(s32 arg0);
extern s32 func_80029178(s32 arg0);
extern void func_8013373C(s32 a0);
typedef struct {
u8 pad0[2];
u16 f002;
u8 pad1[0xD8];
struct {
s16 f0DC;
u16 f0DE;
union {
struct { s32 f0E0; s32 f0E4; } l;
struct { u8 p[2]; s16 f0E2; u8 q[2]; s16 f0E6; } h;
} u;
u16 f0E8;
} f;
} Work_801832E0;
void func_801832E0(Work_801832E0 *work)
{
extern s32 D_801B5D38;
extern s32 D_801B86B4;
func_8013C0F8((s32)&D_801B5D38);
func_8013C0F8((s32)&D_801B86B4);
work->f.f0DC = 0;
work->f.u.l.f0E0 = 0;
work->f.u.l.f0E4 = 0;
work->f.f0E8 = 0;
if ((func_80029178(0xB8) & 0xFF) == 0) {
work->f002++;
} else {
func_8013373C(0);
work->f.u.h.f0E2 = -0xF7;
work->f002 = 4;
}
}
void func_801833C4(s32 arg0)
+31 -1
View File
@@ -5888,7 +5888,37 @@ extern s32 D_80126CD4;
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801809B8);
extern s32 func_8012BEE8(s32 a0);
extern u16 D_80126B62;
extern void func_80180304(s32 param_1);
void func_801809B8(s32 param_1) {
s32 v1;
s32 q;
s16 t;
if (func_8012BEE8(param_1) != 0) {
*(s32 *)(param_1 + 0x1C) = 2;
*(u16 *)(param_1 + 0xA) += 8;
D_80126B62 += 8;
v1 = *(s32 *)(param_1 + 0x6C);
if (v1 != 0) {
*(u16 *)(v1 + 0xA) -= 8;
}
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x14) -= 0x60;
q = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0x6C);
if (q != 0) {
*(u16 *)(*(s32 *)(q + 0x20) + 0x14) -= 0x60;
}
t = *(u16 *)(param_1 + 0xFE) - 1;
*(u16 *)(param_1 + 0xFE) = t;
if (t != 0) {
return;
}
func_80180304(param_1);
}
}
void func_80180AA4(void) {
}
+36 -1
View File
@@ -6038,7 +6038,42 @@ void *arg0;
}
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_80180E84);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
void func_80180E84(s32 a0)
{
extern s32 func_801823B8(void*, s32, void*);
extern s32 func_80182334(void);
extern void func_8012C098(void);
s32 s1 = a0;
s32 s0;
s32 pad[1];
u16 u0;
u0 = *(u16 *)((s32)s1 + 0x6);
u0 = (u16)(u0 - 0x50);
*(u16 *)((s32)s1 + 0x6) = u0;
if ((s16)u0 < *(s16 *)((s32)s1 + 0x88)) {
if (*(s16 *)((s32)s1 + 0xFE) == 0) {
*(s16 *)((s32)s1 + 0xFE) += 1;
func_8002D4C8(0x892, 0);
}
*(u16 *)((s32)s1 + 0x6) = *(u16 *)((s32)s1 + 0x88);
}
s0 = ((s32 (*)(s32, s32, s32))func_801823B8)(s1, 1, 0) |
((s32 (*)(s32, s32, s32))func_801823B8)(s1, 1, -1);
s0 |= ((s32 (*)(s32, s32, s32))func_801823B8)(s1, 1, -2);
if (s0 != 0) {
func_8012C658(0x209, 4, s1);
*(s32 *)(*(s32 *)((s32)s1 + 0x20) + 4) |= 0x80000000;
}
if (((s32 (*)(s32))func_80182334)(s1) == 0) {
((void (*)(s32))func_8012C098)(s1);
}
}
extern s32 func_80013328(s32 a0, s32 a1);
+48 -1
View File
@@ -5053,7 +5053,54 @@ void func_80182148(void) {
}
INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_80182170);
extern void func_8017DB6C(s32 a0);
extern void func_80182268(s32 a0, s32 a1, s32 a2, s32 a3);
void func_80182170(void *a0)
{
void *s0;
s32 v1;
s0 = a0;
v1 = *(u16 *)((u8 *)s0 + 0x2);
switch (v1) {
case 0:
case 1:
case 2:
return;
case 3:
func_8017DB6C(0);
if (*(u16 *)((u8 *)s0 + 0x34) < 2) {
func_80182268(-0x7000, 0x7000, -0x39, 0x230);
} else {
func_80182268(-0x10, 0x10, 0x1B0, 0x1CA);
}
return;
case 4:
func_80182268(-0x7000, 0x7000, 0x140, 0x230);
return;
case 5:
func_80182268(-0x7000, 0x7000, 0x140, 0x230);
return;
case 6:
func_80182268(-0x7000, 0x7000, -0x39, 0x230);
return;
case 7:
func_80182268(-0x7000, 0x7000, -0x39, 0x230);
return;
case 8:
func_80182268(-0x7000, 0x7000, -0x39, 0x3D0);
return;
}
}
#include "common.h"
+44 -1
View File
@@ -8723,7 +8723,50 @@ void func_80185F4C(s32 a0)
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80185FB0);
extern s16 D_8011DB1A;
extern s16 D_8011DB18;
extern s16 D_8011DB0C;
extern u16 D_8011DB0C_r __asm__("D_8011DB0C");
extern s32 func_80029D3C(void);
extern int func_80151204(int arg, int a1);
extern void func_8014BC44(s32 a0, s32 a1);
extern void func_801542A4(s32 *a0, s32 a1);
extern void func_8001382C(s32 a0, void *a1, void *a2);
extern void func_80146DB8(s32 *a0, s32 *a1);
extern void func_801477E8(s32 *a0, s32 a1);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146CA0(void *a0);
extern void func_80149020(s32 *a0);
extern u8 D_801988FC[];
extern u8 D_801989A0[];
void func_80185FB0(s32 param_1) {
s32 s0;
s32 sp10[4];
func_80149020((s32 *)param_1);
if (D_8011DB0C_r == 0) {
return;
}
{
register s32 arg4 __asm__("$4");
arg4 = D_8011DB1A;
__asm__ __volatile__("" : "=r"(arg4) : "0"(arg4));
s0 = func_80029D3C();
}
func_8014BC44(param_1, s0);
func_80151204(param_1, s0);
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0xC00;
func_801542A4((s32 *)param_1, (s32)&D_801988FC);
func_8001382C(D_8011DB18, (void *)&D_801989A0, (void *)sp10);
func_80146DB8((s32 *)param_1, sp10);
func_801477E8((s32 *)param_1, 0x100000);
D_8011DB0C = 0;
*(u8 *)(param_1 + 0xDE) = 3;
func_80146E90((s32 *)param_1, 0x20);
func_80146CA0((void *)param_1);
}
void func_80186090(s32 param_1)
{