summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-09-26 14:32:06 +0000
committerrubidium <rubidium@openttd.org>2007-09-26 14:32:06 +0000
commite582e6364cf62ba89ac137fe26e825b9419b383d (patch)
treefe4a4502b7cdb7c0993d026a44660e41794ab4be /src
parent82851876f2950507de685e9eb1d1a89b77722c8f (diff)
downloadopenttd-e582e6364cf62ba89ac137fe26e825b9419b383d.tar.xz
(svn r11171) -Fix [FS#1257]: disable autoslope for automatically changed stuff (like towns and industries) and enable it in the scenario editor. Patch by frosch.
Diffstat (limited to 'src')
-rw-r--r--src/autoslope.h4
-rw-r--r--src/industry_cmd.cpp16
2 files changed, 17 insertions, 3 deletions
diff --git a/src/autoslope.h b/src/autoslope.h
index c6f40eb52..652bce906 100644
--- a/src/autoslope.h
+++ b/src/autoslope.h
@@ -36,7 +36,9 @@ static inline bool AutoslopeCheckForEntranceEdge(TileIndex tile, uint z_new, Slo
*/
static inline bool AutoslopeEnabled()
{
- return (_patches.autoslope && IsValidPlayer(_current_player) && !_is_old_ai_player);
+ return (_patches.autoslope &&
+ ((IsValidPlayer(_current_player) && !_is_old_ai_player) ||
+ (_current_player == OWNER_NONE && _game_mode == GM_EDITOR)));
}
#endif /* AUTOSLOPE_H */
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 44eb9ed99..5f5cf3cf6 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -1336,15 +1336,26 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, uint32 flags, const
/* Check if we don't leave the map */
if (TileX(cur_tile) == 0 || TileY(cur_tile) == 0 || TileX(cur_tile) + size_x >= MapMaxX() || TileY(cur_tile) + size_y >= MapMaxY()) return false;
+ /* _current_player is OWNER_NONE for randomly generated industries and in editor, or the player who funded or prospected the industry.
+ * Perform terraforming as OWNER_TOWN to disable autoslope. */
+ PlayerID old_player = _current_player;
+ _current_player = OWNER_TOWN;
+
BEGIN_TILE_LOOP(tile_walk, size_x, size_y, cur_tile) {
curh = TileHeight(tile_walk);
if (curh != h) {
/* This tile needs terraforming. Check if we can do that without
* damaging the surroundings too much. */
- if (!CheckCanTerraformSurroundingTiles(tile_walk, h, 0)) return false;
+ if (!CheckCanTerraformSurroundingTiles(tile_walk, h, 0)) {
+ _current_player = old_player;
+ return false;
+ }
/* This is not 100% correct check, but the best we can do without modifying the map.
* What is missing, is if the difference in height is more than 1.. */
- if (CmdFailed(DoCommand(tile_walk, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND))) return false;
+ if (CmdFailed(DoCommand(tile_walk, SLOPE_N, (curh > h) ? 0 : 1, flags & ~DC_EXEC, CMD_TERRAFORM_LAND))) {
+ _current_player = old_player;
+ return false;
+ }
}
} END_TILE_LOOP(tile_walk, size_x, size_y, cur_tile)
@@ -1362,6 +1373,7 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, uint32 flags, const
} END_TILE_LOOP(tile_walk, size_x, size_y, cur_tile)
}
+ _current_player = old_player;
return true;
}