From 31efb1b92522f8dbe23c0b54043cb15b4912d0da Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 12 Aug 2026 16:17:53 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_80189C28 to its zero-crack siblings --- src/ov_SC06_020/ov_SC06_020_jr_80180B04.c | 61 ++++++++++++++++++++++- src/ov_SC06_022/ov_SC06_022_jr_80184A28.c | 61 ++++++++++++++++++++++- src/ov_SC06_024/ov_SC06_024_jr_80186F00.c | 61 ++++++++++++++++++++++- src/ov_SC06_032/ov_SC06_032_jr_80182890.c | 61 ++++++++++++++++++++++- src/ov_SC06_033/ov_SC06_033_jr_80186574.c | 61 ++++++++++++++++++++++- 5 files changed, 300 insertions(+), 5 deletions(-) diff --git a/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c b/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c index c0cc67cf66..4bf9ae159c 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c @@ -4385,7 +4385,66 @@ void func_80183BA4(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80180B04", func_80183D98); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); +extern s32 func_80017758(void *a0, void *a1); + +void func_80183D98(void *a0) +{ + u8 buf[0x34]; + + if (*(u16 *)((u8 *)a0 + 0x34) == 0) { + *(s32 *)((u8 *)a0 + 0xE0) = *(s32 *)((u8 *)a0 + 0xE0) - 0x14; + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((u8 *)a0 + 0x34) = *(u16 *)((u8 *)a0 + 0x34) + 1; + } + } else { + s32 v1 = *(s32 *)((u8 *)a0 + 0x64); + if (*(s32 *)(*(s32 *)(v1 + 0x20) + 4) < 0 || *(u16 *)v1 == 0) { + func_8012C218(a0); + return; + } + } + + *(s16 *)(buf + 0x00) = 4; + *(s16 *)(buf + 0x08) = -4; + { + s16 c = 0xC; + *(s16 *)(buf + 0x02) = 0; + *(s16 *)(buf + 0x04) = 0; + *(s16 *)(buf + 0x0A) = 0; + *(s16 *)(buf + 0x0C) = 0; + *(s16 *)(buf + 0x10) = c; + } + *(s16 *)(buf + 0x12) = 0; + { + s32 t1 = *(s32 *)((u8 *)a0 + 0xE0); + s32 t2; + *(s16 *)(buf + 0x18) = -0xC; + *(s16 *)(buf + 0x1A) = 0; + *(s16 *)(buf + 0x14) = t1; + t2 = *(s32 *)((u8 *)a0 + 0xE0); + *(s32 *)(buf + 0x30) = 0x50000000; + *(u8 *)(buf + 0x22) = 0x80; + *(u8 *)(buf + 0x21) = 0x80; + *(u8 *)(buf + 0x20) = 0x80; + *(u8 *)(buf + 0x26) = 0x80; + *(u8 *)(buf + 0x25) = 0x80; + *(u8 *)(buf + 0x24) = 0x80; + *(u8 *)(buf + 0x2A) = 0x30; + *(u8 *)(buf + 0x29) = 0x30; + *(u8 *)(buf + 0x28) = 0x30; + *(u8 *)(buf + 0x2E) = 0x30; + *(u8 *)(buf + 0x2D) = 0x30; + *(u8 *)(buf + 0x2C) = 0x30; + *(s16 *)(buf + 0x1C) = t2; + } + + func_80017758(buf, (u8 *)(*(s32 *)((u8 *)a0 + 0x20)) + 0x34); +} + INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80180B04", func_80183ED4); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c index 19067e738d..692feb86f0 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c @@ -4195,7 +4195,66 @@ void func_80187AC8(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_80187CBC); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); +extern s32 func_80017758(void *a0, void *a1); + +void func_80187CBC(void *a0) +{ + u8 buf[0x34]; + + if (*(u16 *)((u8 *)a0 + 0x34) == 0) { + *(s32 *)((u8 *)a0 + 0xE0) = *(s32 *)((u8 *)a0 + 0xE0) - 0x14; + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((u8 *)a0 + 0x34) = *(u16 *)((u8 *)a0 + 0x34) + 1; + } + } else { + s32 v1 = *(s32 *)((u8 *)a0 + 0x64); + if (*(s32 *)(*(s32 *)(v1 + 0x20) + 4) < 0 || *(u16 *)v1 == 0) { + func_8012C218(a0); + return; + } + } + + *(s16 *)(buf + 0x00) = 4; + *(s16 *)(buf + 0x08) = -4; + { + s16 c = 0xC; + *(s16 *)(buf + 0x02) = 0; + *(s16 *)(buf + 0x04) = 0; + *(s16 *)(buf + 0x0A) = 0; + *(s16 *)(buf + 0x0C) = 0; + *(s16 *)(buf + 0x10) = c; + } + *(s16 *)(buf + 0x12) = 0; + { + s32 t1 = *(s32 *)((u8 *)a0 + 0xE0); + s32 t2; + *(s16 *)(buf + 0x18) = -0xC; + *(s16 *)(buf + 0x1A) = 0; + *(s16 *)(buf + 0x14) = t1; + t2 = *(s32 *)((u8 *)a0 + 0xE0); + *(s32 *)(buf + 0x30) = 0x50000000; + *(u8 *)(buf + 0x22) = 0x80; + *(u8 *)(buf + 0x21) = 0x80; + *(u8 *)(buf + 0x20) = 0x80; + *(u8 *)(buf + 0x26) = 0x80; + *(u8 *)(buf + 0x25) = 0x80; + *(u8 *)(buf + 0x24) = 0x80; + *(u8 *)(buf + 0x2A) = 0x30; + *(u8 *)(buf + 0x29) = 0x30; + *(u8 *)(buf + 0x28) = 0x30; + *(u8 *)(buf + 0x2E) = 0x30; + *(u8 *)(buf + 0x2D) = 0x30; + *(u8 *)(buf + 0x2C) = 0x30; + *(s16 *)(buf + 0x1C) = t2; + } + + func_80017758(buf, (u8 *)(*(s32 *)((u8 *)a0 + 0x20)) + 0x34); +} + INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_80187DF8); diff --git a/src/ov_SC06_024/ov_SC06_024_jr_80186F00.c b/src/ov_SC06_024/ov_SC06_024_jr_80186F00.c index 726abff36f..0aeda12075 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_80186F00.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_80186F00.c @@ -4452,7 +4452,66 @@ void func_80189FA0(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80186F00", func_8018A194); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(s32); +extern s32 func_80017758(void *a0, void *a1); + +void func_8018A194(void *a0) +{ + u8 buf[0x34]; + + if (*(u16 *)((u8 *)a0 + 0x34) == 0) { + *(s32 *)((u8 *)a0 + 0xE0) = *(s32 *)((u8 *)a0 + 0xE0) - 0x14; + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((u8 *)a0 + 0x34) = *(u16 *)((u8 *)a0 + 0x34) + 1; + } + } else { + s32 v1 = *(s32 *)((u8 *)a0 + 0x64); + if (*(s32 *)(*(s32 *)(v1 + 0x20) + 4) < 0 || *(u16 *)v1 == 0) { + ((void (*)(void *))func_8012C218)(a0); + return; + } + } + + *(s16 *)(buf + 0x00) = 4; + *(s16 *)(buf + 0x08) = -4; + { + s16 c = 0xC; + *(s16 *)(buf + 0x02) = 0; + *(s16 *)(buf + 0x04) = 0; + *(s16 *)(buf + 0x0A) = 0; + *(s16 *)(buf + 0x0C) = 0; + *(s16 *)(buf + 0x10) = c; + } + *(s16 *)(buf + 0x12) = 0; + { + s32 t1 = *(s32 *)((u8 *)a0 + 0xE0); + s32 t2; + *(s16 *)(buf + 0x18) = -0xC; + *(s16 *)(buf + 0x1A) = 0; + *(s16 *)(buf + 0x14) = t1; + t2 = *(s32 *)((u8 *)a0 + 0xE0); + *(s32 *)(buf + 0x30) = 0x50000000; + *(u8 *)(buf + 0x22) = 0x80; + *(u8 *)(buf + 0x21) = 0x80; + *(u8 *)(buf + 0x20) = 0x80; + *(u8 *)(buf + 0x26) = 0x80; + *(u8 *)(buf + 0x25) = 0x80; + *(u8 *)(buf + 0x24) = 0x80; + *(u8 *)(buf + 0x2A) = 0x30; + *(u8 *)(buf + 0x29) = 0x30; + *(u8 *)(buf + 0x28) = 0x30; + *(u8 *)(buf + 0x2E) = 0x30; + *(u8 *)(buf + 0x2D) = 0x30; + *(u8 *)(buf + 0x2C) = 0x30; + *(s16 *)(buf + 0x1C) = t2; + } + + func_80017758(buf, (u8 *)(*(s32 *)((u8 *)a0 + 0x20)) + 0x34); +} + INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80186F00", func_8018A2D0); diff --git a/src/ov_SC06_032/ov_SC06_032_jr_80182890.c b/src/ov_SC06_032/ov_SC06_032_jr_80182890.c index 75acc9d644..ea7317f61b 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_80182890.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_80182890.c @@ -3852,7 +3852,66 @@ void func_801847D8(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_801849CC); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); +extern s32 func_80017758(void *a0, void *a1); + +void func_801849CC(void *a0) +{ + u8 buf[0x34]; + + if (*(u16 *)((u8 *)a0 + 0x34) == 0) { + *(s32 *)((u8 *)a0 + 0xE0) = *(s32 *)((u8 *)a0 + 0xE0) - 0x14; + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((u8 *)a0 + 0x34) = *(u16 *)((u8 *)a0 + 0x34) + 1; + } + } else { + s32 v1 = *(s32 *)((u8 *)a0 + 0x64); + if (*(s32 *)(*(s32 *)(v1 + 0x20) + 4) < 0 || *(u16 *)v1 == 0) { + func_8012C218(a0); + return; + } + } + + *(s16 *)(buf + 0x00) = 4; + *(s16 *)(buf + 0x08) = -4; + { + s16 c = 0xC; + *(s16 *)(buf + 0x02) = 0; + *(s16 *)(buf + 0x04) = 0; + *(s16 *)(buf + 0x0A) = 0; + *(s16 *)(buf + 0x0C) = 0; + *(s16 *)(buf + 0x10) = c; + } + *(s16 *)(buf + 0x12) = 0; + { + s32 t1 = *(s32 *)((u8 *)a0 + 0xE0); + s32 t2; + *(s16 *)(buf + 0x18) = -0xC; + *(s16 *)(buf + 0x1A) = 0; + *(s16 *)(buf + 0x14) = t1; + t2 = *(s32 *)((u8 *)a0 + 0xE0); + *(s32 *)(buf + 0x30) = 0x50000000; + *(u8 *)(buf + 0x22) = 0x80; + *(u8 *)(buf + 0x21) = 0x80; + *(u8 *)(buf + 0x20) = 0x80; + *(u8 *)(buf + 0x26) = 0x80; + *(u8 *)(buf + 0x25) = 0x80; + *(u8 *)(buf + 0x24) = 0x80; + *(u8 *)(buf + 0x2A) = 0x30; + *(u8 *)(buf + 0x29) = 0x30; + *(u8 *)(buf + 0x28) = 0x30; + *(u8 *)(buf + 0x2E) = 0x30; + *(u8 *)(buf + 0x2D) = 0x30; + *(u8 *)(buf + 0x2C) = 0x30; + *(s16 *)(buf + 0x1C) = t2; + } + + func_80017758(buf, (u8 *)(*(s32 *)((u8 *)a0 + 0x20)) + 0x34); +} + INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80184B08); diff --git a/src/ov_SC06_033/ov_SC06_033_jr_80186574.c b/src/ov_SC06_033/ov_SC06_033_jr_80186574.c index 417b6e4c65..391ffa2814 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_80186574.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_80186574.c @@ -3937,7 +3937,66 @@ void func_801884BC(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_801886B0); + + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); +extern s32 func_80017758(void *a0, void *a1); + +void func_801886B0(void *a0) +{ + u8 buf[0x34]; + + if (*(u16 *)((u8 *)a0 + 0x34) == 0) { + *(s32 *)((u8 *)a0 + 0xE0) = *(s32 *)((u8 *)a0 + 0xE0) - 0x14; + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((u8 *)a0 + 0x34) = *(u16 *)((u8 *)a0 + 0x34) + 1; + } + } else { + s32 v1 = *(s32 *)((u8 *)a0 + 0x64); + if (*(s32 *)(*(s32 *)(v1 + 0x20) + 4) < 0 || *(u16 *)v1 == 0) { + func_8012C218(a0); + return; + } + } + + *(s16 *)(buf + 0x00) = 4; + *(s16 *)(buf + 0x08) = -4; + { + s16 c = 0xC; + *(s16 *)(buf + 0x02) = 0; + *(s16 *)(buf + 0x04) = 0; + *(s16 *)(buf + 0x0A) = 0; + *(s16 *)(buf + 0x0C) = 0; + *(s16 *)(buf + 0x10) = c; + } + *(s16 *)(buf + 0x12) = 0; + { + s32 t1 = *(s32 *)((u8 *)a0 + 0xE0); + s32 t2; + *(s16 *)(buf + 0x18) = -0xC; + *(s16 *)(buf + 0x1A) = 0; + *(s16 *)(buf + 0x14) = t1; + t2 = *(s32 *)((u8 *)a0 + 0xE0); + *(s32 *)(buf + 0x30) = 0x50000000; + *(u8 *)(buf + 0x22) = 0x80; + *(u8 *)(buf + 0x21) = 0x80; + *(u8 *)(buf + 0x20) = 0x80; + *(u8 *)(buf + 0x26) = 0x80; + *(u8 *)(buf + 0x25) = 0x80; + *(u8 *)(buf + 0x24) = 0x80; + *(u8 *)(buf + 0x2A) = 0x30; + *(u8 *)(buf + 0x29) = 0x30; + *(u8 *)(buf + 0x28) = 0x30; + *(u8 *)(buf + 0x2E) = 0x30; + *(u8 *)(buf + 0x2D) = 0x30; + *(u8 *)(buf + 0x2C) = 0x30; + *(s16 *)(buf + 0x1C) = t2; + } + + func_80017758(buf, (u8 *)(*(s32 *)((u8 *)a0 + 0x20)) + 0x34); +} + INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_801887EC);