From d9f78e25508ab7016f074845cbfc63ce4ffb386e Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 29 Aug 2026 17:09:34 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20family-remap=20gate=20=E2=80=94?= =?UTF-8?q?=20+9=20fns=20x0=20propagated=20(fleet=2098.8%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c | 32 ++++- src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.c | 42 +++++- src/ov_SC03_014/ov_SC03_014_jr_801848E4.c | 164 +++++++++++++++++++++- 3 files changed, 229 insertions(+), 9 deletions(-) diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c b/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c index b97f774a0..091d49e2b 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c @@ -3318,7 +3318,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_014/nonmatchings/ov_SC03_014_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_8018EF58[])(void); @@ -3884,7 +3891,28 @@ void func_8017C8FC(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8017AE2C", func_8017CC44); + + +extern s32 func_80146E98(s32 a0); +extern void func_8017DD7C(); + +void func_8017CC44(void *a0) +{ + s32 flags = *(s32 *)((s32)a0 + 0x1C); + s32 ptr = *(s32 *)((s32)a0 + 0x20); + + if (flags & 1) { + *(s32 *)(ptr + 4) |= 0x80000000; + } else { + *(s32 *)(ptr + 4) &= 0x7FFFFFFF; + } + + if (func_80146E98((s32)a0)) { + func_8017DD7C(); + *(u16 *)((s32)a0 + 2) += 1; + } +} + diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.c b/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.c index ce5f225ce..51269382b 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.c @@ -6076,7 +6076,47 @@ void func_80183A18(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8017EB7C", func_80183A54); + + + + + +extern s32 D_80126B58; +extern s16 D_8018F854[]; +extern Blk8_80126940 D_80126940; +extern u16 func_80148800(s32 *a0); +extern void func_80183B58(s32 a0, s16 *a1); + +void func_80183A54(s32 a0) { + Blk8_80126940 sp10; + u8 t; + + if (func_80148800(&D_80126B58) & 3) { + t = (*(u8 *)(a0 + 5) + 1) & 1; + *(u8 *)(a0 + 5) = t; + *(s32 *)(a0 + 0x14) = D_8018F854[t]; + } + sp10 = D_80126940; + + if (sp10.v[2] < 0x440) { + *(s16 *)(a0 + 0x22) = 0x800; + } else { + *(s16 *)(a0 + 0x22) = 0x600; + } + + if (sp10.v[0] < -0x150) { + sp10.v[0] = -0x150; + } + if (sp10.v[0] >= 0x151) { + sp10.v[0] = 0x150; + } + if (sp10.v[2] < -0x440) { + sp10.v[2] = -0x440; + } + + func_80183B58(a0, sp10.v); +} + // @class: schedule diff --git a/src/ov_SC03_014/ov_SC03_014_jr_801848E4.c b/src/ov_SC03_014/ov_SC03_014_jr_801848E4.c index dbca1e6e4..724c3ae5e 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_801848E4.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_801848E4.c @@ -3323,7 +3323,27 @@ void func_801857C4(void) { } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_801857E4); + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80126BF0; +extern u16 D_80126BF4; +extern void func_80172780(void *a0); + +s32 func_801857E4(void) { + s16 t[3]; + if ((s16)D_80126B5E == (s16)D_80126BF0 && (s16)D_80126B66 == (s16)D_80126BF4) { + t[2] = D_80126B66; + t[0] = D_80126B5E; + t[1] = D_80126B62; + func_80172780((void *)t); + return 1; + } + return 0; +} + extern s32 func_8012C354(s32 a0, s32 a1); extern s32 func_80029504(void); @@ -4491,12 +4511,56 @@ void func_80187D80(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80187DBC); + + +void func_80187DBC(void *a0) { + extern SV4 D_801EAC70; + extern u16 D_801EAC72; + extern u16 D_801EAC74; + extern SV4 D_801EAC78; + extern u16 D_801EAC7A; + extern u16 D_801EAC7C; + u16 t; + + *(u16 *)((s32)a0 + 0xDC) = (*(u16 *)&D_801EAC70); + *(u16 *)((s32)a0 + 0xDE) = D_801EAC72; + *(u16 *)((s32)a0 + 0xE0) = D_801EAC74; + *(u16 *)((s32)a0 + 0xE4) = (*(u16 *)&D_801EAC78); + *(u16 *)((s32)a0 + 0xE6) = D_801EAC7A; + t = D_801EAC7C; + *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 2; + *(u16 *)((s32)a0 + 0xE8) = t; +} + DEFINE_func_80187E28() /* dedup: shared engine-core @0x80187E28 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80187E3C); + + + + +extern SV4 D_801EAC70; +extern u16 D_801EAC72; +extern u16 D_801EAC74; +extern SV4 D_801EAC78; +extern u16 D_801EAC7A; +extern u16 D_801EAC7C; + +void func_80187E3C(void *a0) { + s32 v1; + + *(u16 *)((s32)a0 + 0xFC) = (*(u16 *)&D_801EAC70); + v1 = *(u16 *)((s32)a0 + 2); + *(u16 *)((s32)a0 + 0xFE) = D_801EAC72; + *(u16 *)((s32)a0 + 0x100) = D_801EAC74; + *(u16 *)((s32)a0 + 0x104) = (*(u16 *)&D_801EAC78); + *(u16 *)((s32)a0 + 0x106) = D_801EAC7A; + *(u16 *)((s32)a0 + 0x108) = D_801EAC7C; + *(s32 *)((s32)a0 + 0x1C) = 0x10; + *(u16 *)((s32)a0 + 2) = v1 + 1; +} + extern void func_80187EE8(s32 a0); extern s32 func_8012BEE8(s32 a0); @@ -4707,9 +4771,50 @@ s32 param_1; } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80188168); -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_801881CC); + +void func_80188168(s32 a0) { + extern u8 D_80190468[]; + *(u8 *)(a0 + 0xC1) = 0; + *(u16 *)(a0 + 0x5C) = 0; + *(u16 *)(a0 + 0x2) = 0x11; + func_8012A828(a0, D_80190468); + *(s16 *)(a0 + 0xAE) = -1; + func_8002D4C8(0xA87, 0); + func_8002A04C(a0); + func_80182D5C(); +} + + + + +void func_801881CC(void *a0) { + extern void func_80131B14(); + extern void func_80131E00(); + extern s32 func_80131A34(s32 a0, s32 a1); + extern void func_80182D04(s32 a0, s32 a1, s32 a2); + extern u16 D_80190490[]; + extern s32 rand(void); + extern void func_8002D4C8(s32 a0, s32 a1); + + *(u32 *)((s32)a0 + 0xB4) = *(u32 *)((s32)a0 + 0xB4) | 1; + *(u8 *)((s32)a0 + 0xC1) = 1; + func_80131B14(); + + *(s16 *)((s32)a0 + 0xAE) = -1; + if (*(s16 *)((s32)a0 + 0x76) <= 0) { + func_80131E00(a0, 0xC); + *(s16 *)((s32)a0 + 0x76) = 0; + func_80182D04((s32)a0 + 0x76, (s32)D_80190490, 0x96); + } else { + func_80182D04((s32)a0 + 0x76, (s32)D_80190490, 0x96); + if (func_80131A34((s32)a0, 4) != 0) { + *(u8 *)((s32)a0 + 0xC2) = 0; + } + func_8002D4C8((rand() & 1) ? 0xA85 : 0xA86, 0); + } +} + extern s32 func_8004787C(s32 a0); extern s32 func_80047948(s32 a0); @@ -5414,7 +5519,54 @@ DEFINE_func_8018942C() /* dedup: shared engine-core @0x8018942C (src/shared) */ DEFINE_func_801894BC() /* dedup: shared engine-core @0x801894BC (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_8018950C); + + typedef struct { s32 a; s32 b[4]; } Ot_8018B23C_801863B8; + + +extern int func_80178970(void); +extern void func_8012AD80(s32 a0); +extern void func_80188D64(void *arg0); + +void func_8018950C(s32 a0) { + s32 t0; + s16 val0; + + t0 = *(s32 *)(a0 + 0x20); + val0 = *(s16 *)(t0 + 0x18); + + if (val0 > 0) { + s32 temp; + s16 val; + u16 a, b; + u32 flags; + + func_8012AD80(a0); + + temp = *(s32 *)(a0 + 0x20); + a = *(u16 *)(a0 + 0xDC); + b = *(u16 *)(temp + 0x18); + *(s16 *)(temp + 0x18) = (s16)(b - a); + + temp = *(s32 *)(a0 + 0x20); + a = *(u16 *)(a0 + 0xDE); + b = *(u16 *)(temp + 0x1A); + *(s16 *)(temp + 0x1A) = (s16)(b - a); + + temp = *(s32 *)(a0 + 0x20); + val = *(s16 *)(temp + 0x18); + + if (val == 0) { + flags = *(u32 *)(temp + 0x04); + flags |= 0x80000000; + *(u32 *)(temp + 0x04) = flags; + } + } else { + func_80188D64(a0); + } + + ((void (*)(s32))func_80178970)(a0); +} + extern int func_80178970(void); extern s16 D_801EAFC8;