Merge branch 'rotsprite_toast' into 'master'

Fix incorrect offsets of cached rotsprites

See merge request STJr/SRB2Internal!468
This commit is contained in:
toaster 2019-11-14 18:49:12 -05:00
commit d0fac1988a
1 changed files with 11 additions and 7 deletions

View File

@ -1118,7 +1118,7 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
size_t size, size2; size_t size, size2;
INT32 bflip = (flip != 0x00); INT32 bflip = (flip != 0x00);
#define SPRITE_XCENTER (patch->leftoffset) #define SPRITE_XCENTER (leftoffset)
#define SPRITE_YCENTER (height / 2) #define SPRITE_YCENTER (height / 2)
#define ROTSPRITE_XCENTER (newwidth / 2) #define ROTSPRITE_XCENTER (newwidth / 2)
#define ROTSPRITE_YCENTER (newheight / 2) #define ROTSPRITE_YCENTER (newheight / 2)
@ -1127,7 +1127,7 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
{ {
INT32 dx, dy; INT32 dx, dy;
INT32 px, py; INT32 px, py;
INT32 width, height; INT32 width, height, leftoffset;
fixed_t ca, sa; fixed_t ca, sa;
lumpnum_t lump = sprframe->lumppat[rot]; lumpnum_t lump = sprframe->lumppat[rot];
@ -1140,6 +1140,7 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
patch = (patch_t *)W_CacheLumpNum(lump, PU_STATIC); patch = (patch_t *)W_CacheLumpNum(lump, PU_STATIC);
width = patch->width; width = patch->width;
height = patch->height; height = patch->height;
leftoffset = patch->leftoffset;
// rotation pivot // rotation pivot
px = SPRITE_XCENTER; px = SPRITE_XCENTER;
@ -1153,8 +1154,11 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
px = sprinfo->pivot[frame].x; px = sprinfo->pivot[frame].x;
py = sprinfo->pivot[frame].y; py = sprinfo->pivot[frame].y;
} }
if (flip) if (bflip)
{
px = width - px; px = width - px;
leftoffset = width - leftoffset;
}
// Draw the sprite to a temporary buffer. // Draw the sprite to a temporary buffer.
size = (width*height); size = (width*height);
@ -1261,10 +1265,10 @@ void R_CacheRotSprite(spritenum_t sprnum, UINT8 frame, spriteinfo_t *sprinfo, sp
// make patch // make patch
newpatch = R_FlatToPatch_16bpp(rawdst, newwidth, newheight, &size); newpatch = R_FlatToPatch_16bpp(rawdst, newwidth, newheight, &size);
newpatch->leftoffset = (newpatch->width / 2) - ((SPRITE_XCENTER - patch->leftoffset) * (bflip ? -1 : 1)); {
newpatch->topoffset = (newpatch->height / 2) - (SPRITE_YCENTER - patch->topoffset); newpatch->leftoffset = (newpatch->width / 2) + (leftoffset - px);
newpatch->leftoffset += ((width / 2) - px); newpatch->topoffset = (newpatch->height / 2) + (patch->topoffset - py);
newpatch->topoffset += (SPRITE_YCENTER - py); }
//BP: we cannot use special tric in hardware mode because feet in ground caused by z-buffer //BP: we cannot use special tric in hardware mode because feet in ground caused by z-buffer
if (rendermode != render_none) // not for psprite if (rendermode != render_none) // not for psprite