Add baked offset parameters

This commit is contained in:
Chearii 2025-03-12 08:13:53 -04:00 committed by Anonimus
parent a77f95dabc
commit dc99014d2a
5 changed files with 26 additions and 7 deletions

View file

@ -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)
));

View file

@ -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;

View file

@ -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;

View file

@ -54,6 +54,7 @@ vector2_t* R_RotateSpriteOffsetsByPitchRoll(
mobj_t* mobj,
boolean vflip,
boolean hflip,
interpmobjstate_t *interp,
vector2_t* out);
#endif

View file

@ -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