From 8cde0e45e2948f9a66034a21f7037ee197d874b0 Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Mon, 7 Apr 2025 12:34:19 +0200 Subject: [PATCH] tr1/output: fix sprite UVs Resolves #2672. --- docs/tr1/CHANGELOG.md | 1 + src/tr1/game/output/textures.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/tr1/CHANGELOG.md b/docs/tr1/CHANGELOG.md index 642961ff3..8fd136a6a 100644 --- a/docs/tr1/CHANGELOG.md +++ b/docs/tr1/CHANGELOG.md @@ -9,6 +9,7 @@ - fixed sprites rendering black if no shade value is assigned in the level (#2701, regression from 4.9) - fixed being stuck on the Restart Level page if using save crystals and F5 is pressed when no saves are present (#2700, regression from 4.8.2) - fixed being stuck on the Exit to Title page if using save crystals and a new save is made when there were previously none, and then F5 is pressed (#2700, regression from 4.9) +- fixed the sprite UVs to restore the right and bottom edge pixels (regression from 4.8) - improved rendering performance - removed the pretty pixels options (it's now always enabled, #2258) diff --git a/src/tr1/game/output/textures.c b/src/tr1/game/output/textures.c index 4bfc97e3f..2f4782aad 100644 --- a/src/tr1/game/output/textures.c +++ b/src/tr1/game/output/textures.c @@ -201,8 +201,8 @@ static void M_FillAtlasSpriteSize(const int32_t i) const float adj = 0.1 / 256.0f; const float u0 = (sprite->offset & 0xFF) / 256.0f + adj; const float v0 = (sprite->offset >> 8) / 256.0f + adj; - const float u1 = u0 + (sprite->width >> 8) / 256.0f - 2 * adj; - const float v1 = v0 + (sprite->height >> 8) / 256.0f - 2 * adj; + const float u1 = u0 + sprite->width / 65536.0f - 2 * adj; + const float v1 = v0 + sprite->height / 65536.0f - 2 * adj; size->x0 = u0; size->y0 = v0; size->x1 = u1; @@ -226,8 +226,8 @@ static void M_FillSpriteUVW(const int32_t i) const float adj = 0.1 / 256.0f; const float u0 = (sprite->offset & 0xFF) / 256.0f + adj; const float v0 = (sprite->offset >> 8) / 256.0f + adj; - const float u1 = u0 + (sprite->width >> 8) / 256.0f - 2 * adj; - const float v1 = v0 + (sprite->height >> 8) / 256.0f - 2 * adj; + const float u1 = u0 + sprite->width / 65536.0f - 2 * adj; + const float v1 = v0 + sprite->height / 65536.0f - 2 * adj; M_UVW *const corners = m_Priv.uvws.data_sprites[i].corners; // clang-format off corners[0].u = u0; corners[0].v = v0; corners[0].w = sprite->tex_page;