summaryrefslogtreecommitdiff
path: root/src/town_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/town_cmd.cpp')
-rw-r--r--src/town_cmd.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp
index 015406347..e98079db5 100644
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -1236,9 +1236,14 @@ static int GrowTownAtRoad(Town *t, TileIndex tile)
return _grow_town_result;
}
- /* Select a random bit from the blockmask, walk a step
- * and continue the search from there. */
- do target_dir = RandomDiagDir(); while (!(cur_rb & DiagDirToRoadBits(target_dir)));
+ if (IsTileType(tile, MP_TUNNELBRIDGE)) {
+ /* Only build in the direction away from the tunnel or bridge. */
+ target_dir = ReverseDiagDir(GetTunnelBridgeDirection(tile));
+ } else {
+ /* Select a random bit from the blockmask, walk a step
+ * and continue the search from there. */
+ do target_dir = RandomDiagDir(); while (!(cur_rb & DiagDirToRoadBits(target_dir)));
+ }
tile = TileAddByDiagDir(tile, target_dir);
if (IsTileType(tile, MP_ROAD) && !IsRoadDepot(tile) && HasTileRoadType(tile, ROADTYPE_ROAD)) {