From edc7a69cf332e82efafa3a7630cba2ec13cf31b1 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:22:16 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20family-remap-hnorm=20gate=20?= =?UTF-8?q?=E2=80=94=20+5=20fns=20x0=20propagated=20(fleet=2098.9%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c | 92 ++++++++++++++++++++++- src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c | 30 +++++++- 2 files changed, 117 insertions(+), 5 deletions(-) diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c b/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c index 3ca8b9347..3956b129f 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c @@ -3350,7 +3350,22 @@ void func_8017BF20(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017BF58); + + +extern s32 func_801810D8(void); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32); + +void func_8017BF58(void *a0) { + s32 v0; + + v0 = func_801810D8(); + if (v0 != 0) { + func_80171A1C((u8 *)a0); + func_80174650((s32)a0); + } +} + DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ @@ -3374,7 +3389,21 @@ void func_8017C004(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017C03C); + + +extern s32 func_801810A4(void); +extern void func_80171A1C(u8 *a0); +extern s32 func_80174650(s32 a0); + +void func_8017C03C(void *a0) { + s32 s0 = (s32)a0; + if (func_801810A4() == 0) { + return; + } + func_80171A1C((u8 *)s0); + func_80174650(s0); +} + DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ @@ -4064,7 +4093,39 @@ void func_8017CE90(void *a0) } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017CFBC); + + +void func_8017CFBC(void *a0) +{ + typedef struct { u8 d[4]; } Blk4_8017CE90_8017CE90; + extern Blk4_8017CE90_8017CE90 D_801C11B0; + extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); + extern void func_80146C3C(void); + void *s2; + void *s1; + s32 v0; + s32 v1; + + s2 = a0; + s1 = *(void **)((u8 *)s2 + 0x20); + D_801C11B0.d[0] = func_80012F74(D_801C11B0.d[0], 0, 10, 1); + D_801C11B0.d[1] = func_80012F74(D_801C11B0.d[1], 0, 10, 1); + D_801C11B0.d[2] = func_80012F74(D_801C11B0.d[2], 0, 10, 1); + + v1 = *(s32 *)((u8 *)s2 + 0x10) + *(s32 *)((u8 *)s2 + 0x14); + *(s32 *)((u8 *)s2 + 0x10) = v1; + + v0 = *(u16 *)((u8 *)s1 + 0x1A) + v1; + *(u16 *)((u8 *)s1 + 0x1A) = v0; + *(s16 *)((u8 *)s1 + 0x18) = v0; + + v1 = *(s32 *)((u8 *)s2 + 0x30); + *(s32 *)((u8 *)s2 + 0x30) = v1 - 1; + if (v1 == 0) { + ((void (*)(void *))func_80146C3C)(s2); + } +} + extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); @@ -4684,7 +4745,30 @@ INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017DD7 DEFINE_func_8017DDBC() /* dedup: shared engine-core @0x8017DDBC (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017DE24); + + +extern u8 D_8018AB00; +extern u8 D_800B9A11; +extern void func_80129428(void); +extern void func_8013C964(void); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80171A1C(u8 *a0); + +void func_8017DE24(s32 *a0) { + s32 v0 = a0[0x80]; + s32 v1; + v1 = v0 - 1; + a0[0x80] = v1; + if (v1 != -1) { + return; + } + func_80154274(a0, (s32)&D_8018AB00); + func_8013C964(); + D_800B9A11 = 0; + func_80129428(); + func_80171A1C((u8 *)a0); +} + INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017DE8C); diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c b/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c index b8d2cc6d4..7c474fcd3 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c @@ -5890,7 +5890,35 @@ extern s32 func_80128ED8(s32 param_1, s32 *param_2); } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017DF84", func_80182A34); + +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_801822E8(void*); +extern void func_8018264C(void*); +extern void func_8018265C(s32 a0); +extern int func_80178970(void); +extern void func_801864C8(void); + +void func_80182A34(s32 *a0) { + if (*(u16 *)((s32)a0 + 0x34) == 0) { + func_8012AD80((s32)a0); + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((s32)a0 + 0x100) = 0x80; + *(s32 *)((s32)a0 + 0x1C) = 0x30; + (*(u16 *)((s32)a0 + 0x34))++; + ((void (*)(s32 *))func_8018264C)(a0); + } + } else { + if (func_8012BEE8((s32)a0) != 0) { + ((void (*)(s32))func_801822E8)((s32)a0); + } else { + func_8018265C((s32)a0); + } + } + ((int (*)(s32))func_80178970)((s32)a0); + func_801864C8(); +} + extern s32 func_8012BEE8(s32 a0); extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);