From d741e0eb26744a9b3bbd62fe01011b8fd0edc812 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 8 Dec 2016 11:23:08 +0100 Subject: [PATCH] - fixed: P_CheckSight returned incorrect results when having to traverse the collected lines just for adding more portals to the list. --- src/p_sight.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/p_sight.cpp b/src/p_sight.cpp index 21aa1bbe3d..df02e2ebbd 100644 --- a/src/p_sight.cpp +++ b/src/p_sight.cpp @@ -716,6 +716,7 @@ bool SightCheck::P_SightPathTraverse () // step through map blocks // Count is present to prevent a round off error from skipping the break + int itres; for (count = 0 ; count < 1000 ; count++) { // end traversing when reaching the end of the blockmap @@ -724,15 +725,15 @@ bool SightCheck::P_SightPathTraverse () { break; } - int res = P_SightBlockLinesIterator(mapx, mapy); - if (res == 0) + itres = P_SightBlockLinesIterator(mapx, mapy); + if (itres == 0) { sightcounts[1]++; return false; // early out } // either reached the end or had an early-out condition with portals left to check, - if (res == -1 || (mapxstep | mapystep) == 0) + if (itres == -1 || (mapxstep | mapystep) == 0) break; switch (((xs_FloorToInt(yintercept) == mapy) << 1) | (xs_FloorToInt(xintercept) == mapx)) @@ -787,7 +788,9 @@ sightcounts[1]++; // sightcounts[2]++; - return P_SightTraverseIntercepts ( ); + bool traverseres = P_SightTraverseIntercepts ( ); + if (itres == -1) return false; // if the iterator had an early out there was no line of sight. The traverser was only called to collect more portals. + return traverseres; } /*