diff --git a/src/p_linetracedata.h b/src/p_linetracedata.h index f6191b5d1..b05b694d5 100644 --- a/src/p_linetracedata.h +++ b/src/p_linetracedata.h @@ -14,6 +14,7 @@ struct FLineTraceData F3DFloor *Hit3DFloor; FTextureID HitTexture; DVector3 HitLocation; + DVector3 HitDir; double Distance; int NumPortals; int LineSide; diff --git a/src/p_map.cpp b/src/p_map.cpp index 8e445862a..8fb25acfa 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -4898,17 +4898,9 @@ bool P_LineTrace(AActor *t1, DAngle angle, double distance, outdata->HitLine = trace.Line; outdata->HitSector = trace.Sector; outdata->Hit3DFloor = trace.ffloor; - switch ( trace.HitType ) + outdata->SectorPlane = (trace.HitType == TRACE_HitCeiling) ? 1 : 0; + if ( trace.HitType == TRACE_HitWall ) { - case TRACE_HitFloor: - outdata->SectorPlane = 0; - outdata->HitTexture = trace.Sector->planes[0].Texture; - break; - case TRACE_HitCeiling: - outdata->SectorPlane = 1; - outdata->HitTexture = trace.Sector->planes[1].Texture; - break; - case TRACE_HitWall: outdata->LineSide = trace.Side; int txpart; switch ( trace.Tier ) @@ -4930,10 +4922,10 @@ bool P_LineTrace(AActor *t1, DAngle angle, double distance, outdata->HitTexture = trace.ffloor->master->sidedef[0]->textures[txpart].texture; break; } - default: - break; } + else outdata->HitTexture = trace.HitTexture; outdata->HitLocation = trace.HitPos; + outdata->HitDir = trace.HitVector; outdata->Distance = trace.Distance; outdata->NumPortals = TData.NumPortals; outdata->HitType = trace.HitType; diff --git a/wadsrc/static/zscript/actor.txt b/wadsrc/static/zscript/actor.txt index dbea3fd47..261017ddf 100644 --- a/wadsrc/static/zscript/actor.txt +++ b/wadsrc/static/zscript/actor.txt @@ -47,6 +47,7 @@ struct FLineTraceData F3DFloor Hit3DFloor; TextureID HitTexture; Vector3 HitLocation; + Vector3 HitDir; double Distance; int NumPortals; int LineSide;