diff --git a/asm/unused/math_util/func_802B4F60.s b/asm/unused/math_util/func_802B4F60.s index db13954f5..737f6a13a 100644 --- a/asm/unused/math_util/func_802B4F60.s +++ b/asm/unused/math_util/func_802B4F60.s @@ -4,7 +4,7 @@ glabel func_802B4F60 /* 11E578 802B4F68 AFA40070 */ sw $a0, 0x70($sp) /* 11E57C 802B4F6C AFA60078 */ sw $a2, 0x78($sp) /* 11E580 802B4F70 AFA7007C */ sw $a3, 0x7c($sp) -/* 11E584 802B4F74 0C0AD4B6 */ jal vec3f_copy +/* 11E584 802B4F74 0C0AD4B6 */ jal vec3f_copy_return /* 11E588 802B4F78 27A4001C */ addiu $a0, $sp, 0x1c /* 11E58C 802B4F7C C7AC001C */ lwc1 $f12, 0x1c($sp) /* 11E590 802B4F80 C7A4003C */ lwc1 $f4, 0x3c($sp) @@ -21,7 +21,7 @@ glabel func_802B4F60 /* 11E5BC 802B4FAC C7AA006C */ lwc1 $f10, 0x6c($sp) /* 11E5C0 802B4FB0 46088180 */ add.s $f6, $f16, $f8 /* 11E5C4 802B4FB4 46065080 */ add.s $f2, $f10, $f6 -/* 11E5C8 802B4FB8 0C0AD90D */ jal func_802B6434 +/* 11E5C8 802B4FB8 0C0AD90D */ jal mtxf_translate_vec3f_mat4 /* 11E5CC 802B4FBC E7A2002C */ swc1 $f2, 0x2c($sp) /* 11E5D0 802B4FC0 C7A2002C */ lwc1 $f2, 0x2c($sp) /* 11E5D4 802B4FC4 44809000 */ mtc1 $zero, $f18 diff --git a/src/camera.c b/src/camera.c index eba818797..5a3029d0f 100644 --- a/src/camera.c +++ b/src/camera.c @@ -227,7 +227,7 @@ void func_8001CA78(UNUSED Player *player, Camera *camera, Vec3f arg2, f32 *arg3, arg2[1] = camera->lookAt[1]; arg2[2] = camera->lookAt[2]; func_802B6540(sp74, 0, 1, 0, -0x00008000); - func_802B63B8(sp5C, sp74); + mtxf_translate_vec3f_mat3(sp5C, sp74); if (gCurrentCourseId == COURSE_TOADS_TURNPIKE) { var_f14 = sp5C[0]; } else { @@ -238,7 +238,7 @@ void func_8001CA78(UNUSED Player *player, Camera *camera, Vec3f arg2, f32 *arg3, arg2[0] += (var_f14 - camera->lookAt[0]) * 1; arg2[1] += (temp_f18 - camera->lookAt[1]) * 1; arg2[2] += (temp_f16 - camera->lookAt[2]) * 1; - func_802B63B8(sp68, sp74); + mtxf_translate_vec3f_mat3(sp68, sp74); if (gCurrentCourseId == COURSE_TOADS_TURNPIKE) { var_f14 = sp68[0]; } else { @@ -356,7 +356,7 @@ void func_8001CCEC(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a sp84[2] /= 3.0f; } func_802B6540(sp9C, 0, 1, 0, arg7); - func_802B63B8(sp84, sp9C); + mtxf_translate_vec3f_mat3(sp84, sp9C); x = player->pos[0] + sp84[0]; z = player->pos[2] + sp84[2]; @@ -370,7 +370,7 @@ void func_8001CCEC(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a } else { arg2[1] += ((y - camera->lookAt[1]) * 0.5); } - func_802B63B8(sp90, sp9C); + mtxf_translate_vec3f_mat3(sp90, sp9C); x = player->pos[0] + sp90[0]; z = player->pos[2] + sp90[2]; if ((player->unk_0BC & 0x01000000) != 0x01000000) { @@ -424,14 +424,14 @@ void func_8001D53C(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a arg2[1] = camera->lookAt[1]; arg2[2] = camera->lookAt[2]; func_802B6540(sp74, 0.0f, 1.0f, 0.0f, arg6); - func_802B63B8(sp5C, sp74); + mtxf_translate_vec3f_mat3(sp5C, sp74); stackPadding0 = player->pos[0] + sp5C[0]; stackPadding2 = player->pos[2] + sp5C[2]; stackPadding1 = player->pos[1] + sp5C[1]; arg2[0] += (stackPadding0 - camera->lookAt[0]) * 1; arg2[2] += (stackPadding2 - camera->lookAt[2]) * 1; arg2[1] += (stackPadding1 - camera->lookAt[1]) * 1; - func_802B63B8(sp68, sp74); + mtxf_translate_vec3f_mat3(sp68, sp74); stackPadding0 = player->pos[0] + sp68[0]; stackPadding2 = player->pos[2] + sp68[2]; stackPadding1 = sp68[1] + (player->unk_074 + 1.5); @@ -467,7 +467,7 @@ void func_8001D794(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a arg2[2] = camera->lookAt[2]; func_802B6540(sp6C, 0, 1, 0, arg6); - func_802B63B8(sp54, sp6C); + mtxf_translate_vec3f_mat3(sp54, sp6C); test1 = player->pos[0] + sp54[0]; test3 = player->pos[2] + sp54[2]; @@ -476,7 +476,7 @@ void func_8001D794(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a arg2[1] += (test2 - camera->lookAt[1]) * 1; arg2[2] += (test3 - camera->lookAt[2]) * 1; - func_802B63B8(sp60, sp6C); + mtxf_translate_vec3f_mat3(sp60, sp6C); test1 = player->pos[0] + sp60[0]; test3 = player->pos[2] + sp60[2]; @@ -573,7 +573,7 @@ void func_8001D944(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a sp84[2] /= 3.0f; } func_802B6540(sp9C, 0, 1, 0, arg7); - func_802B63B8(sp84, sp9C); + mtxf_translate_vec3f_mat3(sp84, sp9C); x = player->pos[0] + sp84[0]; z = player->pos[2] + sp84[2]; @@ -587,7 +587,7 @@ void func_8001D944(Player *player, Camera *camera, Vec3f arg2, f32 *arg3, f32 *a } else { arg2[1] += ((y - camera->lookAt[1]) * 0.5); } - func_802B63B8(sp90, sp9C); + mtxf_translate_vec3f_mat3(sp90, sp9C); x = player->pos[0] + sp90[0]; z = player->pos[2] + sp90[2]; if ((player->unk_0BC & 0x01000000) != 0x01000000) { diff --git a/src/code_8003DC40.c b/src/code_8003DC40.c index ff2ab784f..5514ba1cf 100644 --- a/src/code_8003DC40.c +++ b/src/code_8003DC40.c @@ -31,7 +31,7 @@ UNUSED void func_8003DC50(Player *player, Vec3f arg1) { arg1[2] = thing2; } arg1[1] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } UNUSED void func_8003DE4C(Player *player, Vec3f arg1) { @@ -55,7 +55,7 @@ UNUSED void func_8003DE4C(Player *player, Vec3f arg1) { arg1[2] = thing2; } arg1[1] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } // Stick to ground? void func_8003E048(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { @@ -81,7 +81,7 @@ void func_8003E048(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4 arg3[2] = (-(player->unk_0C4 / 182) * 0x32); } arg3[1] = 0.0f; - func_802B63B8(arg3, player->unk_174); + mtxf_translate_vec3f_mat3(arg3, player->unk_174); } void func_8003E37C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { @@ -109,7 +109,7 @@ void func_8003E37C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4 arg3[2] = (-(player->unk_0C4 / 182) * 0x32); } arg3[1] = 0.0f; - func_802B63B8(arg3, player->unk_174); + mtxf_translate_vec3f_mat3(arg3, player->unk_174); } void func_8003E6EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { @@ -130,7 +130,7 @@ void func_8003E6EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4 arg3[2] = (-(player->unk_0C4 / 182) * 0x32); } arg3[1] = 0.0f; - func_802B63B8(arg3, player->unk_174); + mtxf_translate_vec3f_mat3(arg3, player->unk_174); } void func_8003E9EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { @@ -161,7 +161,7 @@ void func_8003E9EC(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4 } } arg3[1] = 0.0f; - func_802B63B8(arg3, player->unk_174); + mtxf_translate_vec3f_mat3(arg3, player->unk_174); } void func_8003EE2C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { @@ -182,7 +182,7 @@ void func_8003EE2C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4 arg3[2] = (-(player->unk_0C4 / 182) * 0x32); } arg3[1] = 0.0f; - func_802B63B8(arg3, player->unk_174); + mtxf_translate_vec3f_mat3(arg3, player->unk_174); } void func_8003F138(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { @@ -209,7 +209,7 @@ void func_8003F138(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4 } arg3[1] = 0.0f; arg3[2] = 0.0f; - func_802B63B8(arg3, player->unk_174); + mtxf_translate_vec3f_mat3(arg3, player->unk_174); } void func_8003F46C(Player *player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 *arg4, f32 *arg5, f32 *arg6, f32 *arg7) { diff --git a/src/code_80071F00.c b/src/code_80071F00.c index 308652749..c88538152 100644 --- a/src/code_80071F00.c +++ b/src/code_80071F00.c @@ -7039,7 +7039,7 @@ void func_8008275C(s32 objectIndex) { break; case 2: func_8008B78C(objectIndex); - func_80040EC4(D_80165C18[objectIndex].unk_01C, D_80165C18[objectIndex].pos); + vec3f_copy(D_80165C18[objectIndex].unk_01C, D_80165C18[objectIndex].pos); func_8000D940(D_80165C18[objectIndex].unk_010, &D_80165C18[objectIndex].unk_0C6, D_80165C18[objectIndex].unk_034, 0.0f, 0); D_80165C18[objectIndex].unk_028[0] *= 2.0; D_80165C18[objectIndex].unk_028[1] *= 2.5; @@ -8146,7 +8146,7 @@ void func_80085AA8(void) { temp_s0 = &D_80165C18[temp_s2]; if (temp_s0->unk_0A6 != 0) { func_800859C8(temp_s2, var_s4); - func_80040EC4(temp_s0->unk_01C, temp_s0->unk_028); + vec3f_copy(temp_s0->unk_01C, temp_s0->unk_028); func_8000D940(temp_s0->unk_028, &temp_s0->unk_084[8], temp_s0->unk_034, temp_s0->unk_044, 0); temp_s0->unk_0BE[1] = get_angle_between_points(temp_s0->unk_01C, temp_s0->unk_028); func_8008BF18(temp_s2); diff --git a/src/ending/ceremony_and_credits.c b/src/ending/ceremony_and_credits.c index 4add8dfc0..308ffc520 100644 --- a/src/ending/ceremony_and_credits.c +++ b/src/ending/ceremony_and_credits.c @@ -64,7 +64,7 @@ void vec3s_clear(Vec3s arg0) { arg0[0] = arg0[1] = arg0[2] = 0; } -void vec3f_copy_dupe(Vec3f dest, Vec3f src) { +void vec3f_copy_return_dupe(Vec3f dest, Vec3f src) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; @@ -87,7 +87,7 @@ void func_80282048(void) { UNUSED void func_80282050(Vec3f dest, Vec3f src, s16 angle) { Vec3f sp2C; - vec3f_copy_dupe(sp2C, src); + vec3f_copy_return_dupe(sp2C, src); dest[0] = (sp2C[2] * sins(angle)) + (sp2C[0] * coss(angle)); dest[1] = sp2C[1]; dest[2] = (sp2C[2] * coss(angle)) - (sp2C[0] * sins(angle)); @@ -96,7 +96,7 @@ UNUSED void func_80282050(Vec3f dest, Vec3f src, s16 angle) { UNUSED void func_802820F8(f32 *dest, f32 *src, s16 angle) { Vec3f sp2C; - vec3f_copy_dupe(sp2C, src); + vec3f_copy_return_dupe(sp2C, src); dest[2] = (sp2C[2] * coss(angle)) - (sp2C[1] * sins(angle)); dest[1] = (sp2C[2] * sins(angle)) + (sp2C[1] * coss(angle)); dest[0] = sp2C[0]; @@ -231,7 +231,7 @@ UNUSED void func_802825C8(Vec3f arg0, Vec3f arg1, Vec3f arg2, Vec3s arg3) { Vec3f sp30; // What's up with this? Why do we copy arg1 to an unused local variable? - vec3f_copy_dupe(sp3C, arg1); + vec3f_copy_return_dupe(sp3C, arg1); sp30[2] = -((arg2[2] * coss(arg3[0])) - (arg2[1] * sins(arg3[0]))); sp30[1] = (arg2[2] * sins(arg3[0])) + (arg2[1] * coss(arg3[0])); sp30[0] = arg2[0]; @@ -581,13 +581,13 @@ s32 func_80283648(Camera *camera) { struct CinematicCamera *new_var = &D_802876E0; func_80283428(); - vec3f_copy_dupe(sp58, camera->pos); - vec3f_copy_dupe(sp4C, camera->lookAt); - vec3f_copy_dupe(sp40, camera->up); + vec3f_copy_return_dupe(sp58, camera->pos); + vec3f_copy_return_dupe(sp4C, camera->lookAt); + vec3f_copy_return_dupe(sp40, camera->up); new_var->cutscene = func_8028336C(new_var, camera); if (new_var->cutscene != 0) { - vec3f_copy_dupe(new_var->lookAt, camera->pos); - vec3f_copy_dupe(new_var->pos, camera->lookAt); + vec3f_copy_return_dupe(new_var->lookAt, camera->pos); + vec3f_copy_return_dupe(new_var->pos, camera->lookAt); play_cutscene(new_var); func_80282454(new_var->lookAt, new_var->pos, &sp64, &sp6E, &sp6C); if (sp6E >= 0x3800) { @@ -615,8 +615,8 @@ s32 func_80283648(Camera *camera) { camera->up[0] = sins(var_f2) * coss(sp6C); camera->up[1] = coss(var_f2); camera->up[2] = -sins(var_f2) * sins(sp6C); - vec3f_copy_dupe(camera->pos, new_var->lookAt); - vec3f_copy_dupe(camera->lookAt, new_var->pos); + vec3f_copy_return_dupe(camera->pos, new_var->lookAt); + vec3f_copy_return_dupe(camera->lookAt, new_var->pos); if ((gGamestate == CREDITS_SEQUENCE) && (gIsMirrorMode != 0)) { camera->pos[0] = -camera->pos[0]; camera->lookAt[0] = -camera->lookAt[0]; @@ -625,9 +625,9 @@ s32 func_80283648(Camera *camera) { func_80282F44(0, new_var, camera); func_80282F44(1, new_var, camera); func_80283100(new_var, gCameraZoom); - vec3f_copy_dupe(new_var->unk30, camera->pos); - vec3f_copy_dupe(new_var->unk24, camera->lookAt); - vec3f_copy_dupe(new_var->unk3C, camera->up); + vec3f_copy_return_dupe(new_var->unk30, camera->pos); + vec3f_copy_return_dupe(new_var->unk24, camera->lookAt); + vec3f_copy_return_dupe(new_var->unk3C, camera->up); return D_802876D8; } @@ -892,7 +892,7 @@ void func_80283EA0(struct CinematicCamera *camera) { } void func_80283ED0(struct CinematicCamera *camera) { - vec3f_copy_dupe(camera->pos, gPlayerTwo->pos); + vec3f_copy_return_dupe(camera->pos, gPlayerTwo->pos); } void func_80283EF8(struct CinematicCamera *camera) { @@ -908,7 +908,7 @@ void func_80283F6C(struct CinematicCamera *camera) { } void func_80283FCC(struct CinematicCamera *camera) { - vec3f_copy_dupe(camera->pos, gPlayerThree->pos); + vec3f_copy_return_dupe(camera->pos, gPlayerThree->pos); } void func_80283FF4(struct CinematicCamera *camera) { diff --git a/src/ending/ceremony_and_credits.h b/src/ending/ceremony_and_credits.h index c3d3e2355..8a13ac726 100644 --- a/src/ending/ceremony_and_credits.h +++ b/src/ending/ceremony_and_credits.h @@ -114,7 +114,7 @@ void vec3f_set_dupe(Vec3f, f32, f32, f32); void vec3s_set_dupe(Vec3s, s16, s16, s16); void vec3f_clear(Vec3f); void vec3s_clear(Vec3s); -void vec3f_copy_dupe(Vec3f, Vec3f); +void vec3f_copy_return_dupe(Vec3f, Vec3f); void vec3s_copy_dupe(Vec3s, Vec3s); void func_80282040(void); void func_80282048(void); diff --git a/src/math_util_2.c b/src/math_util_2.c index b3157df04..2c03184d5 100644 --- a/src/math_util_2.c +++ b/src/math_util_2.c @@ -45,10 +45,10 @@ UNUSED s32 func_80040EA4(s32 *arg0, s32 arg1) { return phi_v1; } -void func_80040EC4(Vec3f arg0, Vec3f arg1) { - arg0[0] = arg1[0]; - arg0[1] = arg1[1]; - arg0[2] = arg1[2]; +void vec3f_copy(Vec3f dest, Vec3f arg1) { + dest[0] = arg1[0]; + dest[1] = arg1[1]; + dest[2] = arg1[2]; } s32 f32_step_up_towards(f32 *value, f32 target, f32 step) { @@ -342,6 +342,7 @@ Vec3f *vec3f_set_dupe_2_electric_boogaloo(Vec3f arg0, f32 arg1, f32 arg2, f32 ar return (Vec3f *) &arg0; } +// look like normalise vector Vec3f *func_80041530(Vec3f dest) { f32 invsqrt = 1.0f / sqrtf(dest[0] * dest[0] + dest[1] * dest[1] + dest[2] * dest[2]); @@ -351,23 +352,23 @@ Vec3f *func_80041530(Vec3f dest) { return (Vec3f *) &dest; } -Vec3f *func_80041594(Vec3f arg0, Vec3f arg1, Vec3f arg2) { +Vec3f *func_80041594(Vec3f dest, Vec3f arg1, Vec3f arg2) { - arg0[0] = (arg1[1] * arg2[2]) - (arg2[1] * arg1[2]); - arg0[1] = (arg1[2] * arg2[0]) - (arg2[2] * arg1[0]); - arg0[2] = (arg1[0] * arg2[1]) - (arg2[0] * arg1[1]); + dest[0] = (arg1[1] * arg2[2]) - (arg2[1] * arg1[2]); + dest[1] = (arg1[2] * arg2[0]) - (arg2[2] * arg1[0]); + dest[2] = (arg1[0] * arg2[1]) - (arg2[0] * arg1[1]); - return (Vec3f *) &arg0; + return (Vec3f *) &dest; } -UNUSED s32 func_80041608(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { - f32 temp_f0; - f32 temp_f2; +UNUSED s32 func_80041608(f32 x1, f32 y1, f32 x2, f32 y2, f32 distance) { + f32 x; + f32 y; s32 ret = 0; - temp_f0 = arg2 - arg0; - temp_f2 = arg3 - arg1; - if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= (arg4 * arg4)) { + x = x2 - x1; + y = y2 - y1; + if (((x * x) + (y * y)) <= (distance * distance)) { ret = 1; } return ret; @@ -478,117 +479,124 @@ UNUSED void func_80041A70(void) { } -void func_80041A78(Mat4 arg0, s32 arg1, s32 arg2) { +void mtfx_translation_x_y(Mat4 arg0, s32 x, s32 y) { arg0[0][0] = 1.0f; arg0[1][1] = 1.0f; arg0[2][2] = 1.0f; arg0[1][0] = 0.0f; arg0[2][0] = 0.0f; arg0[0][1] = 0.0f; - arg0[3][0] = arg1; + arg0[3][0] = x; arg0[2][1] = 0.0f; arg0[0][2] = 0.0f; arg0[1][2] = 0.0f; arg0[3][2] = 0.0f; - arg0[3][1] = arg2; + arg0[3][1] = y; arg0[0][3] = 0.0f; arg0[1][3] = 0.0f; arg0[2][3] = 0.0f; arg0[3][3] = 1.0f; + + /* + * 1 0 0 x + * 0 1 0 y + * 0 0 1 0 + * 0 0 0 1 + */ } -void func_80041AD8(Mat4 arg0, u16 arg1) { - f32 sp1C = sins(arg1); - f32 temp_f0 = coss(arg1); - - arg0[0][0] = temp_f0; - arg0[1][0] = -sp1C; - arg0[1][1] = temp_f0; - arg0[0][1] = sp1C; - arg0[2][0] = 0.0f; - arg0[3][0] = 0.0f; - arg0[2][1] = 0.0f; - arg0[3][1] = 0.0f; - arg0[0][2] = 0.0f; - arg0[1][2] = 0.0f; - arg0[3][2] = 0.0f; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[2][2] = 1.0f; - arg0[3][3] = 1.0f; +void mtxf_u16_rotate_z(Mat4 dest, u16 angle) { + f32 sin_theta = sins(angle); + f32 cos_theta = coss(angle); + + dest[0][0] = cos_theta; + dest[1][0] = -sin_theta; + dest[1][1] = cos_theta; + dest[0][1] = sin_theta; + dest[2][0] = 0.0f; + dest[3][0] = 0.0f; + dest[2][1] = 0.0f; + dest[3][1] = 0.0f; + dest[0][2] = 0.0f; + dest[1][2] = 0.0f; + dest[3][2] = 0.0f; + dest[0][3] = 0.0f; + dest[1][3] = 0.0f; + dest[2][3] = 0.0f; + dest[2][2] = 1.0f; + dest[3][3] = 1.0f; } -void func_80041B68(Mat4 arg0, f32 arg1) { - arg0[1][0] = 0.0f; - arg0[2][0] = 0.0f; - arg0[3][0] = 0.0f; - arg0[0][1] = 0.0f; - arg0[2][1] = 0.0f; - arg0[3][1] = 0.0f; - arg0[0][2] = 0.0f; - arg0[1][2] = 0.0f; - arg0[3][2] = 0.0f; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[2][2] = 1.0f; - arg0[3][3] = 1.0f; - arg0[0][0] = arg1; - arg0[1][1] = arg1; +void mtxf_scale_x_y(Mat4 dest, f32 scale) { + dest[1][0] = 0.0f; + dest[2][0] = 0.0f; + dest[3][0] = 0.0f; + dest[0][1] = 0.0f; + dest[2][1] = 0.0f; + dest[3][1] = 0.0f; + dest[0][2] = 0.0f; + dest[1][2] = 0.0f; + dest[3][2] = 0.0f; + dest[0][3] = 0.0f; + dest[1][3] = 0.0f; + dest[2][3] = 0.0f; + dest[2][2] = 1.0f; + dest[3][3] = 1.0f; + dest[0][0] = scale; + dest[1][1] = scale; } -void func_80041BBC(Mat4 arg0, u16 arg1, f32 arg2) { - f32 sp1C = sins(arg1); - f32 temp_f12 = coss(arg1) * arg2; +UNUSED void mtxf_rotate_z_scale_x_y(Mat4 dest, u16 angle, f32 scale) { + f32 sin_theta = sins(angle); + f32 cos_theta = coss(angle) * scale; - arg0[2][0] = 0.0f; - arg0[0][0] = temp_f12; - arg0[1][1] = temp_f12; - arg0[2][1] = 0.0f; - arg0[1][0] = -sp1C * arg2; - arg0[0][2] = 0.0f; - arg0[1][2] = 0.0f; - arg0[0][1] = sp1C * arg2; - arg0[3][2] = 0.0f; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[3][0] = 1.0f; - arg0[3][1] = 1.0f; - arg0[2][2] = 1.0f; - arg0[3][3] = 1.0f; + dest[2][0] = 0.0f; + dest[0][0] = cos_theta; + dest[1][1] = cos_theta; + dest[2][1] = 0.0f; + dest[1][0] = -sin_theta * scale; + dest[0][2] = 0.0f; + dest[1][2] = 0.0f; + dest[0][1] = sin_theta * scale; + dest[3][2] = 0.0f; + dest[0][3] = 0.0f; + dest[1][3] = 0.0f; + dest[2][3] = 0.0f; + dest[3][0] = 1.0f; + dest[3][1] = 1.0f; + dest[2][2] = 1.0f; + dest[3][3] = 1.0f; } /** * @brief arg1 and arg2 are s32's into floats?!? - * - * @param arg0 - * @param arg1 - * @param arg2 - * @param arg3 - * @param arg4 + * + * @param dest + * @param x + * @param y + * @param angle + * @param scale */ -void func_80041C64(Mat4 arg0, s32 arg1, s32 arg2, u16 arg3, f32 arg4) { - f32 sp24 = sins(arg3); - f32 temp_f12 = coss(arg3) * arg4; +void mtxf_translation_x_y_rotate_z_scale_x_y(Mat4 dest, s32 x, s32 y, u16 angle, f32 scale) { + f32 sin_theta = sins(angle); + f32 cos_theta = coss(angle) * scale; - arg0[2][0] = 0.0f; - arg0[0][0] = temp_f12; - arg0[1][0] = (-sp24) * arg4; - arg0[3][0] = (f32) arg1; - arg0[1][1] = temp_f12; - arg0[0][1] = sp24 * arg4; - arg0[2][1] = 0.0f; - arg0[3][1] = (f32) arg2; - arg0[0][2] = 0.0f; - arg0[1][2] = 0.0f; - arg0[2][2] = 1.0f; - arg0[3][3] = 1.0f; - arg0[3][2] = 0.0f; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; + dest[2][0] = 0.0f; + dest[0][0] = cos_theta; + dest[1][0] = (-sin_theta) * scale; + dest[3][0] = (f32) x; + dest[1][1] = cos_theta; + dest[0][1] = sin_theta * scale; + dest[2][1] = 0.0f; + dest[3][1] = (f32) y; + dest[0][2] = 0.0f; + dest[1][2] = 0.0f; + dest[2][2] = 1.0f; + dest[3][3] = 1.0f; + dest[3][2] = 0.0f; + dest[0][3] = 0.0f; + dest[1][3] = 0.0f; + dest[2][3] = 0.0f; } // Likely D_801658**[index] = 1; * denotes wildcard @@ -631,59 +639,59 @@ void func_80041EF4(void) { extern s32 gMatrixHudCount; //void func_80022180(Mtx*, Mat4); -UNUSED void func_80041F54(s32 arg0, s32 arg1) { +UNUSED void func_80041F54(s32 x, s32 y) { Mat4 matrix; - func_80041A78(matrix, arg0, arg1); + mtfx_translation_x_y(matrix, x, y); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } -UNUSED void func_80042000(u16 arg0) { +UNUSED void func_80042000(u16 angle_z) { Mat4 matrix; - func_80041AD8(matrix, arg0); + mtxf_u16_rotate_z(matrix, angle_z); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } -UNUSED void func_800420A8(f32 arg0) { +UNUSED void func_800420A8(f32 scale) { Mat4 matrix; - func_80041B68(matrix, arg0); + mtxf_scale_x_y(matrix, scale); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } -UNUSED void func_8004214C(u16 arg1, f32 arg2) { +UNUSED void func_8004214C(u16 angle, f32 scale) { Mat4 matrix; - func_80041BBC(matrix, arg1, arg2); + mtxf_rotate_z_scale_x_y(matrix, angle, scale); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } -UNUSED void func_800421FC(s32 arg0, s32 arg1, f32 arg2) { +UNUSED void func_800421FC(s32 x, s32 y, f32 scale) { Mat4 matrix; - func_80041A78(matrix, arg0, arg1); + mtfx_translation_x_y(matrix, x, y); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_80041B68(matrix, arg2); + mtxf_scale_x_y(matrix, scale); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); } -void func_80042330(s32 arg0, s32 arg1, u16 arg2, f32 arg3) { +void func_80042330(s32 x, s32 y, u16 angle, f32 scale) { Mat4 matrix; - func_80041C64(matrix, arg0, arg1, arg2, arg3); + mtxf_translation_x_y_rotate_z_scale_x_y(matrix, x, y, angle, scale); func_80022180(&gGfxPool->mtxHud[gMatrixHudCount], matrix); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } @@ -726,18 +734,18 @@ UNUSED void func_800423F0(Mat4 arg0, u16 arg1, u16 arg2, u16 arg3) { UNUSED void func_8004252C(Mat4 arg0, u16 arg1, u16 arg2) { f32 sp2C = sins(arg1); f32 sp28 = coss(arg1); - f32 sp24 = sins(arg2); - f32 temp_f0 = coss(arg2); + f32 sin_theta_y = sins(arg2); + f32 cos_theta_y = coss(arg2); - arg0[1][0] = sp2C * sp24; - arg0[2][0] = sp28 * sp24; + arg0[1][0] = sp2C * sin_theta_y; + arg0[2][0] = sp28 * sin_theta_y; arg0[0][1] = 0.0f; - arg0[0][0] = temp_f0; + arg0[0][0] = cos_theta_y; arg0[2][1] = -sp2C; - arg0[0][2] = -sp24; + arg0[0][2] = -sin_theta_y; arg0[1][1] = sp28; - arg0[1][2] = sp2C * temp_f0; - arg0[2][2] = sp28 * temp_f0; + arg0[1][2] = sp2C * cos_theta_y; + arg0[2][2] = sp28 * cos_theta_y; } void func_800425D0(Mat4 arg0, Vec3f arg1, Vec3su arg2, f32 arg3) { @@ -766,29 +774,29 @@ void func_800425D0(Mat4 arg0, Vec3f arg1, Vec3su arg2, f32 arg3) { arg0[3][3] = 1.0f; } -void func_80042760(Mat4 arg0, Vec3f arg1, Vec3f arg2, f32 arg3) { - arg0[0][0] = arg3; - arg0[1][0] = 0.0f; - arg0[2][0] = 0.0f; - arg0[3][0] = arg1[0] - arg2[0]; - arg0[0][1] = 0.0f; - arg0[1][1] = -arg3; - arg0[2][1] = 0.0f; - arg0[3][1] = arg1[1] - arg2[1]; - arg0[0][2] = 0.0f; - arg0[1][2] = 0.0f; - arg0[2][2] = -arg3; - arg0[3][2] = arg1[2] - arg2[2]; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[3][3] = 1.0f; +void func_80042760(Mat4 dest, Vec3f arg1, Vec3f arg2, f32 scale) { + dest[0][0] = scale; + dest[1][0] = 0.0f; + dest[2][0] = 0.0f; + dest[3][0] = arg1[0] - arg2[0]; + dest[0][1] = 0.0f; + dest[1][1] = -scale; + dest[2][1] = 0.0f; + dest[3][1] = arg1[1] - arg2[1]; + dest[0][2] = 0.0f; + dest[1][2] = 0.0f; + dest[2][2] = -scale; + dest[3][2] = arg1[2] - arg2[2]; + dest[0][3] = 0.0f; + dest[1][3] = 0.0f; + dest[2][3] = 0.0f; + dest[3][3] = 1.0f; } /** * @brief Tried to put the definitions in the declares. However, sp3C wants to be at the top. * Something may be possible with some padding. Couldn't find a way though. So we get big mess. - * + * * @param arg0 * @param arg1 **/ @@ -827,25 +835,25 @@ void func_800427DC(s32 arg0, Mat4 arg1) { arg1[3][3] = 1.0f; } -UNUSED void func_80042984(Mat4 arg0, f32 arg1) { +UNUSED void mtxf_mult_first_column(Mat4 arg0, f32 arg1) { arg0[0][0] *= arg1; arg0[1][0] *= arg1; arg0[2][0] *= arg1; } -UNUSED void func_800429B8(Mat4 arg0, f32 arg1) { +UNUSED void mtxf_mult_second_column(Mat4 arg0, f32 arg1) { arg0[0][1] *= arg1; arg0[1][1] *= arg1; arg0[2][1] *= arg1; } -UNUSED void func_800429EC(Mat4 arg0, f32 arg1) { +UNUSED void mtxf_mult_third_column(Mat4 arg0, f32 arg1) { arg0[0][2] *= arg1; arg0[1][2] *= arg1; arg0[2][2] *= arg1; } -void func_80042A20(Mat4 arg0, Vec3f arg1, Vec3f arg2, u16 arg3, f32 arg4) { +void func_80042A20(Mat4 dest, Vec3f arg1, Vec3f arg2, u16 arg3, f32 arg4) { Vec3f sp44; Vec3f sp38; Vec3f sp2C; @@ -856,22 +864,22 @@ void func_80042A20(Mat4 arg0, Vec3f arg1, Vec3f arg2, u16 arg3, f32 arg4) { func_80041530(sp38); func_80041594(sp2C, sp38, arg1); func_80041530(sp2C); - arg0[0][0] = sp38[0] * arg4; - arg0[0][1] = sp38[1] * arg4; - arg0[0][2] = sp38[2] * arg4; - arg0[3][0] = arg2[0]; - arg0[1][0] = arg1[0] * arg4; - arg0[1][1] = arg1[1] * arg4; - arg0[1][2] = arg1[2] * arg4; - arg0[3][1] = arg2[1]; - arg0[2][0] = sp2C[0] * arg4; - arg0[2][1] = sp2C[1] * arg4; - arg0[2][2] = sp2C[2] * arg4; - arg0[3][2] = arg2[2]; - arg0[0][3] = 0.0f; - arg0[1][3] = 0.0f; - arg0[2][3] = 0.0f; - arg0[3][3] = 1.0f; + dest[0][0] = sp38[0] * arg4; + dest[0][1] = sp38[1] * arg4; + dest[0][2] = sp38[2] * arg4; + dest[3][0] = arg2[0]; + dest[1][0] = arg1[0] * arg4; + dest[1][1] = arg1[1] * arg4; + dest[1][2] = arg1[2] * arg4; + dest[3][1] = arg2[1]; + dest[2][0] = sp2C[0] * arg4; + dest[2][1] = sp2C[1] * arg4; + dest[2][2] = sp2C[2] * arg4; + dest[3][2] = arg2[2]; + dest[0][3] = 0.0f; + dest[1][3] = 0.0f; + dest[2][3] = 0.0f; + dest[3][3] = 1.0f; } UNUSED void func_80042B5C(Vec3f arg0, Vec3f arg1, Vec3s arg2) { diff --git a/src/math_util_2.h b/src/math_util_2.h index 0115a048f..104425cdf 100644 --- a/src/math_util_2.h +++ b/src/math_util_2.h @@ -29,14 +29,14 @@ void func_8004214C(u16, f32); void func_800421FC(s32, s32, f32); void func_800423F0(Mat4, u16, u16, u16); void func_8004252C(Mat4, u16, u16); -void func_80042984(Mat4, f32); -void func_800429B8(Mat4, f32); -void func_800429EC(Mat4, f32); +void mtxf_mult_first_column(Mat4, f32); +void mtxf_mult_second_column(Mat4, f32); +void mtxf_mult_third_column(Mat4, f32); void func_80042B5C(Vec3f, Vec3f, Vec3s); void func_80042EB8(Vec3f, Vec3f, f32); -void func_80040EC4(Vec3f, Vec3f); +void vec3f_copy(Vec3f, Vec3f); s32 f32_step_up_towards(f32*, f32, f32); s32 f32_step_down_towards(f32*, f32, f32); s32 s32_step_up_towards(s32*, s32, s32); @@ -61,11 +61,11 @@ s32 func_800418E8(f32, f32, Vec3f); s32 func_80041924(Collision*, Vec3f); s32 func_80041980(Vec3f, Camera*, u16); void func_800419F8(void); -void func_80041A78(Mat4, s32, s32); -void func_80041AD8(Mat4, u16); -void func_80041B68(Mat4, f32); -void func_80041BBC(Mat4, u16, f32); -void func_80041C64(Mat4, s32, s32, u16, f32); +void mtfx_translation_x_y(Mat4, s32, s32); +void mtxf_u16_rotate_z(Mat4, u16); +void mtxf_scale_x_y(Mat4, f32); +void mtxf_rotate_z_scale_x_y(Mat4, u16, f32); +void mtxf_translation_x_y_rotate_z_scale_x_y(Mat4, s32, s32, u16, f32); void func_80041D24(void); void func_80041D34(void); void func_80041EF4(void); diff --git a/src/player_controller.c b/src/player_controller.c index b05c42ee0..c295e7af2 100644 --- a/src/player_controller.c +++ b/src/player_controller.c @@ -1018,7 +1018,7 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) { sp8C[0] = var_f12 - 3.6; sp8C[1] = -player->boundingBoxSize; sp8C[2] = var_f12 - 2.0f; - func_802B63B8(sp8C, sp5C); + mtxf_translate_vec3f_mat3(sp8C, sp5C); sp80[0] = player->boundingBoxCorners[0].cornerPos[0]; sp80[1] = player->boundingBoxCorners[0].cornerPos[1]; sp80[2] = player->boundingBoxCorners[0].cornerPos[2]; @@ -1030,7 +1030,7 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) { sp8C[0] = (-var_f12) + 3.6; sp8C[1] = -player->boundingBoxSize; sp8C[2] = var_f12 - 2.0f; - func_802B63B8(sp8C, sp5C); + mtxf_translate_vec3f_mat3(sp8C, sp5C); sp80[0] = player->boundingBoxCorners[1].cornerPos[0]; sp80[1] = player->boundingBoxCorners[1].cornerPos[1]; sp80[2] = player->boundingBoxCorners[1].cornerPos[2]; @@ -1042,7 +1042,7 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) { sp8C[0] = var_f12 - 2.6; sp8C[1] = -player->boundingBoxSize; sp8C[2] = (-var_f12) + 4.0f; - func_802B63B8(sp8C, sp5C); + mtxf_translate_vec3f_mat3(sp8C, sp5C); sp80[0] = player->boundingBoxCorners[2].cornerPos[0]; sp80[1] = player->boundingBoxCorners[2].cornerPos[1]; sp80[2] = player->boundingBoxCorners[2].cornerPos[2]; @@ -1054,7 +1054,7 @@ void func_80029B4C(Player *player, UNUSED f32 arg1, f32 arg2, UNUSED f32 arg3) { sp8C[0] = (-var_f12) + 2.6; sp8C[1] = -player->boundingBoxSize; sp8C[2] = (-var_f12) + 4.0f; - func_802B63B8(sp8C, sp5C); + mtxf_translate_vec3f_mat3(sp8C, sp5C); sp80[0] = player->boundingBoxCorners[3].cornerPos[0]; sp80[1] = player->boundingBoxCorners[3].cornerPos[1]; sp80[2] = player->boundingBoxCorners[3].cornerPos[2]; @@ -1728,13 +1728,13 @@ void func_8002BB9C(Player *player, f32 *arg1, f32 *arg2, UNUSED s8 arg3, UNUSED sp58[1] = 0; sp58[2] = *arg2; - func_802B63B8(sp58, sp64); + mtxf_translate_vec3f_mat3(sp58, sp64); sp4C[0] = player->rotX; sp4C[1] = 0; sp4C[2] = player->rotZ; - func_802B63B8(sp4C, sp64); + mtxf_translate_vec3f_mat3(sp4C, sp64); var_v0 = -(s16)get_angle_between_points(sp58, sp4C); t0 = player->unk_02C[1]; @@ -2282,12 +2282,12 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 arg2, s8 arg3) sp178[2] = 0.0f; } sp178[1] = 0.0f; - func_802B63B8(sp178, player->unk_174); + mtxf_translate_vec3f_mat3(sp178, player->unk_174); spB4 += sp178[0]; spAC += sp178[2]; func_8002C7E4(player, arg3, arg2); sp184[2] = func_80030150(player, arg3); - func_802B63B8(sp184, player->unk_174); + mtxf_translate_vec3f_mat3(sp184, player->unk_174); sp98[0] = player->unk_034[0]; sp98[1] = player->unk_034[1]; sp98[2] = player->unk_034[2]; @@ -2563,9 +2563,9 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 arg2, s8 arg3) { } spEC[2] = func_80030150(player, arg3); if (sp46 == 1) { - func_802B63B8(spEC, player->unk_150); + mtxf_translate_vec3f_mat3(spEC, player->unk_150); } else { - func_802B63B8(spEC, player->unk_174); + mtxf_translate_vec3f_mat3(spEC, player->unk_174); } sp54[0] = player->unk_034[0]; sp54[1] = player->unk_034[1]; @@ -2780,7 +2780,7 @@ void control_cpu_movement(Player *player, UNUSED Camera *camera, s8 arg2, s8 arg player->unk_256 = 0; player->unk_0BC &= ~0x8000; spF4[2] = func_80030150(player, arg3); - func_802B63B8(spF4, player->unk_174); + mtxf_translate_vec3f_mat3(spF4, player->unk_174); sp68[0] = player->unk_034[0]; sp68[1] = 0; sp68[2] = player->unk_034[2]; @@ -2852,7 +2852,7 @@ void func_8002F730(Player *player, UNUSED Camera *camera, UNUSED s8 arg2, s8 arg sp7C = player->unk_064[2] * 0; spF4[2] = func_80030150(player, arg3); - func_802B63B8(spF4, player->unk_174); + mtxf_translate_vec3f_mat3(spF4, player->unk_174); sp68[0] = player->unk_034[0]; sp68[1] = player->unk_034[1]; @@ -4395,7 +4395,7 @@ void func_80036DB4(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = 0.0f; arg1[1] = 0.0f; arg1[2] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } else { if (((player->unk_0BC & 0x10) == 0x10) && ((player->unk_0BC & 2) != 2)) { var_f18 = player->unk_208 + ((-(player->unk_094 / 18.0f) * 216.0f) * 3.0f) + (-player->unk_20C * 10.0f); @@ -4432,7 +4432,7 @@ void func_80036DB4(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = (player->unk_090 + var_f18) * player->unk_094; arg1[1] = 0.0f; arg1[2] = player->unk_094 * sp20; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } arg2[0] = arg1[0]; arg2[1] = arg1[1]; @@ -4449,7 +4449,7 @@ void func_800371F4(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = 0.0f; arg1[1] = 0.0f; arg1[2] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } else { if (((player->unk_0BC & 0x10) == 0x10) && ((player->unk_0BC & 2) != 2)) { var_f18 = player->unk_208 + ((-(player->unk_094 / 18.0f) * 216.0f) * 3.0f) + (-player->unk_20C * 50.0f); @@ -4486,7 +4486,7 @@ void func_800371F4(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = -(player->unk_090 + var_f18) * player->unk_094; arg1[1] = 0.0f; arg1[2] = player->unk_094 * sp20; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } arg2[0] = arg1[0]; arg2[1] = arg1[1]; @@ -4501,7 +4501,7 @@ void func_80037614(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = 0.0f; arg1[1] = 0.0f; arg1[2] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } else { if (((player->unk_0BC & 0x10) == 0x10) && ((player->unk_0BC & 2) != 2)) { var_f2 = ((-(player->unk_094 / 18.0f) * 216.0f) * 2) + -80.0f; @@ -4513,7 +4513,7 @@ void func_80037614(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = (var_f2 + 28.0f) * player->unk_094; arg1[1] = 0.0f; arg1[2] = var_f12 * player->unk_094; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } arg2[0] = arg1[0]; arg2[1] = arg1[1]; @@ -4528,7 +4528,7 @@ void func_8003777C(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = 0.0f; arg1[1] = 0.0f; arg1[2] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } else { if (((player->unk_0BC & 0x10) == 0x10) && ((player->unk_0BC & 2) != 2)) { var_f2 = ((-(player->unk_094 / 18.0f) * 216.0f) * 2) + -80.0f; @@ -4540,7 +4540,7 @@ void func_8003777C(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = -(var_f2 + 28.0f) * player->unk_094; arg1[1] = 0.0f; arg1[2] = var_f12 * player->unk_094; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } arg2[0] = arg1[0]; arg2[1] = arg1[1]; @@ -4555,7 +4555,7 @@ void func_800378E8(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = 0.0f; arg1[1] = 0.0f; arg1[2] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } else { if ((player->unk_0BC & 0x10) == 0x10) { var_f2 = player->unk_208 + (-(player->unk_094 / 18.0f) * 216.0f * 5.0f) + (-player->unk_20C * 10.0f); @@ -4567,7 +4567,7 @@ void func_800378E8(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = (player->unk_090 + var_f2) * player->unk_094; arg1[1] = 0.0f; arg1[2] = player->unk_094 * var_f12; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } arg2[0] = arg1[0]; arg2[1] = arg1[1]; @@ -4582,7 +4582,7 @@ void func_80037A4C(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = 0.0f; arg1[1] = 0.0f; arg1[2] = 0.0f; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } else { if ((player->unk_0BC & 0x10) == 0x10) { var_f2 = player->unk_208 + (-(player->unk_094 / 18.0f) * 216.0f * 5.0f) + (-player->unk_20C * 50.0f); @@ -4594,7 +4594,7 @@ void func_80037A4C(Player *player, Vec3f arg1, Vec3f arg2) { arg1[0] = -(player->unk_090 + var_f2) * player->unk_094; arg1[1] = 0.0f; arg1[2] = player->unk_094 * var_f12; - func_802B63B8(arg1, player->unk_174); + mtxf_translate_vec3f_mat3(arg1, player->unk_174); } arg2[0] = arg1[0]; arg2[1] = arg1[1]; @@ -4994,11 +4994,11 @@ void func_80038C6C(Player *player, UNUSED Camera *camera, s8 arg2, s8 arg3) { sp108[2] = 0; sp108[1] = 0; sp108[0] = 0; - func_802B63B8(sp108, player->unk_174); + mtxf_translate_vec3f_mat3(sp108, player->unk_174); spA4 += sp108[0]; sp9C += sp108[2]; sp114[2] = player->unk_08C; - func_802B63B8(sp114, player->unk_174); + mtxf_translate_vec3f_mat3(sp114, player->unk_174); sp88[0] = player->unk_034[0]; sp88[1] = player->unk_034[1]; diff --git a/src/racing/actors.c b/src/racing/actors.c index fd5bc5db7..7c5e618f6 100644 --- a/src/racing/actors.c +++ b/src/racing/actors.c @@ -113,9 +113,9 @@ void cleanup_red_and_green_shells(struct ShellActor *shell) { // Sets introductory values for a new actor (ex. Banana). void actor_init(struct Actor *actor, Vec3f startingPos, Vec3s startingRot, Vec3f startingVelocity, s16 actorType) { - vec3f_copy(actor->pos, startingPos); + vec3f_copy_return(actor->pos, startingPos); vec3s_copy(actor->rot, startingRot); - vec3f_copy(actor->velocity, startingVelocity); + vec3f_copy_return(actor->velocity, startingVelocity); actor->type = actorType; actor->flags = -0x8000; actor->unk_04 = 0; @@ -414,7 +414,7 @@ void func_8029794C(Vec3f arg0, Vec3s arg1, f32 arg2) { arg0[1] += 2.0f; func_802B5F74(sp20, arg0, arg1); - func_802B5F00(sp20, arg2); + mtxf_scale(sp20, arg2); if (render_set_position(sp20, 0) != 0) { gSPDisplayList(gDisplayListHead++, D_0D007B20); @@ -1427,10 +1427,10 @@ void func_8029AE1C(Camera *arg0, struct PaddleWheelBoat *boat, UNUSED Mat4 arg2, gSPDisplayList(gDisplayListHead++, &d_course_dks_jungle_parkway_dl_E730); gSPDisplayList(gDisplayListHead++, &d_course_dks_jungle_parkway_dl_E058); - func_802B59DC(spE0, boat->wheelRot); + mtxf_rotate_x(spE0, boat->wheelRot); vec3f_set(sp120, 0, 16.0f, -255.0f); mtxf_translate(spA0, sp120); - func_802B71CC(sp60, spE0, spA0); + mtxf_multiplication(sp60, spE0, spA0); if (render_set_position(sp60, 3) != 0) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPDisplayList(gDisplayListHead++, &d_course_dks_jungle_parkway_dl_FC28); @@ -1526,7 +1526,7 @@ void func_8029B4E0(Camera *arg0, struct Actor *arg1) { func_802B5F74(spC8, arg1->pos, arg1->rot); - func_802B5F00(spC8, 0.1f); + mtxf_scale(spC8, 0.1f); if (render_set_position(spC8, 0) != 0) { if (gActiveScreenMode == SCREEN_MODE_1P) { @@ -1615,10 +1615,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D28); - func_802B59DC(sp120, actor->wheelRot); + mtxf_rotate_x(sp120, actor->wheelRot); vec3f_set(sp160, 17.0f, 6.0f, 32.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1626,10 +1626,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, actor->wheelRot); + mtxf_rotate_x(sp120, actor->wheelRot); vec3f_set(sp160, -17.0, 6.0f, 32.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1637,10 +1637,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x16C)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C)); vec3f_set(sp160, 17.0f, 6.0f, 16.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1648,10 +1648,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x16C)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C)); vec3f_set(sp160, -17.0f, 6.0f, 16.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1659,10 +1659,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x444)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444)); vec3f_set(sp160, 17.0f, 12.0f, -12.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1670,10 +1670,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x444)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444)); vec3f_set(sp160, -17.0f, 12.0f, -12.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1681,10 +1681,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x2D8)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x2D8)); vec3f_set(sp160, 17.0f, 12.0f, -34.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1692,10 +1692,10 @@ void func_8029B8E8(Camera *camera, struct TrainCar *actor) { gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D70); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x2D8)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x2D8)); vec3f_set(sp160, -17.0f, 12.0f, -34.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); maxObjectsReached = render_set_position(spA0, 3) == 0; if (maxObjectsReached) { return; } @@ -1734,40 +1734,40 @@ void func_8029BFB0(Camera *camera, struct TrainCar *actor) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D28); - func_802B59DC(sp120, actor->wheelRot); + mtxf_rotate_x(sp120, actor->wheelRot); vec3f_set(sp160, 17.0f, 6.0f, 8.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, actor->wheelRot); + mtxf_rotate_x(sp120, actor->wheelRot); vec3f_set(sp160, -17.0, 6.0f, 8.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x444)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444)); vec3f_set(sp160, 17.0f, 6.0f, -8.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x444)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444)); vec3f_set(sp160, -17.0f, 6.0f, -8.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); @@ -1809,80 +1809,80 @@ void func_8029C3CC(Camera *camera, struct TrainCar *actor) { gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22D28); - func_802B59DC(sp120, actor->wheelRot); + mtxf_rotate_x(sp120, actor->wheelRot); vec3f_set(sp160, 17.0f, 6.0f, 28.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, actor->wheelRot); + mtxf_rotate_x(sp120, actor->wheelRot); vec3f_set(sp160, -17.0, 6.0f, 28.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x222)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x222)); vec3f_set(sp160, 17.0f, 6.0f, 12.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x222)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x222)); vec3f_set(sp160, -17.0f, 6.0f, 12.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x5B0)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x5B0)); vec3f_set(sp160, 17.0f, 6.0f, -8.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x5B0)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x5B0)); vec3f_set(sp160, -17.0f, 6.0f, -8.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x16C)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C)); vec3f_set(sp160, 17.0f, 6.0f, -24.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } gSPDisplayList(gDisplayListHead++, d_course_kalimari_desert_dl_22DB8); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); - func_802B59DC(sp120, (s16) (actor->wheelRot + 0x16C)); + mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C)); vec3f_set(sp160, -17.0f, 6.0f, -24.0f); mtxf_translate(spE0, sp160); - func_802B71CC(spA0, sp120, spE0); + mtxf_multiplication(spA0, sp120, spE0); if (render_set_position(spA0, 3) == 0) { return; } @@ -3601,14 +3601,14 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someRot[1] = fakeItemBox->rot[1]; someRot[2] = 0; func_802B5F74(someMatrix2, fakeItemBox->pos, someRot); - func_802B5F00(someMatrix2, fakeItemBox->sizeScaling); + mtxf_scale(someMatrix2, fakeItemBox->sizeScaling); if (fakeItemBox->state != 2) { if (!render_set_position(someMatrix2, 0)) { return; } gSPDisplayList(gDisplayListHead++, common_model_fake_itembox); func_802B5F74(someMatrix2, fakeItemBox->pos, fakeItemBox->rot); - func_802B5F00(someMatrix2, fakeItemBox->sizeScaling); + mtxf_scale(someMatrix2, fakeItemBox->sizeScaling); if (!render_set_position(someMatrix2, 0)) { return; } @@ -3638,7 +3638,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { } else { someMultiplier = 1.0f - ((thing - 10.0f) * 0.1f); } - func_802B5F00(someMatrix2, someMultiplier); + mtxf_scale(someMatrix2, someMultiplier); if (fakeItemBox->someTimer & 1) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); } else { @@ -3648,7 +3648,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someVec[0] = 0.0f; someVec[1] = temp_f2; someVec[2] = thing; - func_802B5450(someMatrix2, someMatrix3, someVec); + add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec); if (!render_set_position(someMatrix3, 0)) { return; } @@ -3658,7 +3658,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someVec[0] = temp_f2_2; someVec[1] = 2.3f * thing; someVec[2] = temp_f12; - func_802B5450(someMatrix2, someMatrix3, someVec); + add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec); if (!render_set_position(someMatrix3, 0)) { return; } @@ -3667,7 +3667,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someVec[0] = temp_f2_2; someVec[1] = 1.2f * thing; someVec[2] = temp_f0_2; - func_802B5450(someMatrix2, someMatrix3, someVec); + add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec); if (!render_set_position(someMatrix3, 0)) { return; } @@ -3680,7 +3680,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someVec[0] = 0.0f; someVec[1] = 1.8f * thing; someVec[2] = -1.0f * thing; - func_802B5450(someMatrix2, someMatrix3, someVec); + add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec); if (!render_set_position(someMatrix3, 0)) { return; } @@ -3689,7 +3689,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someVec[0] = temp_f0_3; someVec[1] = 0.6f * thing; someVec[2] = temp_f0_2; - func_802B5450(someMatrix2, someMatrix3, someVec); + add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec); if (!render_set_position(someMatrix3, 0)) { return; } @@ -3697,7 +3697,7 @@ void func_802A171C(Camera *camera, struct FakeItemBox *fakeItemBox) { someVec[0] = temp_f0_3; someVec[1] = temp_f2; someVec[2] = temp_f12; - func_802B5450(someMatrix2, someMatrix3, someVec); + add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec); if (!render_set_position(someMatrix3, 0)) { return; } @@ -3786,7 +3786,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { } else { someMultiplier = 1.0f - ((thing - 10.0f) * 0.1f); } - func_802B5F00(someMatrix1, someMultiplier); + mtxf_scale(someMatrix1, someMultiplier); if (item_box->someTimer & 1) { gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); } else { @@ -3796,7 +3796,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { someVec1[0] = 0.0f; someVec1[1] = temp_f2; someVec1[2] = thing; - func_802B5450(someMatrix1, someMatrix2, someVec1); + add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1); if (!render_set_position(someMatrix2, 0)) { return; } @@ -3806,7 +3806,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { someVec1[0] = temp_f2_2; someVec1[1] = 2.3f * thing; someVec1[2] = temp_f12; - func_802B5450(someMatrix1, someMatrix2, someVec1); + add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1); if (!render_set_position(someMatrix2, 0)) { return; } @@ -3815,7 +3815,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { someVec1[0] = temp_f2_2; someVec1[1] = 1.2f * thing; someVec1[2] = temp_f0_2; - func_802B5450(someMatrix1, someMatrix2, someVec1); + add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1); if (!render_set_position(someMatrix2, 0)) { return; } @@ -3828,7 +3828,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { someVec1[0] = 0.0f; someVec1[1] = 1.8f * thing; someVec1[2] = -1.0f * thing; - func_802B5450(someMatrix1, someMatrix2, someVec1); + add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1); if (!render_set_position(someMatrix2, 0)) { return; } @@ -3837,7 +3837,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { someVec1[0] = temp_f0_3; someVec1[1] = 0.6f * thing; someVec1[2] = temp_f0_2; - func_802B5450(someMatrix1, someMatrix2, someVec1); + add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1); if (!render_set_position(someMatrix2, 0)) { return; } @@ -3845,7 +3845,7 @@ void func_802A1EA0(Camera *camera, struct ItemBox *item_box) { someVec1[0] = temp_f0_3; someVec1[1] = temp_f2; someVec1[2] = temp_f12; - func_802B5450(someMatrix1, someMatrix2, someVec1); + add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1); if (!render_set_position(someMatrix2, 0)) { return; } diff --git a/src/racing/actors_extended.c b/src/racing/actors_extended.c index ba2d68939..375e2a262 100644 --- a/src/racing/actors_extended.c +++ b/src/racing/actors_extended.c @@ -26,9 +26,9 @@ void func_802B0210(Collision *arg0, Collision *arg1) { arg1->unk3C[1] = arg0->unk3C[1]; arg1->unk3C[2] = arg0->unk3C[2]; - vec3f_copy(arg1->unk48, arg0->unk48); - vec3f_copy(arg1->unk54, arg0->unk54); - vec3f_copy(arg1->unk60, arg0->unk60); + vec3f_copy_return(arg1->unk48, arg0->unk48); + vec3f_copy_return(arg1->unk54, arg0->unk54); + vec3f_copy_return(arg1->unk60, arg0->unk60); } void func_802B02B4(struct ShellActor *shell, s32 shellType) { @@ -557,7 +557,7 @@ s32 func_802B19EC(TripleShellParent *parent, Player *player, s16 shellType, u16 startingPos[0] = 0.0f; startingPos[1] = -player->boundingBoxSize; startingPos[2] = player->boundingBoxSize - 4.0f; - func_802B63B8(startingPos, player->unk_174); + mtxf_translate_vec3f_mat3(startingPos, player->unk_174); startingPos[0] += player->pos[0]; startingPos[1] += player->pos[1]; startingPos[2] += player->pos[2]; @@ -603,7 +603,7 @@ s32 func_802B1C9C(Player *player) { startingPos[0] = 0.0f; startingPos[1] = -player->boundingBoxSize; startingPos[2] = player->boundingBoxSize - 4.0f; - func_802B63B8(startingPos, player->unk_174); + mtxf_translate_vec3f_mat3(startingPos, player->unk_174); startingPos[0] += player->pos[0]; startingPos[1] += player->pos[1]; startingPos[2] += player->pos[2]; @@ -636,7 +636,7 @@ s32 func_802B1E48(Player *player) { startingPos[0] = 0.0f; startingPos[1] = -player->boundingBoxSize; startingPos[2] = player->boundingBoxSize - 4.0f; - func_802B63B8(startingPos, player->unk_174); + mtxf_translate_vec3f_mat3(startingPos, player->unk_174); startingPos[0] += player->pos[0]; startingPos[1] += player->pos[1]; startingPos[2] += player->pos[2]; @@ -856,7 +856,7 @@ void func_802B2914(struct BananaBunchParent *banana_bunch, Player *player, s16 b startingPos[0] = 0.0f; startingPos[1] = -player->boundingBoxSize; startingPos[2] = -(player->boundingBoxSize + 4.0f); - func_802B63B8(startingPos, player->unk_174); + mtxf_translate_vec3f_mat3(startingPos, player->unk_174); startingPos[0] += player->pos[0]; startingPos[1] += player->pos[1]; startingPos[2] += player->pos[2]; @@ -933,7 +933,7 @@ s32 func_802B2C40(Player *player) { startingPos[0] = 0.0f; startingPos[1] = -player->boundingBoxSize; startingPos[2] = -(player->boundingBoxSize + 4.0f); - func_802B63B8(startingPos, player->unk_174); + mtxf_translate_vec3f_mat3(startingPos, player->unk_174); startingPos[0] += player->pos[0]; startingPos[1] += player->pos[1]; startingPos[2] += player->pos[2]; @@ -972,7 +972,7 @@ s32 func_802B2D70(Player *player) { startingPos[0, 0] = 0.0f; startingPos[1] = -player->boundingBoxSize; startingPos[2] = -(player->boundingBoxSize + 4.0f); - func_802B63B8(startingPos, player->unk_174); + mtxf_translate_vec3f_mat3(startingPos, player->unk_174); startingPos[0] += player->pos[0]; startingPos[1] += player->pos[1]; startingPos[2] += player->pos[2]; @@ -1136,7 +1136,7 @@ void update_actor_green_shell(struct ShellActor *shell) { somePosVel[0] = 0.0f; somePosVel[1] = player->boundingBoxSize; somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f); - func_802B63B8(somePosVel, player->unk_174); + mtxf_translate_vec3f_mat3(somePosVel, player->unk_174); shell->pos[0] = player->pos[0] + somePosVel[0]; pad2 = player->pos[1] - somePosVel[1]; shell->pos[2] = player->pos[2] + somePosVel[2]; @@ -1216,7 +1216,7 @@ void update_actor_green_shell(struct ShellActor *shell) { somePosVel[0] = sins(shell->rotAngle) * 6.0f; somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize; somePosVel[2] = coss(shell->rotAngle) * 6.0f; - func_802B63B8(somePosVel, player->unk_174); + mtxf_translate_vec3f_mat3(somePosVel, player->unk_174); shell->pos[0] = player->pos[0] + somePosVel[0]; shell->pos[1] = player->pos[1] + somePosVel[1]; shell->pos[2] = player->pos[2] + somePosVel[2]; @@ -1257,7 +1257,7 @@ void update_actor_green_shell(struct ShellActor *shell) { somePosVel[0] = sins(shell->rotAngle) * 8.0f; somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize; somePosVel[2] = coss(shell->rotAngle) * 8.0f; - func_802B63B8(somePosVel, player->unk_174); + mtxf_translate_vec3f_mat3(somePosVel, player->unk_174); somePos2[0] = shell->pos[0]; somePos2[1] = shell->pos[1]; somePos2[2] = shell->pos[2]; @@ -1515,7 +1515,7 @@ void update_actor_red_blue_shell(struct ShellActor *shell) { somePosVel[0] = 0.0f; somePosVel[1] = player->boundingBoxSize; somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f); - func_802B63B8(somePosVel, player->unk_174); + mtxf_translate_vec3f_mat3(somePosVel, player->unk_174); shell->pos[0] = player->pos[0] + somePosVel[0]; pad7 = player->pos[1] - somePosVel[1]; shell->pos[2] = player->pos[2] + somePosVel[2]; @@ -1594,7 +1594,7 @@ void update_actor_red_blue_shell(struct ShellActor *shell) { somePosVel[0] = sins(shell->rotAngle) * 8.0f; somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize; somePosVel[2] = coss(shell->rotAngle) * 8.0f; - func_802B63B8(somePosVel, player->unk_174); + mtxf_translate_vec3f_mat3(somePosVel, player->unk_174); shell->pos[0] = player->pos[0] + somePosVel[0]; shell->pos[1] = player->pos[1] + somePosVel[1]; shell->pos[2] = player->pos[2] + somePosVel[2]; @@ -1699,7 +1699,7 @@ void update_actor_red_blue_shell(struct ShellActor *shell) { somePosVel[0] = sins(shell->rotAngle) * 8.0f; somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize; somePosVel[2] = coss(shell->rotAngle) * 8.0f; - func_802B63B8(somePosVel, player->unk_174); + mtxf_translate_vec3f_mat3(somePosVel, player->unk_174); origPos[0] = shell->pos[0]; origPos[1] = shell->pos[1]; origPos[2] = shell->pos[2]; diff --git a/src/racing/math_util.c b/src/racing/math_util.c index 75c3a6b19..ec9d377eb 100644 --- a/src/racing/math_util.c +++ b/src/racing/math_util.c @@ -7,6 +7,7 @@ #include "framebuffers.h" #include #include +#include "math.h" #pragma intrinsic (sqrtf,fabs) @@ -22,9 +23,9 @@ UNUSED s32 func_802B4F60(UNUSED s32 arg0, Vec3f arg1, UNUSED s32 arg2, UNUSED f3 f32 sp2C; UNUSED f32 a; Vec3f sp1C; - vec3f_copy(sp1C, arg1); + vec3f_copy_return(sp1C, arg1); sp2C = sp30[3][3] + (((sp1C[0] * sp30[0][3]) + (sp1C[1] * sp30[1][3])) + (sp30[2][3] * sp1C[2])); - func_802B6434(sp1C, sp30); + mtxf_translate_vec3f_mat4(sp1C, sp30); if (sp2C >= 0.0f) { return 0; @@ -63,14 +64,14 @@ s32 render_set_position(Mat4 arg0, s32 arg1) { } f32 func_802B51E8(Vec3f arg0, Vec3f arg1) { - f32 temp_f12; - f32 temp_f14; - f32 temp_f2; + f32 sub_y; + f32 sub_z; + f32 sub_x; - temp_f2 = arg1[0] - arg0[0]; - temp_f12 = arg1[1] - arg0[1]; - temp_f14 = arg1[2] - arg0[2]; - return (temp_f2 * temp_f2) + (temp_f12 * temp_f12) + temp_f14 + temp_f14; + sub_x = arg1[0] - arg0[0]; + sub_y = arg1[1] - arg0[1]; + sub_z = arg1[2] - arg0[2]; + return (sub_x * sub_x) + (sub_y * sub_y) + sub_z + sub_z; } u32 get_angle_between_points(Vec3f arg0, Vec3f arg1) { @@ -82,6 +83,7 @@ u32 get_angle_between_points(Vec3f arg0, Vec3f arg1) { return atan2s(temp_v1, temp_v2); } +// get_angle_between_points u32 func_802B5258(Vec3f arg0, Vec3s arg1) { f32 temp_v1; f32 temp_v2; @@ -115,7 +117,7 @@ void vec3s_set(Vec3s arg0, s16 arg1, s16 arg2, s16 arg3) { #endif #endif -void *vec3f_copy(Vec3f dest, Vec3f src) { +void *vec3f_copy_return(Vec3f dest, Vec3f src) { dest[0] = src[0]; dest[1] = src[1]; dest[2] = src[2]; @@ -128,31 +130,33 @@ void vec3s_copy(Vec3s dest, Vec3s src) { dest[2] = src[2]; } -UNUSED void *sm64_vec3f_set(Vec3f dest, f32 x, f32 y, f32 z) { +UNUSED void *vec3f_set_return(Vec3f dest, f32 x, f32 y, f32 z) { dest[0] = x; dest[1] = y; dest[2] = z; return &dest; } -void func_802B5350(Mat4 arg0, Mat4 arg1) { +// Copy mat1 to mat2 +void mtxf_copy(Mat4 mat1, Mat4 mat2) { s32 row; s32 column; for (row = 0; row < 4; row++) { for (column = 0; column < 4; column++) { - arg1[row][column] = arg0[row][column]; + mat2[row][column] = mat1[row][column]; } } } // mtxf_copy -void func_802B5398(s32 *dest, s32 *src, s32 arg2) { - while (arg2-- > 0) { +void mtxf_copy_n_element(s32 *dest, s32 *src, s32 n) { + while (n-- > 0) { *dest++ = *src++; } } +// Transform a matrix to a matrix identity void mtxf_identity(Mat4 mtx) { register s32 i; register s32 k; @@ -164,31 +168,41 @@ void mtxf_identity(Mat4 mtx) { } } -void func_802B5450(Mat4 arg0, Mat4 arg1, Vec3f arg2) { - arg1[3][0] = arg0[3][0] + arg2[0]; - arg1[3][1] = arg0[3][1] + arg2[1]; - arg1[3][2] = arg0[3][2] + arg2[2]; - arg1[3][3] = arg0[3][3]; - arg1[0][0] = arg0[0][0]; - arg1[0][1] = arg0[0][1]; - arg1[0][2] = arg0[0][2]; - arg1[0][3] = arg0[0][3]; - arg1[1][0] = arg0[1][0]; - arg1[1][1] = arg0[1][1]; - arg1[1][2] = arg0[1][2]; - arg1[1][3] = arg0[1][3]; - arg1[2][0] = arg0[2][0]; - arg1[2][1] = arg0[2][1]; - arg1[2][2] = arg0[2][2]; - arg1[2][3] = arg0[2][3]; +// Add a translation vector to a matrix, mat is the matrix to add, dest is the destination matrix, pos is the translation vector +void add_translate_mat4_vec3f(Mat4 mat, Mat4 dest, Vec3f pos) { + dest[3][0] = mat[3][0] + pos[0]; + dest[3][1] = mat[3][1] + pos[1]; + dest[3][2] = mat[3][2] + pos[2]; + dest[3][3] = mat[3][3]; + dest[0][0] = mat[0][0]; + dest[0][1] = mat[0][1]; + dest[0][2] = mat[0][2]; + dest[0][3] = mat[0][3]; + dest[1][0] = mat[1][0]; + dest[1][1] = mat[1][1]; + dest[1][2] = mat[1][2]; + dest[1][3] = mat[1][3]; + dest[2][0] = mat[2][0]; + dest[2][1] = mat[2][1]; + dest[2][2] = mat[2][2]; + dest[2][3] = mat[2][3]; + + /* + * mat(0,0) mat(0,1) mat(0,2) mat(0,3) + * mat(1,0) mat(1,1) mat(1,2) mat(1,3) + * mat(2,0) mat(2,1) mat(2,2) mat(2,3) + * mat(3,0)+pos(0) mat(3,1)+pos(1) mat(3,2)+pos(2) mat(3,3) + */ } -UNUSED void func_802B54EC(Mat4 arg0, Mat4 arg1, Vec3f arg2) { - arg1[3][0] = arg0[3][0] + arg2[0]; - arg1[3][1] = arg0[3][1] + arg2[1]; - arg1[3][2] = arg0[3][2] + arg2[2]; +// Light version of add_translate_mat4_vec3f +UNUSED void add_translate_mat4_vec3f_lite(Mat4 mat, Mat4 dest, Vec3f pos) { + dest[3][0] = mat[3][0] + pos[0]; + dest[3][1] = mat[3][1] + pos[1]; + dest[3][2] = mat[3][2] + pos[2]; } +// create a translation matrix void mtxf_translate(Mat4 dest, Vec3f b) { mtxf_identity(dest); dest[3][0] = b[0]; @@ -296,37 +310,61 @@ void func_802B5794(Mat4 mtx, Vec3f from, Vec3f to) { mtx[3][3] = 1.0f; } -void func_802B59DC(Mat4 arg0, s16 arg1) { - f32 sp28 = sins(arg1); - f32 temp_f0 = coss(arg1); +// create a rotation matrix around the x axis +void mtxf_rotate_x(Mat4 mat, s16 angle) { + f32 sin_theta = sins(angle); + f32 cos_theta = coss(angle); - mtxf_identity(arg0); - arg0[1][1] = temp_f0; - arg0[1][2] = sp28; - arg0[2][1] = -sp28; - arg0[2][2] = temp_f0; + mtxf_identity(mat); + mat[1][1] = cos_theta; + mat[1][2] = sin_theta; + mat[2][1] = -sin_theta; + mat[2][2] = cos_theta; + + /* + * 1, 0, 0, 0, + * 0, cos_theta, sin_theta, 0, + * 0, -sin_theta, cos_theta, 0, + * 0, 0, 0, 1 + */ } -void func_802B5A44(Mat4 arg0, s16 arg1) { - f32 temp_f0 = sins(arg1); - f32 sp28 = coss(arg1); +// create a rotation matrix around the y axis +void mtxf_rotate_y(Mat4 mat, s16 angle) { + f32 sin_theta = sins(angle); + f32 cos_theta = coss(angle); - mtxf_identity(arg0); - arg0[0][0] = sp28; - arg0[0][2] = -temp_f0; - arg0[2][0] = temp_f0; - arg0[2][2] = sp28; + mtxf_identity(mat); + mat[0][0] = cos_theta; + mat[0][2] = -sin_theta; + mat[2][0] = sin_theta; + mat[2][2] = cos_theta; + + /* + * cos_theta, 0, -sin_theta, 0, + * 0, 1, 0, 0, + * sin_theta, 0, cos_theta, 0, + * 0, 0, 0, 1 + */ } -void func_802B5AAC(Mat4 arg0, s16 arg1) { - f32 temp_f0 = sins(arg1); - f32 sp28 = coss(arg1); +// create a rotation matrix around the z axis +void mtxf_s16_rotate_z(Mat4 mat, s16 angle) { + f32 sin_theta = sins(angle); + f32 cos_theta = coss(angle); - mtxf_identity(arg0); - arg0[0][0] = sp28; - arg0[0][1] = temp_f0; - arg0[1][0] = -temp_f0; - arg0[1][1] = sp28; + mtxf_identity(mat); + mat[0][0] = cos_theta; + mat[0][1] = sin_theta; + mat[1][0] = -sin_theta; + mat[1][1] = cos_theta; + + /* + * cos_theta, sin_theta, 0, 0, + * -sin_theta, cos_theta, 0, 0, + * 0, 0, 1, 0, + * 0, 0, 0, 1 + */ } #ifdef MIPS_TO_C @@ -426,18 +464,20 @@ void func_802B5D64(uintptr_t arg0, s16 arg1, s16 arg2, s32 arg3) { } } -void func_802B5F00(Mat4 arg0, f32 arg1) { - arg0[0][0] *= arg1; - arg0[1][0] *= arg1; - arg0[2][0] *= arg1; - arg0[0][1] *= arg1; - arg0[1][1] *= arg1; - arg0[2][1] *= arg1; - arg0[0][2] *= arg1; - arg0[1][2] *= arg1; - arg0[2][2] *= arg1; +// multiply a matrix with a number +void mtxf_scale(Mat4 mat, f32 coef) { + mat[0][0] *= coef; + mat[1][0] *= coef; + mat[2][0] *= coef; + mat[0][1] *= coef; + mat[1][1] *= coef; + mat[2][1] *= coef; + mat[0][2] *= coef; + mat[1][2] *= coef; + mat[2][2] *= coef; } +// look like create a translation and rotation matrix with arg1 position and arg2 rotation void func_802B5F74(Mat4 arg0, Vec3f arg1, Vec3s arg2) { f32 sine1; f32 cosine1; @@ -534,6 +574,7 @@ UNUSED void func_802B6214(Mat4 arg0, Vec3s arg1, Vec3s arg2) { arg0[3][3] = 1.0f; } +// look like to normalise vector UNUSED void func_802B6374(Vec3f arg0) { f32 temp_f0; temp_f0 = sqrtf((arg0[0] * arg0[0]) + (arg0[1] * arg0[1]) + (arg0[2] * arg0[2])); @@ -542,34 +583,35 @@ UNUSED void func_802B6374(Vec3f arg0) { arg0[2] /= temp_f0; } -void func_802B63B8(Vec3f arg0, Mat3 arg1) { - f32 temp_f12; - f32 temp_f16; - f32 temp_f14; +// translate the vector with a matrix +void mtxf_translate_vec3f_mat3(Vec3f pos, Mat3 mat) { + f32 new_x; + f32 new_y; + f32 new_z; - temp_f12 = (arg1[0][0] * arg0[0]) + (arg1[0][1] * arg0[1]) + (arg1[0][2] * arg0[2]); - temp_f16 = (arg1[1][0] * arg0[0]) + (arg1[1][1] * arg0[1]) + (arg1[1][2] * arg0[2]); - temp_f14 = (arg1[2][0] * arg0[0]) + (arg1[2][1] * arg0[1]) + (arg1[2][2] * arg0[2]); + new_x = (mat[0][0] * pos[0]) + (mat[0][1] * pos[1]) + (mat[0][2] * pos[2]); + new_y = (mat[1][0] * pos[0]) + (mat[1][1] * pos[1]) + (mat[1][2] * pos[2]); + new_z = (mat[2][0] * pos[0]) + (mat[2][1] * pos[1]) + (mat[2][2] * pos[2]); - arg0[0] = temp_f12; - arg0[1] = temp_f16; - arg0[2] = temp_f14; + pos[0] = new_x; + pos[1] = new_y; + pos[2] = new_z; } -void func_802B6434(Vec3f arg0, Mat4 arg1) { +// translate the vector with a matrix (with a matrix 4x4) +void mtxf_translate_vec3f_mat4(Vec3f pos, Mat4 mat) { + f32 new_x; + f32 new_y; + f32 new_z; - f32 temp_f2; - f32 temp_f16; - f32 temp_f6; - - temp_f2 = ((arg1[0][0] * arg0[0]) + (arg1[0][1] * arg0[1]) + (arg1[0][2] * arg0[2])); - temp_f16 = ((arg1[1][0] * arg0[0]) + (arg1[1][1] * arg0[1]) + (arg1[1][2] * arg0[2])); - temp_f6 = (arg1[2][0] * arg0[0]) + (arg1[2][1] * arg0[1]) + (arg1[2][2] * arg0[2]); + new_x = (mat[0][0] * pos[0]) + (mat[0][1] * pos[1]) + (mat[0][2] * pos[2]); + new_y = (mat[1][0] * pos[0]) + (mat[1][1] * pos[1]) + (mat[1][2] * pos[2]); + new_z = (mat[2][0] * pos[0]) + (mat[2][1] * pos[1]) + (mat[2][2] * pos[2]); - arg0[0] = temp_f2; - arg0[1] = temp_f16; - arg0[2] = temp_f6; + pos[0] = new_x; + pos[1] = new_y; + pos[2] = new_z; } UNUSED void func_802B64B0(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2, UNUSED s32 arg3) { @@ -589,8 +631,8 @@ void func_802B64C4(Vec3f arg0, s16 arg1) { arg0[2] = sp2C * temp1 + (temp_f0 * temp3); } -void func_802B6540(Mat3 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { - Mat3 mtx2; +void func_802B6540(Mat3 dest, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { + Mat3 mtx_rot_y; Mat3 matrix; s32 i, j; f32 a; @@ -603,19 +645,19 @@ void func_802B6540(Mat3 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { sinValue = sins(arg4); cossValue = coss(arg4); - mtx2[0][0] = cossValue; - mtx2[2][1] = 0; - mtx2[1][2] = 0; + mtx_rot_y[0][0] = cossValue; + mtx_rot_y[2][1] = 0; + mtx_rot_y[1][2] = 0; - mtx2[1][1] = 1; - mtx2[2][0] = sinValue; - mtx2[0][2] = -sinValue; + mtx_rot_y[1][1] = 1; + mtx_rot_y[2][0] = sinValue; + mtx_rot_y[0][2] = -sinValue; - mtx2[2][2] = cossValue; - mtx2[1][0] = 0; - mtx2[0][1] = 0; + mtx_rot_y[2][2] = cossValue; + mtx_rot_y[1][0] = 0; + mtx_rot_y[0][1] = 0; - if (arg2 == 1) { + if (arg2 == 1) { // set matrix to identity for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { @@ -623,7 +665,7 @@ void func_802B6540(Mat3 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { } } - } else if (arg2 == -1) { + } else if (arg2 == -1) { // set matrix to identity with the second column negative for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { @@ -634,27 +676,28 @@ void func_802B6540(Mat3 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { matrix[1][1] = -1; } else { - a = (f32) -(360.0 - ((f64) (func_802B7CE8(arg2) * 180.0f) / 3.141592653589793)); + a = (f32) -(360.0 - ((f64) (func_802B7CE8(arg2) * 180.0f) / M_PI)); b = -arg3 / sqrtf((arg1 * arg1) + (arg3 * arg3)); c = 0; d = arg1 / sqrtf((arg1 * arg1) + (arg3 * arg3)); func_802B6A84(matrix, a, b, c, d); } - arg0[0][0] = (mtx2[0][0] * matrix[0][0]) + (mtx2[0][1] * matrix[1][0]) + (mtx2[0][2] * matrix[2][0]); - arg0[1][0] = (mtx2[1][0] * matrix[0][0]) + (mtx2[1][1] * matrix[1][0]) + (mtx2[1][2] * matrix[2][0]); - arg0[2][0] = (mtx2[2][0] * matrix[0][0]) + (mtx2[2][1] * matrix[1][0]) + (mtx2[2][2] * matrix[2][0]); + dest[0][0] = (mtx_rot_y[0][0] * matrix[0][0]) + (mtx_rot_y[0][1] * matrix[1][0]) + (mtx_rot_y[0][2] * matrix[2][0]); + dest[1][0] = (mtx_rot_y[1][0] * matrix[0][0]) + (mtx_rot_y[1][1] * matrix[1][0]) + (mtx_rot_y[1][2] * matrix[2][0]); + dest[2][0] = (mtx_rot_y[2][0] * matrix[0][0]) + (mtx_rot_y[2][1] * matrix[1][0]) + (mtx_rot_y[2][2] * matrix[2][0]); - arg0[0][1] = (mtx2[0][0] * matrix[0][1]) + (mtx2[0][1] * matrix[1][1]) + (mtx2[0][2] * matrix[2][1]); - arg0[1][1] = (mtx2[1][0] * matrix[0][1]) + (mtx2[1][1] * matrix[1][1]) + (mtx2[1][2] * matrix[2][1]); - arg0[2][1] = (mtx2[2][0] * matrix[0][1]) + (mtx2[2][1] * matrix[1][1]) + (mtx2[2][2] * matrix[2][1]); + dest[0][1] = (mtx_rot_y[0][0] * matrix[0][1]) + (mtx_rot_y[0][1] * matrix[1][1]) + (mtx_rot_y[0][2] * matrix[2][1]); + dest[1][1] = (mtx_rot_y[1][0] * matrix[0][1]) + (mtx_rot_y[1][1] * matrix[1][1]) + (mtx_rot_y[1][2] * matrix[2][1]); + dest[2][1] = (mtx_rot_y[2][0] * matrix[0][1]) + (mtx_rot_y[2][1] * matrix[1][1]) + (mtx_rot_y[2][2] * matrix[2][1]); - arg0[0][2] = (mtx2[0][0] * matrix[0][2]) + (mtx2[0][1] * matrix[1][2]) + (mtx2[0][2] * matrix[2][2]); - arg0[1][2] = (mtx2[1][0] * matrix[0][2]) + (mtx2[1][1] * matrix[1][2]) + (mtx2[1][2] * matrix[2][2]); - arg0[2][2] = (mtx2[2][0] * matrix[0][2]) + (mtx2[2][1] * matrix[1][2]) + (mtx2[2][2] * matrix[2][2]); + dest[0][2] = (mtx_rot_y[0][0] * matrix[0][2]) + (mtx_rot_y[0][1] * matrix[1][2]) + (mtx_rot_y[0][2] * matrix[2][2]); + dest[1][2] = (mtx_rot_y[1][0] * matrix[0][2]) + (mtx_rot_y[1][1] * matrix[1][2]) + (mtx_rot_y[1][2] * matrix[2][2]); + dest[2][2] = (mtx_rot_y[2][0] * matrix[0][2]) + (mtx_rot_y[2][1] * matrix[1][2]) + (mtx_rot_y[2][2] * matrix[2][2]); } +// include in func_802B6540 UNUSED void func_802B68F8(Mat3 matrix, f32 arg1, f32 arg2, f32 arg3) { s32 i, j; f32 a; @@ -677,7 +720,7 @@ UNUSED void func_802B68F8(Mat3 matrix, f32 arg1, f32 arg2, f32 arg3) { } matrix[1][1] = -1.0f; } else { - a = (f32) -(360.0 - ((f64) (func_802B7CE8(arg2) * 180.0f) / 3.141592653589793)); + a = (f32) -(360.0 - ((f64) (func_802B7CE8(arg2) * 180.0f) / M_PI)); b = -arg3 / sqrtf((arg1 * arg1) + (arg3 * arg3)); c = 0; d = arg1 / sqrtf((arg1 * arg1) + (arg3 * arg3)); @@ -756,6 +799,7 @@ void func_802B6BC0(Mat4 arg0, s16 arg1, f32 arg2, f32 arg3, f32 arg4) { } } +// look like create a translation and rotation matrix with arg1 position and arg2 rotation void func_802B6D58(Mat4 arg0, Vec3f arg1, Vec3f arg2) { f32 sine1; f32 cosine1; @@ -788,25 +832,25 @@ void func_802B6D58(Mat4 arg0, Vec3f arg1, Vec3f arg2) { arg0[3][3] = 1.0f; } -void func_802B71CC(Mat4 arg0, Mat4 arg1, Mat4 arg2) { +void mtxf_multiplication(Mat4 dest, Mat4 mat1, Mat4 mat2) { Mat4 product; - product[0][0] = (arg1[0][0] * arg2[0][0]) + (arg1[0][1] * arg2[1][0]) + (arg1[0][2] * arg2[2][0]) + (arg1[0][3] * arg2[3][0]); - product[0][1] = (arg1[0][0] * arg2[0][1]) + (arg1[0][1] * arg2[1][1]) + (arg1[0][2] * arg2[2][1]) + (arg1[0][3] * arg2[3][1]); - product[0][2] = (arg1[0][0] * arg2[0][2]) + (arg1[0][1] * arg2[1][2]) + (arg1[0][2] * arg2[2][2]) + (arg1[0][3] * arg2[3][2]); - product[0][3] = (arg1[0][0] * arg2[0][3]) + (arg1[0][1] * arg2[1][3]) + (arg1[0][2] * arg2[2][3]) + (arg1[0][3] * arg2[3][3]); - product[1][0] = (arg1[1][0] * arg2[0][0]) + (arg1[1][1] * arg2[1][0]) + (arg1[1][2] * arg2[2][0]) + (arg1[1][3] * arg2[3][0]); - product[1][1] = (arg1[1][0] * arg2[0][1]) + (arg1[1][1] * arg2[1][1]) + (arg1[1][2] * arg2[2][1]) + (arg1[1][3] * arg2[3][1]); - product[1][2] = (arg1[1][0] * arg2[0][2]) + (arg1[1][1] * arg2[1][2]) + (arg1[1][2] * arg2[2][2]) + (arg1[1][3] * arg2[3][2]); - product[1][3] = (arg1[1][0] * arg2[0][3]) + (arg1[1][1] * arg2[1][3]) + (arg1[1][2] * arg2[2][3]) + (arg1[1][3] * arg2[3][3]); - product[2][0] = (arg1[2][0] * arg2[0][0]) + (arg1[2][1] * arg2[1][0]) + (arg1[2][2] * arg2[2][0]) + (arg1[2][3] * arg2[3][0]); - product[2][1] = (arg1[2][0] * arg2[0][1]) + (arg1[2][1] * arg2[1][1]) + (arg1[2][2] * arg2[2][1]) + (arg1[2][3] * arg2[3][1]); - product[2][2] = (arg1[2][0] * arg2[0][2]) + (arg1[2][1] * arg2[1][2]) + (arg1[2][2] * arg2[2][2]) + (arg1[2][3] * arg2[3][2]); - product[2][3] = (arg1[2][0] * arg2[0][3]) + (arg1[2][1] * arg2[1][3]) + (arg1[2][2] * arg2[2][3]) + (arg1[2][3] * arg2[3][3]); - product[3][0] = (arg1[3][0] * arg2[0][0]) + (arg1[3][1] * arg2[1][0]) + (arg1[3][2] * arg2[2][0]) + (arg1[3][3] * arg2[3][0]); - product[3][1] = (arg1[3][0] * arg2[0][1]) + (arg1[3][1] * arg2[1][1]) + (arg1[3][2] * arg2[2][1]) + (arg1[3][3] * arg2[3][1]); - product[3][2] = (arg1[3][0] * arg2[0][2]) + (arg1[3][1] * arg2[1][2]) + (arg1[3][2] * arg2[2][2]) + (arg1[3][3] * arg2[3][2]); - product[3][3] = (arg1[3][0] * arg2[0][3]) + (arg1[3][1] * arg2[1][3]) + (arg1[3][2] * arg2[2][3]) + (arg1[3][3] * arg2[3][3]); - func_802B5398((s32 *)arg0, (s32 *)product, 0x10); + product[0][0] = (mat1[0][0] * mat2[0][0]) + (mat1[0][1] * mat2[1][0]) + (mat1[0][2] * mat2[2][0]) + (mat1[0][3] * mat2[3][0]); + product[0][1] = (mat1[0][0] * mat2[0][1]) + (mat1[0][1] * mat2[1][1]) + (mat1[0][2] * mat2[2][1]) + (mat1[0][3] * mat2[3][1]); + product[0][2] = (mat1[0][0] * mat2[0][2]) + (mat1[0][1] * mat2[1][2]) + (mat1[0][2] * mat2[2][2]) + (mat1[0][3] * mat2[3][2]); + product[0][3] = (mat1[0][0] * mat2[0][3]) + (mat1[0][1] * mat2[1][3]) + (mat1[0][2] * mat2[2][3]) + (mat1[0][3] * mat2[3][3]); + product[1][0] = (mat1[1][0] * mat2[0][0]) + (mat1[1][1] * mat2[1][0]) + (mat1[1][2] * mat2[2][0]) + (mat1[1][3] * mat2[3][0]); + product[1][1] = (mat1[1][0] * mat2[0][1]) + (mat1[1][1] * mat2[1][1]) + (mat1[1][2] * mat2[2][1]) + (mat1[1][3] * mat2[3][1]); + product[1][2] = (mat1[1][0] * mat2[0][2]) + (mat1[1][1] * mat2[1][2]) + (mat1[1][2] * mat2[2][2]) + (mat1[1][3] * mat2[3][2]); + product[1][3] = (mat1[1][0] * mat2[0][3]) + (mat1[1][1] * mat2[1][3]) + (mat1[1][2] * mat2[2][3]) + (mat1[1][3] * mat2[3][3]); + product[2][0] = (mat1[2][0] * mat2[0][0]) + (mat1[2][1] * mat2[1][0]) + (mat1[2][2] * mat2[2][0]) + (mat1[2][3] * mat2[3][0]); + product[2][1] = (mat1[2][0] * mat2[0][1]) + (mat1[2][1] * mat2[1][1]) + (mat1[2][2] * mat2[2][1]) + (mat1[2][3] * mat2[3][1]); + product[2][2] = (mat1[2][0] * mat2[0][2]) + (mat1[2][1] * mat2[1][2]) + (mat1[2][2] * mat2[2][2]) + (mat1[2][3] * mat2[3][2]); + product[2][3] = (mat1[2][0] * mat2[0][3]) + (mat1[2][1] * mat2[1][3]) + (mat1[2][2] * mat2[2][3]) + (mat1[2][3] * mat2[3][3]); + product[3][0] = (mat1[3][0] * mat2[0][0]) + (mat1[3][1] * mat2[1][0]) + (mat1[3][2] * mat2[2][0]) + (mat1[3][3] * mat2[3][0]); + product[3][1] = (mat1[3][0] * mat2[0][1]) + (mat1[3][1] * mat2[1][1]) + (mat1[3][2] * mat2[2][1]) + (mat1[3][3] * mat2[3][1]); + product[3][2] = (mat1[3][0] * mat2[0][2]) + (mat1[3][1] * mat2[1][2]) + (mat1[3][2] * mat2[2][2]) + (mat1[3][3] * mat2[3][2]); + product[3][3] = (mat1[3][0] * mat2[0][3]) + (mat1[3][1] * mat2[1][3]) + (mat1[3][2] * mat2[2][3]) + (mat1[3][3] * mat2[3][3]); + mtxf_copy_n_element((s32 *)dest, (s32 *)product, 16); } /** @@ -946,7 +990,7 @@ UNUSED f32 func_802B79F0(f32 arg0, f32 arg1) { } UNUSED u16 func_802B7B50(f32 arg0, f32 arg1) { - return ((func_802B79B8(arg0, arg1) * 32768.0f) / 3.141592653589793); + return ((func_802B79B8(arg0, arg1) * 32768.0f) / M_PI); } UNUSED void func_802B7C18(f32 arg0) { @@ -970,7 +1014,7 @@ f32 func_802B7CE8(f32 arg0) { } UNUSED s16 func_802B7D28(f32 arg0) { - return func_802B79B8(sqrtf(1.0 - (f64)(arg0 * arg0)), arg0) * 32768.0f / 3.141592653589793; + return func_802B79B8(sqrtf(1.0 - (f64)(arg0 * arg0)), arg0) * 32768.0f / M_PI; } u16 random_u16(void) { @@ -1009,18 +1053,18 @@ s16 func_802B7F34(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { return atan2s(arg2 - arg0, arg3 - arg1); } -void func_802B7F7C(Vec3f arg0, Vec3f arg1, Vec3s arg2) { - f32 temp_f14 = arg0[0]; - f32 sp28 = arg0[1]; - f32 temp_f12 = arg0[2]; +void func_802B7F7C(Vec3f arg0, Vec3f arg1, Vec3s dest) { + f32 x1 = arg0[0]; + f32 y1 = arg0[1]; + f32 z1 = arg0[2]; - f32 temp_f2 = arg1[0]; - f32 sp1C = arg1[1]; - f32 temp_f0 = arg1[2]; + f32 x2 = arg1[0]; + f32 y2 = arg1[1]; + f32 z2 = arg1[2]; - arg2[1] = func_802B7F34(temp_f12, temp_f14, temp_f0, temp_f2); - arg2[0] = func_802B7F34(sp28, temp_f12, sp1C, temp_f0); - arg2[2] = func_802B7F34(temp_f14, sp28, temp_f2, sp1C); + dest[1] = func_802B7F34(z1, x1, z2, x2); + dest[0] = func_802B7F34(y1, z1, y2, z2); + dest[2] = func_802B7F34(x1, y1, x2, y2); } f32 sins(u16 arg0) { @@ -1113,7 +1157,7 @@ f32 is_within_render_distance(Vec3f cameraPos, Vec3f objectPos, u16 orientationY } // No idea if arg1 is actually a Mat4 or not, but since this function is unused -// its impossible to know with certainty either way +// its impossible to know with certainty either way, very close of func_802B5D64 UNUSED void func_802B8414(uintptr_t arg0, Mat4 arg1, s16 arg2, s16 arg3, s32 arg4) { UNUSED s32 pad[3]; Vec3f sp40; diff --git a/src/racing/math_util.h b/src/racing/math_util.h index cfb972042..752b5d25c 100644 --- a/src/racing/math_util.h +++ b/src/racing/math_util.h @@ -22,31 +22,32 @@ u32 get_angle_between_points(Vec3f, Vec3f); u32 func_802B5258(Vec3f, Vec3s); void vec3f_set(Vec3f, f32, f32, f32); void vec3s_set(Vec3s, s16, s16, s16); -void *vec3f_copy(Vec3f, Vec3f); +void *vec3f_copy_return(Vec3f, Vec3f); void vec3s_copy(Vec3s, Vec3s); -void func_802B5350(Mat4, Mat4); -void func_802B5398(s32*, s32*, s32); +void *vec3f_set_return(Vec3f, f32, f32, f32); +void mtxf_copy(Mat4, Mat4); +void mtxf_copy_n_element(s32*, s32*, s32); void mtxf_identity(Mat4); -void func_802B5450(Mat4, Mat4, Vec3f); +void add_translate_mat4_vec3f(Mat4, Mat4, Vec3f); +void add_translate_mat4_vec3f_lite(Mat4, Mat4, Vec3f); void mtxf_translate(Mat4, Vec3f); void func_802B5564(Mat4, u16*, f32, f32, f32, f32, f32); -void func_802B5794(Mat4, Vec3f, Vec3f); -void func_802B59DC(Mat4, s16); -void func_802B5A44(Mat4, s16); -void func_802B5AAC(Mat4, s16); +void mtxf_rotate_x(Mat4, s16); +void mtxf_rotate_y(Mat4, s16); +void mtxf_s16_rotate_z(Mat4, s16); void func_802B5CAC(s16, s16, Vec3f); void func_802B5D30(s16, s16, s32); void func_802B5D64(uintptr_t, s16, s16, s32); -void func_802B5F00(Mat4, f32); +void mtxf_scale(Mat4, f32); void func_802B5F74(Mat4, Vec3f, Vec3s); -void func_802B63B8(Vec3f, Mat3); -void func_802B6434(Vec3f, Mat4); +void mtxf_translate_vec3f_mat3(Vec3f, Mat3); +void mtxf_translate_vec3f_mat4(Vec3f, Mat4); void func_802B64C4(Vec3f, s16); void func_802B6540(Mat3, f32, f32, f32, s16); void func_802B6A84(Mat3, s16, f32, f32, f32); void func_802B6BC0(Mat4, s16, f32, f32, f32); void func_802B6D58(Mat4, Vec3f, Vec3f); -void func_802B71CC(Mat4, Mat4, Mat4); +void mtxf_multiplication(Mat4, Mat4, Mat4); void mtxf_to_mtx(Mtx*, Mat4); u16 atan2_lookup(f32, f32); u16 atan2s(f32, f32); diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c index 32d50f904..6e7079a6a 100644 --- a/src/racing/skybox_and_splitscreen.c +++ b/src/racing/skybox_and_splitscreen.c @@ -465,11 +465,11 @@ void func_802A4A0C(Vtx *vtx, struct UnkStruct_800DC5EC *arg1, UNUSED s32 arg2, U sp5C[2] = 30000.0f; func_802B5564(matrix1, &sp128, camera->unk_B4, D_80150148, D_80150150, D_8015014C, 1.0f); func_802B5794(matrix2, camera->pos, camera->lookAt); - func_802B71CC(matrix3, matrix1, matrix2); + mtxf_multiplication(matrix3, matrix1, matrix2); sp58 = ((matrix3[0][3] * sp5C[0]) + (matrix3[1][3] * sp5C[1]) + (matrix3[2][3] * sp5C[2])) + matrix3[3][3]; - func_802B6434(sp5C, matrix3); + mtxf_translate_vec3f_mat4(sp5C, matrix3); temp_f0 = (1.0 / sp58);