diff --git a/src/playsim/actor.h b/src/playsim/actor.h index 492a4c2e6..6dd8d0ddc 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -425,6 +425,7 @@ enum ActorFlag8 MF8_STAYONLIFT = 0x02000000, // MBF AI enhancement. MF8_DONTFOLLOWPLAYERS = 0x04000000, // [inkoalawetrust] Friendly monster will not follow players. MF8_SEEFRIENDLYMONSTERS = 0X08000000, // [inkoalawetrust] Hostile monster can see friendly monsters. + MF8_CROSSLINECHECK = 0x10000000, // [MC]Enables CanCrossLine virtual }; // --- mobj.renderflags --- diff --git a/src/playsim/p_map.cpp b/src/playsim/p_map.cpp index 24c87ec6b..5b5905b03 100644 --- a/src/playsim/p_map.cpp +++ b/src/playsim/p_map.cpp @@ -163,7 +163,7 @@ bool P_CanCollideWith(AActor *tmthing, AActor *thing) // If false, the line blocks them. //========================================================================== -bool P_CanCrossLine(AActor *mo, line_t *line, int side, DVector3 next) +bool P_CanCrossLine(AActor *mo, line_t *line, DVector3 next) { static unsigned VIndex = ~0u; if (VIndex == ~0u) @@ -172,7 +172,7 @@ bool P_CanCrossLine(AActor *mo, line_t *line, int side, DVector3 next) assert(VIndex != ~0u); } - VMValue params[] = { mo, line, side, next.X, next.Y, next.Z, false }; + VMValue params[] = { mo, line, next.X, next.Y, next.Z, false }; VMReturn ret; int retval; ret.IntAt(&retval); @@ -985,7 +985,7 @@ bool PIT_CheckLine(FMultiBlockLinesIterator &mit, FMultiBlockLinesIterator::Chec } } - if (!P_CanCrossLine(tm.thing, ld, P_PointOnLineSide(cres.Position, ld), tm.pos)) + if ((tm.thing->flags8 & MF8_CROSSLINECHECK) && !P_CanCrossLine(tm.thing, ld, tm.pos)) { if (wasfit) tm.thing->BlockingLine = ld; diff --git a/src/scripting/thingdef_data.cpp b/src/scripting/thingdef_data.cpp index ebd68beca..42a3f145f 100644 --- a/src/scripting/thingdef_data.cpp +++ b/src/scripting/thingdef_data.cpp @@ -340,6 +340,7 @@ static FFlagDef ActorFlagDefs[]= DEFINE_FLAG(MF8, STAYONLIFT, AActor, flags8), DEFINE_FLAG(MF8, DONTFOLLOWPLAYERS, AActor, flags8), DEFINE_FLAG(MF8, SEEFRIENDLYMONSTERS, AActor, flags8), + DEFINE_FLAG(MF8, CROSSLINECHECK, AActor, flags8), // Effect flags DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects), diff --git a/wadsrc/static/zscript/actors/actor.zs b/wadsrc/static/zscript/actors/actor.zs index c1e409b70..6caa7de6f 100644 --- a/wadsrc/static/zscript/actors/actor.zs +++ b/wadsrc/static/zscript/actors/actor.zs @@ -503,7 +503,7 @@ class Actor : Thinker native } // Called by PIT_CheckLine to check if an actor can cross a line. - virtual bool CanCrossLine(Line crossing, int side, Vector3 next) + virtual bool CanCrossLine(Line crossing, Vector3 next) { return true; }