summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-08-28 18:56:07 +0000
committerrubidium <rubidium@openttd.org>2010-08-28 18:56:07 +0000
commitfba19a41d5ffddb8c33a4e45016d90a8ae3283be (patch)
tree92b2a9eb8a69b98ce15505f273749786536b2a8f
parentca7fe458a26d6e23de93e8fbaaa82f1dbfa341f0 (diff)
downloadopenttd-fba19a41d5ffddb8c33a4e45016d90a8ae3283be.tar.xz
(svn r20665) -Codechange: make clearing object tiles behave (more) like TTDPatch
-rw-r--r--src/object_cmd.cpp13
-rw-r--r--src/table/object_land.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp
index 94b48a4d2..2cd8ddc82 100644
--- a/src/object_cmd.cpp
+++ b/src/object_cmd.cpp
@@ -326,6 +326,9 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags)
Object *o = Object::GetByTile(tile);
TileArea ta = o->location;
+ CommandCost cost(EXPENSES_CONSTRUCTION, spec->GetClearCost() * ta.w * ta.h / 5);
+ if (spec->flags & OBJECT_FLAG_CLEAR_INCOME) cost.MultiplyCost(-1); // They get an income!
+
/* Water can remove everything! */
if (_current_company != OWNER_WATER) {
if ((spec->flags & OBJECT_FLAG_AUTOREMOVE) == 0 && flags & DC_AUTO) {
@@ -339,15 +342,15 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags)
} else if (CheckTileOwnership(tile).Failed()) {
/* We don't own it!. */
return_cmd_error(STR_ERROR_OWNED_BY);
- } else if ((spec->flags & OBJECT_FLAG_AUTOREMOVE) == 0 && !_cheats.magic_bulldozer.value) {
+ } else if ((spec->flags & OBJECT_FLAG_CANNOT_REMOVE) != 0 && (spec->flags & OBJECT_FLAG_AUTOREMOVE) == 0) {
/* In the game editor or with cheats we can remove, otherwise we can't. */
- return CMD_ERROR;
+ if (!_cheats.magic_bulldozer.value) return CMD_ERROR;
+
+ /* Removing with the cheat costs more in TTDPatch / the specs. */
+ cost.MultiplyCost(25);
}
}
- CommandCost cost(EXPENSES_CONSTRUCTION, spec->GetClearCost() * ta.w * ta.h);
- if (spec->flags & OBJECT_FLAG_CLEAR_INCOME) cost.MultiplyCost(-1); // They get an income!
-
switch (type) {
case OBJECT_HQ: {
Company *c = Company::Get(GetTileOwner(tile));
diff --git a/src/table/object_land.h b/src/table/object_land.h
index e9d855dca..7e2d5760c 100644
--- a/src/table/object_land.h
+++ b/src/table/object_land.h
@@ -130,7 +130,7 @@ extern const ObjectSpec _original_objects[] = {
M(STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER, 0x11, 0, 0, 10, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_SCENEDIT),
M(STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE, 0x11, 0, 0, 8, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_SCENEDIT),
M(STR_TOWN_BUILDING_NAME_STATUE_1, 0x11, 0, 0, 5, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_GAME | OBJECT_FLAG_ONLY_IN_SCENEDIT), // Yes, we disallow building this everywhere. Happens in "special" case!
- M(STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND, 0x11, 10, 2, 0, OBJECT_FLAG_AUTOREMOVE | OBJECT_FLAG_ONLY_IN_GAME | OBJECT_FLAG_CLEAR_INCOME | OBJECT_FLAG_HAS_NO_FOUNDATION | OBJECT_FLAG_ALLOW_UNDER_BRIDGE),
+ M(STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND, 0x11, 10, 10, 0, OBJECT_FLAG_AUTOREMOVE | OBJECT_FLAG_ONLY_IN_GAME | OBJECT_FLAG_CLEAR_INCOME | OBJECT_FLAG_HAS_NO_FOUNDATION | OBJECT_FLAG_ALLOW_UNDER_BRIDGE),
M(STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS, 0x22, 0, 0, 7, OBJECT_FLAG_CANNOT_REMOVE | OBJECT_FLAG_ONLY_IN_GAME),
};