marioparty4/src/REL/m447dll/player_col.c
2024-08-07 01:14:29 -07:00

199 lines
5.4 KiB
C
Executable file

#include "REL/m447dll.h"
#include "ext_math.h"
float fn_1_7D94(float* arg0, float* arg1);
void fn_1_7F64(float* arg0, float arg1, float* arg2, float* arg3);
s32 fn_1_89BC(float* arg0, float* arg1);
void fn_1_7B54(Vec* arg0, Vec* arg1, s32 arg2, float arg3) {
float temp_f29;
float var_f30;
float var_f31;
s32 temp_r29;
s32 var_r30;
s32 i;
temp_r29 = arg2 - 1;
arg0->x = 0.0f;
arg0->y = 0.0f;
arg0->z = 0.0f;
arg3 = (arg2 + 1) * arg3 - 1.0f;
for (i = -2; i <= temp_r29 + 2; i++) {
var_r30 = i;
if (i < 0) {
var_r30 = 0;
}
if (i > temp_r29) {
var_r30 = temp_r29;
}
var_f31 = arg3 - i;
if (var_f31 < 0.0f) {
var_f31 = -var_f31;
}
if (var_f31 < 1.0f) {
var_f30 = (3.0f * var_f31 * var_f31 * var_f31 - 6.0f * var_f31 * var_f31 + 4.0f) / 6.0f;
} else if (var_f31 < 2.0f) {
temp_f29 = var_f31 - 2.0f;
var_f30 = -temp_f29 * temp_f29 * temp_f29 / 6.0f;
} else {
var_f30 = 0.0f;
}
arg0->x += var_f30 * arg1[var_r30].x;
arg0->y += var_f30 * arg1[var_r30].y;
arg0->z += var_f30 * arg1[var_r30].z;
}
}
float fn_1_7D94(float* arg0, float* arg1) {
float var_f30;
float var_f31;
float temp_f29;
float var_f28;
s32 var_r31;
var_f30 = arg1[0] - arg0[0];
var_f31 = arg1[1] - arg0[1];
if (var_f30 >= 0.0f) {
if (var_f31 >= 0.0f) {
var_r31 = 0;
} else {
var_r31 = 3;
temp_f29 = var_f30;
var_f30 = -var_f31;
var_f31 = temp_f29;
}
} else {
if (var_f31 >= 0.0f) {
var_r31 = 1;
temp_f29 = var_f30;
var_f30 = var_f31;
var_f31 = -temp_f29;
} else {
var_r31 = 2;
var_f30 = -var_f30;
var_f31 = -var_f31;
}
}
if (var_f31 > var_f30) {
var_f28 = M_PI / 2 - atan2d(var_f30, var_f31);
} else {
var_f28 = atan2d(var_f31, var_f30);
}
return var_f28 + (M_PI / 2) * var_r31;
}
void fn_1_7F64(float* arg0, float arg1, float* arg2, float* arg3) {
float temp_f31;
float temp_f30;
float temp_f29;
float temp_f28;
// 57.29578 = 180 / M_PI (1 rad in degrees)
temp_f31 = cosd(-(57.29578f * arg1));
temp_f30 = sind(-(57.29578f * arg1));
temp_f29 = arg2[0] - arg0[0];
temp_f28 = arg2[1] - arg0[1];
arg3[0] = temp_f29 * temp_f31 + temp_f28 * temp_f30 + arg0[0];
arg3[1] = -temp_f29 * temp_f30 + temp_f28 * temp_f31 + arg0[1];
}
s32 fn_1_80BC(float* arg0, float* arg1, float* arg2) {
float sp40[2];
float sp38[2];
float sp30[2];
float sp2C;
float var_f26;
sp40[0] = 0.0f;
sp40[1] = 0.0f;
sp38[0] = arg0[0] - arg1[0];
sp38[1] = arg0[1] - arg1[1];
sp2C = fn_1_7D94(arg1, &arg1[2]);
fn_1_7F64(sp40, -sp2C, sp38, sp30);
if (ABS(sp30[1]) > arg0[2]) {
return 0;
}
var_f26 = sqrtf(arg0[2] * arg0[2] - sp30[1] * sp30[1]);
sp38[0] = arg0[0] + var_f26;
sp38[1] = arg0[1] - sp30[1];
fn_1_7F64(arg0, sp2C, sp38, arg2);
if (var_f26 == 0.0f) {
return 1;
}
sp38[0] = arg0[0] - var_f26;
sp38[1] = arg0[1] - sp30[1];
fn_1_7F64(arg0, sp2C, sp38, &arg2[2]);
return 2;
}
s32 fn_1_879C(float* arg0, float* arg1, s32 arg2, s32 arg3) {
float spC[2];
float var_f28;
spC[0] = arg0[0] - arg1[0];
spC[1] = arg0[1] - arg1[1];
var_f28 = sqrtf(spC[0] * spC[0] + spC[1] * spC[1]);
if (var_f28 < arg0[2] + arg1[2]) {
if (var_f28 == 0.0f) {
spC[0] = 0.0f;
spC[1] = -1.0f;
} else {
spC[0] /= var_f28;
spC[1] /= var_f28;
if (arg3 != 0) {
arg1[0] -= spC[0];
arg1[1] -= spC[1];
}
}
if (arg2 != 0) {
arg0[0] = arg1[0] + spC[0] * (arg0[2] + arg1[2]);
arg0[1] = arg1[1] + spC[1] * (arg0[2] + arg1[2]);
}
return 1;
}
return 0;
}
s32 fn_1_89BC(float* arg0, float* arg1) {
float temp_f30;
float temp_f29;
float temp_f28;
float temp_f26;
float temp_f27;
float temp_f24;
temp_f26 = arg0[2] * arg0[2] - 2.0f * arg0[0] * arg0[2] + arg0[0] * arg0[0] + arg0[3] * arg0[3] - 2.0f * arg0[1] * arg0[3] + arg0[1] * arg0[1];
temp_f27 = 2.0f * (arg0[0] * arg0[2] - arg0[2] * arg1[0] + arg0[0] * arg0[0] + arg0[1] * arg0[3] - arg0[3] * arg1[1] + arg0[1] * arg0[1]);
temp_f24 = arg0[0] * arg0[0] - 2.0f * arg0[0] * arg1[0] + arg1[0] * arg1[0] + arg0[1] * arg0[1] - 2.0f * arg0[1] * arg1[1] + arg1[1] * arg1[1] - arg1[2] * arg1[2];
if (temp_f26 == 0.0f) {
if (temp_f27 != 0.0f) {
return 1;
} else {
return 0;
}
}
temp_f30 = temp_f27 * temp_f27 - 4.0f * temp_f26 * temp_f24;
if (temp_f30 < 0.0f) {
return 0;
}
temp_f30 = sqrtf(temp_f30);
temp_f29 = (-temp_f27 + temp_f30) / (2.0f * temp_f26);
temp_f28 = (-temp_f27 - temp_f30) / (2.0f * temp_f26);
if (temp_f29 < temp_f28) {
if (temp_f29 >= 0.0f && temp_f29 > 1.0f) {
return 1;
}
if (temp_f28 >= 0.0f && temp_f28 < 1.0f) {
return 1;
}
} else {
if (temp_f28 >= 0.0f && temp_f28 < 1.0f) {
return 1;
}
if (temp_f29 >= 0.0f && temp_f29 < 1.0f) {
return 1;
}
}
return 0;
}