Savegame netsync for mobj->floorrover and ceilingrrover

This commit is contained in:
mazmazz 2018-09-09 23:48:14 -04:00
parent f33f9dd284
commit dd35871699

View file

@ -972,11 +972,13 @@ typedef enum
MD2_EXTVAL1 = 1<<5,
MD2_EXTVAL2 = 1<<6,
MD2_HNEXT = 1<<7,
#ifdef ESLOPE
MD2_HPREV = 1<<8,
MD2_SLOPE = 1<<9
MD2_FLOORROVER = 1<<9,
#ifdef ESLOPE
MD2_CEILINGROVER = 1<<10,
MD2_SLOPE = 1<<11
#else
MD2_HPREV = 1<<8
MD2_CEILINGROVER = 1<<10
#endif
} mobj_diff2_t;
@ -1170,6 +1172,10 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
diff2 |= MD2_HNEXT;
if (mobj->hprev)
diff2 |= MD2_HPREV;
if (mobj->floorrover)
diff2 |= MD2_FLOORROVER;
if (mobj->ceilingrover)
diff2 |= MD2_CEILINGROVER;
#ifdef ESLOPE
if (mobj->standingslope)
diff2 |= MD2_SLOPE;
@ -1193,12 +1199,45 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
WRITEFIXED(save_p, mobj->floorz);
WRITEFIXED(save_p, mobj->ceilingz);
// \todo netsync for floorrover
if (diff & MD2_FLOORROVER)
{
ffloor_t *rover;
size_t i = 0;
INT32 roverindex = -1;
// WRITEUINT32(save_p, (UINT32)mobj->floor_sectornum);
// WRITEUINT32(save_p, (UINT32)mobj->floor_rovernum);
// WRITEUINT32(save_p, (UINT32)mobj->ceiling_sectornum);
// WRITEUINT32(save_p, (UINT32)mobj->ceiling_rovernum);
for (rover = mobj->floorrover->target->ffloors; rover; rover = rover->next)
{
if (rover == mobj->floorrover)
{
roverindex = i;
break;
}
i++;
}
WRITEUINT32(save_p, (UINT32)(mobj->floorrover->target - sectors));
WRITEUINT32(save_p, (UINT32)roverindex);
}
if (diff & MD2_CEILINGROVER)
{
ffloor_t *rover;
size_t i = 0;
INT32 roverindex = -1;
for (rover = mobj->ceilingrover->target->ffloors; rover; rover = rover->next)
{
if (rover == mobj->ceilingrover)
{
roverindex = i;
break;
}
i++;
}
WRITEUINT32(save_p, mobj->ceilingrover->target - sectors);
WRITEUINT32(save_p, roverindex);
}
if (diff & MD_SPAWNPOINT)
{
@ -1996,7 +2035,7 @@ static void LoadMobjThinker(actionf_p1 thinker)
UINT16 diff2;
INT32 i;
fixed_t z, floorz, ceilingz;
//size_t floor_sectornum, floor_rovernum, ceiling_sectornum, ceiling_rovernum;
ffloor_t *floorrover = NULL, *ceilingrover = NULL;
diff = READUINT32(save_p);
if (diff & MD_MORE)
@ -2010,25 +2049,37 @@ static void LoadMobjThinker(actionf_p1 thinker)
floorz = READFIXED(save_p);
ceilingz = READFIXED(save_p);
// \todo netsync for floorrover
#if 0
// Find FOF referenced by floorz
if (old_sectornum)
if (diff2 & MD2_FLOORROVER)
{
size_t floor_sectornum = (size_t)READUINT32(save_p);
size_t floor_rovernum = (size_t)READUINT32(save_p);
ffloor_t *rover = NULL;
size_t rovernum = 0;
for (rover = sectors[old_sectornum].ffloors; rover; rover = rover->next)
for (rover = sectors[floor_sectornum].ffloors; rover; rover = rover->next)
{
if (rovernum == old_rovernum)
if (rovernum == floor_rovernum)
break;
rovernum++;
}
floorrover = rover;
}
#endif
// floor_sectornum = (size_t)READUINT32(save_p);
// floor_rovernum = (size_t)READUINT32(save_p);
// ceiling_sectornum = (size_t)READUINT32(save_p);
// ceiling_rovernum = (size_t)READUINT32(save_p);
if (diff2 & MD2_CEILINGROVER)
{
size_t ceiling_sectornum = (size_t)READUINT32(save_p);
size_t ceiling_rovernum = (size_t)READUINT32(save_p);
ffloor_t *rover = NULL;
size_t rovernum = 0;
for (rover = sectors[ceiling_sectornum].ffloors; rover; rover = rover->next)
{
if (rovernum == ceiling_rovernum)
break;
rovernum++;
}
ceilingrover = rover;
}
if (diff & MD_SPAWNPOINT)
{
@ -2054,13 +2105,8 @@ static void LoadMobjThinker(actionf_p1 thinker)
mobj->z = z;
mobj->floorz = floorz;
mobj->ceilingz = ceilingz;
// \todo netsync for floorrover
// mobj->floor_sectornum = floor_sectornum;
// mobj->floor_rovernum = floor_rovernum;
// mobj->ceiling_sectornum = ceiling_sectornum;
// mobj->ceiling_rovernum = ceiling_rovernum;
mobj->floorrover = floorrover;
mobj->ceilingrover = ceilingrover;
if (diff & MD_TYPE)
mobj->type = READUINT32(save_p);