|| tmbbox[BOXBOTTOM] >= ld->bbox[BOXTOP] ) return true;
if (P_BoxOnLineSide (tmbbox, ld) != -1) return true;
//A line has been hit
//The moving thing’s destination position will cross
//the given line.
//If this should not be allowed, return false.
//If the line is special, keep track of it
//to process later if the move is proven ok.
//NOTE: specials are NOT sorted by order,
//so two special lines that are only 8 pixels apart
//could be crossed in either order.
if (!ld->backsector) |
|
return false; |
// one sided line |
if (!(tmthing->flags & MF_MISSILE) )
{
if ( ld->flags & ML_BLOCKING )
return |
false; |
// explicitly blocking |
everything |
if ( !tmthing->player && ld->flags & ML_BLOCKMONSTERS ) |
return |
false; |
// block monsters only |
|
}
//set openrange, opentop, openbottom P_LineOpening (ld);
//adjust floor / ceiling heights
if (opentop < tmceilingz)
{
tmceilingz = opentop; ceilingline = ld;
}
if (openbottom > tmfloorz) tmfloorz = openbottom;
if (lowfloor < tmdropoffz) tmdropoffz = lowfloor;
// if contacted a special line, add it to the list if (ld->special)
{
spechit[numspechit] = ld; numspechit++;
}
return true;
}
//
// PIT_CheckThing
//
boolean PIT_CheckThing (mobj_t* thing)
{
fixed_t |
blockdist; |
boolean |
solid; |
int |
damage; |
if (!(thing->flags & (MF_SOLID|MF_SPECIAL|MF_SHOOTABLE) ))