summaryrefslogtreecommitdiff
path: root/pathfind.c
diff options
context:
space:
mode:
Diffstat (limited to 'pathfind.c')
-rw-r--r--pathfind.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/pathfind.c b/pathfind.c
index 718268a5d..5a6ed2890 100644
--- a/pathfind.c
+++ b/pathfind.c
@@ -594,11 +594,17 @@ void NTPEnum(NewTrackPathFinder *tpf, uint tile, uint direction)
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.