From a85e18c92200590c84a6c3d3f60dd41f394cc0fe Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 26 Sep 2007 14:32:06 +0000 Subject: [PATCH] (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. --- src/autoslope.h | 4 +++- src/industry_cmd.cpp | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/autoslope.h b/src/autoslope.h index c6f40eb52a..652bce9069 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 44eb9ed998..5f5cf3cf68 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; }