diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -36,6 +36,7 @@ #include "newgrf_townname.h" #include "newgrf_industries.h" #include "newgrf_airporttiles.h" +#include "newgrf_airport.h" #include "rev.h" #include "fios.h" #include "rail.h" @@ -5907,6 +5908,7 @@ static void ResetNewGRFData() /* Reset airport-related structures */ ResetCustomAirports(); + AirportSpec::ResetAirports(); AirportTileSpec::ResetAirportTiles(); /* Reset canal sprite groups and flags */ diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -18,6 +18,8 @@ AirportSpec AirportSpec::dummy = {NULL, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, ATP_TTDP_LARGE}; AirportSpec AirportSpec::oilrig = {NULL, NULL, 0, 1, 1, 0, 4, MIN_YEAR, MIN_YEAR, ATP_TTDP_OILRIG}; +AirportSpec AirportSpec::specs[NUM_AIRPORTS]; + /** * Retrieve airport spec for the given airport * @param type index of airport @@ -26,9 +28,8 @@ AirportSpec AirportSpec::oilrig = {NULL, /* static */ const AirportSpec *AirportSpec::Get(byte type) { if (type == AT_OILRIG) return &oilrig; - assert(type < NUM_AIRPORTS); - extern const AirportSpec _origin_airport_specs[]; - return &_origin_airport_specs[type]; + assert(type < lengthof(AirportSpec::specs)); + return &AirportSpec::specs[type]; } bool AirportSpec::IsAvailable() const @@ -37,3 +38,13 @@ bool AirportSpec::IsAvailable() const if (_settings_game.station.never_expire_airports) return true; return _cur_year <= this->max_year; } + +/** + * This function initialize the airportspec array. + */ +void AirportSpec::ResetAirports() +{ + extern const AirportSpec _origin_airport_specs[]; + memset(&AirportSpec::specs, 0, sizeof(AirportSpec::specs)); + memcpy(&AirportSpec::specs, &_origin_airport_specs, sizeof(AirportSpec) * NUM_AIRPORTS); +} diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -50,8 +50,13 @@ struct AirportSpec { bool IsAvailable() const; + static void ResetAirports(); + static AirportSpec dummy; static AirportSpec oilrig; + +private: + static AirportSpec specs[NUM_AIRPORTS]; };