From 7adca2ef1990e07a130b4d438ba386a784289cc8 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 7 Sep 2022 13:05:40 +0100 Subject: [PATCH 1/2] Fix papersprites being rotated incorrectly in Software when viewing them on the flipped side Rewritten version of STJr/SRB2!1770 --- src/r_things.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/r_things.c b/src/r_things.c index cc5694dff..97e164a5b 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1690,8 +1690,14 @@ static void R_ProjectSprite(mobj_t *thing) if (spriterotangle && !(splat && !(thing->renderflags & RF_NOSPLATROLLANGLE))) { - rollangle = R_GetRollAngle(vflip - ? InvAngle(spriterotangle) : spriterotangle); + if ((papersprite && ang >= ANGLE_180) != vflip) + { + rollangle = R_GetRollAngle(InvAngle(spriterotangle)); + } + else + { + rollangle = R_GetRollAngle(spriterotangle); + } rotsprite = Patch_GetRotatedSprite(sprframe, (thing->frame & FF_FRAMEMASK), rot, flip, false, sprinfo, rollangle); if (rotsprite != NULL) From 4d52ca53e709d08660840ef47affc9324eccaf1f Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 7 Sep 2022 13:24:31 +0100 Subject: [PATCH 2/2] Make P_SpawnGhostMobj ghosts properly copy spritestuff2 variables - spritexscale - spriteyscale - spritexoffset - spriteyoffset - renderflags --- src/p_user.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 215f67ffd..c95decdd9 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1197,7 +1197,7 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->sprite2 = mobj->sprite2; ghost->frame = mobj->frame; ghost->tics = -1; - ghost->renderflags |= tr_trans50 << RF_TRANSSHIFT; + ghost->renderflags = (mobj->renderflags & ~RF_TRANSMASK)|RF_TRANS50; ghost->fuse = ghost->info->damage; ghost->skin = mobj->skin; ghost->standingslope = mobj->standingslope; @@ -1207,6 +1207,11 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->sprzoff = mobj->sprzoff; ghost->rollangle = mobj->rollangle; + ghost->spritexscale = mobj->spritexscale; + ghost->spriteyscale = mobj->spriteyscale; + ghost->spritexoffset = mobj->spritexoffset; + ghost->spriteyoffset = mobj->spriteyoffset; + if (mobj->flags2 & MF2_OBJECTFLIP) ghost->flags |= MF2_OBJECTFLIP;