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-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index d66407bd92..437558b8be 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -1981,7 +1981,7 @@ static void window_ride_construction_entrance_click(rct_window* w) else { gRideEntranceExitPlaceType = ENTRANCE_TYPE_RIDE_ENTRANCE; - gRideEntranceExitPlaceRideIndex = w->number & 0xFF; + gRideEntranceExitPlaceRideIndex = static_cast(w->number); gRideEntranceExitPlaceStationIndex = 0; input_set_flag(INPUT_FLAG_6, true); ride_construction_invalidate_current_track(); 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..e72f07d692 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -259,11 +259,12 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const ride->track_colour[i].supports = _td.track_support_colour[i]; } - for (int32_t i = 0; i <= MAX_VEHICLES_PER_RIDE; i++) + for (size_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(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..dc11084497 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 (size_t i = RCT1_MAX_TRAINS_PER_RIDE; 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 99b35d6368..94667395c1 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -3095,7 +3095,7 @@ vehicle_colour ride_get_vehicle_colour(Ride* ride, int32_t vehicleIndex) vehicle_colour result; // Prevent indexing array out of bounds - vehicleIndex = std::min(vehicleIndex, MAX_CARS_PER_TRAIN); + vehicleIndex = std::min(vehicleIndex, MAX_CARS_PER_TRAIN); result.main = ride->vehicle_colours[vehicleIndex].Body; result.additional_1 = ride->vehicle_colours[vehicleIndex].Trim; @@ -6402,7 +6402,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, MAX_VEHICLES_PER_RIDE); break; case RideMode::ReverseInclineLaunchedShuttle: case RideMode::PoweredLaunchPasstrough: @@ -6434,7 +6434,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 { @@ -6463,7 +6463,7 @@ void Ride::UpdateMaxVehicles() { maxNumTrains++; length += totalSpacing; - } while (maxNumTrains < 31 && length < trackLength); + } while (maxNumTrains < MAX_VEHICLES_PER_RIDE && length < trackLength); } break; } @@ -6482,7 +6482,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 0621cb9f89..af5956ad43 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -36,12 +36,13 @@ 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 = 31; +constexpr const uint8_t MAX_CARS_PER_TRAIN = 255; +constexpr const uint8_t MAX_VEHICLE_COLOURS = std::max(MAX_CARS_PER_TRAIN, MAX_VEHICLES_PER_RIDE); #define NUM_COLOUR_SCHEMES 4 #define MAX_CATEGORIES_PER_RIDE 2 #define DOWNTIME_HISTORY_SIZE 8 #define CUSTOMER_HISTORY_SIZE 10 -#define MAX_CARS_PER_TRAIN 255 #define MAX_STATIONS 4 #define MAX_RIDES 255 #define RIDE_TYPE_NULL 255 @@ -215,7 +216,7 @@ struct Ride ObjectEntryIndex subtype; RideMode mode; uint8_t colour_scheme_type; - VehicleColour vehicle_colours[MAX_CARS_PER_TRAIN]; + VehicleColour vehicle_colours[MAX_VEHICLE_COLOURS]; // 0 = closed, 1 = open, 2 = test uint8_t status; std::string custom_name;