From b7956de9fdf916b30e5c3e91c31728605d4b338b Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 12 Aug 2026 12:53:05 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_80185064 to its zero-crack siblings --- src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c | 51 ++++++++++++++++++++++- src/ov_SC03_107/ov_SC03_107_jr_801789AC.c | 51 ++++++++++++++++++++++- src/ov_SC03_112/ov_SC03_112_jr_8017C294.c | 51 ++++++++++++++++++++++- src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c | 51 ++++++++++++++++++++++- src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c | 51 ++++++++++++++++++++++- src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c | 51 ++++++++++++++++++++++- 6 files changed, 300 insertions(+), 6 deletions(-) diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c b/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c index 846a9862b1..04097b68ac 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c @@ -8022,7 +8022,56 @@ void func_80189194(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_801891DC); +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_801891DC; + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_80189C68(s32 a0); +extern void func_80189B3C(s32 a0); +extern s32 func_80189CD4(void); +extern void func_80189E1C(s32 a0); + +void func_801891DC(s32 a0) { + s32 v; + s32 flags; + + v = func_8012B8E4(a0, 0xA); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += v; + if ((*(s32 *)(a0 + 0xDC) & 0x20) != 0) { + if ((u32)(*(s32 *)(a0 + 0x1C) - 10) < 0xD) { + func_80189C68(a0); + } + } else { + if (*(s32 *)(a0 + 0x1C) == 0x16) { + func_80189B3C(a0); + } + if (*(s32 *)(a0 + 0x1C) < 0x10) { + ((void (*)(s32))func_80189CD4)(a0); + } + } + if (func_8012BEE8(a0) != 0) { + flags = *(s32 *)(a0 + 0xDC); + if (flags & 1) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFFE; + *(s16 *)(a0 + 2) = 3; + } else if (flags & 0x10) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFEF; + *(s16 *)(a0 + 2) = 3; + } else if (func_8012BD3C(a0, 0x400, 0x4000) == 0) { + *(s16 *)(a0 + 2) = 5; + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + func_80189E1C(a0); + } + } +} + /* func_80189304 — entity state-kick #0xB. 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 26471d853f..df9cdab6ff 100644 --- a/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c +++ b/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c @@ -6162,7 +6162,56 @@ void func_8017DE58(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_8017DEA0); +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_8017DEA0; + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8017E960(s32 a0); +extern void func_8017E888(s32 a0); +extern void func_8017E9CC(s32); +extern void func_8017EB04(s32 a0); + +void func_8017DEA0(s32 a0) { + s32 v; + s32 flags; + + v = func_8012B8E4(a0, 0xA); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += v; + if ((*(s32 *)(a0 + 0xDC) & 0x20) != 0) { + if ((u32)(*(s32 *)(a0 + 0x1C) - 10) < 0xD) { + func_8017E960(a0); + } + } else { + if (*(s32 *)(a0 + 0x1C) == 0x16) { + func_8017E888(a0); + } + if (*(s32 *)(a0 + 0x1C) < 0x10) { + ((void (*)(s32))func_8017E9CC)(a0); + } + } + if (func_8012BEE8(a0) != 0) { + flags = *(s32 *)(a0 + 0xDC); + if (flags & 1) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFFE; + *(s16 *)(a0 + 2) = 3; + } else if (flags & 0x10) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFEF; + *(s16 *)(a0 + 2) = 3; + } else if (func_8012BD3C(a0, 0x400, 0x4000) == 0) { + *(s16 *)(a0 + 2) = 5; + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + func_8017EB04(a0); + } + } +} + /* func_8017DFC8 — entity state-kick #0xB. diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c b/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c index f74c3c843f..4794e5131b 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c @@ -4307,7 +4307,56 @@ void func_8017FF70(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_8017FFB8); +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_8017FFB8; + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_80180A78(s32 a0); +extern void func_801809A0(s32 a0); +extern void func_80180AE4(s32); +extern void func_80180C1C(s32 a0); + +void func_8017FFB8(s32 a0) { + s32 v; + s32 flags; + + v = func_8012B8E4(a0, 0xA); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += v; + if ((*(s32 *)(a0 + 0xDC) & 0x20) != 0) { + if ((u32)(*(s32 *)(a0 + 0x1C) - 10) < 0xD) { + func_80180A78(a0); + } + } else { + if (*(s32 *)(a0 + 0x1C) == 0x16) { + func_801809A0(a0); + } + if (*(s32 *)(a0 + 0x1C) < 0x10) { + ((void (*)(s32))func_80180AE4)(a0); + } + } + if (func_8012BEE8(a0) != 0) { + flags = *(s32 *)(a0 + 0xDC); + if (flags & 1) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFFE; + *(s16 *)(a0 + 2) = 3; + } else if (flags & 0x10) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFEF; + *(s16 *)(a0 + 2) = 3; + } else if (func_8012BD3C(a0, 0x400, 0x4000) == 0) { + *(s16 *)(a0 + 2) = 5; + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + func_80180C1C(a0); + } + } +} + diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c b/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c index 67157cd96d..61ba4c2009 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c @@ -3562,7 +3562,56 @@ void func_8017DF68(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8017BEBC", func_8017DFB0); +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_8017DFB0; + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8017EA70(s32 a0); +extern void func_8017E998(s32 a0); +extern void func_8017EADC(s32); +extern void func_8017EC14(s32 a0); + +void func_8017DFB0(s32 a0) { + s32 v; + s32 flags; + + v = func_8012B8E4(a0, 0xA); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += v; + if ((*(s32 *)(a0 + 0xDC) & 0x20) != 0) { + if ((u32)(*(s32 *)(a0 + 0x1C) - 10) < 0xD) { + func_8017EA70(a0); + } + } else { + if (*(s32 *)(a0 + 0x1C) == 0x16) { + func_8017E998(a0); + } + if (*(s32 *)(a0 + 0x1C) < 0x10) { + ((void (*)(s32))func_8017EADC)(a0); + } + } + if (func_8012BEE8(a0) != 0) { + flags = *(s32 *)(a0 + 0xDC); + if (flags & 1) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFFE; + *(s16 *)(a0 + 2) = 3; + } else if (flags & 0x10) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFEF; + *(s16 *)(a0 + 2) = 3; + } else if (func_8012BD3C(a0, 0x400, 0x4000) == 0) { + *(s16 *)(a0 + 2) = 5; + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + func_8017EC14(a0); + } + } +} + /* func_8017E0D8 — entity state-kick #0xB. diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c b/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c index cbcf252ef1..b8b023a58a 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c @@ -5201,7 +5201,56 @@ void func_80181C98(s32 a0) } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80181CE0); +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_80181CE0; + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_801827A0(s32 a0); +extern void func_801826C8(s32 a0); +extern void func_8018280C(s32); +extern void func_80182944(s32 a0); + +void func_80181CE0(s32 a0) { + s32 v; + s32 flags; + + v = func_8012B8E4(a0, 0xA); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += v; + if ((*(s32 *)(a0 + 0xDC) & 0x20) != 0) { + if ((u32)(*(s32 *)(a0 + 0x1C) - 10) < 0xD) { + func_801827A0(a0); + } + } else { + if (*(s32 *)(a0 + 0x1C) == 0x16) { + func_801826C8(a0); + } + if (*(s32 *)(a0 + 0x1C) < 0x10) { + ((void (*)(s32))func_8018280C)(a0); + } + } + if (func_8012BEE8(a0) != 0) { + flags = *(s32 *)(a0 + 0xDC); + if (flags & 1) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFFE; + *(s16 *)(a0 + 2) = 3; + } else if (flags & 0x10) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFEF; + *(s16 *)(a0 + 2) = 3; + } else if (func_8012BD3C(a0, 0x400, 0x4000) == 0) { + *(s16 *)(a0 + 2) = 5; + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + func_80182944(a0); + } + } +} + /* func_80181E08 — entity state-kick #0xB. diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c b/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c index 81383bbb6d..6dd01eb8cc 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c @@ -3599,7 +3599,56 @@ void func_8017E518(s32 a0) } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8017BEBC", func_8017E560); +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_8017E560; + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8017F020(s32 a0); +extern void func_8017EF48(s32 a0); +extern void func_8017F08C(s32); +extern void func_8017F1C4(s32 a0); + +void func_8017E560(s32 a0) { + s32 v; + s32 flags; + + v = func_8012B8E4(a0, 0xA); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += v; + if ((*(s32 *)(a0 + 0xDC) & 0x20) != 0) { + if ((u32)(*(s32 *)(a0 + 0x1C) - 10) < 0xD) { + func_8017F020(a0); + } + } else { + if (*(s32 *)(a0 + 0x1C) == 0x16) { + func_8017EF48(a0); + } + if (*(s32 *)(a0 + 0x1C) < 0x10) { + ((void (*)(s32))func_8017F08C)(a0); + } + } + if (func_8012BEE8(a0) != 0) { + flags = *(s32 *)(a0 + 0xDC); + if (flags & 1) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFFE; + *(s16 *)(a0 + 2) = 3; + } else if (flags & 0x10) { + *(s32 *)(a0 + 0xDC) = flags & 0xFFFFFFEF; + *(s16 *)(a0 + 2) = 3; + } else if (func_8012BD3C(a0, 0x400, 0x4000) == 0) { + *(s16 *)(a0 + 2) = 5; + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + func_8017F1C4(a0); + } + } +} + /* func_8017E688 — entity state-kick #0xB.