Loading

Revision differences

Old revision #p9jfcdsyaNew revision #pywkih1li
2===================================================================  2===================================================================  
3--- src/town_cmd.cpp    (revision 27632)  3--- src/town_cmd.cpp    (revision 27632)  
4+++ src/town_cmd.cpp    (working copy)  4+++ src/town_cmd.cpp    (working copy)  
5@@ -1044,6 +1044,9 @@  5@@ -871,6 +871,9 @@
6  */  6     /* Prevent towns from building roads under bridges along the bridge. Looks silly. */
7 static bool GrowTownWithRoad(const Town *t, TileIndex tile, RoadBits rcmd)  7     if (IsBridgeAbove(tile) && GetBridgeAxis(tile) == DiagDirToAxis(dir)) return false;
8 {  8 
9+    /* don't build road on coasts with only one corner raised */  9+    /* Prevent towns from building roads where ships can traverse */
10+    if (IsSlopeWithOneCornerRaised(GetTileSlope(tile)) && IsCoastTile(tile)) return false;  10+    if ((TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)) & TRACK_BIT_ALL) != TRACK_BIT_NONE) return false;
11+  11+  
12     if (DoCommand(tile, rcmd, t->index, DC_EXEC | DC_AUTO | DC_NO_WATER, CMD_BUILD_ROAD).Succeeded()) {  12     /* Check if there already is a road at this point? */
13         _grow_town_result = GROWTH_SUCCEED;  13     if (GetTownRoadBits(tile) == ROAD_NONE) {
14         return true;  14         /* No, try if we are able to build a road piece there.
15@@ -1066,6 +1069,8 @@  15@@ -1103,6 +1106,9 @@
16     assert(bridge_dir < DIAGDIR_END);    
17     
18     const Slope slope = GetTileSlope(tile);    
19+    /* don't build a bridge if the source tile is a coast with only one corner raised */    
20+    if (IsSlopeWithOneCornerRaised(slope) && IsCoastTile(tile)) return false;    
21     
22     /* Make sure the direction is compatible with the slope.    
23      * Well we check if the slope has an up bit set in the    
24@@ -1103,6 +1108,9 @@    
25     /* no water tiles in between? */  16     /* no water tiles in between? */  
26     if (bridge_length == 1) return false;  17     if (bridge_length == 1) return false;  
27   18   
28+    /* don't build a bridge if the destination tile is a coast with only one corner raised */  28+    /* Don't build the bridge if the bridge head at the destination is traversable by ships */
29+    if (IsSlopeWithOneCornerRaised(GetTileSlope(bridge_tile)) && IsCoastTile(bridge_tile)) return false;  29+    if ((TrackStatusToTrackBits(GetTileTrackStatus(bridge_tile, TRANSPORT_WATER, 0)) & TRACK_BIT_ALL) != TRACK_BIT_NONE) return false;
30+  21+  
31     for (uint8 times = 0; times <= 22; times++) {  22     for (uint8 times = 0; times <= 22; times++) {  
32         byte bridge_type = RandomRange(MAX_BRIDGES - 1);  23         byte bridge_type = RandomRange(MAX_BRIDGES - 1);  
33   24   
34@@ -2066,7 +2074,7 @@  25@@ -1158,6 +1164,7 @@
   26 
   27             case TL_3X3_GRID:
   28             case TL_2X2_GRID:
   29+                if ((TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)) & TRACK_BIT_ALL) != TRACK_BIT_NONE) return;
   30                 rcmd = GetTownRoadGridElement(t1, tile, target_dir);
   31                 if (rcmd == ROAD_NONE) return;
   32                 break;
   33@@ -2066,7 +2073,7 @@
35 {  34 {  
36     /* cannot build on these slopes... */  35     /* cannot build on these slopes... */  
37     Slope slope = GetTileSlope(tile);  36     Slope slope = GetTileSlope(tile);  
38-    if ((noslope && slope != SLOPE_FLAT) || IsSteepSlope(slope)) return false;  37-    if ((noslope && slope != SLOPE_FLAT) || IsSteepSlope(slope)) return false;  
39+    if ((noslope && slope != SLOPE_FLAT) || IsSteepSlope(slope) || (IsSlopeWithOneCornerRaised(slope) && IsCoastTile(tile))) return false;  39+    if ((noslope && slope != SLOPE_FLAT) || IsSteepSlope(slope) || ((TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)) & TRACK_BIT_ALL) != TRACK_BIT_NONE)) return false;
40   39   
41     /* building under a bridge? */  40     /* building under a bridge? */  
42     if (IsBridgeAbove(tile)) return false; 41     if (IsBridgeAbove(tile)) return false;