Attempt to fix math weirdness on Windows

This commit is contained in:
KiritoDv 2024-04-03 09:57:24 -06:00
parent ee01989243
commit defb215e78
8 changed files with 36 additions and 28 deletions

View file

@ -19,6 +19,7 @@
#include "i4.h"
#include "i5.h"
#include "i6.h"
#include "libc/math.h"
#include "assets/ast_common.h"
#include "gfx_dimensions.h"
#include <libultraship.h>

View file

@ -34,4 +34,7 @@
#define __lnearbyintf lnearbyintf
#define __lnearbyint lnearbyint
extern f32 __sinf(f32);
extern f32 __cosf(f32);
#endif

View file

@ -5,9 +5,6 @@
#include "libc/math.h"
#include <math.h>
#define __sinf sinf
#define __cosf cosf
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240

View file

@ -2,6 +2,7 @@
#define SF64_MATH_H
#include <libultraship.h>
#include "libc/math.h"
#include <math.h>
typedef struct {
@ -96,9 +97,6 @@ f32 Math_FAtan2F(f32, f32);
f32 Math_FAsinF(f32);
f32 Math_FAcosF(f32);
#define __sinf sinf
#define __cosf cosf
f32 Math_FloorF(f32);
f32 Math_CeilF(f32);
f64 Math_Fabs(f64);

View file

@ -86,7 +86,7 @@ void Texture_Mottle(u16* dst, u16* src, u8 mode) {
switch (mode) {
case 2:
for (var_s3 = 0; var_s3 < 32 * 32; var_s3 += 32) {
temp_ft3 = 3.0f * sinf((s32) (((var_s3 / 32) + (gGameFrameCount / 4)) % 32U) * (2 * M_PI / 32));
temp_ft3 = 3.0f * __sinf((s32) (((var_s3 / 32) + (gGameFrameCount / 4)) % 32U) * (2 * M_PI / 32));
for (var_v1 = 0; var_v1 < 32; var_v1++) {
dst[var_s3 + (temp_ft3 + var_v1) % 32U] = src[var_s3 + var_v1];
}
@ -94,7 +94,7 @@ void Texture_Mottle(u16* dst, u16* src, u8 mode) {
break;
case 3:
for (var_s3 = 0; var_s3 < 22 * 64; var_s3 += 64) {
temp_ft3 = sinf((s32) (((var_s3 / 64) + (gGameFrameCount / 4)) % 32U) * (2 * M_PI / 8));
temp_ft3 = __sinf((s32) (((var_s3 / 64) + (gGameFrameCount / 4)) % 32U) * (2 * M_PI / 8));
for (var_v1 = 0; var_v1 < 64; var_v1++) {
dst[var_s3 + (temp_ft3 + var_v1) % 64U] = src[var_s3 + var_v1];
}
@ -102,7 +102,7 @@ void Texture_Mottle(u16* dst, u16* src, u8 mode) {
break;
case 1:
for (var_s3 = 0; var_s3 < 16 * 16; var_s3 += 16) {
temp_ft3 = 2.0f * sinf((s32) (((var_s3 / 16) + (gGameFrameCount / 2)) % 16U) * (2 * M_PI / 16));
temp_ft3 = 2.0f * __sinf((s32) (((var_s3 / 16) + (gGameFrameCount / 2)) % 16U) * (2 * M_PI / 16));
for (var_v1 = 0; var_v1 < 16; var_v1++) {
dst[var_s3 + (temp_ft3 + var_v1) % 16U] = src[var_s3 + var_v1];
}
@ -110,7 +110,7 @@ void Texture_Mottle(u16* dst, u16* src, u8 mode) {
break;
case 0:
for (var_s3 = 0; var_s3 < 32 * 32; var_s3 += 32) {
temp_ft3 = 2.0f * sinf((s32) (((var_s3 / 32) + (gGameFrameCount / 2)) % 32U) * (2 * M_PI / 32));
temp_ft3 = 2.0f * __sinf((s32) (((var_s3 / 32) + (gGameFrameCount / 2)) % 32U) * (2 * M_PI / 32));
for (var_v1 = 0; var_v1 < 32; var_v1++) {
dst[var_s3 + (temp_ft3 + var_v1) % 32U] = src[var_s3 + var_v1];
}
@ -120,7 +120,7 @@ void Texture_Mottle(u16* dst, u16* src, u8 mode) {
var_s0_2 = (u8*) dst;
var_s4_2 = (u8*) src;
for (var_s3 = 0; var_s3 < 64 * 64; var_s3 += 64) {
temp_ft3 = 4.0f * sinf((s32) (((var_s3 / 64) + (gGameFrameCount / 4)) % 32U) * (2 * M_PI / 32));
temp_ft3 = 4.0f * __sinf((s32) (((var_s3 / 64) + (gGameFrameCount / 4)) % 32U) * (2 * M_PI / 32));
for (var_v1 = 0; var_v1 < 64; var_v1++) {
var_s0_2[var_s3 + (temp_ft3 + var_v1) % 64U] = var_s4_2[var_s3 + var_v1];
}

View file

@ -1,5 +1,6 @@
#include <libultraship.h>
#include <math.h>
#include "libc/math.h"
void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, float aspect, float near, float far,
float scale) {
@ -8,7 +9,7 @@ void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, float aspect, fl
int col;
guMtxIdentF(mf);
fovy *= GU_PI / 180.0;
yscale = cosf(fovy / 2) / sinf(fovy / 2);
yscale = __cosf(fovy / 2) / __sinf(fovy / 2);
mf[0][0] = yscale / aspect;
mf[1][1] = yscale;
mf[2][2] = (near + far) / (near - far);

View file

@ -121,6 +121,14 @@ extern "C" int GameEngine_OTRSigCheck(const char* data) {
return strncmp(data, sOtrSignature, strlen(sOtrSignature)) == 0;
}
extern "C" float __cosf(float angle) {
return std::cosf(angle);
}
extern "C" float __sinf(float angle) {
return std::sinf(angle);
}
extern "C" float SIN_DEG(float angle) {
return SDL_sinf(M_DTOR * angle);
}

View file

@ -323,8 +323,8 @@ void Matrix_RotateX(Matrix* mtx, f32 x, u8 mode) {
if (x != 0) {
cmf = mtx->m;
sin = sinf(x);
cos = cosf(x);
sin = __sinf(x);
cos = __cosf(x);
tempY = cmf->xy;
tempZ = cmf->xz;
@ -350,8 +350,8 @@ void Matrix_RotateX(Matrix* mtx, f32 x, u8 mode) {
cmf = mtx->m;
if (x != 0) {
sin = sinf(x);
cos = cosf(x);
sin = __sinf(x);
cos = __cosf(x);
} else {
sin = zero;
cos = one;
@ -390,8 +390,8 @@ void Matrix_RotateY(Matrix* mtx, f32 y, u8 mode) {
if (y != 0.0f) {
cmf = mtx->m;
sin = sinf(y);
cos = cosf(y);
sin = __sinf(y);
cos = __cosf(y);
tempX = cmf->xx;
tempZ = cmf->xz;
@ -417,8 +417,8 @@ void Matrix_RotateY(Matrix* mtx, f32 y, u8 mode) {
cmf = mtx->m;
if (y != 0.0f) {
sin = sinf(y);
cos = cosf(y);
sin = __sinf(y);
cos = __cosf(y);
} else {
cos = one;
sin = zero;
@ -455,8 +455,8 @@ void Matrix_RotateZ(Matrix* mtx, f32 z, u8 mode) {
if (z != 0) {
cmf = mtx->m;
sin = sinf(z);
cos = cosf(z);
sin = __sinf(z);
cos = __cosf(z);
tempX = cmf->xx;
tempY = cmf->xy;
@ -482,8 +482,8 @@ void Matrix_RotateZ(Matrix* mtx, f32 z, u8 mode) {
cmf = mtx->m;
if (z != 0) {
sin = sinf(z);
cos = cosf(z);
sin = __sinf(z);
cos = __cosf(z);
} else {
sin = 0.0f;
cos = 1.0f;
@ -524,8 +524,8 @@ void Matrix_RotateAxis(Matrix* mtx, f32 angle, f32 x, f32 y, f32 z, u8 mode) {
if (angle != 0) {
cmf = mtx->m;
sin = sinf(angle);
cos = cosf(angle);
sin = __sinf(angle);
cos = __cosf(angle);
temp1 = cmf->xx;
temp2 = cmf->xy;
@ -555,8 +555,8 @@ void Matrix_RotateAxis(Matrix* mtx, f32 angle, f32 x, f32 y, f32 z, u8 mode) {
cmf = mtx->m;
if (angle != 0) {
sin = sinf(angle);
cos = cosf(angle);
sin = __sinf(angle);
cos = __cosf(angle);
versin = 1.0f - cos;
cmf->xx = x * x * versin + cos;