Fix archived mobjs having no default blend mode and sprite scales

This commit is contained in:
Jaime Ita Passos 2020-12-06 17:29:20 -03:00
parent d004515d6a
commit 24ba782144

View file

@ -1506,7 +1506,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
{ {
const mobj_t *mobj = (const mobj_t *)th; const mobj_t *mobj = (const mobj_t *)th;
UINT32 diff; UINT32 diff;
UINT16 diff2; UINT32 diff2;
// Ignore stationary hoops - these will be respawned from mapthings. // Ignore stationary hoops - these will be respawned from mapthings.
if (mobj->type == MT_HOOP) if (mobj->type == MT_HOOP)
@ -1638,7 +1638,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
diff2 |= MD2_SHADOWSCALE; diff2 |= MD2_SHADOWSCALE;
if (mobj->renderflags) if (mobj->renderflags)
diff2 |= MD2_RENDERFLAGS; diff2 |= MD2_RENDERFLAGS;
if (mobj->renderflags) if (mobj->blendmode != AST_TRANSLUCENT)
diff2 |= MD2_BLENDMODE; diff2 |= MD2_BLENDMODE;
if (mobj->spritexscale != FRACUNIT) if (mobj->spritexscale != FRACUNIT)
diff2 |= MD2_SPRITEXSCALE; diff2 |= MD2_SPRITEXSCALE;
@ -1646,6 +1646,8 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
diff2 |= MD2_SPRITEYSCALE; diff2 |= MD2_SPRITEYSCALE;
if (mobj->spritexoffset) if (mobj->spritexoffset)
diff2 |= MD2_SPRITEXOFFSET; diff2 |= MD2_SPRITEXOFFSET;
if (mobj->spriteyoffset)
diff2 |= MD2_SPRITEYOFFSET;
if (mobj->floorspriteslope) if (mobj->floorspriteslope)
{ {
pslope_t *slope = mobj->floorspriteslope; pslope_t *slope = mobj->floorspriteslope;
@ -1667,7 +1669,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
WRITEUINT8(save_p, type); WRITEUINT8(save_p, type);
WRITEUINT32(save_p, diff); WRITEUINT32(save_p, diff);
if (diff & MD_MORE) if (diff & MD_MORE)
WRITEUINT16(save_p, diff2); WRITEUINT32(save_p, diff2);
// save pointer, at load time we will search this pointer to reinitilize pointers // save pointer, at load time we will search this pointer to reinitilize pointers
WRITEUINT32(save_p, (size_t)mobj); WRITEUINT32(save_p, (size_t)mobj);
@ -2615,14 +2617,14 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
thinker_t *next; thinker_t *next;
mobj_t *mobj; mobj_t *mobj;
UINT32 diff; UINT32 diff;
UINT16 diff2; UINT32 diff2;
INT32 i; INT32 i;
fixed_t z, floorz, ceilingz; fixed_t z, floorz, ceilingz;
ffloor_t *floorrover = NULL, *ceilingrover = NULL; ffloor_t *floorrover = NULL, *ceilingrover = NULL;
diff = READUINT32(save_p); diff = READUINT32(save_p);
if (diff & MD_MORE) if (diff & MD_MORE)
diff2 = READUINT16(save_p); diff2 = READUINT32(save_p);
else else
diff2 = 0; diff2 = 0;
@ -2843,10 +2845,16 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker)
mobj->renderflags = READUINT32(save_p); mobj->renderflags = READUINT32(save_p);
if (diff2 & MD2_BLENDMODE) if (diff2 & MD2_BLENDMODE)
mobj->blendmode = READINT32(save_p); mobj->blendmode = READINT32(save_p);
else
mobj->blendmode = AST_TRANSLUCENT;
if (diff2 & MD2_SPRITEXSCALE) if (diff2 & MD2_SPRITEXSCALE)
mobj->spritexscale = READFIXED(save_p); mobj->spritexscale = READFIXED(save_p);
else
mobj->spritexscale = FRACUNIT;
if (diff2 & MD2_SPRITEYSCALE) if (diff2 & MD2_SPRITEYSCALE)
mobj->spriteyscale = READFIXED(save_p); mobj->spriteyscale = READFIXED(save_p);
else
mobj->spriteyscale = FRACUNIT;
if (diff2 & MD2_SPRITEXOFFSET) if (diff2 & MD2_SPRITEXOFFSET)
mobj->spritexoffset = READFIXED(save_p); mobj->spritexoffset = READFIXED(save_p);
if (diff2 & MD2_SPRITEYOFFSET) if (diff2 & MD2_SPRITEYOFFSET)