From e35be92a3a1bb75a8bd4f063b4d3cb3a435a6794 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 23 Nov 2008 16:34:27 +0000 Subject: (svn r14613) -Fix [FS#2420]: When building industries, clear the tiles as OWNER_TOWN instead of the founder to take care of protected buildings and to not get stressed by town ratings. --- src/industry_cmd.cpp | 21 +++++++++++++++++++-- src/tunnelbridge_cmd.cpp | 5 ++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 28049348b..a9a837dbe 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1266,9 +1266,22 @@ static bool CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable _error_message = STR_030D_CAN_ONLY_BE_BUILT_IN_TOWNS; return false; } - if (CmdFailed(DoCommand(cur_tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR))) return false; + + /* Clear the tiles as OWNER_TOWN to not affect town rating, and to not clear protected buildings */ + CompanyID old_company = _current_company; + _current_company = OWNER_TOWN; + bool not_clearable = CmdFailed(DoCommand(cur_tile, 0, 0, 0, CMD_LANDSCAPE_CLEAR)); + _current_company = old_company; + + if (not_clearable) return false; } else if ((ind_behav & INDUSTRYBEH_ONLY_NEARTOWN) == 0 || !IsTileType(cur_tile, MP_HOUSE)) { - if (CmdFailed(DoCommand(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR))) return false; + /* Clear the tiles as OWNER_TOWN to not affect town rating, and to not clear protected buildings */ + CompanyID old_company = _current_company; + _current_company = OWNER_TOWN; + bool not_clearable = CmdFailed(DoCommand(cur_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR)); + _current_company = old_company; + + if (not_clearable) return false; } } } while ((++it)->ti.x != -0x80); @@ -1540,6 +1553,9 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind i->prod_level = PRODLEVEL_DEFAULT; + /* Clear the tiles as OWNER_TOWN, to not affect town rating, and to not clear protected buildings */ + CompanyID old_company = _current_company; + _current_company = OWNER_TOWN; do { TileIndex cur_tile = tile + ToTileIndexDiff(it->ti); @@ -1568,6 +1584,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, int type, const Ind if (its->animation_info != 0xFFFF) AddAnimatedTile(cur_tile); } } while ((++it)->ti.x != -0x80); + _current_company = old_company; i->width++; i->height++; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 70ecf12ca..db45eb2ef 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -556,7 +556,10 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, uint32 flags, uint32 p1, uint32 /* slope of end tile must be complementary to the slope of the start tile */ if (end_tileh != ComplementSlope(start_tileh)) { - /* Check if there is a structure on the terraformed tile. Do not add the cost, that will be done by the terraforming */ + /* Check if there is a structure on the terraformed tile. Do not add the cost, that will be done by the terraforming + * Note: Currently the town rating is also affected by this clearing-test. So effectivly the player is punished twice for clearing + * the tree on end_tile. + */ ret = DoCommand(end_tile, 0, 0, DC_AUTO, CMD_LANDSCAPE_CLEAR); if (CmdFailed(ret)) return_cmd_error(STR_5005_UNABLE_TO_EXCAVATE_LAND); -- cgit v1.2.3-70-g09d2