diff --git a/src/gl/scene/gl_weapon.cpp b/src/gl/scene/gl_weapon.cpp index 23610fb01..78c32cc07 100644 --- a/src/gl/scene/gl_weapon.cpp +++ b/src/gl/scene/gl_weapon.cpp @@ -98,7 +98,7 @@ void GLSceneDrawer::DrawPSprite (player_t * player,DPSprite *psp, float sx, floa // calculate edges of the shape scalex = (320.0f / (240.0f * r_viewwindow.WidescreenRatio)) * vw / 320; - tx = sx - (160 - r.left); + tx = (psp->Flags & PSPF_MIRROR) ? ((160 - r.width) - (sx + r.left)) : (sx - (160 - r.left)); x1 = tx * scalex + vw/2; if (x1 > vw) return; // off the right side x1 += viewwindowx; @@ -108,7 +108,6 @@ void GLSceneDrawer::DrawPSprite (player_t * player,DPSprite *psp, float sx, floa if (x2 < 0) return; // off the left side x2 += viewwindowx; - // killough 12/98: fix psprite positioning problem ftexturemid = 100.f - sy - r.top; @@ -130,7 +129,8 @@ void GLSceneDrawer::DrawPSprite (player_t * player,DPSprite *psp, float sx, floa y1 = viewwindowy + vh / 2 - (ftexturemid * scale); y2 = y1 + (r.height * scale) + 1; - if (!(mirror) != !(psp->Flags & PSPF_FLIP)) + + if (!(mirror) != !(psp->Flags & (PSPF_FLIP))) { fU2 = tex->GetSpriteUL(); fV1 = tex->GetSpriteVT(); @@ -437,7 +437,7 @@ void GLSceneDrawer::DrawPlayerSprites(sector_t * viewsector, bool hudModelStep) if (psp->Flags & PSPF_ADDBOB) { - sx += bobx; + sx += (psp->Flags & PSPF_MIRROR) ? -bobx : bobx; sy += boby; } diff --git a/src/p_pspr.cpp b/src/p_pspr.cpp index 2404b8b9c..45e92a8d0 100644 --- a/src/p_pspr.cpp +++ b/src/p_pspr.cpp @@ -141,6 +141,7 @@ DEFINE_FIELD_BIT(DPSprite, Flags, bAddBob, PSPF_ADDBOB) DEFINE_FIELD_BIT(DPSprite, Flags, bPowDouble, PSPF_POWDOUBLE) DEFINE_FIELD_BIT(DPSprite, Flags, bCVarFast, PSPF_CVARFAST) DEFINE_FIELD_BIT(DPSprite, Flags, bFlip, PSPF_FLIP) +DEFINE_FIELD_BIT(DPSprite, Flags, bMirror, PSPF_MIRROR) //------------------------------------------------------------------------ // diff --git a/src/p_pspr.h b/src/p_pspr.h index 5964ace20..c98918ded 100644 --- a/src/p_pspr.h +++ b/src/p_pspr.h @@ -68,6 +68,7 @@ enum PSPFlags PSPF_FLIP = 1 << 6, PSPF_FORCEALPHA = 1 << 7, PSPF_FORCESTYLE = 1 << 8, + PSPF_MIRROR = 1 << 9, }; class DPSprite : public DObject diff --git a/wadsrc/static/zscript/constants.txt b/wadsrc/static/zscript/constants.txt index b698f966f..b0bf1b65d 100644 --- a/wadsrc/static/zscript/constants.txt +++ b/wadsrc/static/zscript/constants.txt @@ -726,6 +726,7 @@ enum EPSpriteFlags PSPF_FLIP = 1 << 6, PSPF_FORCEALPHA = 1 << 7, PSPF_FORCESTYLE = 1 << 8, + PSPF_MIRROR = 1 << 9, }; // Default psprite layers