diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8017DC70.c b/src/ov_SC03_029/ov_SC03_029_jr_8017DC70.c index 47bd4a707..ed5ef8d88 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8017DC70.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8017DC70.c @@ -3713,7 +3713,46 @@ void func_8017FA2C(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_8017FA84); +extern s32 func_80012C6C(s32, s32, s32); +extern s16 func_80012ABC(s16 a0, s16 a1, s32 a2); +extern void func_80187478(u16*, s16*); +extern void ApplyMatrixSV(void *m, void *vin, void *vout); + +void func_8017FA84(s32 a0, s16* a1, u32 a2) +{ + s32 sp10[8]; + s16 sp30[3]; + u16 sp38[3]; + u16 sp40[3]; + + *(s32 *)((s32)a0 + 0x08) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x08), *(s16 *)((s32)a0 + 0x0C), 4); + *(s32 *)((s32)a0 + 0x10) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x10), *(s16 *)((s32)a0 + 0x14), 4); + *(s16 *)((s32)a0 + 0x18) = func_80012ABC(*(s16 *)((s32)a0 + 0x18), *(s16 *)((s32)a0 + 0x20), 4); + *(s16 *)((s32)a0 + 0x1A) = func_80012ABC(*(s16 *)((s32)a0 + 0x1A), *(s16 *)((s32)a0 + 0x22), 4); + *(s16 *)((s32)a0 + 0x1C) = func_80012ABC(*(s16 *)((s32)a0 + 0x1C), *(s16 *)((s32)a0 + 0x24), 4); + *(s16 *)((s32)a0 + 0x28) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x28), *(s16 *)((s32)a0 + 0x2E), 0x10); + *(s16 *)((s32)a0 + 0x2A) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x2A), *(s16 *)((s32)a0 + 0x30), 0x10); + *(s16 *)((s32)a0 + 0x2C) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x2C), *(s16 *)((s32)a0 + 0x32), 0x10); + + *(s32 *)((s32)a0 + 0x48) = *(s16 *)((s32)a0 + 0x28) + *(s16 *)((s32)a1 + 0); + *(s32 *)((s32)a0 + 0x4C) = *(s16 *)((s32)a0 + 0x2A) + *(s16 *)((s32)a1 + 2); + *(s32 *)((s32)a0 + 0x50) = *(s16 *)((s32)a0 + 0x2C) + *(s16 *)((s32)a1 + 4); + + sp40[0] = *(u16 *)((s32)a0 + 0x18); + sp40[1] = *(u16 *)((s32)a0 + 0x1A) + a2; + sp40[2] = *(u16 *)((s32)a0 + 0x1C); + ((void (*)(u16 *, void *))func_80187478)(sp40, sp10); + + sp30[0] = 0; + sp30[1] = 0; + sp30[2] = *(s32 *)((s32)a0 + 0x10); + ApplyMatrixSV(sp10, sp30, sp38); + + *(s32 *)((s32)a0 + 0x3C) = ((s16)sp38[0] >> 3) + *(s16 *)((s32)a0 + 0x28) + *(s16 *)((s32)a1 + 0); + *(s32 *)((s32)a0 + 0x40) = ((s16)sp38[1] >> 3) + *(s16 *)((s32)a0 + 0x2A) + *(s16 *)((s32)a1 + 2); + *(s32 *)((s32)a0 + 0x44) = ((s16)sp38[2] >> 3) + *(s16 *)((s32)a0 + 0x2C) + *(s16 *)((s32)a1 + 4); +} + extern void (*D_8018B754[])(void *); extern void (*D_8018B768[])(void *);