mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 07:11:54 +00:00
Prediction was rebuilding too much thinglist data
- Stopped player prediction from rebuilding more sector list data then the player originally had.
This commit is contained in:
parent
67c6690689
commit
2838c4b25b
2 changed files with 39 additions and 19 deletions
|
@ -500,6 +500,7 @@ void P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance,
|
||||||
|
|
||||||
void P_DelSector_List();
|
void P_DelSector_List();
|
||||||
void P_DelSeclist(msecnode_t *); // phares 3/16/98
|
void P_DelSeclist(msecnode_t *); // phares 3/16/98
|
||||||
|
msecnode_t* P_DelSecnode(msecnode_t *);
|
||||||
void P_CreateSecNodeList(AActor*,fixed_t,fixed_t); // phares 3/14/98
|
void P_CreateSecNodeList(AActor*,fixed_t,fixed_t); // phares 3/14/98
|
||||||
int P_GetMoveFactor(const AActor *mo, int *frictionp); // phares 3/6/98
|
int P_GetMoveFactor(const AActor *mo, int *frictionp); // phares 3/6/98
|
||||||
int P_GetFriction(const AActor *mo, int *frictionfactor);
|
int P_GetFriction(const AActor *mo, int *frictionfactor);
|
||||||
|
|
|
@ -2742,25 +2742,11 @@ void P_UnPredictPlayer ()
|
||||||
act->UnlinkFromWorld();
|
act->UnlinkFromWorld();
|
||||||
memcpy(&act->x, PredictionActorBackup, sizeof(AActor)-((BYTE *)&act->x - (BYTE *)act));
|
memcpy(&act->x, PredictionActorBackup, sizeof(AActor)-((BYTE *)&act->x - (BYTE *)act));
|
||||||
|
|
||||||
// Make the sector_list match the player's touching_sectorlist before it got predicted.
|
// The blockmap ordering needs to remain unchanged, too.
|
||||||
P_DelSeclist(sector_list);
|
// Restore sector links and refrences.
|
||||||
sector_list = NULL;
|
// [ED850] This is somewhat of a duplicate of LinkToWorld(), but we need to keep every thing the same,
|
||||||
for (i = PredictionTouchingSectorsBackup.Size(); i-- > 0;)
|
// otherwise we end up fixing bugs in blockmap logic (i.e undefined behaviour with polyobject collisions),
|
||||||
{
|
// which we really don't want to do here.
|
||||||
sector_list = P_AddSecnode(PredictionTouchingSectorsBackup[i], act, sector_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The blockmap ordering needs to remain unchanged, too. Right now, act has the right
|
|
||||||
// pointers, so temporarily set its MF_NOBLOCKMAP flag so that LinkToWorld() does not
|
|
||||||
// mess with them.
|
|
||||||
{
|
|
||||||
DWORD keepflags = act->flags;
|
|
||||||
act->flags |= MF_NOBLOCKMAP;
|
|
||||||
act->LinkToWorld();
|
|
||||||
act->flags = keepflags;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restore sector links.
|
|
||||||
if (!(act->flags & MF_NOSECTOR))
|
if (!(act->flags & MF_NOSECTOR))
|
||||||
{
|
{
|
||||||
sector_t *sec = act->Sector;
|
sector_t *sec = act->Sector;
|
||||||
|
@ -2781,6 +2767,39 @@ void P_UnPredictPlayer ()
|
||||||
*link = me;
|
*link = me;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Destroy old refrences
|
||||||
|
msecnode_t *node = sector_list;
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
node->m_thing = NULL;
|
||||||
|
node = node->m_tnext;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the sector_list match the player's touching_sectorlist before it got predicted.
|
||||||
|
P_DelSeclist(sector_list);
|
||||||
|
sector_list = NULL;
|
||||||
|
for (i = PredictionTouchingSectorsBackup.Size(); i-- > 0;)
|
||||||
|
{
|
||||||
|
sector_list = P_AddSecnode(PredictionTouchingSectorsBackup[i], act, sector_list);
|
||||||
|
}
|
||||||
|
act->touching_sectorlist = sector_list; // Attach to thing
|
||||||
|
sector_list = NULL; // clear for next time
|
||||||
|
|
||||||
|
node = sector_list;
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
if (node->m_thing == NULL)
|
||||||
|
{
|
||||||
|
if (node == sector_list)
|
||||||
|
sector_list = node->m_tnext;
|
||||||
|
node = P_DelSecnode(node);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node = node->m_tnext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
msecnode_t *snode;
|
msecnode_t *snode;
|
||||||
|
|
||||||
// Restore sector thinglist order
|
// Restore sector thinglist order
|
||||||
|
|
Loading…
Reference in a new issue