diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 18afcb5f2f..22986cead0 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -877,12 +877,12 @@ ERROR: IsEnd() is invalid as Begin() is never called GetAirportHeight(8): 2 GetAirportCoverageRadius(8): 4 GetAirportNumHelipads(8): 3 - IsAirportInformationAvailable(9): false + IsAirportInformationAvailable(9): true IsValidAirportType(9): false - GetAirportWidth(9): -1 - GetAirportHeight(9): -1 - GetAirportCoverageRadius(9): -1 - GetAirportNumHelipads(9): -1 + GetAirportWidth(9): 1 + GetAirportHeight(9): 1 + GetAirportCoverageRadius(9): 4 + GetAirportNumHelipads(9): 1 GetBankBalance(): 1999999790 GetPrice(): 5400 BuildAirport(): true diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index f76a586f07..cb1c9f228f 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -28,6 +28,7 @@ * \li AICargo::CC_POTABLE * \li AICargo::CC_NON_POTABLE * \li AIVehicleList_Waypoint + * \li AIAirport::AT_OILRIG * * Other changes: * \li AIBridge::GetBridgeID renamed to AIBridge::GetBridgeType diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 7bb7203d20..9c200f5eea 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -29,6 +29,7 @@ * \li GSCargo::CC_NON_POTABLE * \li GSVehicleList_Waypoint * \li GSBaseStation::GetOwner + * \li GSAirport::AT_OILRIG * * Other changes: * \li GSBridge::GetBridgeID renamed to GSBridge::GetBridgeType diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index 05e5a7d728..fabea59a14 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -24,7 +24,7 @@ /* static */ bool ScriptAirport::IsAirportInformationAvailable(AirportType type) { - return type >= 0 && type < (AirportType)NUM_AIRPORTS && AirportSpec::Get(type)->enabled; + return type == AT_OILRIG || (type >= 0 && type < (AirportType)NUM_AIRPORTS && AirportSpec::Get(type)->enabled); } /* static */ Money ScriptAirport::GetPrice(AirportType type) @@ -67,6 +67,7 @@ { if (!IsAirportInformationAvailable(type)) return -1; + if (type == AT_OILRIG && !_settings_game.station.serve_neutral_industries) return (uint)CA_NONE; return _settings_game.station.modified_catchment ? ::AirportSpec::Get(type)->catchment : (uint)CA_UNMODIFIED; } @@ -96,9 +97,8 @@ if (!::IsTileType(tile, MP_STATION)) return -1; const Station *st = ::Station::GetByTile(tile); - if (st->owner != ScriptObject::GetCompany() && ScriptCompanyMode::IsValid()) return -1; + if (st->owner != OWNER_NONE && st->owner != ScriptObject::GetCompany() && ScriptCompanyMode::IsValid()) return -1; if (!st->facilities.Test(StationFacility::Airport)) return -1; - return st->airport.GetNumHangars(); } @@ -110,7 +110,7 @@ if (GetNumHangars(tile) < 1) return INVALID_TILE; const Station *st = ::Station::GetByTile(tile); - if (st->owner != ScriptObject::GetCompany() && ScriptCompanyMode::IsValid()) return INVALID_TILE; + if (st->owner != OWNER_NONE && st->owner != ScriptObject::GetCompany() && ScriptCompanyMode::IsValid()) return INVALID_TILE; if (!st->facilities.Test(StationFacility::Airport)) return INVALID_TILE; return st->airport.GetHangarTile(0); @@ -143,7 +143,7 @@ return GetAirportNoiseLevelForDistance(as, dist); } - return 1; + return type == AT_OILRIG ? 0 : 1; } /* static */ TownID ScriptAirport::GetNearestTown(TileIndex tile, AirportType type) diff --git a/src/script/api/script_airport.hpp b/src/script/api/script_airport.hpp index aa469bc5f0..4841d1c7e3 100644 --- a/src/script/api/script_airport.hpp +++ b/src/script/api/script_airport.hpp @@ -34,6 +34,7 @@ public: AT_HELIPORT = ::AT_HELIPORT, ///< The heliport. AT_HELISTATION = ::AT_HELISTATION, ///< The helistation. AT_HELIDEPOT = ::AT_HELIDEPOT, ///< The helidepot. + AT_OILRIG = ::AT_OILRIG, ///< The oil rig heliport. AT_INVALID = ::AT_INVALID, ///< Invalid airport. }; diff --git a/src/table/airport_defaults.h b/src/table/airport_defaults.h index f7b1fb7f7c..3f0a3f28ad 100644 --- a/src/table/airport_defaults.h +++ b/src/table/airport_defaults.h @@ -359,6 +359,15 @@ static const std::initializer_list _tile_table_helistation = { _tile_table_helistation_0, DIR_N }, }; +/** Tiles for oilrig */ +static const std::initializer_list _tile_table_oilrig_0 = { + MK(0, 0, APT_EMPTY), +}; + +static const std::initializer_list _tile_table_oilrig = { + { _tile_table_oilrig_0, DIR_N, } +}; + #undef MK /** General AirportSpec definition. */ @@ -377,7 +386,7 @@ static const std::initializer_list _tile_table_helistation = /* The helidepot and helistation have ATP_TTDP_SMALL because they are at ground level */ extern const AirportSpec _origin_airport_specs[] = { - AS(country, 4, 3, 0, 1959, 4, 3, 7, ATP_TTDP_SMALL, APC_SMALL, STR_AIRPORT_SMALL, SPR_AIRPORT_PREVIEW_SMALL), + AS(country, 4, 3, CalendarTime::MIN_YEAR, 1959, 4, 3, 7, ATP_TTDP_SMALL, APC_SMALL, STR_AIRPORT_SMALL, SPR_AIRPORT_PREVIEW_SMALL), AS(city, 6, 6, 1955, CalendarTime::MAX_YEAR, 5, 5, 24, ATP_TTDP_LARGE, APC_LARGE, STR_AIRPORT_CITY, SPR_AIRPORT_PREVIEW_LARGE), AS_ND(heliport, 1, 1, 1963, CalendarTime::MAX_YEAR, 4, 1, 4, ATP_TTDP_HELIPORT, APC_HELIPORT, STR_AIRPORT_HELIPORT, SPR_AIRPORT_PREVIEW_HELIPORT), AS(metropolitan, 6, 6, 1980, CalendarTime::MAX_YEAR, 6, 8, 28, ATP_TTDP_LARGE, APC_LARGE, STR_AIRPORT_METRO, SPR_AIRPORT_PREVIEW_METROPOLITAN), @@ -386,7 +395,7 @@ extern const AirportSpec _origin_airport_specs[] = { AS(helidepot, 2, 2, 1976, CalendarTime::MAX_YEAR, 4, 2, 7, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELIDEPOT, SPR_AIRPORT_PREVIEW_HELIDEPOT), AS(intercontinental, 9, 11, 2002, CalendarTime::MAX_YEAR, 10, 25, 72, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERCONTINENTAL, SPR_AIRPORT_PREVIEW_INTERCONTINENTAL), AS(helistation, 4, 2, 1980, CalendarTime::MAX_YEAR, 4, 3, 14, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELISTATION, SPR_AIRPORT_PREVIEW_HELISTATION), - AS_GENERIC(&_airportfta_oilrig, {}, {}, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), + AS_GENERIC(&_airportfta_oilrig, _tile_table_oilrig, {}, 1, 1, 0, 4, CalendarTime::MIN_YEAR, CalendarTime::MIN_YEAR, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), }; static_assert(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs));