mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-12 19:20:38 +00:00
Polymer: fix centering of y-flipped wall sprites. (Case D in test_tileoffsets.)
git-svn-id: https://svn.eduke32.com/eduke32@3779 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
946d207c56
commit
6e364b1f4b
1 changed files with 11 additions and 5 deletions
|
@ -3546,7 +3546,8 @@ static inline void polymer_scansprites(int16_t sectnum, spritetype* localtsprit
|
||||||
|
|
||||||
void polymer_updatesprite(int32_t snum)
|
void polymer_updatesprite(int32_t snum)
|
||||||
{
|
{
|
||||||
int32_t curpicnum, xsize, ysize, tilexoff, tileyoff, xoff, yoff, i, j;
|
int32_t curpicnum, xsize, ysize, i, j;
|
||||||
|
int32_t tilexoff, tileyoff, xoff, yoff, centeryoff=0;
|
||||||
spritetype *tspr = tspriteptr[snum];
|
spritetype *tspr = tspriteptr[snum];
|
||||||
float xratio, yratio, ang, f;
|
float xratio, yratio, ang, f;
|
||||||
float spos[3];
|
float spos[3];
|
||||||
|
@ -3556,6 +3557,7 @@ void polymer_updatesprite(int32_t snum)
|
||||||
|
|
||||||
const uint32_t cs = tspr->cstat;
|
const uint32_t cs = tspr->cstat;
|
||||||
const uint32_t alignmask = (cs & SPR_ALIGN_MASK);
|
const uint32_t alignmask = (cs & SPR_ALIGN_MASK);
|
||||||
|
const uint8_t flooraligned = (alignmask==SPR_FLOOR);
|
||||||
|
|
||||||
if (pr_verbosity >= 3) OSD_Printf("PR : Updating sprite %i...\n", snum);
|
if (pr_verbosity >= 3) OSD_Printf("PR : Updating sprite %i...\n", snum);
|
||||||
|
|
||||||
|
@ -3648,8 +3650,13 @@ void polymer_updatesprite(int32_t snum)
|
||||||
xoff = (int32_t)(tilexoff * xratio);
|
xoff = (int32_t)(tilexoff * xratio);
|
||||||
yoff = (int32_t)(tileyoff * yratio);
|
yoff = (int32_t)(tileyoff * yratio);
|
||||||
|
|
||||||
if ((tspr->cstat & 128) && (((tspr->cstat>>4) & 3) != 2))
|
if ((tspr->cstat & 128) && !flooraligned)
|
||||||
|
{
|
||||||
|
if (alignmask == 0)
|
||||||
yoff -= ysize / 2;
|
yoff -= ysize / 2;
|
||||||
|
else
|
||||||
|
centeryoff = ysize / 2;
|
||||||
|
}
|
||||||
|
|
||||||
spos[0] = (float)tspr->y;
|
spos[0] = (float)tspr->y;
|
||||||
spos[1] = -(float)(tspr->z) / 16.0f;
|
spos[1] = -(float)(tspr->z) / 16.0f;
|
||||||
|
@ -3664,7 +3671,6 @@ void polymer_updatesprite(int32_t snum)
|
||||||
{
|
{
|
||||||
const uint8_t xflip = !!(cs & SPR_XFLIP);
|
const uint8_t xflip = !!(cs & SPR_XFLIP);
|
||||||
const uint8_t yflip = !!(cs & SPR_YFLIP);
|
const uint8_t yflip = !!(cs & SPR_YFLIP);
|
||||||
const uint8_t flooraligned = (alignmask==SPR_FLOOR);
|
|
||||||
|
|
||||||
// Initially set flipu and flipv.
|
// Initially set flipu and flipv.
|
||||||
flipu = (xflip ^ flooraligned);
|
flipu = (xflip ^ flooraligned);
|
||||||
|
@ -3700,7 +3706,7 @@ void polymer_updatesprite(int32_t snum)
|
||||||
|
|
||||||
bglTranslatef(spos[0], spos[1], spos[2]);
|
bglTranslatef(spos[0], spos[1], spos[2]);
|
||||||
bglRotatef(-ang, 0.0f, 1.0f, 0.0f);
|
bglRotatef(-ang, 0.0f, 1.0f, 0.0f);
|
||||||
bglTranslatef((float)(-xoff), (float)(yoff), 0.0f);
|
bglTranslatef((float)(-xoff), (float)(yoff-centeryoff), 0.0f);
|
||||||
bglScalef((float)(xsize), (float)(ysize), 1.0f);
|
bglScalef((float)(xsize), (float)(ysize), 1.0f);
|
||||||
break;
|
break;
|
||||||
case SPR_FLOOR:
|
case SPR_FLOOR:
|
||||||
|
|
Loading…
Reference in a new issue