diff --git a/src/p_local.h b/src/p_local.h index 926a51788..59179c1c1 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -276,7 +276,7 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed extern boolean floatok; extern fixed_t tmfloorz; extern fixed_t tmceilingz; -extern mobj_t *tmfloorthing, *tmthing; +extern mobj_t *tmfloorthing, *tmhitthing, *tmthing; extern camera_t *mapcampointer; /* cphipps 2004/08/30 */ diff --git a/src/p_map.c b/src/p_map.c index c88b91e94..a29ae9512 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -47,7 +47,7 @@ boolean floatok; fixed_t tmfloorz, tmceilingz; static fixed_t tmdropoffz, tmdrpoffceilz; // drop-off floor/ceiling heights mobj_t *tmfloorthing; // the thing corresponding to tmfloorz or NULL if tmfloorz is from a sector -static mobj_t *tmhitthing; // the solid thing you bumped into (for collisions) +mobj_t *tmhitthing; // the solid thing you bumped into (for collisions) // keep track of the line that lowers the ceiling, // so missiles don't explode against sky hack walls diff --git a/src/p_mobj.c b/src/p_mobj.c index 081124b95..24a9f7b58 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5450,6 +5450,8 @@ void P_MobjThinker(mobj_t *mobj) mobj->eflags &= ~(MFE_PUSHED|MFE_SPRUNG); + tmfloorthing = tmhitthing = NULL; + // 970 allows ANY mobj to trigger a linedef exec if (mobj->subsector && GETSECSPECIAL(mobj->subsector->sector->special, 2) == 8) { @@ -6497,19 +6499,22 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->spawnpoint->options & MTF_OBJECTFLIP) { z = ss->sector->ceilingheight - mobjinfo[mobj->type].height; - if (mobj->spawnpoint->z) - z -= mobj->spawnpoint->z << FRACBITS; + if (mobj->spawnpoint->options >> ZSHIFT) + z -= (mobj->spawnpoint->options >> ZSHIFT) << FRACBITS; } else { z = ss->sector->floorheight; - if (mobj->spawnpoint->z) - z += mobj->spawnpoint->z << FRACBITS; + if (mobj->spawnpoint->options >> ZSHIFT) + z += (mobj->spawnpoint->options >> ZSHIFT) << FRACBITS; } flagmo = P_SpawnMobj(x, y, z, mobj->type); flagmo->spawnpoint = mobj->spawnpoint; if (mobj->spawnpoint->options & MTF_OBJECTFLIP) - flagmo->spawnpoint->options |= MTF_OBJECTFLIP; + { + flagmo->eflags |= MFE_VERTICALFLIP; + flagmo->flags2 |= MF2_OBJECTFLIP; + } if (mobj->type == MT_REDFLAG) {