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 11ca9de74c..76e5578f87 100644 --- a/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c +++ b/src/ov_SC03_107/ov_SC03_107_jr_801789AC.c @@ -7973,7 +7973,54 @@ INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_801812B INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_801812F8); -INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_8018134C); + +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); + +s32 func_8018134C(s32 a0, s16 a1, s16 a2) { + s16 p1[3]; + s16 p2[3]; + s32 t; + s32 result; + + p1[0] = *(u16 *)(a0 + 6); + p1[1] = *(u16 *)(a0 + 0xA); + p1[2] = *(u16 *)(a0 + 0xE); + + t = func_8004787C(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p2[1] = p1[1]; + p2[0] = p1[0] - (t >> 12); + + t = func_80047948(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p2[2] = p1[2] - (t >> 12); + + result = func_80133784(1, p1, (s32)p2); + + if ((result & 0x8000) && a2) { + t = func_8004787C(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p1[1] = p2[1]; + p1[0] = p2[0] + (t >> 12); + + t = func_80047948(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p1[2] = p2[2] + (t >> 12); + + result = func_80133784(1, p2, (s32)p1); + + *(s16 *)(a0 + 6) = p1[0]; + *(s16 *)(a0 + 0xA) = p1[1]; + *(s16 *)(a0 + 0xE) = p1[2]; + + if (!(*(u16 *)(a0 + 0x84) & 2)) { + *(u16 *)(a0 + 0x84) |= 2; + } + } else { + *(u16 *)(a0 + 0x84) &= ~2; + } + + return result; +} + INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_jr_801789AC", func_80181500); 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 323d93e77c..2b06635fe1 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_801863CC.c @@ -4085,7 +4085,54 @@ INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_8018874 INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_80188788); -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_801887DC); + +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); + +s32 func_801887DC(s32 a0, s16 a1, s16 a2) { + s16 p1[3]; + s16 p2[3]; + s32 t; + s32 result; + + p1[0] = *(u16 *)(a0 + 6); + p1[1] = *(u16 *)(a0 + 0xA); + p1[2] = *(u16 *)(a0 + 0xE); + + t = func_8004787C(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p2[1] = p1[1]; + p2[0] = p1[0] - (t >> 12); + + t = func_80047948(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p2[2] = p1[2] - (t >> 12); + + result = func_80133784(1, p1, (s32)p2); + + if ((result & 0x8000) && a2) { + t = func_8004787C(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p1[1] = p2[1]; + p1[0] = p2[0] + (t >> 12); + + t = func_80047948(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p1[2] = p2[2] + (t >> 12); + + result = func_80133784(1, p2, (s32)p1); + + *(s16 *)(a0 + 6) = p1[0]; + *(s16 *)(a0 + 0xA) = p1[1]; + *(s16 *)(a0 + 0xE) = p1[2]; + + if (!(*(u16 *)(a0 + 0x84) & 2)) { + *(u16 *)(a0 + 0x84) |= 2; + } + } else { + *(u16 *)(a0 + 0x84) &= ~2; + } + + return result; +} + INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801863CC", func_80188990); diff --git a/src/ov_SC03_124/ov_SC03_124_jr_80188544.c b/src/ov_SC03_124/ov_SC03_124_jr_80188544.c index 4df9c04bb0..4055d8c924 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_80188544.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_80188544.c @@ -3681,7 +3681,54 @@ void func_80189CB0(s32 a0) { INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189CF0); -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189D4C); + +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); + +s32 func_80189D4C(s32 a0, s16 a1, s16 a2) { + s16 p1[3]; + s16 p2[3]; + s32 t; + s32 result; + + p1[0] = *(u16 *)(a0 + 6); + p1[1] = *(u16 *)(a0 + 0xA); + p1[2] = *(u16 *)(a0 + 0xE); + + t = func_8004787C(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p2[1] = p1[1]; + p2[0] = p1[0] - (t >> 12); + + t = func_80047948(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p2[2] = p1[2] - (t >> 12); + + result = func_80133784(1, p1, (s32)p2); + + if ((result & 0x8000) && a2) { + t = func_8004787C(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p1[1] = p2[1]; + p1[0] = p2[0] + (t >> 12); + + t = func_80047948(*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF) * a1; + p1[2] = p2[2] + (t >> 12); + + result = func_80133784(1, p2, (s32)p1); + + *(s16 *)(a0 + 6) = p1[0]; + *(s16 *)(a0 + 0xA) = p1[1]; + *(s16 *)(a0 + 0xE) = p1[2]; + + if (!(*(u16 *)(a0 + 0x84) & 2)) { + *(u16 *)(a0 + 0x84) |= 2; + } + } else { + *(u16 *)(a0 + 0x84) &= ~2; + } + + return result; +} + INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_80189F00);