diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c b/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c index d24f0bc5f2..2340bf107a 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c @@ -6166,7 +6166,68 @@ void func_80184764(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017FF7C", func_801847FC); + + +extern s32 D_80126B58; +extern s32 func_8014CAFC(void); +extern s32 func_80184958(void *a0); +extern u8 D_80078E78[]; +extern u8 D_80078EAE; +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); + +s32 func_801847FC(arg0) +void *arg0; +{ + + extern u8 D_80078EAE; + u8 *base; + u8 *p; + s32 flag; + s16 diff[3]; + s16 pointA[3]; + s32 v0; + void *ptr; + + base = (u8 *)&D_80126B58; + p = D_80078E78; + flag = 0; + + if (func_8014CAFC() != 0) { + if (D_80078EAE != 0) { + return 0; + } + flag = 1; + } + + if (func_80184958(arg0) == 0) { + return 0; + } + + pointA[0] = *(u16 *)(base + 0x6); + pointA[1] = *(u16 *)(base + 0xA); + pointA[2] = *(u16 *)(base + 0xE); + + diff[0] = pointA[0] - *(u16 *)((u8 *)arg0 + 0x6); + diff[1] = pointA[1] - *(u16 *)((u8 *)arg0 + 0xA); + diff[2] = pointA[2] - *(u16 *)((u8 *)arg0 + 0xE); + + VectorNormalSS(diff, diff); + + pointA[1] -= 0x20; + + if (!flag) { + v0 = p[0x36]; + func_8012F568(1, 0x5001, 0, (v0 ^ 1) * 10, (s32)pointA, (s32)diff); + } else { + func_8012F568(1, 0x4001, 0, 0xA, (s32)pointA, (s32)diff); + } + + ptr = *(void **)((u8 *)arg0 + 0x20); + *(u16 *)(base + 0x42) = *(u16 *)((u8 *)ptr + 0x12); + + return 1; +} + #include "common.h"