(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.
authorfrosch
Sun, 23 Nov 2008 16:34:27 +0000
changeset 10362 20518cacbdb8
parent 10361 8afaf71b7a95
child 10363 96eb6897bf96
(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
src/tunnelbridge_cmd.cpp
--- a/src/industry_cmd.cpp	Sun Nov 23 16:01:24 2008 +0000
+++ b/src/industry_cmd.cpp	Sun Nov 23 16:34:27 2008 +0000
@@ -1266,9 +1266,22 @@
 					_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 @@
 
 	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 @@
 			if (its->animation_info != 0xFFFF) AddAnimatedTile(cur_tile);
 		}
 	} while ((++it)->ti.x != -0x80);
+	_current_company = old_company;
 
 	i->width++;
 	i->height++;
--- a/src/tunnelbridge_cmd.cpp	Sun Nov 23 16:01:24 2008 +0000
+++ b/src/tunnelbridge_cmd.cpp	Sun Nov 23 16:34:27 2008 +0000
@@ -556,7 +556,10 @@
 
 	/* 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);