(svn r149) -Fix: [997703] Junction after tunnel bug (blathijs)
authortruelight
Fri, 03 Sep 2004 16:03:17 +0000
changeset 148 6a72b12f5588
parent 147 d0c8100d18cf
child 149 5f7d4b21df01
(svn r149) -Fix: [997703] Junction after tunnel bug (blathijs)
pathfind.c
--- a/pathfind.c	Wed Sep 01 21:54:12 2004 +0000
+++ b/pathfind.c	Fri Sep 03 16:03:17 2004 +0000
@@ -594,11 +594,17 @@
 
 restart:
 	if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xF0)==0) {
-		if ( (uint)(_map5[tile] & 3) != direction || ((_map5[tile]>>1)&6) != tpf->tracktype)
+		/* This is a tunnel tile */
+		if ( (uint)(_map5[tile] & 3) != (direction ^ 2)) { /* ^ 2 is reversing the direction */
+			/* We are not just driving out of the tunnel */
+			if ( (uint)(_map5[tile] & 3) != direction || ((_map5[tile]>>1)&6) != tpf->tracktype)
+				/* We are not driving into the tunnel, or it
+				 * is an invalid tunnel */
 				goto popnext;
-		flotr = FindLengthOfTunnel(tile, direction, tpf->tracktype);
-		si.cur_length += flotr.length;
-		tile = flotr.tile;
+			flotr = FindLengthOfTunnel(tile, direction, tpf->tracktype);
+			si.cur_length += flotr.length;
+			tile = flotr.tile;
+		}
 	}
 
 	// remember the start tile so we know if we're in an inf loop.