mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r19720) -Feature: New base costs for building/clearing canals, building/clearing aqueducts and building/clearing locks.
This commit is contained in:
parent
a2b03e54e0
commit
52ab1c7d40
|
@ -125,6 +125,12 @@ enum Price {
|
||||||
PR_BUILD_FOUNDATION,
|
PR_BUILD_FOUNDATION,
|
||||||
PR_BUILD_INDUSTRY_RAW,
|
PR_BUILD_INDUSTRY_RAW,
|
||||||
PR_BUILD_TOWN,
|
PR_BUILD_TOWN,
|
||||||
|
PR_BUILD_CANAL,
|
||||||
|
PR_CLEAR_CANAL,
|
||||||
|
PR_BUILD_AQUEDUCT,
|
||||||
|
PR_CLEAR_AQUEDUCT,
|
||||||
|
PR_BUILD_LOCK,
|
||||||
|
PR_CLEAR_LOCK,
|
||||||
|
|
||||||
PR_END,
|
PR_END,
|
||||||
INVALID_PRICE = 0xFF
|
INVALID_PRICE = 0xFF
|
||||||
|
|
|
@ -70,5 +70,11 @@ extern const PriceBaseSpec _price_base_specs[] = {
|
||||||
{ 250, PCAT_CONSTRUCTION, GSF_END, PR_TERRAFORM }, ///< PR_BUILD_FOUNDATION
|
{ 250, PCAT_CONSTRUCTION, GSF_END, PR_TERRAFORM }, ///< PR_BUILD_FOUNDATION
|
||||||
{8000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_BUILD_INDUSTRY_RAW
|
{8000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_BUILD_INDUSTRY_RAW
|
||||||
{1000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_BUILD_TOWN
|
{1000000, PCAT_CONSTRUCTION, GSF_END, PR_BUILD_INDUSTRY }, ///< PR_BUILD_TOWN
|
||||||
|
{ 10000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_BUILD_CANAL
|
||||||
|
{ 10000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_CLEAR_CANAL
|
||||||
|
{ 10000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_BUILD_AQUEDUCT
|
||||||
|
{ 50, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_BRIDGE }, ///< PR_CLEAR_AQUEDUCT
|
||||||
|
{ 7500, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_BUILD_LOCK
|
||||||
|
{ 20000, PCAT_CONSTRUCTION, GSF_END, PR_CLEAR_WATER }, ///< PR_CLEAR_LOCK
|
||||||
};
|
};
|
||||||
assert_compile(lengthof(_price_base_specs) == PR_END);
|
assert_compile(lengthof(_price_base_specs) == PR_END);
|
||||||
|
|
|
@ -474,7 +474,7 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u
|
||||||
cost.AddCost((int64)bridge_len * _price[PR_BUILD_BRIDGE] * GetBridgeSpec(bridge_type)->price >> 8);
|
cost.AddCost((int64)bridge_len * _price[PR_BUILD_BRIDGE] * GetBridgeSpec(bridge_type)->price >> 8);
|
||||||
} else {
|
} else {
|
||||||
/* Aqueducts use a separate base cost. */
|
/* Aqueducts use a separate base cost. */
|
||||||
cost.AddCost((int64)bridge_len * _price[PR_CLEAR_WATER]);
|
cost.AddCost((int64)bridge_len * _price[PR_BUILD_AQUEDUCT]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -787,7 +787,8 @@ static CommandCost DoClearBridge(TileIndex tile, DoCommandFlag flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CommandCost(EXPENSES_CONSTRUCTION, (GetTunnelBridgeLength(tile, endtile) + 2) * _price[PR_CLEAR_BRIDGE]);
|
Money base_cost = (GetTunnelBridgeTransportType(tile) != TRANSPORT_WATER) ? _price[PR_CLEAR_BRIDGE] : _price[PR_CLEAR_AQUEDUCT];
|
||||||
|
return CommandCost(EXPENSES_CONSTRUCTION, (GetTunnelBridgeLength(tile, endtile) + 2) * base_cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Remove a tunnel or a bridge from the game.
|
/** Remove a tunnel or a bridge from the game.
|
||||||
|
|
|
@ -246,7 +246,7 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag
|
||||||
MarkCanalsAndRiversAroundDirty(tile - delta);
|
MarkCanalsAndRiversAroundDirty(tile - delta);
|
||||||
MarkCanalsAndRiversAroundDirty(tile + delta);
|
MarkCanalsAndRiversAroundDirty(tile + delta);
|
||||||
}
|
}
|
||||||
cost.AddCost(_price[PR_CLEAR_WATER] * 3 / 4);
|
cost.AddCost(_price[PR_BUILD_LOCK]);
|
||||||
|
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
@ -281,7 +281,7 @@ static CommandCost RemoveLock(TileIndex tile, DoCommandFlag flags)
|
||||||
MarkCanalsAndRiversAroundDirty(tile + delta);
|
MarkCanalsAndRiversAroundDirty(tile + delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_WATER] * 2);
|
return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_LOCK]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builds a lock.
|
/** Builds a lock.
|
||||||
|
@ -360,7 +360,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
MarkCanalsAndRiversAroundDirty(tile);
|
MarkCanalsAndRiversAroundDirty(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
cost.AddCost(_price[PR_CLEAR_WATER]);
|
cost.AddCost(_price[PR_BUILD_CANAL]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cost.GetCost() == 0) {
|
if (cost.GetCost() == 0) {
|
||||||
|
@ -376,6 +376,7 @@ static CommandCost ClearTile_Water(TileIndex tile, DoCommandFlag flags)
|
||||||
case WATER_TILE_CLEAR: {
|
case WATER_TILE_CLEAR: {
|
||||||
if (flags & DC_NO_WATER) return_cmd_error(STR_ERROR_CAN_T_BUILD_ON_WATER);
|
if (flags & DC_NO_WATER) return_cmd_error(STR_ERROR_CAN_T_BUILD_ON_WATER);
|
||||||
|
|
||||||
|
Money base_cost = IsCanal(tile) ? _price[PR_CLEAR_CANAL] : _price[PR_CLEAR_WATER];
|
||||||
/* Make sure freeform edges are allowed or it's not an edge tile. */
|
/* Make sure freeform edges are allowed or it's not an edge tile. */
|
||||||
if (!_settings_game.construction.freeform_edges && (!IsInsideMM(TileX(tile), 1, MapMaxX() - 1) ||
|
if (!_settings_game.construction.freeform_edges && (!IsInsideMM(TileX(tile), 1, MapMaxX() - 1) ||
|
||||||
!IsInsideMM(TileY(tile), 1, MapMaxY() - 1))) {
|
!IsInsideMM(TileY(tile), 1, MapMaxY() - 1))) {
|
||||||
|
@ -395,7 +396,8 @@ static CommandCost ClearTile_Water(TileIndex tile, DoCommandFlag flags)
|
||||||
DoClearSquare(tile);
|
DoClearSquare(tile);
|
||||||
MarkCanalsAndRiversAroundDirty(tile);
|
MarkCanalsAndRiversAroundDirty(tile);
|
||||||
}
|
}
|
||||||
return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_WATER]);
|
|
||||||
|
return CommandCost(EXPENSES_CONSTRUCTION, base_cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
case WATER_TILE_COAST: {
|
case WATER_TILE_COAST: {
|
||||||
|
|
Loading…
Reference in New Issue