diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 2c55669f6..f2914ba6f 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1806,7 +1806,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) // x offset xx = FIXED_TO_FLOAT(FixedMul(FixedMul( FixedMul(xoffs,spr->mobj->spritexscale), - hflipmul), + hflipmul), FINECOSINE(pitchR >> ANGLETOFINESHIFT) )); xy = FIXED_TO_FLOAT(FixedMul(FixedMul( @@ -1818,7 +1818,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) // y offset yx = FIXED_TO_FLOAT(FixedMul(FixedMul( FixedMul(yoffs,spr->mobj->spritexscale), - hflipmul), + hflipmul), FINECOSINE(rollR >> ANGLETOFINESHIFT) )); diff --git a/src/p_mobj.c b/src/p_mobj.c index 65b80a432..5abe6906a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6752,7 +6752,6 @@ void P_RunOverlays(void) mo->bakezpiv = mo->target->bakezpiv; } - if ((mo->flags & MF_DONTENCOREMAP) != (mo->target->flags & MF_DONTENCOREMAP)) mo->flags ^= MF_DONTENCOREMAP; diff --git a/src/p_saveg.c b/src/p_saveg.c index 260a31635..983b21f28 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -3979,6 +3979,21 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker) mobj->bakexpiv = mobj->bakeypiv = mobj->bakezpiv = 0; } + if (diff3 & MD3_BAKEDOFFSET) + { + mobj->bakexoff = READFIXED(save->p); + mobj->bakeyoff = READFIXED(save->p); + mobj->bakezoff = READFIXED(save->p); + mobj->bakexpiv = READFIXED(save->p); + mobj->bakeypiv = READFIXED(save->p); + mobj->bakezpiv = READFIXED(save->p); + } + else + { + mobj->bakexoff = mobj->bakeyoff = mobj->bakezoff = 0; + mobj->bakexpiv = mobj->bakeypiv = mobj->bakezpiv = 0; + } + // Reset some non-synch values mobj->sloperoll = 0; mobj->slopepitch = 0; diff --git a/src/r_patch.h b/src/r_patch.h index 89f3c27c2..c36374e12 100644 --- a/src/r_patch.h +++ b/src/r_patch.h @@ -54,6 +54,7 @@ vector2_t* R_RotateSpriteOffsetsByPitchRoll( mobj_t* mobj, boolean vflip, boolean hflip, + interpmobjstate_t *interp, vector2_t* out); #endif diff --git a/src/r_things.cpp b/src/r_things.cpp index fcd0f4c7a..cb9967e45 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -857,7 +857,7 @@ boolean R_ThingIsFlashing(mobj_t *thing) boolean R_ThingIsUsingBakedOffsets(mobj_t* thing) { return ((thing->bakexoff) || (thing->bakeyoff) || (thing->bakezoff) || - (thing->bakexpiv) || (thing->bakeypiv) || (thing->bakezpiv)); + (thing->bakexpiv) || (thing->bakeypiv) || (thing->bakezpiv)); } UINT8 *R_GetSpriteTranslation(vissprite_t *vis) @@ -1940,7 +1940,9 @@ static void R_ProjectSprite(mobj_t *thing) if (R_ThingIsUsingBakedOffsets(thing)) { R_RotateSpriteOffsetsByPitchRoll(thing, - vflip, hflip, &visoffs); + vflip, + hflip, + &visoffs); } #endif @@ -1948,7 +1950,8 @@ static void R_ProjectSprite(mobj_t *thing) { spr_offset = interp.spritexoffset; #ifdef ROTSPRITE - spr_topoffset = (interp.spriteyoffset + FixedDiv((visoffs.y * visoffymul), mapobjectscale)); + spr_topoffset = (interp.spriteyoffset + FixedDiv((visoffs.y * visoffymul), + mapobjectscale)); #else spr_topoffset = interp.spriteyoffset; #endif @@ -1963,7 +1966,8 @@ static void R_ProjectSprite(mobj_t *thing) spr_offset += (interp.spritexoffset) * flipoffset; #ifdef ROTSPRITE spr_topoffset += (interp.spriteyoffset + FixedDiv((visoffs.y * visoffymul), - mapobjectscale)) * flipoffset; + mapobjectscale)) + * flipoffset; #else spr_topoffset += interp.spriteyoffset * flipoffset; #endif