changeset 2774:4f08dd288731 draft

(svn r3321) - Fix: A wrong use of the map m5 bits, where a previously calculated "bits" variable should have been used. This resulted in the pathfinder imagining junctions, which negatively affects performance somewhat (Darkvater). - Fix: [ 1346377 ] Limiting the "depth" of the search tree fixes this assert. Though the above fix seems to fix this bug too, it will only make it less likely to occur. The problem here was the StackedItem::depth field overflowing, which made the pathfinder think it was at the first tile again. Adding an explicit overflow check should fix this.
author matthijs <matthijs@openttd.org>
date Tue, 20 Dec 2005 00:50:16 +0000
parents af808da3e2b5
children 8cb018056ea2
files pathfind.c
diffstat 1 files changed, 3 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/pathfind.c
+++ b/pathfind.c
@@ -764,7 +764,7 @@
 
 			// The tile has no reachable tracks, or
 			// does the tile contain more than one track?
-			if (bits == 0 || KILL_FIRST_BIT(GB(_m[tile].m5, 0, 6)) != 0)
+			if (bits == 0 || KILL_FIRST_BIT(bits) != 0)
 				break;
 
 			// If we reach here, the tile has exactly one track, and this
@@ -859,6 +859,8 @@
 			estimation = DistanceMoo(tile, tpf->dest);
 
 		si.depth++;
+		if (si.depth == 0)
+			continue; /* We overflowed our depth. No more searching in this direction. */
 		si.tile = tile;
 		do {
 			si.track = _new_track[FIND_FIRST_BIT(bits)][direction];