water_cmd.c
changeset 3900 4984308f9125
parent 3884 475989407ceb
child 3933 a5f08e17f4a0
--- a/water_cmd.c	Thu May 25 20:58:23 2006 +0000
+++ b/water_cmd.c	Sat May 27 16:12:16 2006 +0000
@@ -328,6 +328,8 @@
 			NOT_REACHED();
 			return 0;
 	}
+
+	return 0; // useless but silences warning
 }
 
 // return true if a tile is a water tile.
@@ -659,15 +661,25 @@
 {
 	static const byte coast_tracks[] = {0, 32, 4, 0, 16, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0};
 	static const byte water_tracks_by_axis[] = {1, 2};
+	uint32 ts;
 	if (mode != TRANSPORT_WATER) return 0;
 
 	switch (GetWaterTileType(tile)) {
-		case WATER_CLEAR: return 0x3F * 0x101; /* We can go everywhere */
-		case WATER_COAST: return coast_tracks[GetTileSlope(tile, NULL) & 0xF] * 0x101;
-		case WATER_LOCK: return water_tracks_by_axis[DiagDirToAxis(GetLockDirection(tile))] * 0x101;
-		case WATER_DEPOT: return water_tracks_by_axis[GetShipDepotAxis(tile)] * 0x101;
+		case WATER_CLEAR: ts = 0x3F; break;/* We can go everywhere */
+		case WATER_COAST: ts = coast_tracks[GetTileSlope(tile, NULL) & 0xF]; break;
+		case WATER_LOCK: ts = water_tracks_by_axis[DiagDirToAxis(GetLockDirection(tile))]; break;
+		case WATER_DEPOT: ts = water_tracks_by_axis[GetShipDepotAxis(tile)]; break;
 		default: return 0;
 	}
+	if (TileX(tile) == 0) {
+		// NE border: remove tracks that connects NE tile edge
+		ts &= ~(TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT);
+	}
+	if (TileY(tile) == 0) {
+		// NW border: remove tracks that connects NW tile edge
+		ts &= ~(TRACK_BIT_Y | TRACK_BIT_LEFT | TRACK_BIT_UPPER);
+	}
+	return ts * 0x101;
 }
 
 extern void ShowShipDepotWindow(TileIndex tile);