Index: src/landscape.cpp
===================================================================
--- src/landscape.cpp (revision 27795)
+++ src/landscape.cpp (working copy)
@@ -1008,7 +1008,7 @@
return heightEnd <= heightBegin &&
/* Slope either is inclined or flat; rivers don't support other slopes. */
- (slopeEnd == SLOPE_FLAT || IsInclinedSlope(slopeEnd)) &&
+ (slopeEnd == SLOPE_FLAT || (IsInclinedSlope(slopeEnd) && DoCommand(end, 0, 0, CommandFlagsToDCFlags(GetCommandFlags(CMD_BUILD_LOCK)), CMD_BUILD_LOCK).Succeeded())) &&
/* Slope continues, then it must be lower... or either end must be flat. */
((slopeEnd == slopeBegin && heightEnd < heightBegin) || slopeEnd == SLOPE_FLAT || slopeBegin == SLOPE_FLAT);
}
Index: src/water_cmd.cpp
===================================================================
--- src/water_cmd.cpp (revision 27795)
+++ src/water_cmd.cpp (working copy)
@@ -272,6 +272,8 @@
if (!IsTileFlat(tile - delta)) {
return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
}
+
+ if (DistanceFromEdge(tile - delta) <= 1 || !IsTileFlat(tile - delta - delta)) return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
WaterClass wc_lower = IsWaterTile(tile - delta) ? GetWaterClass(tile - delta) : WATER_CLASS_CANAL;
/* upper tile */
@@ -284,6 +286,8 @@
if (!IsTileFlat(tile + delta)) {
return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
}
+
+ if (DistanceFromEdge(tile + delta) <= 1 || !IsTileFlat(tile + delta + delta)) return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
WaterClass wc_upper = IsWaterTile(tile + delta) ? GetWaterClass(tile + delta) : WATER_CLASS_CANAL;
if (IsBridgeAbove(tile) || IsBridgeAbove(tile - delta) || IsBridgeAbove(tile + delta)) {