diff --git a/src/script/api/script_bridge.cpp b/src/script/api/script_bridge.cpp index b0fda24128..5060eec68c 100644 --- a/src/script/api/script_bridge.cpp +++ b/src/script/api/script_bridge.cpp @@ -132,32 +132,34 @@ static void _DoCommandReturnBuildBridge1(class ScriptInstance *instance) return GetString(vehicle_type == ScriptVehicle::VT_WATER ? STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT : ::GetBridgeSpec(bridge_id)->transport_name[vehicle_type]); } -/* static */ int32 ScriptBridge::GetMaxSpeed(BridgeID bridge_id) +/* static */ SQInteger ScriptBridge::GetMaxSpeed(BridgeID bridge_id) { if (!IsValidBridge(bridge_id)) return -1; return ::GetBridgeSpec(bridge_id)->speed; // km-ish/h } -/* static */ Money ScriptBridge::GetPrice(BridgeID bridge_id, uint length) +/* static */ Money ScriptBridge::GetPrice(BridgeID bridge_id, SQInteger length) { if (!IsValidBridge(bridge_id)) return -1; + length = Clamp(length, 0, INT32_MAX); + return ::CalcBridgeLenCostFactor(length) * _price[PR_BUILD_BRIDGE] * ::GetBridgeSpec(bridge_id)->price >> 8; } -/* static */ int32 ScriptBridge::GetMaxLength(BridgeID bridge_id) +/* static */ SQInteger ScriptBridge::GetMaxLength(BridgeID bridge_id) { if (!IsValidBridge(bridge_id)) return -1; - return std::min(::GetBridgeSpec(bridge_id)->max_length, _settings_game.construction.max_bridge_length) + 2; + return std::min(::GetBridgeSpec(bridge_id)->max_length, _settings_game.construction.max_bridge_length) + 2; } -/* static */ int32 ScriptBridge::GetMinLength(BridgeID bridge_id) +/* static */ SQInteger ScriptBridge::GetMinLength(BridgeID bridge_id) { if (!IsValidBridge(bridge_id)) return -1; - return ::GetBridgeSpec(bridge_id)->min_length + 2; + return static_cast(::GetBridgeSpec(bridge_id)->min_length) + 2; } /* static */ TileIndex ScriptBridge::GetOtherBridgeEnd(TileIndex tile) diff --git a/src/script/api/script_bridge.hpp b/src/script/api/script_bridge.hpp index 26d7e11619..46b9c57552 100644 --- a/src/script/api/script_bridge.hpp +++ b/src/script/api/script_bridge.hpp @@ -80,16 +80,17 @@ public: * This is mph / 1.6, which is roughly km/h. * To get km/h multiply this number by 1.00584. */ - static int32 GetMaxSpeed(BridgeID bridge_id); + static SQInteger GetMaxSpeed(BridgeID bridge_id); /** * Get the new cost of a bridge, excluding the road and/or rail. * @param bridge_id The bridge to get the new cost of. * @param length The length of the bridge. + * The value will be clamped to 0 .. MAX(int32). * @pre IsValidBridge(bridge_id). * @return The new cost the bridge has. */ - static Money GetPrice(BridgeID bridge_id, uint length); + static Money GetPrice(BridgeID bridge_id, SQInteger length); /** * Get the maximum length of a bridge. @@ -97,7 +98,7 @@ public: * @pre IsValidBridge(bridge_id). * @returns The maximum length the bridge has. */ - static int32 GetMaxLength(BridgeID bridge_id); + static SQInteger GetMaxLength(BridgeID bridge_id); /** * Get the minimum length of a bridge. @@ -105,7 +106,7 @@ public: * @pre IsValidBridge(bridge_id). * @returns The minimum length the bridge has. */ - static int32 GetMinLength(BridgeID bridge_id); + static SQInteger GetMinLength(BridgeID bridge_id); /** * Internal function to help BuildBridge in case of road.