changeset 7847:066ed17e3036 draft

(svn r11397) -Fix r11395: some minor fixes for better town-bridge results (and better comments) (skidd13 / TrueLight)
author truelight <truelight@openttd.org>
date Fri, 09 Nov 2007 13:21:48 +0000
parents 08a7f7120fc5
children bc066d9cf7b0
files src/town_cmd.cpp
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -907,7 +907,8 @@
 
 	/* Make sure the direction is compatible with the slope.
 	 * If any of the following bits match, the slope is forbidden for
-	 * that diagdir. Total of 5 slopes per direction.
+	 *  that diagdir. This means 5 non-steep slopes, and 3 steep-slopes
+	 *  per diagdir.
 	 * 0 -> 0b1100
 	 * 1 -> 0b0110
 	 * 2 -> 0b0011
@@ -916,8 +917,11 @@
 	 * the direction to get the forbidden slope mask. */
 	if (HASBITS(slope & 0x0F, 0xCC >> 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;
+
 	/* We are in the right direction */
-	uint32 bridge_length = 0;     // This value stores the length of the possible bridge
+	uint8 bridge_length = 0;     // This value stores the length of the possible bridge
 	TileIndex bridge_tile = tile; // Used to store the other waterside
 
 	do {
@@ -925,7 +929,7 @@
 			/* Max 11 tile long bridges */
 			return false;
 		}
-		bridge_tile = TILE_MASK(bridge_tile + TileOffsByDiagDir(bridge_dir));
+		bridge_tile = TileAddByDiagDir(bridge_tile, bridge_dir);
 	} while (IsWaterTile(bridge_tile));
 
 	/* no water tiles in between? */