feat(decomp): family-remap gate — +11 fns x0 propagated (fleet 98.8%)

This commit is contained in:
Drew T
2026-08-29 17:15:43 -06:00
parent 6ebd32555a
commit 387207daea
3 changed files with 266 additions and 11 deletions
+8 -1
View File
@@ -3315,7 +3315,14 @@ DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */
DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8017AE2C", func_8017BEBC);
extern void func_80174684(void *);
extern void func_8017BEE4(void *);
void func_8017BEBC(void) {
func_80174684((void *)func_8017BEE4);
}
extern void (*D_8018D354[])(void);
+151 -6
View File
@@ -3017,7 +3017,42 @@ void func_80183C58(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80183830", func_80183C94);
void func_80183C94(s32 param_1)
{
extern u8 D_8018E8A8[];
extern s32 func_80184214(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4);
extern void func_80016714(void *a0, s32 a1);
extern void func_8012CAE4(void *a0);
extern s32 func_80029178(s32 a0);
s32 v0;
s32 p;
v0 = func_80184214(param_1, (s32)D_8018E8A8, 0x300, 0x140, 0x88);
*(s32 *)((s32)param_1 + 0xCC) = v0;
if (v0 == 0) {
goto fail;
}
v0 = func_80184214(param_1, (s32)D_8018E8A8, 0x310, 0x140, 0x89);
*(s32 *)((s32)param_1 + 0xD0) = v0;
if (v0 == 0) {
func_80016714((void *)*(s32 *)((s32)param_1 + 0xCC), 0x38);
fail:
func_8012CAE4((void *)param_1);
return;
}
p = *(s32 *)((s32)param_1 + 0x68);
*(u16 *)(*(s32 *)((s32)param_1 + 0xCC) + 0x12) = *(u16 *)(p + 0xC);
p = *(s32 *)((s32)param_1 + 0x68);
*(u16 *)(*(s32 *)((s32)param_1 + 0xD0) + 0x12) = *(u16 *)(p + 0xC);
if ((func_80029178(0xB8) & 0xFF) == 0) {
*(s16 *)((s32)param_1 + 2) = 1;
} else {
*(s16 *)((s32)param_1 + 2) = 2;
}
}
#include "common.h"
@@ -3231,7 +3266,27 @@ s32 func_80184214(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4) {
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80183830", func_801842DC);
extern s32 D_801D4358;
extern s32 D_801D435C;
void func_801842DC(s32 arg0) {
s16 *a;
s16 *b;
s32 t;
a = (s16 *) D_801D4358;
*(s32 *) (arg0 + 0x48) = a[0];
*(s32 *) (arg0 + 0x4C) = a[1];
t = a[2];
b = (s16 *) D_801D435C;
*(s32 *) (arg0 + 0x50) = t;
*(s32 *) (arg0 + 0x3C) = b[0];
*(s32 *) (arg0 + 0x40) = b[1];
*(s32 *) (arg0 + 0x44) = b[2];
}
extern s32 D_801D4358;
extern s32 D_801D435C;
@@ -3269,9 +3324,67 @@ void func_8018446C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80183830", func_801844A8);
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80183830", func_80184540);
extern s32 func_8012C51C(void *a0, s32 a1);
extern void func_8012C218(void *a0);
extern void func_8012CAE4(void *a0);
extern s32 func_80178B18(s32 a0, s32 a1);
void func_801844A8(void *param_1)
{
/* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every
LATER function in this TU, which blocks a byte-true decl of a different type.
Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */
extern u8 D_8018EC18[];
extern void (*D_8018EC98[])(void);
s32 s0;
s32 v0;
s0 = (s32)param_1;
v0 = func_8012C51C(D_8018EC18, (s32)param_1);
*(s32 *)(s0 + 0xCC) = v0;
if (v0 != 0) {
v0 = func_8012C51C(&D_8018EC18[0x14], (s32)param_1);
*(s32 *)(s0 + 0xD0) = v0;
if (v0 != 0) {
goto success;
}
func_8012C218((void *)*(s32 *)(s0 + 0xCC));
}
func_8012CAE4(param_1);
return;
success:
func_80178B18((s32)param_1, (s32)D_8018EC98);
*(u16 *)(s0 + 2) += 1;
}
extern s32 func_801789AC(s32 arg0);
extern void func_80178D18(void);
extern void func_8012A568(void (*a0)(void));
extern void func_8012C218(void *a0);
extern void func_800D0C48(s32 a0);
extern void func_8002AC00(s32 a0);
extern void func_80181A64(void);
void func_80184540(s32 a0) {
s32 s0 = a0;
s32 v0 = func_801789AC(a0);
if (v0 == 1) {
((void (*)(s32))func_80178D18)(s0);
func_8012A568(&func_80181A64);
func_8012C218((void *)*(s32 *)(s0 + 0xCC));
func_8012C218((void *)*(s32 *)(s0 + 0xD0));
func_800D0C48(1);
*(s32 *)(s0 + 0x1C) = 0x1F;
*(s16 *)(s0 + 2) = *(s16 *)(s0 + 2) + 1;
func_8002AC00(0x1B);
}
}
extern int func_8001AAA0(void);
extern s32 func_8012BEE8(s32 a0);
@@ -3440,7 +3553,12 @@ __asm__ __volatile__("" ::: "memory");
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80183830", func_8018490C);
void func_8018490C(s32 arg0) {
*(s32 *)((u8 *)*(s32 **)(arg0 + 0xCC) + 0xE0) &= 0xDFFFFFFF;
*(s32 *)((u8 *)*(s32 **)(arg0 + 0xD0) + 0xE0) &= 0xDFFFFFFF;
}
extern void (*D_8018EF74[])(void);
@@ -3450,7 +3568,34 @@ void func_80184940(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80183830", func_8018497C);
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern s32 func_8012A828(void*, void*);
extern void func_80143994(s32 a0, s32 a1);
extern void (*D_8018EF44[])(void);
extern void (*D_8018EF4C[])(void);
void func_8018497C(void *a0)
{
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)a0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(a0);
return;
}
func_8001C214(v0, D_8018EF44[*(u16 *)((s32)a0 + 0x70) & 0xF]);
((void (*)(void *, void *))func_8012A828)(a0, D_8018EF4C[*(u16 *)((s32)a0 + 0x70) & 0xF]);
func_80143994((s32)a0, 0x2000);
*(u16 *)((s32)a0 + 2) = 1;
}
#include "common.h"
+107 -4
View File
@@ -2856,7 +2856,16 @@ extern void func_801830C4(void *a0);
/* ==== end §8b carried decl layer ==== */
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_80183178);
extern s32 func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10);
extern u8 D_800AF058;
s32 func_80183178(void) {
s32 ret;
ret = func_8001ABBC(0, 0, &D_800AF058, 0, 0);
return ret;
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801831D0);
@@ -2882,10 +2891,104 @@ void func_80183280(Ent_80183280 *arg) {
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801832E0);
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801833C4);
void func_801833C4(s32 arg0)
{
extern u8 D_801D47E0[];
extern u8 D_801B5D38[];
extern u8 D_801B86B4[];
extern s32 D_801270C8;
typedef struct {
u8 pad0[2];
union { s16 s; u16 u; } f02;
u8 pad1[0xD8];
union { s16 s; u16 u; } fDC;
u8 pad2[4];
s16 fE2;
u8 pad3[2];
s16 fE6;
u8 pad4[4];
u16 fEC;
u16 fEE;
} St;
#define P ((St *)arg0)
func_80180A64(D_801D47E0, D_801B5D38, P->fDC.s, P->fE2);
func_80180A64(D_801D47E0, D_801B86B4, P->fDC.s, P->fE6);
P->fDC.u = P->fDC.u + 8;
if (D_801270C8 != 0) {
func_8002D4C8(0x77B, 0);
P->fEC = 1;
P->fEE = 0x3C;
P->f02.u++;
}
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801834DC);
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_80183634);
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_o0d", func_801837B0);
extern s32 D_801D47E0;
extern s32 D_801B5D38;
extern s32 D_801B86B4;
extern s32 D_801270C8;
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_80183634;
void func_80183634(Work_80183634 *work)
{
func_80180A64(&D_801D47E0, &D_801B5D38, work->f.f0DC, work->f.u.h.f0E2);
func_80180A64(&D_801D47E0, &D_801B86B4, work->f.f0DC, work->f.u.h.f0E6);
work->f.u.l.f0E0 = work->f.u.l.f0E0 + -0x252E5;
work->f.u.l.f0E4 = work->f.u.l.f0E4 + 0x168D6;
work->f.f0DC = work->f.f0DC + 0xC;
if ((s16)(++work->f.f0E8) >= 0x6A) {
func_8002D4C8(4, 0x77B);
D_801270C8 = 2;
func_8013373C(0);
++work->f002;
}
}
void func_801837B0(s32 arg0)
{
typedef struct {
u8 _[0xDC];
s16 fDC;
u8 _2[4];
s16 fE2;
} Args_801837B0;
typedef struct {
u8 _[0xDC];
u16 fDC;
} Rmw_801837B0;
extern s32 D_801D47E0;
extern s32 D_801B5D38;
extern void func_80180A64(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
func_80180A64(&D_801D47E0, &D_801B5D38,
((Args_801837B0 *)arg0)->fDC,
((Args_801837B0 *)arg0)->fE2);
((Rmw_801837B0 *)arg0)->fDC += 7;
}