From 1bc5589588a06339d31447c4b7d5b62ff5dea5db Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 11 Aug 2026 20:58:17 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_80187180 to its zero-crack siblings --- src/ov_SC03_107/ov_SC03_107_jr_801789AC.c | 61 +++++++++++++++++++- src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c | 70 ++++++++++++++++++++++- src/ov_SC03_112/ov_SC03_112_jr_80182BF8.c | 61 +++++++++++++++++++- src/ov_SC03_113/ov_SC03_113_jr_8017C294.c | 61 +++++++++++++++++++- src/ov_SC03_117/ov_SC03_117_jr_80181C80.c | 61 +++++++++++++++++++- src/ov_SC03_119/ov_SC03_119_jr_801863CC.c | 61 +++++++++++++++++++- src/ov_SC05_004/ov_SC05_004_jr_8017F210.c | 70 ++++++++++++++++++++++- 7 files changed, 436 insertions(+), 9 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 3f6f3d5c20..c3bb3488dd 100644 --- a/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c +++ b/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c @@ -7112,7 +7112,66 @@ void func_8017F6E8(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_8017FCF0); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_8017FCF0(s32 a0) +{ + extern u8 D_80197498[]; + extern s32 D_801974B4; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_80197498); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_801974B4) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + void func_8017FE24(s32 arg0) { 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 09d7e61598..4439375757 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c @@ -4011,7 +4011,6 @@ extern s32 rand(void); extern u8 D_801B1BC4[]; extern u8 D_801B2FF4[]; extern u8 D_801B1C98[]; -extern u8 D_801B1C64[]; extern u8 D_801B9898[]; extern u8 D_801B1BF8[]; extern u8 D_801B1C04[]; @@ -4031,6 +4030,10 @@ extern u8 D_801B98DC; void func_80181CE4(void *a0v) { + /* [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_801B1C64[]; s32 e; s32 r; s32 o; @@ -4484,11 +4487,74 @@ void func_80182490(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80182A98); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_80182A98(s32 a0) +{ + extern u8 D_801B1C64[]; + extern s32 D_801B1C80; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_801B1C64); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_801B1C80) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + #include "common.h" void func_80182BCC(s32 arg0) { + /* [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_801B1C64[]; extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2); diff --git a/src/ov_SC03_112/ov_SC03_112_jr_80182BF8.c b/src/ov_SC03_112/ov_SC03_112_jr_80182BF8.c index 1e43bf2aea..afb61077f2 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_80182BF8.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_80182BF8.c @@ -3233,5 +3233,64 @@ void func_801833A4(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80182BF8", func_801839AC); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_801839AC(s32 a0) +{ + extern u8 D_801A8B40[]; + extern s32 D_801A8B5C; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_801A8B40); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_801A8B5C) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + 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 c152fc7631..1fd02abdc3 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c @@ -5652,7 +5652,66 @@ void func_80181128(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8017C294", func_80181730); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_80181730(s32 a0) +{ + extern u8 D_8019F28C[]; + extern s32 D_8019F2A8; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_8019F28C); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_8019F2A8) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + #include "common.h" 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 8e0887c83f..90eefddee1 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c @@ -3273,7 +3273,66 @@ void func_8018242C(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80181C80", func_80182A34); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_80182A34(s32 a0) +{ + extern u8 D_801C368C[]; + extern s32 D_801C36A8; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_801C368C); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_801C36A8) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + #include "common.h" 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 d85bc6dea7..ef2b2567cc 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c @@ -3305,7 +3305,66 @@ void func_80186B78(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_80187180); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_80187180(s32 a0) +{ + extern u8 D_801C6FA8[]; + extern s32 D_801C6FC4; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_801C6FA8); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_801C6FC4) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + #include "common.h" 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 7b41f22665..40a0364776 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8017F210.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8017F210.c @@ -2753,7 +2753,6 @@ extern s32 rand(void); extern u8 D_8019AE04[]; extern u8 D_8019C234[]; extern u8 D_8019AED8[]; -extern u8 D_8019AEA4[]; extern u8 D_8019F038[]; extern u8 D_8019AE38[]; extern u8 D_8019AE44[]; @@ -2773,6 +2772,10 @@ extern u8 D_8019F07C; void func_8017F210(void *a0v) { + /* [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_8019AEA4[]; s32 e; s32 r; s32 o; @@ -3226,12 +3229,75 @@ void func_8017F9BC(s32 a0) } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8017F210", func_8017FFC4); + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BCCC(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at call site */ + +void func_8017FFC4(s32 a0) +{ + extern u8 D_8019AEA4[]; + extern s32 D_8019AEC0; + + s16 pos1[4]; + s16 pos2[4]; + s32 s1; + + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 0x10); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) &= 0xFFF; + func_8012B1B4(a0, (s32)D_8019AEA4); + + { + s16 *p1 = pos1; + s16 *p2 = pos2; + s32 x, y, z; + + x = *(u16 *)(a0 + 0x6); + p2[0] = x; + p1[0] = x; + y = *(u16 *)(a0 + 0xA); + p2[1] = y; + p1[1] = y; + z = *(u16 *)(a0 + 0xE); + p2[1] = y + 0x40; + p2[2] = z; + p1[2] = z; + s1 = func_8012CEB0((s32)p1, (s32)p2, 1); + } + + if (s1 & 0x6000) { + if (!(s1 & 0x1000)) { + s1 = func_8012BCCC(a0); + if (s1 < 0x4001) { + if (func_8012BDBC(a0, 0x200) == 1) { + *(s16 *)(a0 + 0x2) = 4; + *(s16 *)(a0 + 0xFC) = 0; + *(s16 *)(a0 + 0x100) = *(u16 *)(a0 + 0xA); + } + } + } + } + if (s1 > 0x40000) { + *(s16 *)(a0 + 0x2) = 1; + } + + if ((((s32 (*)(s32, s32))func_8012CC40)(a0, (s32)&D_8019AEC0) & 0x1000) != 0) { + *(s16 *)(a0 + 0x2) = 0x12; + } +} + #include "common.h" void func_801800F8(s32 arg0) { + /* [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_8019AEA4[]; extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2);