From b7e9d2f2ee2e99ba7aa555c5872833be8bad0f4e Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 11 Aug 2026 20:58:26 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_80187B80 to its zero-crack siblings --- src/ov_SC03_107/ov_SC03_107_jr_801789AC.c | 60 ++++++++++++++++++++++- src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c | 60 ++++++++++++++++++++++- src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c | 60 ++++++++++++++++++++++- src/ov_SC03_113/ov_SC03_113_jr_8017C294.c | 60 ++++++++++++++++++++++- src/ov_SC03_117/ov_SC03_117_jr_80181C80.c | 60 ++++++++++++++++++++++- src/ov_SC03_119/ov_SC03_119_jr_801863CC.c | 60 ++++++++++++++++++++++- src/ov_SC05_004/ov_SC05_004_jr_8017F210.c | 60 ++++++++++++++++++++++- 7 files changed, 413 insertions(+), 7 deletions(-) diff --git a/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c b/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c index c3bb3488d..26471d853 100644 --- a/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c +++ b/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c @@ -7514,7 +7514,65 @@ INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_801805F INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_8018065C); -INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_801806F0); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_801806F0(s32 a0) +{ + extern u8 D_80197498[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_80197498); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_80197498); + } +} + extern void func_8012E688(s32, u16, u16); diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c b/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c index 443937575..2ed6ad00f 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c @@ -4872,7 +4872,65 @@ INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_801833A INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80183404); -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80183498); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_80183498(s32 a0) +{ + extern u8 D_801B1C64[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801B1C64); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801B1C64); + } +} + extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2); void func_801835C0(void *a0) { diff --git a/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c b/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c index f6f2411db..59bf4a7b4 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c @@ -3066,7 +3066,65 @@ INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_801842B INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_80184318); -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80183AE0", func_801843AC); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_801843AC(s32 a0) +{ + extern u8 D_801A8B40[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801A8B40); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801A8B40); + } +} + extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2); void func_801844D4(void *a0) { diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c b/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c index 1fd02abdc..0a377f6ce 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c @@ -6034,7 +6034,65 @@ INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8017C294", func_8018203 INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8017C294", func_8018209C); -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8017C294", func_80182130); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_80182130(s32 a0) +{ + extern u8 D_8019F28C[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_8019F28C); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_8019F28C); + } +} + extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2); void func_80182258(void *a0) { diff --git a/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c b/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c index 90eefddee..4e7760abd 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c @@ -3655,7 +3655,65 @@ INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80181C80", func_8018333 INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80181C80", func_801833A0); -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80181C80", func_80183434); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_80183434(s32 a0) +{ + extern u8 D_801C368C[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801C368C); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801C368C); + } +} + extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2); void func_8018355C(void *param) { diff --git a/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c b/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c index ef2b2567c..b364bbdf4 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c @@ -3687,7 +3687,65 @@ INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_80187A8 INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_80187AEC); -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_80187B80); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_80187B80(s32 a0) +{ + extern u8 D_801C6FA8[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801C6FA8); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_801C6FA8); + } +} + extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2); diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8017F210.c b/src/ov_SC05_004/ov_SC05_004_jr_8017F210.c index 40a036477..f7caebed5 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8017F210.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8017F210.c @@ -3615,7 +3615,65 @@ INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8017F210", func_801808C INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8017F210", func_80180930); -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8017F210", func_801809C4); + +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012B23C(s32 a0); +extern void func_8012B1B4(s32 a0, s32 a1); + +void func_801809C4(s32 a0) +{ + extern u8 D_8019AEA4[]; + u16 out[4]; + u16 pos[4]; + u16 t0, t1, t2; + + *(u16 *)(a0 + 0x5C) = 0xA810; + *(u16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x34); + + t0 = *(u16 *)(a0 + 0x6); + pos[0] = t0; + out[0] = t0; + t1 = *(u16 *)(a0 + 0xA); + pos[1] = t1; + out[1] = t1 - 0x18; + t2 = *(u16 *)(a0 + 0xE); + pos[2] = t2; + out[2] = t2; + func_8012CEB0((s32)out, (s32)pos, 1); + + *(u16 *)(a0 + 0xA) = pos[1] - 0x10; + + if (*(s16 *)(a0 + 0x70) == 0xF) { + s32 c; + + c = *(s32 *)(a0 + 0x20); + *(u16 *)(c + 0x14) = 0; + + *(u16 *)(a0 + 0x2) = 1; + *(u16 *)(a0 + 0x34) = 1; + *(u16 *)(a0 + 0x70) = 0; + *(u16 *)(a0 + 0x88) = *(u16 *)(a0 + 0x6); + *(u16 *)(a0 + 0x8A) = *(u16 *)(a0 + 0xA); + *(u16 *)(a0 + 0x8C) = *(u16 *)(a0 + 0xE); + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_8019AEA4); + + { + s32 n = *(s32 *)(a0 + 0x6C); + while (n != 0) { + *(u16 *)(n + 0x2) = 2; + *(u16 *)(n + 0x70) = *(u16 *)(n + 0x70) - 0x10; + *(u16 *)(*(s32 *)(n + 0x20) + 0x14) = 0; + n = *(s32 *)(n + 0x6C); + } + } + *(u16 *)(a0 + 0xFC) = 0; + } else { + func_8012B23C(a0); + func_8012B1B4(a0, (s32)D_8019AEA4); + } +} + extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2); void func_80180AEC(void *a0) {