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)) {