diff options
author | rubidium <rubidium@openttd.org> | 2007-09-26 14:32:06 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-09-26 14:32:06 +0000 |
commit | e582e6364cf62ba89ac137fe26e825b9419b383d (patch) | |
tree | fe4a4502b7cdb7c0993d026a44660e41794ab4be | |
parent | 82851876f2950507de685e9eb1d1a89b77722c8f (diff) | |
download | openttd-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.
-rw-r--r-- | src/autoslope.h | 4 | ||||
-rw-r--r-- | src/industry_cmd.cpp | 16 |
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; } |