199 lines
5.4 KiB
C
Executable file
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;
|
|
}
|