Make A_SetObjectFlags only reset sector/bmap links if needed

This commit is contained in:
RedEnchilada 2015-04-17 12:10:40 -05:00
parent f7c463418e
commit ddd66b9eff

View file

@ -7650,25 +7650,32 @@ void A_SetObjectFlags(mobj_t *actor)
{ {
INT32 locvar1 = var1; INT32 locvar1 = var1;
INT32 locvar2 = var2; INT32 locvar2 = var2;
boolean unlinkthings = false;
#ifdef HAVE_BLUA #ifdef HAVE_BLUA
if (LUA_CallAction("A_SetObjectFlags", actor)) if (LUA_CallAction("A_SetObjectFlags", actor))
return; return;
#endif #endif
if (locvar2 == 2)
locvar1 = actor->flags | locvar1;
else if (locvar2 == 1)
locvar1 = actor->flags & ~locvar1;
if ((locvar1 & (MF_NOBLOCKMAP|MF_NOSECTOR)) != (actor->flags & (MF_NOBLOCKMAP|MF_NOSECTOR))) // Blockmap/sector status has changed, so reset the links
unlinkthings = true;
if (unlinkthings) {
P_UnsetThingPosition(actor); P_UnsetThingPosition(actor);
if (sector_list) if (sector_list)
{ {
P_DelSeclist(sector_list); P_DelSeclist(sector_list);
sector_list = NULL; sector_list = NULL;
} }
}
if (locvar2 == 2)
actor->flags |= locvar1;
else if (locvar2 == 1)
actor->flags &= ~locvar1;
else
actor->flags = locvar1; actor->flags = locvar1;
if (unlinkthings)
P_SetThingPosition(actor); P_SetThingPosition(actor);
} }