From db2f5fefb3a8e4e027e17675a372be2f52b07943 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 12 Aug 2026 18:26:34 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_8017F570 to its zero-crack siblings --- src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c | 86 ++++++++++++++++++++++- src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c | 86 ++++++++++++++++++++++- src/ov_SC03_097/ov_SC03_097_jr_8017D898.c | 86 ++++++++++++++++++++++- 3 files changed, 252 insertions(+), 6 deletions(-) diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c b/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c index 0a8bfbc82..eb78c1c2f 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c @@ -1786,7 +1786,6 @@ extern void func_8016A700(void *a0); extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); -extern u16 D_80126B5E; extern void func_8016AA50(s32 param_1, s32 param_2); extern void (*D_801840A0[])(void); extern void func_8016AB30(void *a0); @@ -3611,7 +3610,90 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8017BEBC", func_8017DB38); + + +extern void func_8017DDFC(s32 a0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017DD30(void *a0); + +void func_8017DB38(void *a0) { + + extern s32 D_8019BD18; + extern s16 D_80191B6C[]; + extern s16 D_80191B70; + extern s16 D_80191B72; + extern s16 D_80191B74; + extern u16 D_80126B66; + extern u16 D_80126B62; + extern u16 D_80126B5E; + s16 state = *(s16 *)((u8 *)a0 + 0x70); + s32 invalid = 0; + + switch (state) { + case 0: + case 1: { + s16 lim = (*(s16 *)&D_80126B66); + s16 pos = *(s16 *)((u8 *)a0 + 0xE); + + if (lim < pos) { + if (pos + D_80191B6C[state] < lim) { + /* valid */ + } else { + invalid = 1; + } + } else { + invalid = 1; + } + break; + } + case 2: { + s16 pos = *(s16 *)((u8 *)a0 + 0xE); + s16 lim = (*(s16 *)&D_80126B66); + + if (lim > pos) { + if (lim < pos + D_80191B70) { + /* valid */ + } else { + invalid = 1; + } + } else { + invalid = 1; + } + break; + } + case 3: { + s16 p1 = *(s16 *)((u8 *)a0 + 0xA); + s16 t1 = (*(s16 *)&D_80126B62); + + if (t1 > p1 && t1 < p1 + D_80191B72) { + /* valid */ + } else { + s16 t2 = (*(s16 *)&D_80126B5E); + s16 p2 = *(s16 *)((u8 *)a0 + 0x6); + + if (t2 < p2 && p2 + D_80191B74 < t2) { + /* valid */ + } else { + invalid = 1; + } + } + break; + } + } + + if (invalid || D_8019BD18 != 0) { + func_8017DDFC(0x12F); + *(s16 *)((u8 *)a0 + 0xFC) = 0; + func_8012AD44((s32 *)a0, 1); + } else { + s16 t = *(s16 *)((u8 *)a0 + 0xFE); + if (t < 0x70) { + *(s16 *)((u8 *)a0 + 0xFE) = t + 0x10; + } + } + func_8017DD30(a0); +} + extern s32 D_8019BD18; void func_8017DCD0(void) { diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c b/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c index 2e9b27283..f5ebaa303 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c @@ -1786,7 +1786,6 @@ extern void func_8016A700(void *a0); extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); -extern u16 D_80126B5E; extern void func_8016AA50(s32 param_1, s32 param_2); extern void (*D_80183C20[])(void); extern void func_8016AB30(void *a0); @@ -4435,7 +4434,90 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_8017F044); + + +extern void func_8017F308(s32 a0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017F23C(void *a0); + +void func_8017F044(void *a0) { + + extern s32 D_8019A7D0; + extern s16 D_80192A40[]; + extern s16 D_80192A44; + extern s16 D_80192A46; + extern s16 D_80192A48; + extern u16 D_80126B66; + extern u16 D_80126B62; + extern u16 D_80126B5E; + s16 state = *(s16 *)((u8 *)a0 + 0x70); + s32 invalid = 0; + + switch (state) { + case 0: + case 1: { + s16 lim = (*(s16 *)&D_80126B66); + s16 pos = *(s16 *)((u8 *)a0 + 0xE); + + if (lim < pos) { + if (pos + D_80192A40[state] < lim) { + /* valid */ + } else { + invalid = 1; + } + } else { + invalid = 1; + } + break; + } + case 2: { + s16 pos = *(s16 *)((u8 *)a0 + 0xE); + s16 lim = (*(s16 *)&D_80126B66); + + if (lim > pos) { + if (lim < pos + D_80192A44) { + /* valid */ + } else { + invalid = 1; + } + } else { + invalid = 1; + } + break; + } + case 3: { + s16 p1 = *(s16 *)((u8 *)a0 + 0xA); + s16 t1 = (*(s16 *)&D_80126B62); + + if (t1 > p1 && t1 < p1 + D_80192A46) { + /* valid */ + } else { + s16 t2 = (*(s16 *)&D_80126B5E); + s16 p2 = *(s16 *)((u8 *)a0 + 0x6); + + if (t2 < p2 && p2 + D_80192A48 < t2) { + /* valid */ + } else { + invalid = 1; + } + } + break; + } + } + + if (invalid || D_8019A7D0 != 0) { + func_8017F308(0x12F); + *(s16 *)((u8 *)a0 + 0xFC) = 0; + func_8012AD44((s32 *)a0, 1); + } else { + s16 t = *(s16 *)((u8 *)a0 + 0xFE); + if (t < 0x70) { + *(s16 *)((u8 *)a0 + 0xFE) = t + 0x10; + } + } + func_8017F23C(a0); +} + extern s32 D_8019A7D0; void func_8017F1DC(void) { diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c index 0d39f8da9..c82b47027 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c @@ -1786,7 +1786,6 @@ extern void func_8016A700(void *a0); extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); -extern u16 D_80126B5E; extern void func_8016AA50(s32 param_1, s32 param_2); extern void (*D_80189000[])(void); extern void func_8016AB30(void *a0); @@ -3814,7 +3813,90 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_8017F9BC); + + +extern void func_8017FC80(s32 a0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017FBB4(void *a0); + +void func_8017F9BC(void *a0) { + + extern s32 D_801AAAD8; + extern s16 D_8019AE44[]; + extern s16 D_8019AE48; + extern s16 D_8019AE4A; + extern s16 D_8019AE4C; + extern u16 D_80126B66; + extern u16 D_80126B62; + extern u16 D_80126B5E; + s16 state = *(s16 *)((u8 *)a0 + 0x70); + s32 invalid = 0; + + switch (state) { + case 0: + case 1: { + s16 lim = (*(s16 *)&D_80126B66); + s16 pos = *(s16 *)((u8 *)a0 + 0xE); + + if (lim < pos) { + if (pos + D_8019AE44[state] < lim) { + /* valid */ + } else { + invalid = 1; + } + } else { + invalid = 1; + } + break; + } + case 2: { + s16 pos = *(s16 *)((u8 *)a0 + 0xE); + s16 lim = (*(s16 *)&D_80126B66); + + if (lim > pos) { + if (lim < pos + D_8019AE48) { + /* valid */ + } else { + invalid = 1; + } + } else { + invalid = 1; + } + break; + } + case 3: { + s16 p1 = *(s16 *)((u8 *)a0 + 0xA); + s16 t1 = (*(s16 *)&D_80126B62); + + if (t1 > p1 && t1 < p1 + D_8019AE4A) { + /* valid */ + } else { + s16 t2 = (*(s16 *)&D_80126B5E); + s16 p2 = *(s16 *)((u8 *)a0 + 0x6); + + if (t2 < p2 && p2 + D_8019AE4C < t2) { + /* valid */ + } else { + invalid = 1; + } + } + break; + } + } + + if (invalid || D_801AAAD8 != 0) { + func_8017FC80(0x12F); + *(s16 *)((u8 *)a0 + 0xFC) = 0; + func_8012AD44((s32 *)a0, 1); + } else { + s16 t = *(s16 *)((u8 *)a0 + 0xFE); + if (t < 0x70) { + *(s16 *)((u8 *)a0 + 0xFE) = t + 0x10; + } + } + func_8017FBB4(a0); +} + extern s32 D_801AAAD8;