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 1df13cc7d..0a8bfbc82 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c @@ -1787,7 +1787,6 @@ extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); extern u16 D_80126B5E; -extern u16 D_80126B66; extern void func_8016AA50(s32 param_1, s32 param_2); extern void (*D_801840A0[])(void); extern void func_8016AB30(void *a0); @@ -3512,7 +3511,98 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8017BEBC", func_8017D960); + + +extern void func_8017DD98(s32 a0); +extern void func_8017DB10(s32); +extern void func_8017DD30(void *a0); + +void func_8017D960(void *a0) { + + extern s32 D_80126B58; + extern u16 D_80126B62; + extern u16 D_80126B66; + extern s16 D_80191B6C[]; + extern s16 D_80191B6E[]; + extern s16 D_80191B70; + extern s16 D_80191B72; + extern s32 D_8019BD18; + + s16 *p = (s16 *)&D_80126B58; + s32 flag; + register s32 cond __asm__("$2"); + + __asm__ __volatile__("" : "=r"(p) : "0"(p)); + + flag = 0; + if (*(s16 *)((char *)a0 + 0x70) == 2) { + goto CASE2; + } + if (*(s16 *)((char *)a0 + 0x70) < 3) { + goto CASE01; + } + if (*(s16 *)((char *)a0 + 0x70) == 3) { + goto CASE3; + } + goto TAIL; + +CASE01: + if (*(s16 *)((char *)a0 + 0x70) < 0) { + goto TAIL; + } + if (*(s16 *)&D_80126B66 < *(s16 *)((char *)a0 + 0xE)) { + cond = *(s16 *)((char *)a0 + 0xE) + D_80191B6C[*(s16 *)((char *)a0 + 0x70)] < *(s16 *)&D_80126B66; + goto CHECK; + } + goto TAIL; + +CASE2: + if (*(s16 *)&D_80126B66 > *(s16 *)((char *)a0 + 0xE)) { + cond = *(s16 *)&D_80126B66 < *(s16 *)((char *)a0 + 0xE) + D_80191B70; + goto CHECK; + } + goto TAIL; + +CASE3: + if (*(s16 *)&D_80126B62 > *(s16 *)((char *)a0 + 0xA)) { + if (*(s16 *)&D_80126B62 < *(s16 *)((char *)a0 + 0xA) + D_80191B72) { + goto SUCCESS; + } + } + { + s16 base = p[3]; + s16 posx = *(s16 *)((char *)a0 + 0x6); + if (base < posx) { + __asm__ __volatile__("" ::: "memory"); + cond = posx + D_80191B6E[*(s16 *)((char *)a0 + 0x70)] < base; + goto CHECK; + } + } + goto TAIL; + +CHECK: + if (!cond) { + goto TAIL; + } +SUCCESS: + flag = 1; + +TAIL: + if (flag != 0 && D_8019BD18 == 0) { + func_8017DD98(0x12F); + ((void (*)(void *))func_8017DB10)(a0); + } else { + if (*(s16 *)((char *)a0 + 0xFE) != 0) { + s16 t = *(s16 *)((char *)a0 + 0xFE) - 0x10; + *(s16 *)((char *)a0 + 0xFE) = t; + if (t < 0) { + *(s16 *)((char *)a0 + 0xFE) = 0; + } + } + } + func_8017DD30(a0); +} + extern void func_8012AD44(s32 *a0, s16 a1); void func_8017DB10(s32 a0) { 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 f5eedc7a7..2e9b27283 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c @@ -52,7 +52,6 @@ extern s32 func_80165A50(s32); extern void func_80029514(s32); extern u8 D_800AF630[]; extern u8 D_80078EC0; -extern s32 D_80126B58; extern s32 func_80028FBC(void); extern s32 func_80029000(void); extern s32 func_80028D9C(void); @@ -1788,7 +1787,6 @@ extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); extern u16 D_80126B5E; -extern u16 D_80126B66; extern void func_8016AA50(s32 param_1, s32 param_2); extern void (*D_80183C20[])(void); extern void func_8016AB30(void *a0); @@ -4337,7 +4335,98 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_8017EE6C); + + +extern void func_8017F2A4(s32 a0); +extern void func_8017F01C(s32); +extern void func_8017F23C(void *a0); + +void func_8017EE6C(void *a0) { + + extern s32 D_80126B58; + extern u16 D_80126B62; + extern u16 D_80126B66; + extern s16 D_80192A40[]; + extern s16 D_80192A42[]; + extern s16 D_80192A44; + extern s16 D_80192A46; + extern s32 D_8019A7D0; + + s16 *p = (s16 *)&D_80126B58; + s32 flag; + register s32 cond __asm__("$2"); + + __asm__ __volatile__("" : "=r"(p) : "0"(p)); + + flag = 0; + if (*(s16 *)((char *)a0 + 0x70) == 2) { + goto CASE2; + } + if (*(s16 *)((char *)a0 + 0x70) < 3) { + goto CASE01; + } + if (*(s16 *)((char *)a0 + 0x70) == 3) { + goto CASE3; + } + goto TAIL; + +CASE01: + if (*(s16 *)((char *)a0 + 0x70) < 0) { + goto TAIL; + } + if (*(s16 *)&D_80126B66 < *(s16 *)((char *)a0 + 0xE)) { + cond = *(s16 *)((char *)a0 + 0xE) + D_80192A40[*(s16 *)((char *)a0 + 0x70)] < *(s16 *)&D_80126B66; + goto CHECK; + } + goto TAIL; + +CASE2: + if (*(s16 *)&D_80126B66 > *(s16 *)((char *)a0 + 0xE)) { + cond = *(s16 *)&D_80126B66 < *(s16 *)((char *)a0 + 0xE) + D_80192A44; + goto CHECK; + } + goto TAIL; + +CASE3: + if (*(s16 *)&D_80126B62 > *(s16 *)((char *)a0 + 0xA)) { + if (*(s16 *)&D_80126B62 < *(s16 *)((char *)a0 + 0xA) + D_80192A46) { + goto SUCCESS; + } + } + { + s16 base = p[3]; + s16 posx = *(s16 *)((char *)a0 + 0x6); + if (base < posx) { + __asm__ __volatile__("" ::: "memory"); + cond = posx + D_80192A42[*(s16 *)((char *)a0 + 0x70)] < base; + goto CHECK; + } + } + goto TAIL; + +CHECK: + if (!cond) { + goto TAIL; + } +SUCCESS: + flag = 1; + +TAIL: + if (flag != 0 && D_8019A7D0 == 0) { + func_8017F2A4(0x12F); + ((void (*)(void *))func_8017F01C)(a0); + } else { + if (*(s16 *)((char *)a0 + 0xFE) != 0) { + s16 t = *(s16 *)((char *)a0 + 0xFE) - 0x10; + *(s16 *)((char *)a0 + 0xFE) = t; + if (t < 0) { + *(s16 *)((char *)a0 + 0xFE) = 0; + } + } + } + func_8017F23C(a0); +} + extern void func_8012AD44(s32 *a0, s16 a1); void func_8017F01C(s32 a0) { 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 fa45b61b3..0d39f8da9 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c @@ -52,7 +52,6 @@ extern s32 func_80165A50(s32); extern void func_80029514(s32); extern u8 D_800AF630[]; extern u8 D_80078EC0; -extern s32 D_80126B58; extern s32 func_80028FBC(void); extern s32 func_80029000(void); extern s32 func_80028D9C(void); @@ -1788,7 +1787,6 @@ extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); extern u16 D_80126B5E; -extern u16 D_80126B66; extern void func_8016AA50(s32 param_1, s32 param_2); extern void (*D_80189000[])(void); extern void func_8016AB30(void *a0); @@ -3612,6 +3610,10 @@ extern u16 func_80148800(s32 *a0); extern void func_8017F53C(s32 param_1, s16 *param_2); void func_8017F48C(s32 a0) { + /* [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 s32 D_80126B58; extern s16 D_80189BC8[]; extern Blk8_80126940_8017D6D0_8017F48C D_80126940; @@ -3712,7 +3714,98 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_8017F7E4); + + +extern void func_8017FC1C(s32 a0); +extern void func_8017F994(void *a0); +extern void func_8017FBB4(void *a0); + +void func_8017F7E4(void *a0) { + + extern s32 D_80126B58; + extern u16 D_80126B62; + extern u16 D_80126B66; + extern s16 D_8019AE44[]; + extern s16 D_8019AE46[]; + extern s16 D_8019AE48; + extern s16 D_8019AE4A; + extern s32 D_801AAAD8; + + s16 *p = (s16 *)&D_80126B58; + s32 flag; + register s32 cond __asm__("$2"); + + __asm__ __volatile__("" : "=r"(p) : "0"(p)); + + flag = 0; + if (*(s16 *)((char *)a0 + 0x70) == 2) { + goto CASE2; + } + if (*(s16 *)((char *)a0 + 0x70) < 3) { + goto CASE01; + } + if (*(s16 *)((char *)a0 + 0x70) == 3) { + goto CASE3; + } + goto TAIL; + +CASE01: + if (*(s16 *)((char *)a0 + 0x70) < 0) { + goto TAIL; + } + if (*(s16 *)&D_80126B66 < *(s16 *)((char *)a0 + 0xE)) { + cond = *(s16 *)((char *)a0 + 0xE) + D_8019AE44[*(s16 *)((char *)a0 + 0x70)] < *(s16 *)&D_80126B66; + goto CHECK; + } + goto TAIL; + +CASE2: + if (*(s16 *)&D_80126B66 > *(s16 *)((char *)a0 + 0xE)) { + cond = *(s16 *)&D_80126B66 < *(s16 *)((char *)a0 + 0xE) + D_8019AE48; + goto CHECK; + } + goto TAIL; + +CASE3: + if (*(s16 *)&D_80126B62 > *(s16 *)((char *)a0 + 0xA)) { + if (*(s16 *)&D_80126B62 < *(s16 *)((char *)a0 + 0xA) + D_8019AE4A) { + goto SUCCESS; + } + } + { + s16 base = p[3]; + s16 posx = *(s16 *)((char *)a0 + 0x6); + if (base < posx) { + __asm__ __volatile__("" ::: "memory"); + cond = posx + D_8019AE46[*(s16 *)((char *)a0 + 0x70)] < base; + goto CHECK; + } + } + goto TAIL; + +CHECK: + if (!cond) { + goto TAIL; + } +SUCCESS: + flag = 1; + +TAIL: + if (flag != 0 && D_801AAAD8 == 0) { + func_8017FC1C(0x12F); + func_8017F994(a0); + } else { + if (*(s16 *)((char *)a0 + 0xFE) != 0) { + s16 t = *(s16 *)((char *)a0 + 0xFE) - 0x10; + *(s16 *)((char *)a0 + 0xFE) = t; + if (t < 0) { + *(s16 *)((char *)a0 + 0xFE) = 0; + } + } + } + func_8017FBB4(a0); +} + extern void func_8012AD44(s32 *a0, s16 a1); void func_8017F994(void *arg0) {