diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c b/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c index 7f6c8e1eb..8c23ac0e5 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c @@ -607,7 +607,6 @@ extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); extern void func_8014E934(s32 _arg0); extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); extern s32 func_8014E98C(void *a0); -extern u16 D_800B99DA; extern s32 D_801150D8; extern s16 D_801152AA; extern u8 D_80126720[]; @@ -5280,7 +5279,59 @@ void func_8017FBC4(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8017FC00); + + +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8017FC00(void) +{ + + extern u16 D_800B99DA; + extern s32 D_80126B58; + extern u8 D_800AF648; + extern s32 D_80191968; + extern s32 func_80013450(s32); + s32 *p = &D_80126B58; + s32 sxy, pv, flag; + s16 x; + s32 pan; + s32 dist; + s32 vol; + + if (!(D_800B99DA & 1)) { + func_8004914C(&D_800AF648); + func_800491AC(&D_800AF648); + if (RotTransPers((s32)&D_80191968, (s32)&sxy, &pv, &flag) <= 0 || flag < 0) { + func_8002D4C8(4, 0x7E6); + } else { + x = *(u16 *)&sxy + 0xA0; + *(s16 *)&sxy = x; + if (x < 0) { + x = 0; + *(s16 *)&sxy = x; + } else if (x >= 0x141) { + x = 0x140; + *(s16 *)&sxy = x; + } + x = *(s16 *)&sxy; + pan = (x * 15) / 320; + dist = ((s32 (*)(s32, s32))func_80013450)((s32)(p + 1), (s32)&D_80191968); + if (dist >= 0x240) { + dist = 0x23F; + } + { + s32 panpart; + vol = ((0x23F - dist) * 127) / 576; + panpart = ((pan << 8) & 0xF00) | 0x3000; + func_8002D4C8(0x7E6, panpart | (vol & 0x7F)); + } + } + } +} + extern s32 D_801915FC; extern s32 D_801EEAE8; diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c b/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c index cb53fcfb0..a321f3634 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c @@ -605,7 +605,6 @@ extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); extern void func_8014E934(s32 _arg0); extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); extern s32 func_8014E98C(void *a0); -extern u16 D_800B99DA; extern s32 D_801150D8; extern s16 D_801152AA; extern u8 D_80126720[]; @@ -5696,7 +5695,59 @@ void func_80182DF4(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8017AE2C", func_80182E30); + + +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80182E30(void) +{ + + extern u16 D_800B99DA; + extern s32 D_80126B58; + extern u8 D_800AF648; + extern s32 D_801906E8; + extern s32 func_80013450(s32); + s32 *p = &D_80126B58; + s32 sxy, pv, flag; + s16 x; + s32 pan; + s32 dist; + s32 vol; + + if (!(D_800B99DA & 1)) { + func_8004914C(&D_800AF648); + func_800491AC(&D_800AF648); + if (RotTransPers((s32)&D_801906E8, (s32)&sxy, &pv, &flag) <= 0 || flag < 0) { + func_8002D4C8(4, 0x7E6); + } else { + x = *(u16 *)&sxy + 0xA0; + *(s16 *)&sxy = x; + if (x < 0) { + x = 0; + *(s16 *)&sxy = x; + } else if (x >= 0x141) { + x = 0x140; + *(s16 *)&sxy = x; + } + x = *(s16 *)&sxy; + pan = (x * 15) / 320; + dist = ((s32 (*)(s32, s32))func_80013450)((s32)(p + 1), (s32)&D_801906E8); + if (dist >= 0x240) { + dist = 0x23F; + } + { + s32 panpart; + vol = ((0x23F - dist) * 127) / 576; + panpart = ((pan << 8) & 0xF00) | 0x3000; + func_8002D4C8(0x7E6, panpart | (vol & 0x7F)); + } + } + } +} + extern s32 D_8019037C; extern void *D_801E1BC8; diff --git a/src/ov_SC04_015/ov_SC04_015_jr_801820DC.c b/src/ov_SC04_015/ov_SC04_015_jr_801820DC.c index 2416a0c2e..166c622b1 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_801820DC.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_801820DC.c @@ -600,7 +600,6 @@ extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); extern void func_8014E934(s32 _arg0); extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); extern s32 func_8014E98C(void *a0); -extern u16 D_800B99DA; extern s32 D_801150D8; extern s16 D_801152AA; extern u8 D_80126720[]; @@ -3862,7 +3861,59 @@ void func_80183788(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801820DC", func_801837C4); + + +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_801837C4(void) +{ + + extern u16 D_800B99DA; + extern s32 D_80126B58; + extern u8 D_800AF648; + extern s32 D_801C44EC; + extern s32 func_80013450(s32); + s32 *p = &D_80126B58; + s32 sxy, pv, flag; + s16 x; + s32 pan; + s32 dist; + s32 vol; + + if (!(D_800B99DA & 1)) { + func_8004914C(&D_800AF648); + func_800491AC(&D_800AF648); + if (RotTransPers((s32)&D_801C44EC, (s32)&sxy, &pv, &flag) <= 0 || flag < 0) { + func_8002D4C8(4, 0x7E6); + } else { + x = *(u16 *)&sxy + 0xA0; + *(s16 *)&sxy = x; + if (x < 0) { + x = 0; + *(s16 *)&sxy = x; + } else if (x >= 0x141) { + x = 0x140; + *(s16 *)&sxy = x; + } + x = *(s16 *)&sxy; + pan = (x * 15) / 320; + dist = ((s32 (*)(s32, s32))func_80013450)((s32)(p + 1), (s32)&D_801C44EC); + if (dist >= 0x240) { + dist = 0x23F; + } + { + s32 panpart; + vol = ((0x23F - dist) * 127) / 576; + panpart = ((pan << 8) & 0xF00) | 0x3000; + func_8002D4C8(0x7E6, panpart | (vol & 0x7F)); + } + } + } +} + extern s32 D_801C4180; diff --git a/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c b/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c index 32b12deb3..8911330a1 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c @@ -600,7 +600,6 @@ extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); extern void func_8014E934(s32 _arg0); extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); extern s32 func_8014E98C(void *a0); -extern u16 D_800B99DA; extern s32 D_801150D8; extern s16 D_801152AA; extern u8 D_80126720[]; @@ -3654,7 +3653,59 @@ tail: DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018AB78); + + +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8018AB78(void) +{ + + extern u16 D_800B99DA; + extern s32 D_80126B58; + extern u8 D_800AF648; + extern s32 D_801E055C; + extern s32 func_80013450(s32); + s32 *p = &D_80126B58; + s32 sxy, pv, flag; + s16 x; + s32 pan; + s32 dist; + s32 vol; + + if (!(D_800B99DA & 1)) { + func_8004914C(&D_800AF648); + func_800491AC(&D_800AF648); + if (RotTransPers((s32)&D_801E055C, (s32)&sxy, &pv, &flag) <= 0 || flag < 0) { + func_8002D4C8(4, 0x7E6); + } else { + x = *(u16 *)&sxy + 0xA0; + *(s16 *)&sxy = x; + if (x < 0) { + x = 0; + *(s16 *)&sxy = x; + } else if (x >= 0x141) { + x = 0x140; + *(s16 *)&sxy = x; + } + x = *(s16 *)&sxy; + pan = (x * 15) / 320; + dist = ((s32 (*)(s32, s32))func_80013450)((s32)(p + 1), (s32)&D_801E055C); + if (dist >= 0x240) { + dist = 0x23F; + } + { + s32 panpart; + vol = ((0x23F - dist) * 127) / 576; + panpart = ((pan << 8) & 0xF00) | 0x3000; + func_8002D4C8(0x7E6, panpart | (vol & 0x7F)); + } + } + } +} + extern s32 D_801E01F0; diff --git a/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c b/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c index 2dab4e369..cbe8b80b5 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_80188B1C.c @@ -600,7 +600,6 @@ extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); extern void func_8014E934(s32 _arg0); extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); extern s32 func_8014E98C(void *a0); -extern u16 D_800B99DA; extern s32 D_801150D8; extern s16 D_801152AA; extern u8 D_80126720[]; @@ -3636,7 +3635,59 @@ void func_8018A83C(void *a0) { } -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018A878); + + +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8018A878(void) +{ + + extern u16 D_800B99DA; + extern s32 D_80126B58; + extern u8 D_800AF648; + extern s32 D_801E681C; + extern s32 func_80013450(s32); + s32 *p = &D_80126B58; + s32 sxy, pv, flag; + s16 x; + s32 pan; + s32 dist; + s32 vol; + + if (!(D_800B99DA & 1)) { + func_8004914C(&D_800AF648); + func_800491AC(&D_800AF648); + if (RotTransPers((s32)&D_801E681C, (s32)&sxy, &pv, &flag) <= 0 || flag < 0) { + func_8002D4C8(4, 0x7E6); + } else { + x = *(u16 *)&sxy + 0xA0; + *(s16 *)&sxy = x; + if (x < 0) { + x = 0; + *(s16 *)&sxy = x; + } else if (x >= 0x141) { + x = 0x140; + *(s16 *)&sxy = x; + } + x = *(s16 *)&sxy; + pan = (x * 15) / 320; + dist = ((s32 (*)(s32, s32))func_80013450)((s32)(p + 1), (s32)&D_801E681C); + if (dist >= 0x240) { + dist = 0x23F; + } + { + s32 panpart; + vol = ((0x23F - dist) * 127) / 576; + panpart = ((pan << 8) & 0xF00) | 0x3000; + func_8002D4C8(0x7E6, panpart | (vol & 0x7F)); + } + } + } +} + extern s32 D_801E64B0; extern s32 D_801ED7E0;