diff options
author | truelight <truelight@openttd.org> | 2004-12-21 19:37:10 +0000 |
---|---|---|
committer | truelight <truelight@openttd.org> | 2004-12-21 19:37:10 +0000 |
commit | 815d4284c3fa19b92f1b87ed073a79542bcf76c8 (patch) | |
tree | 29b245b90aa9e17c5a921b786d0e9fca36f65c40 | |
parent | 1d6ab6a153db511f05416e60c79868a179ebf3e5 (diff) | |
download | openttd-815d4284c3fa19b92f1b87ed073a79542bcf76c8.tar.xz |
(svn r1208) -Fix: the owner-check introduced in r1203 now also works correctly for
bridges (the middle-parts don't have any owner)
-rw-r--r-- | pathfind.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/pathfind.c b/pathfind.c index 6f68257a2..c3a300cbc 100644 --- a/pathfind.c +++ b/pathfind.c @@ -128,9 +128,14 @@ static void TPFMode2(TrackPathFinder *tpf, uint tile, int direction) uint bits; int i; RememberData rd; - byte owner; + int owner; - owner = _map_owner[tile]; + if (tpf->tracktype == TRANSPORT_RAIL) { + owner = _map_owner[tile]; + /* Check if we are on the middle of a bridge (has no owner) */ + if (IS_TILETYPE(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0xC0) == 0xC0) + owner = -1; + } // This addition will sometimes overflow by a single tile. // The use of TILE_MASK here makes sure that we still point at a valid @@ -138,8 +143,12 @@ static void TPFMode2(TrackPathFinder *tpf, uint tile, int direction) tile = TILE_MASK(tile + _tileoffs_by_dir[direction]); /* Check in case of rail if the owner is the same */ - if (tpf->tracktype == TRANSPORT_RAIL && _map_owner[tile] != owner) - return; + if (tpf->tracktype == TRANSPORT_RAIL) { + /* Check if we are on the middle of a bridge (has no owner) */ + if (!IS_TILETYPE(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0xC0) != 0xC0) + if (owner != -1 && _map_owner[tile] != owner) + return; + } if (++tpf->rd.cur_length > 50) return; @@ -277,8 +286,13 @@ static void TPFMode1(TrackPathFinder *tpf, uint tile, int direction) tile += _tileoffs_by_dir[direction]; /* Check in case of rail if the owner is the same */ - if (tpf->tracktype == TRANSPORT_RAIL && _map_owner[tile_org] != _map_owner[tile]) - return; + if (tpf->tracktype == TRANSPORT_RAIL) { + /* Check if we are on a bridge (middle parts don't have an owner */ + if (!IS_TILETYPE(tile, MP_TUNNELBRIDGE) || (_map5[tile] & 0xC0) != 0xC0) + if (!IS_TILETYPE(tile_org, MP_TUNNELBRIDGE) || (_map5[tile_org] & 0xC0) != 0xC0) + if (_map_owner[tile_org] != _map_owner[tile]) + return; + } tpf->rd.cur_length++; |