From 1f063dd07a9a99c8de4d5776c1a290ca611f4cb0 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Tue, 2 Apr 2024 15:50:11 -0600 Subject: [PATCH] Fixted texture scroll and mottle --- libultraship | 2 +- src/engine/fox_std_lib.c | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/libultraship b/libultraship index 5445aca7..e57d24b0 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 5445aca76255d8aa93a2dec4cfa99f5788fbdb92 +Subproject commit e57d24b00ae5964c8d956c961a48e30f24a1d3b0 diff --git a/src/engine/fox_std_lib.c b/src/engine/fox_std_lib.c index 15d5ff62..55f782b7 100644 --- a/src/engine/fox_std_lib.c +++ b/src/engine/fox_std_lib.c @@ -36,7 +36,7 @@ void Texture_Scroll(u16* texture, s32 width, s32 height, u8 mode) { for (var_a0 = 0; var_a0 < width; var_a0++) { temp_a3 = temp_t0[var_a0]; for (var_t4 = 1; var_t4 < height; var_t4++) { - temp_t0[(var_t4 - 1) * width + var_a0] = temp_t0[(var_t4) *width + var_a0]; + temp_t0[(var_t4 - 1) * width + var_a0] = temp_t0[(var_t4) * width + var_a0]; } temp_t0[(height - 1) * width + var_a0] = temp_a3; } @@ -45,7 +45,7 @@ void Texture_Scroll(u16* texture, s32 width, s32 height, u8 mode) { for (var_a0 = 0; var_a0 < width; var_a0++) { temp_a3 = temp_t0[(height - 1) * width + var_a0]; for (var_t4 = height - 2; var_t4 >= 0; var_t4--) { - temp_t0[(var_t4 + 1) * width + var_a0] = temp_t0[(var_t4) *width + var_a0]; + temp_t0[(var_t4 + 1) * width + var_a0] = temp_t0[(var_t4) * width + var_a0]; } temp_t0[var_a0] = temp_a3; } @@ -69,6 +69,9 @@ void Texture_Scroll(u16* texture, s32 width, s32 height, u8 mode) { } break; } + + // LTodo: we should only invalidate one texture + gSPInvalidateTexCache(gMasterDisp++, NULL); } void Texture_Mottle(u16* dst, u16* src, u8 mode) { @@ -83,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]; } @@ -91,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]; } @@ -99,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]; } @@ -107,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]; } @@ -117,12 +120,15 @@ 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]; } } } + + // LTodo: we should only invalidate one texture + gSPInvalidateTexCache(gMasterDisp++, NULL); } s32 Animation_GetLimbIndex(Limb* limb, Limb** skeleton) {