Mercurial > hg > openttd
changeset 18078:3f5752deb867 draft
(svn r22899) -Add: Allow towns to build bridges over canals and rivers.
author | terkhen <terkhen@openttd.org> |
---|---|
date | Tue, 06 Sep 2011 13:32:37 +0000 |
parents | 8277c23f5e3c |
children | 3c68da1f84c8 |
files | src/town_cmd.cpp |
diffstat | 1 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -971,12 +971,11 @@ assert(bridge_dir < DIAGDIR_END); const Slope slope = GetTileSlope(tile, NULL); - if (slope == SLOPE_FLAT) return false; // no slope, no bridge /* Make sure the direction is compatible with the slope. * Well we check if the slope has an up bit set in the * reverse direction. */ - if (slope & InclinedSlope(bridge_dir)) return false; + if (slope != SLOPE_FLAT && slope & InclinedSlope(bridge_dir)) return false; /* Assure that the bridge is connectable to the start side */ if (!(GetTownRoadBits(TileAddByDiagDir(tile, ReverseDiagDir(bridge_dir))) & DiagDirToRoadBits(bridge_dir))) return false; @@ -986,13 +985,25 @@ TileIndex bridge_tile = tile; // Used to store the other waterside const int delta = TileOffsByDiagDir(bridge_dir); - do { - if (bridge_length++ >= 11) { - /* Max 11 tile long bridges */ - return false; - } - bridge_tile += delta; - } while (TileX(bridge_tile) != 0 && TileY(bridge_tile) != 0 && IsWaterTile(bridge_tile)); + + if (slope == SLOPE_FLAT) { + /* Bridges starting on flat tiles are only allowed when crossing rivers. */ + do { + if (bridge_length++ >= 4) { + /* Allow to cross rivers, not big lakes. */ + return false; + } + bridge_tile += delta; + } while (IsValidTile(bridge_tile) && IsWaterTile(bridge_tile) && !IsSea(bridge_tile)); + } else { + do { + if (bridge_length++ >= 11) { + /* Max 11 tile long bridges */ + return false; + } + bridge_tile += delta; + } while (IsValidTile(bridge_tile) && IsWaterTile(bridge_tile)); + } /* no water tiles in between? */ if (bridge_length == 1) return false;