diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 8472a6b37c..d5ff5f4ac3 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2702,7 +2702,7 @@ static void window_ride_vehicle_mousedown(rct_window* w, rct_widgetindex widgetI window_ride_show_vehicle_type_dropdown(w, &w->widgets[widgetIndex]); break; case WIDX_VEHICLE_TRAINS_INCREASE: - if (ride->num_vehicles < 32) + if (ride->num_vehicles < MAX_VEHICLES_PER_RIDE) ride->SetNumVehicles(ride->num_vehicles + 1); break; case WIDX_VEHICLE_TRAINS_DECREASE: @@ -2710,7 +2710,7 @@ static void window_ride_vehicle_mousedown(rct_window* w, rct_widgetindex widgetI ride->SetNumVehicles(ride->num_vehicles - 1); break; case WIDX_VEHICLE_CARS_PER_TRAIN_INCREASE: - if (ride->num_cars_per_train < 255) + if (ride->num_cars_per_train < MAX_CARS_PER_TRAIN) ride->SetNumCarsPerVehicle(ride->num_cars_per_train + 1); break; case WIDX_VEHICLE_CARS_PER_TRAIN_DECREASE: diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index 45498fc432..7b481473a7 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -161,7 +161,7 @@ GameActions::Result::Ptr RideCreateAction::Execute() const ride->num_stations = 0; ride->num_vehicles = 1; ride->proposed_num_vehicles = 32; - ride->max_trains = 32; + ride->max_trains = MAX_VEHICLES_PER_RIDE; ride->num_cars_per_train = 1; ride->proposed_num_cars_per_train = 12; ride->min_waiting_time = 10; diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index 9119edb609..e9c0307fc0 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -261,9 +261,10 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const for (int32_t i = 0; i <= MAX_VEHICLES_PER_RIDE; i++) { - ride->vehicle_colours[i].Body = _td.vehicle_colours[i].body_colour; - ride->vehicle_colours[i].Trim = _td.vehicle_colours[i].trim_colour; - ride->vehicle_colours[i].Ternary = _td.vehicle_additional_colour[i]; + auto tdIndex = std::min(size_t(i), std::size(_td.vehicle_colours) - 1); + ride->vehicle_colours[i].Body = _td.vehicle_colours[tdIndex].body_colour; + ride->vehicle_colours[i].Trim = _td.vehicle_colours[tdIndex].trim_colour; + ride->vehicle_colours[i].Ternary = _td.vehicle_additional_colour[tdIndex]; } for (int32_t count = 1; count == 1 || r->Error != GameActions::Status::Ok; ++count) diff --git a/src/openrct2/rct1/T4Importer.cpp b/src/openrct2/rct1/T4Importer.cpp index 9f2a1579dd..79bf5fe764 100644 --- a/src/openrct2/rct1/T4Importer.cpp +++ b/src/openrct2/rct1/T4Importer.cpp @@ -212,7 +212,7 @@ private: } } // Set remaining vehicles to same colour as first vehicle - for (int32_t i = RCT1_MAX_TRAINS_PER_RIDE; i <= MAX_VEHICLES_PER_RIDE; i++) + for (int32_t i = RCT1_MAX_TRAINS_PER_RIDE; size_t(i) < std::size(td->vehicle_colours); i++) { td->vehicle_colours[i] = td->vehicle_colours[0]; td->vehicle_additional_colour[i] = td->vehicle_additional_colour[0]; diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 95f5bef630..5037e93955 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -6401,7 +6401,7 @@ void Ride::UpdateMaxVehicles() { case RideMode::ContinuousCircuitBlockSectioned: case RideMode::PoweredLaunchBlockSectioned: - maxNumTrains = std::clamp(num_stations + num_block_brakes - 1, 1, 31); + maxNumTrains = std::clamp(num_stations + num_block_brakes - 1, 1, int32_t(MAX_VEHICLES_PER_RIDE)); break; case RideMode::ReverseInclineLaunchedShuttle: case RideMode::PoweredLaunchPasstrough: @@ -6433,7 +6433,7 @@ void Ride::UpdateMaxVehicles() if ((mode != RideMode::StationToStation && mode != RideMode::ContinuousCircuit) || !(GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS))) { - maxNumTrains = std::min(maxNumTrains, 31); + maxNumTrains = std::min(maxNumTrains, int32_t(MAX_VEHICLES_PER_RIDE)); } else { @@ -6462,7 +6462,7 @@ void Ride::UpdateMaxVehicles() { maxNumTrains++; length += totalSpacing; - } while (maxNumTrains < 31 && length < trackLength); + } while (maxNumTrains < MAX_VEHICLES_PER_RIDE && length < trackLength); } break; } @@ -6481,7 +6481,7 @@ void Ride::UpdateMaxVehicles() if (gCheatsDisableTrainLengthLimit) { - maxNumTrains = 31; + maxNumTrains = MAX_VEHICLES_PER_RIDE; } numVehicles = std::min(proposed_num_vehicles, static_cast(maxNumTrains)); diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index 69d5fd3657..eeb2d0d0dd 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -36,7 +36,7 @@ struct Vehicle; // The max number of different types of vehicle. // Examples of vehicles here are the locomotive, tender and carriage of the Miniature Railway. #define MAX_VEHICLES_PER_RIDE_ENTRY 4 -#define MAX_VEHICLES_PER_RIDE 31 +constexpr const uint8_t MAX_VEHICLES_PER_RIDE = 255; #define NUM_COLOUR_SCHEMES 4 #define MAX_CATEGORIES_PER_RIDE 2 #define DOWNTIME_HISTORY_SIZE 8 @@ -208,7 +208,7 @@ struct Ride ObjectEntryIndex subtype; RideMode mode; uint8_t colour_scheme_type; - VehicleColour vehicle_colours[MAX_CARS_PER_TRAIN]; + VehicleColour vehicle_colours[MAX_VEHICLES_PER_RIDE + 1]; // 0 = closed, 1 = open, 2 = test uint8_t status; std::string custom_name;