From 429f6fb8455d906dbbb8508532603a012e8939bf Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 24 Feb 2021 13:28:39 +0100 Subject: [PATCH 1/8] Always return an RTD --- src/openrct2/ride/Ride.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 7268a2267a..b62dd0d2a6 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -7332,6 +7332,9 @@ uint64_t Ride::GetAvailableModes() const const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const { + if (type >= std::size(RideTypeDescriptors)) + return DummyRTD; + return RideTypeDescriptors[type]; } From 56399e71882285d5dcec93caceeb299f660a6f02 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 24 Feb 2021 13:53:01 +0100 Subject: [PATCH 2/8] Use the RTD instead of ride_type_has_flag() --- src/openrct2-ui/windows/GuestList.cpp | 2 +- src/openrct2-ui/windows/MazeConstruction.cpp | 2 +- src/openrct2-ui/windows/NewCampaign.cpp | 5 +- src/openrct2-ui/windows/Ride.cpp | 52 +++++++++---------- src/openrct2-ui/windows/RideConstruction.cpp | 10 ++-- src/openrct2/actions/RideCreateAction.cpp | 2 +- src/openrct2/actions/RideSetSettingAction.cpp | 2 +- src/openrct2/actions/RideSetVehicleAction.cpp | 2 +- src/openrct2/actions/TrackRemoveAction.cpp | 2 +- src/openrct2/management/Award.cpp | 8 +-- src/openrct2/peep/Guest.cpp | 22 ++++---- src/openrct2/peep/GuestPathfinding.cpp | 4 +- src/openrct2/peep/Peep.cpp | 18 ++++--- src/openrct2/peep/Staff.cpp | 6 +-- src/openrct2/ride/Ride.cpp | 39 +++++++------- src/openrct2/ride/RideRatings.cpp | 4 +- src/openrct2/ride/Track.cpp | 4 +- src/openrct2/ride/Vehicle.cpp | 10 ++-- src/openrct2/windows/_legacy.cpp | 2 +- src/openrct2/world/Banner.cpp | 4 +- src/openrct2/world/Park.cpp | 4 +- 21 files changed, 102 insertions(+), 102 deletions(-) diff --git a/src/openrct2-ui/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp index 5e36426445..1a1cac888e 100644 --- a/src/openrct2-ui/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -186,7 +186,7 @@ public: if (guestRide != nullptr) { ft.Add( - ride_type_has_flag(guestRide->type, RIDE_TYPE_FLAG_IN_RIDE) ? STR_IN_RIDE : STR_ON_RIDE); + guestRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IN_RIDE) ? STR_IN_RIDE : STR_ON_RIDE); guestRide->FormatNameTo(ft); _selectedFilter = GuestFilterType::Guests; diff --git a/src/openrct2-ui/windows/MazeConstruction.cpp b/src/openrct2-ui/windows/MazeConstruction.cpp index 38bc9eb022..496fb65980 100644 --- a/src/openrct2-ui/windows/MazeConstruction.cpp +++ b/src/openrct2-ui/windows/MazeConstruction.cpp @@ -384,7 +384,7 @@ static void window_maze_construction_entrance_tooldown(const ScreenCoordsXY& scr if (ride != nullptr && ride_are_all_possible_entrances_and_exits_built(ride)) { tool_cancel(); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) window_close_by_class(WC_RIDE_CONSTRUCTION); } else diff --git a/src/openrct2-ui/windows/NewCampaign.cpp b/src/openrct2-ui/windows/NewCampaign.cpp index 734438d590..7bcecd476e 100644 --- a/src/openrct2-ui/windows/NewCampaign.cpp +++ b/src/openrct2-ui/windows/NewCampaign.cpp @@ -404,10 +404,9 @@ void WindowCampaignRefreshRides() { if (ride.status == RIDE_STATUS_OPEN) { - if (!ride_type_has_flag( - ride.type, + if (!ride.GetRideTypeDescriptor().HasFlag( RIDE_TYPE_FLAG_IS_SHOP | RIDE_TYPE_FLAG_SELLS_FOOD | RIDE_TYPE_FLAG_SELLS_DRINKS - | RIDE_TYPE_FLAG_IS_TOILET)) + | RIDE_TYPE_FLAG_IS_TOILET)) { window_new_campaign_rides.push_back(ride.id); } diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 54d1ca3fc9..9523725c6c 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1142,16 +1142,15 @@ static void window_ride_disable_tabs(rct_window* w) if (ride == nullptr) return; - uint8_t ride_type = ride->type; // ecx const auto& rtd = ride->GetRideTypeDescriptor(); if (!rtd.HasFlag(RIDE_TYPE_FLAG_HAS_DATA_LOGGING)) disabled_tabs |= (1 << WIDX_TAB_8); // 0x800 - if (ride_type == RIDE_TYPE_MINI_GOLF) + if (ride->type == RIDE_TYPE_MINI_GOLF) disabled_tabs |= (1 << WIDX_TAB_2 | 1 << WIDX_TAB_3 | 1 << WIDX_TAB_4); // 0xE0 - if (ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (rtd.HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) disabled_tabs |= (1 << WIDX_TAB_2); // 0x20 if (!rtd.HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN) && !rtd.HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL) @@ -1169,7 +1168,7 @@ static void window_ride_disable_tabs(rct_window* w) disabled_tabs |= (1 << WIDX_TAB_6); // 0x200 } - if (ride_type == RIDE_TYPE_CASH_MACHINE || ride_type == RIDE_TYPE_FIRST_AID || (gParkFlags & PARK_FLAGS_NO_MONEY) != 0) + if (ride->type == RIDE_TYPE_CASH_MACHINE || ride->type == RIDE_TYPE_FIRST_AID || (gParkFlags & PARK_FLAGS_NO_MONEY) != 0) disabled_tabs |= (1 << WIDX_TAB_9); // 0x1000 if ((gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) != 0) @@ -1333,7 +1332,7 @@ static rct_window* window_ride_open_station(Ride* ride, StationIndex stationInde if (ride->type >= RIDE_TYPE_COUNT) return nullptr; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) return window_ride_main_open(ride); auto w = window_bring_to_front_by_number(WC_RIDE, ride->id); @@ -1863,7 +1862,7 @@ static void window_ride_show_view_dropdown(rct_window* w, rct_widget* widget) return; int32_t numItems = 1; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) { numItems += ride->num_stations; numItems += ride->num_vehicles; @@ -2084,7 +2083,7 @@ static void populate_vehicle_type_dropdown(Ride* ride) int32_t rideTypeIterator, rideTypeIteratorMax; if (gCheatsShowVehiclesFromOtherTrackTypes && !( - ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE + ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE || ride->type == RIDE_TYPE_MINI_GOLF)) { selectionShouldBeExpanded = true; @@ -3482,7 +3481,7 @@ static void window_ride_operating_invalidate(rct_window* w) } // Leave if another vehicle arrives at station - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION) && ride->num_vehicles > 1 && !ride->IsBlockSectioned()) { window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].type = WindowWidgetType::Checkbox; @@ -3500,7 +3499,7 @@ static void window_ride_operating_invalidate(rct_window* w) } // Synchronise with adjacent stations - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) { window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].type = WindowWidgetType::Checkbox; window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].image @@ -3518,7 +3517,7 @@ static void window_ride_operating_invalidate(rct_window* w) // Waiting window_ride_operating_widgets[WIDX_LOAD].text = VehicleLoadNames[(ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD_MASK)]; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS)) { window_ride_operating_widgets[WIDX_LOAD_CHECKBOX].type = WindowWidgetType::Checkbox; window_ride_operating_widgets[WIDX_LOAD].type = WindowWidgetType::DropdownMenu; @@ -3624,7 +3623,7 @@ static void window_ride_operating_invalidate(rct_window* w) format = STR_MAX_PEOPLE_ON_RIDE_VALUE; caption = STR_MAX_PEOPLE_ON_RIDE; tooltip = STR_MAX_PEOPLE_ON_RIDE_TIP; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) format = 0; break; } @@ -4184,7 +4183,7 @@ static int32_t window_ride_has_track_colour(Ride* ride, int32_t trackColour) { // Get station flags (shops don't have them) auto stationObjFlags = 0; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { auto stationObj = ride_get_station_object(ride); if (stationObj != nullptr) @@ -4197,12 +4196,12 @@ static int32_t window_ride_has_track_colour(Ride* ride, int32_t trackColour) { case 0: return (stationObjFlags & STATION_OBJECT_FLAGS::HAS_PRIMARY_COLOUR) - || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN); + || ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN); case 1: return (stationObjFlags & STATION_OBJECT_FLAGS::HAS_SECONDARY_COLOUR) - || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL); + || ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL); case 2: - return ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS); + return ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS); default: return 0; } @@ -4600,7 +4599,7 @@ static void window_ride_colour_invalidate(rct_window* w) } // Track, multiple colour schemes - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR)) { window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME].type = WindowWidgetType::DropdownMenu; window_ride_colour_widgets[WIDX_TRACK_COLOUR_SCHEME_DROPDOWN].type = WindowWidgetType::Button; @@ -4648,10 +4647,9 @@ static void window_ride_colour_invalidate(rct_window* w) } // Track preview - if (ride_type_has_flag( - ride->type, + if (ride->GetRideTypeDescriptor().HasFlag( RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL - | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS)) + | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS)) window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WindowWidgetType::Spinner; else window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WindowWidgetType::Empty; @@ -4679,8 +4677,8 @@ static void window_ride_colour_invalidate(rct_window* w) } // Vehicle colours - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES) - && ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES) + && ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS)) { int32_t vehicleColourSchemeType = ride->colour_scheme_type & 3; if (vehicleColourSchemeType == 0) @@ -4733,7 +4731,7 @@ static void window_ride_colour_invalidate(rct_window* w) } // Vehicle colour scheme type - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL) && (ride->num_cars_per_train | ride->num_vehicles) > 1) { window_ride_colour_widgets[WIDX_VEHICLE_COLOUR_SCHEME].type = WindowWidgetType::DropdownMenu; @@ -5406,7 +5404,7 @@ static void window_ride_measurements_mousedown(rct_window* w, rct_widgetindex wi { w->windowPos.x + widget->left, w->windowPos.y + widget->top }, widget->height() + 1, w->colours[1], Dropdown::Flag::StayOpen, 2); gDropdownDefaultIndex = 0; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) { // Disable saving without scenery if we're a flat ride Dropdown::SetDisabled(0, true); @@ -5732,7 +5730,7 @@ static void window_ride_measurements_paint(rct_window* w, rct_drawpixelinfo* dpi screenCoords.y += LIST_ROW_HEIGHT; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_G_FORCES)) { // Max. positive vertical G's maxPositiveVerticalGs = ride->max_positive_vertical_g; @@ -5760,7 +5758,7 @@ static void window_ride_measurements_paint(rct_window* w, rct_drawpixelinfo* dpi screenCoords.y += LIST_ROW_HEIGHT; } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_DROPS)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_DROPS)) { // Drops drops = ride->drops & 0x3F; @@ -6008,7 +6006,7 @@ static void window_ride_graphs_invalidate(rct_window* w) w->pressed_widgets |= (1LL << (WIDX_GRAPH_VELOCITY + (w->list_information_type & 0xFF))); // Hide graph buttons that are not applicable - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_G_FORCES)) { window_ride_graphs_widgets[WIDX_GRAPH_VERTICAL].type = WindowWidgetType::Button; window_ride_graphs_widgets[WIDX_GRAPH_LATERAL].type = WindowWidgetType::Button; @@ -6839,7 +6837,7 @@ static void window_ride_customer_invalidate(rct_window* w) ride->FormatNameTo(ft); window_ride_customer_widgets[WIDX_SHOW_GUESTS_THOUGHTS].type = WindowWidgetType::FlatBtn; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { window_ride_customer_widgets[WIDX_SHOW_GUESTS_ON_RIDE].type = WindowWidgetType::Empty; window_ride_customer_widgets[WIDX_SHOW_GUESTS_QUEUING].type = WindowWidgetType::Empty; diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 78e48cdac0..69b5b78951 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2727,7 +2727,7 @@ static void window_ride_construction_update_possible_ride_configurations() continue; } - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) { if (TrackDefinitions[trackType].type == TRACK_HELIX_SMALL || TrackDefinitions[trackType].type == TRACK_HELIX_LARGE) { @@ -2749,7 +2749,7 @@ static void window_ride_construction_update_possible_ride_configurations() _currentDisabledSpecialTrackPieces |= (1 << currentPossibleRideConfigurationIndex); if (_currentTrackPieceDirection < 4 && slope == _previousTrackSlopeEnd && bank == _previousTrackBankEnd && (trackType != TrackElemType::TowerBase - || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_ALLOW_EXTRA_TOWER_BASES))) + || ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_EXTRA_TOWER_BASES))) { _currentDisabledSpecialTrackPieces &= ~(1 << currentPossibleRideConfigurationIndex); _numCurrentPossibleSpecialTrackPieces++; @@ -2903,7 +2903,7 @@ static void window_ride_construction_update_widgets(rct_window* w) int32_t x; if ((is_track_enabled(TRACK_LIFT_HILL) && (_currentTrackCurve & RideConstructionSpecialPieceSelected) == 0) - || (gCheatsEnableChainLiftOnAllTrack && ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK))) + || (gCheatsEnableChainLiftOnAllTrack && ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK))) { window_ride_construction_widgets[WIDX_CHAIN_LIFT].type = WindowWidgetType::FlatBtn; x = 9; @@ -3540,7 +3540,7 @@ void ride_construction_toolupdate_construct(const ScreenCoordsXY& screenCoords) } if (_autoRotatingShop && _rideConstructionState == RIDE_CONSTRUCTION_STATE_PLACE - && ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + && ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { TileElement* pathsByDir[NumOrthogonalDirections]; @@ -3870,7 +3870,7 @@ static void ride_construction_tooldown_entrance_exit(const ScreenCoordsXY& scree if (ride != nullptr && ride_are_all_possible_entrances_and_exits_built(ride)) { tool_cancel(); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) { window_close_by_class(WC_RIDE_CONSTRUCTION); } diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index 0df7763115..42c4eccebb 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -245,7 +245,7 @@ GameActions::Result::Ptr RideCreateAction::Execute() const } // Set the on-ride photo price, whether the ride has one or not (except shops). - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP) && shop_item_has_common_price(ShopItem::Photo)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP) && shop_item_has_common_price(ShopItem::Photo)) { money32 price = shop_item_get_common_price(ride, ShopItem::Photo); if (price != MONEY32_UNDEFINED) diff --git a/src/openrct2/actions/RideSetSettingAction.cpp b/src/openrct2/actions/RideSetSettingAction.cpp index e6f163af87..4a6b1385fd 100644 --- a/src/openrct2/actions/RideSetSettingAction.cpp +++ b/src/openrct2/actions/RideSetSettingAction.cpp @@ -287,7 +287,7 @@ rct_string_id RideSetSettingAction::GetOperationErrorMessage(Ride* ride) const case RideMode::BackwardRotation: return STR_CANT_CHANGE_NUMBER_OF_ROTATIONS; default: - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) { return STR_CANT_CHANGE_THIS; } diff --git a/src/openrct2/actions/RideSetVehicleAction.cpp b/src/openrct2/actions/RideSetVehicleAction.cpp index 30c524cb83..20c6f9b139 100644 --- a/src/openrct2/actions/RideSetVehicleAction.cpp +++ b/src/openrct2/actions/RideSetVehicleAction.cpp @@ -213,7 +213,7 @@ bool RideSetVehicleAction::ride_is_vehicle_type_valid(Ride* ride) const if (gCheatsShowVehiclesFromOtherTrackTypes && !( - ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE + ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE || ride->type == RIDE_TYPE_MINI_GOLF)) { selectionShouldBeExpanded = true; diff --git a/src/openrct2/actions/TrackRemoveAction.cpp b/src/openrct2/actions/TrackRemoveAction.cpp index 95d00fabcd..d1946ffbe2 100644 --- a/src/openrct2/actions/TrackRemoveAction.cpp +++ b/src/openrct2/actions/TrackRemoveAction.cpp @@ -410,7 +410,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const } } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_TRACK_MUST_BE_ON_WATER)) { surfaceElement->SetHasTrackThatNeedsWater(false); } diff --git a/src/openrct2/management/Award.cpp b/src/openrct2/management/Award.cpp index 550cf11dc8..8f75a42507 100644 --- a/src/openrct2/management/Award.cpp +++ b/src/openrct2/management/Award.cpp @@ -284,7 +284,7 @@ static bool award_is_deserved_best_food(int32_t activeAwardTypes) { if (ride.status != RIDE_STATUS_OPEN) continue; - if (!ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_SELLS_FOOD)) + if (!ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SELLS_FOOD)) continue; shops++; @@ -328,7 +328,7 @@ static bool award_is_deserved_worst_food(int32_t activeAwardTypes) { if (ride.status != RIDE_STATUS_OPEN) continue; - if (!ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_SELLS_FOOD)) + if (!ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SELLS_FOOD)) continue; shops++; @@ -453,7 +453,7 @@ static bool award_is_deserved_best_custom_designed_rides(int32_t activeAwardType auto customDesignedRides = 0; for (const auto& ride : GetRideManager()) { - if (!ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) continue; if (ride.lifecycle_flags & RIDE_LIFECYCLE_NOT_CUSTOM_DESIGN) continue; @@ -481,7 +481,7 @@ static bool award_is_deserved_most_dazzling_ride_colours(int32_t activeAwardType auto colourfulRides = 0; for (const auto& ride : GetRideManager()) { - if (!ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) continue; countedRides++; diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 70c4f01d78..814ab45c8a 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -777,7 +777,7 @@ void Guest::Tick128UpdateGuest(int32_t index) auto ride = get_ride(CurrentRide); if (ride != nullptr) { - PeepThoughtType thought_type = ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE) + PeepThoughtType thought_type = ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IN_RIDE) ? PeepThoughtType::GetOut : PeepThoughtType::GetOff; @@ -1720,7 +1720,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t } } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { return ShouldGoToShop(ride, peepAtRide); } @@ -2207,7 +2207,7 @@ static void peep_ride_is_too_intense(Guest* peep, Ride* ride, bool peepAtRide) static Vehicle* peep_choose_car_from_ride(Peep* peep, Ride* ride, std::vector& car_array) { uint8_t chosen_car = scenario_rand(); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_G_FORCES) && ((chosen_car & 0xC) != 0xC)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_G_FORCES) && ((chosen_car & 0xC) != 0xC)) { chosen_car = (scenario_rand() & 1) ? 0 : static_cast(car_array.size()) - 1; } @@ -2611,7 +2611,7 @@ static void peep_update_ride_nausea_growth(Peep* peep, Ride* ride) static bool peep_should_go_on_ride_again(Peep* peep, Ride* ride) { - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN)) return false; if (!ride_has_ratings(ride)) return false; @@ -2998,7 +2998,7 @@ static void peep_head_for_nearest_ride_with_flags(Guest* peep, int32_t rideTypeF return; } peep_head_for_nearest_ride( - peep, false, [rideTypeFlags](const Ride& ride) { return ride_type_has_flag(ride.type, rideTypeFlags); }); + peep, false, [rideTypeFlags](const Ride& ride) { return ride.GetRideTypeDescriptor().HasFlag(rideTypeFlags); }); } /** @@ -3229,7 +3229,7 @@ void Guest::UpdateRideAtEntrance() std::vector carArray; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) { if (ride->num_riders >= ride->operation_option) return; @@ -3256,7 +3256,7 @@ void Guest::UpdateRideAtEntrance() return; } - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) { Vehicle* vehicle = peep_choose_car_from_ride(this, ride, carArray); peep_choose_seat_from_car(this, ride, vehicle); @@ -3429,7 +3429,7 @@ void Guest::UpdateRideAdvanceThroughEntrance() } Guard::Assert(RideSubState == PeepRideSubState::LeaveEntrance, "Peep ridesubstate should be LeaveEntrance"); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) { auto entranceLocation = ride_get_entrance_location(ride, CurrentRideStation).ToCoordsXYZD(); Guard::Assert(!entranceLocation.isNull()); @@ -3617,7 +3617,7 @@ void Guest::UpdateRideFreeVehicleEnterRide(Ride* ride) ride->FormatNameTo(ft); rct_string_id msg_string; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IN_RIDE)) msg_string = STR_PEEP_TRACKING_PEEP_IS_IN_X; else msg_string = STR_PEEP_TRACKING_PEEP_IS_ON_X; @@ -3671,7 +3671,7 @@ void Guest::UpdateRideFreeVehicleCheck() if (ride == nullptr) return; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_NO_VEHICLES)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES)) { if (ride->status != RIDE_STATUS_OPEN || ride->vehicle_change_timeout != 0 || (++RejoinQueueTimeout) == 0) { @@ -3897,7 +3897,7 @@ void Guest::UpdateRideLeaveVehicle() platformLocation.direction = direction_reverse(exitLocation.direction); - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) { for (; vehicle != nullptr && !vehicle->IsHead(); vehicle = GetEntity(vehicle->prev_vehicle_on_ride)) { diff --git a/src/openrct2/peep/GuestPathfinding.cpp b/src/openrct2/peep/GuestPathfinding.cpp index 8c00fd605f..3fc313fd9b 100644 --- a/src/openrct2/peep/GuestPathfinding.cpp +++ b/src/openrct2/peep/GuestPathfinding.cpp @@ -345,7 +345,7 @@ static uint8_t footpath_element_dest_in_dir( continue; ride_id_t rideIndex = tileElement->AsTrack()->GetRideIndex(); auto ride = get_ride(rideIndex); - if (ride != nullptr && ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride != nullptr && ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { *outRideIndex = rideIndex; return PATH_SEARCH_SHOP_ENTRANCE; @@ -754,7 +754,7 @@ static void peep_pathfind_heuristic_search( * tile. */ rideIndex = tileElement->AsTrack()->GetRideIndex(); auto ride = get_ride(rideIndex); - if (ride == nullptr || !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride == nullptr || !ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) continue; found = true; diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index b82da13b0d..d53c1c37b1 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -1215,7 +1215,7 @@ void peep_problem_warnings_update() break; } ride = get_ride(peep->GuestHeadingToRideId); - if (ride != nullptr && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (ride != nullptr && !ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) hunger_counter++; break; @@ -1226,7 +1226,7 @@ void peep_problem_warnings_update() break; } ride = get_ride(peep->GuestHeadingToRideId); - if (ride != nullptr && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_SELLS_DRINKS)) + if (ride != nullptr && !ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SELLS_DRINKS)) thirst_counter++; break; @@ -1237,7 +1237,7 @@ void peep_problem_warnings_update() break; } ride = get_ride(peep->GuestHeadingToRideId); - if (ride != nullptr && !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_TOILET)) + if (ride != nullptr && !ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) toilet_counter++; break; @@ -1794,7 +1794,8 @@ void Peep::FormatActionTo(Formatter& ft) const auto ride = get_ride(CurrentRide); if (ride != nullptr) { - ft.Add(ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE) ? STR_IN_RIDE : STR_ON_RIDE); + ft.Add( + ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IN_RIDE) ? STR_IN_RIDE : STR_ON_RIDE); ride->FormatNameTo(ft); } else @@ -2863,7 +2864,7 @@ static bool peep_interact_with_shop(Peep* peep, const CoordsXYE& coords) { ride_id_t rideIndex = coords.element->AsTrack()->GetRideIndex(); auto ride = get_ride(rideIndex); - if (ride == nullptr || !ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride == nullptr || !ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) return false; auto* guest = peep->As(); @@ -2900,7 +2901,7 @@ static bool peep_interact_with_shop(Peep* peep, const CoordsXYE& coords) return true; } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_PEEP_SHOULD_GO_INSIDE_FACILITY)) { peep->TimeLost = 0; if (!guest->ShouldGoOnRide(ride, 0, false, false)) @@ -2933,8 +2934,9 @@ static bool peep_interact_with_shop(Peep* peep, const CoordsXYE& coords) auto ft = Formatter(); peep->FormatNameTo(ft); ride->FormatNameTo(ft); - rct_string_id string_id = ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE) ? STR_PEEP_TRACKING_PEEP_IS_IN_X - : STR_PEEP_TRACKING_PEEP_IS_ON_X; + rct_string_id string_id = ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IN_RIDE) + ? STR_PEEP_TRACKING_PEEP_IS_IN_X + : STR_PEEP_TRACKING_PEEP_IS_ON_X; if (gConfigNotifications.guest_used_facility) { News::AddItemToQueue(News::ItemType::PeepOnRide, string_id, peep->sprite_index, ft); diff --git a/src/openrct2/peep/Staff.cpp b/src/openrct2/peep/Staff.cpp index 924168bdf6..d7d86ceff4 100644 --- a/src/openrct2/peep/Staff.cpp +++ b/src/openrct2/peep/Staff.cpp @@ -2268,7 +2268,7 @@ bool Staff::UpdateFixingMoveToStationEnd(bool firstRun, const Ride* ride) { if (!firstRun) { - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_HAS_NO_TRACK)) { return true; } @@ -2354,7 +2354,7 @@ bool Staff::UpdateFixingMoveToStationStart(bool firstRun, const Ride* ride) { if (!firstRun) { - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_HAS_NO_TRACK)) { return true; } @@ -2430,7 +2430,7 @@ bool Staff::UpdateFixingFixStationStart(bool firstRun, const Ride* ride) { if (!firstRun) { - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION | RIDE_TYPE_FLAG_HAS_NO_TRACK)) { return true; } diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index b62dd0d2a6..56ea596a29 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -807,7 +807,7 @@ void Ride::FormatStatusTo(Formatter& ft) const } else if (status == RIDE_STATUS_CLOSED) { - if (!ride_type_has_flag(type, RIDE_TYPE_FLAG_IS_SHOP)) + if (!GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { if (num_riders != 0) { @@ -848,7 +848,7 @@ void Ride::FormatStatusTo(Formatter& ft) const ft.Add(STR_NONE); } } - else if (!ride_type_has_flag(type, RIDE_TYPE_FLAG_IS_SHOP)) + else if (!GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) { ft.Add(num_riders == 1 ? STR_PERSON_ON_RIDE : STR_PEOPLE_ON_RIDE); ft.Add(num_riders); @@ -1480,7 +1480,7 @@ void ride_construction_set_default_next_piece() tileElement = trackBeginEnd.begin_element; trackType = tileElement->AsTrack()->GetTrackType(); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) { ride_construction_reset_current_piece(); return; @@ -1854,7 +1854,7 @@ bool ride_modify(CoordsXYE* input) return ride_modify_maze(tileElement); } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS)) { CoordsXYE endOfTrackElement{}; if (ride_find_track_gap(ride, &tileElement, &endOfTrackElement)) @@ -1880,7 +1880,7 @@ bool ride_modify(CoordsXYE* input) _rideConstructionNextArrowPulse = 0; gMapSelectFlags &= ~MAP_SELECT_FLAG_ENABLE_ARROW; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) { window_ride_construction_update_active_elements(); return true; @@ -3195,7 +3195,7 @@ void ride_check_all_reachable() if (ride.status != RIDE_STATUS_OPEN || ride.connected_message_throttle != 0) continue; - if (ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) ride_shop_connected(&ride); else ride_entrance_exit_connected(&ride); @@ -3549,7 +3549,7 @@ static StationIndex ride_mode_check_station_present(Ride* ride) if (stationIndex == STATION_INDEX_NULL) { gGameCommandErrorText = STR_NOT_YET_CONSTRUCTED; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) return STATION_INDEX_NULL; if (ride->type == RIDE_TYPE_MAZE) @@ -3572,7 +3572,7 @@ static int32_t ride_check_for_entrance_exit(ride_id_t rideIndex) if (ride == nullptr) return 0; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) return 1; uint8_t entrance = 0; @@ -4221,7 +4221,7 @@ static Vehicle* vehicle_create_car( } else { - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) { if (RideTypeDescriptors[ride->type].StartTrackPiece != TrackElemType::FlatTrack1x4B) { @@ -4472,7 +4472,7 @@ bool Ride::CreateVehicles(const CoordsXYE& element, bool isApplying) } // - if (type != RIDE_TYPE_SPACE_RINGS && !ride_type_has_flag(type, RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) + if (type != RIDE_TYPE_SPACE_RINGS && !GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) { if (IsBlockSectioned()) { @@ -4935,7 +4935,8 @@ bool Ride::Test(int32_t newStatus, bool isApplying) if (isApplying) ride_set_start_finish_points(id, &trackElement); - if (!ride_type_has_flag(type, RIDE_TYPE_FLAG_NO_VEHICLES) && !(lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) + const auto& rtd = GetRideTypeDescriptor(); + if (!rtd.HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES) && !(lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) { if (!CreateVehicles(trackElement, isApplying)) { @@ -4943,8 +4944,8 @@ bool Ride::Test(int32_t newStatus, bool isApplying) } } - if ((RideTypeDescriptors[type].Flags & RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL) - && (lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) && !(lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) + if (rtd.HasFlag(RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL) && (lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) + && !(lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) { if (!ride_create_cable_lift(id, isApplying)) return false; @@ -5067,7 +5068,7 @@ bool Ride::Open(bool isApplying) if (isApplying) ride_set_start_finish_points(id, &trackElement); - if (!ride_type_has_flag(type, RIDE_TYPE_FLAG_NO_VEHICLES) && !(lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) + if (!GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_NO_VEHICLES) && !(lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) { if (!CreateVehicles(trackElement, isApplying)) { @@ -5826,7 +5827,7 @@ CoordsXYZD ride_get_entrance_or_exit_position_from_screen_position(const ScreenC return entranceExitCoords; } - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) { auto mapX = (word_F4418C & 0x1F) - 16; auto mapY = (word_F4418E & 0x1F) - 16; @@ -6009,7 +6010,7 @@ bool ride_select_forwards_from_back() */ bool ride_are_all_possible_entrances_and_exits_built(Ride* ride) { - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) return true; for (int32_t i = 0; i < MAX_STATIONS; i++) @@ -6094,7 +6095,7 @@ void ride_fix_breakdown(Ride* ride, int32_t reliabilityIncreaseFactor) */ void ride_update_vehicle_colours(Ride* ride) { - if (ride->type == RIDE_TYPE_SPACE_RINGS || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) + if (ride->type == RIDE_TYPE_SPACE_RINGS || ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) { gfx_invalidate_screen(); } @@ -6586,7 +6587,7 @@ void sub_6CB945(Ride* ride) tileElement->AsTrack()->SetStationIndex(stationId); direction = tileElement->GetDirection(); - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) { specialTrack = true; break; @@ -7334,7 +7335,7 @@ const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const { if (type >= std::size(RideTypeDescriptors)) return DummyRTD; - + return RideTypeDescriptors[type]; } diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 937d8a1bc6..2559f90b87 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -222,7 +222,7 @@ static void ride_ratings_update_state_2() if (tileElement->AsTrack()->GetRideIndex() != ride->id) { // Only check that the track belongs to the same ride if ride does not have buildable track - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) continue; } @@ -329,7 +329,7 @@ static void ride_ratings_update_state_5() if (tileElement->AsTrack()->GetRideIndex() != ride->id) { // Only check that the track belongs to the same ride if ride does not have buildable track - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) continue; } diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index bc7511a040..05cd057a22 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -390,7 +390,7 @@ bool track_add_station_element(CoordsXYZD loc, ride_id_t rideIndex, int32_t flag CoordsXY stationFrontLoc = loc; int32_t stationLength = 1; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) { if (ride->num_stations >= MAX_STATIONS) { @@ -543,7 +543,7 @@ bool track_remove_station_element(const CoordsXYZD& loc, ride_id_t rideIndex, in int32_t stationLength = 0; int32_t byte_F441D1 = -1; - if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_SINGLE_PIECE_STATION)) { TileElement* tileElement = map_get_track_element_at_with_direction_from_ride(loc, rideIndex); if (tileElement != nullptr) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 81dbe824c8..57e9da47c4 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -1597,7 +1597,7 @@ void Vehicle::UpdateMeasurements() curRide->stations[test_segment].SegmentLength, distance); } - if (ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) + if (curRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_G_FORCES)) { auto gForces = GetGForces(); gForces.VerticalG += curRide->previous_vertical_g; @@ -2358,7 +2358,7 @@ void Vehicle::UpdateWaitingForPassengers() } } - if (ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS)) + if (curRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS)) { if (curRide->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH) { @@ -2403,7 +2403,7 @@ void Vehicle::UpdateWaitingForPassengers() } } - if (ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS) + if (curRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS) && curRide->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD) { if (num_peeps_on_train == num_seats_on_train) @@ -2565,7 +2565,7 @@ void Vehicle::UpdateWaitingToDepart() return; } - if (ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) + if (curRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS)) { if (curRide->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS) { @@ -3507,7 +3507,7 @@ void Vehicle::CheckIfMissing() if (curRide->IsBlockSectioned()) return; - if (!ride_type_has_flag(curRide->type, RIDE_TYPE_FLAG_CHECK_FOR_STALLING)) + if (!curRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_CHECK_FOR_STALLING)) return; lost_time_out++; diff --git a/src/openrct2/windows/_legacy.cpp b/src/openrct2/windows/_legacy.cpp index c37733c455..f5f32ec940 100644 --- a/src/openrct2/windows/_legacy.cpp +++ b/src/openrct2/windows/_legacy.cpp @@ -92,7 +92,7 @@ money32 place_provisional_track_piece( int16_t z_begin, z_end; const rct_track_coordinates& coords = TrackCoordinates[trackType]; - if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) { z_begin = coords.z_begin; z_end = coords.z_end; diff --git a/src/openrct2/world/Banner.cpp b/src/openrct2/world/Banner.cpp index b8f389cea7..0291fb83c2 100644 --- a/src/openrct2/world/Banner.cpp +++ b/src/openrct2/world/Banner.cpp @@ -98,7 +98,7 @@ static uint8_t banner_get_ride_index_at(const CoordsXYZ& bannerCoords) ride_id_t rideIndex = tileElement->AsTrack()->GetRideIndex(); auto ride = get_ride(rideIndex); - if (ride == nullptr || ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride == nullptr || ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) continue; if ((tileElement->GetClearanceZ()) + (4 * COORDS_Z_STEP) <= bannerCoords.z) @@ -242,7 +242,7 @@ uint8_t banner_get_closest_ride_index(const CoordsXYZ& mapPos) auto resultDistance = std::numeric_limits::max(); for (auto& ride : GetRideManager()) { - if (ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_IS_SHOP)) + if (ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_IS_SHOP)) continue; auto rideCoords = ride.overall_view; diff --git a/src/openrct2/world/Park.cpp b/src/openrct2/world/Park.cpp index 2868069edc..d748c8678e 100644 --- a/src/openrct2/world/Park.cpp +++ b/src/openrct2/world/Park.cpp @@ -578,9 +578,9 @@ uint32_t Park::CalculateSuggestedMaxGuests() const continue; if (!(ride.lifecycle_flags & RIDE_LIFECYCLE_TESTED)) continue; - if (!ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) continue; - if (!ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_HAS_DATA_LOGGING)) + if (!ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_DATA_LOGGING)) continue; if (ride.stations[0].SegmentLength < (600 << 16)) continue; From d63e3b1d9fd935cf2a2d355733acc3aa045f0d08 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 24 Feb 2021 14:02:58 +0100 Subject: [PATCH 3/8] Replace RideTypeDescriptors[ride->type] with GetRideTypeDescriptor() --- src/openrct2-ui/windows/Map.cpp | 4 +- src/openrct2-ui/windows/Ride.cpp | 58 +++++++++---------- src/openrct2-ui/windows/RideConstruction.cpp | 16 ++--- src/openrct2/actions/MazePlaceTrackAction.cpp | 4 +- src/openrct2/actions/MazeSetTrackAction.cpp | 4 +- src/openrct2/actions/RideCreateAction.cpp | 10 ++-- src/openrct2/actions/RideDemolishAction.cpp | 2 +- src/openrct2/actions/RideSetPriceAction.cpp | 2 +- src/openrct2/actions/RideSetSettingAction.cpp | 8 +-- src/openrct2/actions/TrackPlaceAction.cpp | 30 +++++----- src/openrct2/actions/TrackRemoveAction.cpp | 8 +-- src/openrct2/actions/WallPlaceAction.cpp | 2 +- src/openrct2/peep/Guest.cpp | 20 +++---- src/openrct2/peep/Staff.cpp | 6 +- src/openrct2/ride/CableLift.cpp | 2 +- src/openrct2/ride/Ride.cpp | 24 ++++---- src/openrct2/ride/RideRatings.cpp | 20 +++---- src/openrct2/ride/TrackDesign.cpp | 2 +- src/openrct2/ride/TrackPaint.cpp | 4 +- src/openrct2/world/Park.cpp | 4 +- test/tests/RideRatings.cpp | 2 +- 21 files changed, 116 insertions(+), 116 deletions(-) diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index 9ac7f82c55..6dc8efa68d 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -1515,7 +1515,7 @@ static uint16_t map_window_get_pixel_colour_ride(const CoordsXY& c) ride = get_ride(tileElement->AsEntrance()->GetRideIndex()); if (ride != nullptr) { - const auto& colourKey = RideTypeDescriptors[ride->type].ColourKey; + const auto& colourKey = ride->GetRideTypeDescriptor().ColourKey; colourA = RideKeyColours[static_cast(colourKey)]; } break; @@ -1523,7 +1523,7 @@ static uint16_t map_window_get_pixel_colour_ride(const CoordsXY& c) ride = get_ride(tileElement->AsTrack()->GetRideIndex()); if (ride != nullptr) { - const auto& colourKey = RideTypeDescriptors[ride->type].ColourKey; + const auto& colourKey = ride->GetRideTypeDescriptor().ColourKey; colourA = RideKeyColours[static_cast(colourKey)]; } diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 9523725c6c..aae04fb0cf 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2423,7 +2423,7 @@ static void window_ride_main_invalidate(rct_window* w) else { window_ride_main_widgets[WIDX_RIDE_TYPE].type = WindowWidgetType::DropdownMenu; - window_ride_main_widgets[WIDX_RIDE_TYPE].text = RideTypeDescriptors[ride->type].Naming.Name; + window_ride_main_widgets[WIDX_RIDE_TYPE].text = ride->GetRideTypeDescriptor().Naming.Name; window_ride_main_widgets[WIDX_RIDE_TYPE_DROPDOWN].type = WindowWidgetType::Button; } @@ -2523,7 +2523,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter& ft || trackType == TrackElemType::Up25ToFlat || trackType == TrackElemType::Up60ToFlat || trackType == TrackElemType::DiagUp25ToFlat || trackType == TrackElemType::DiagUp60ToFlat) { - if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0) + if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0) { ft.Add(STR_STOPPED_BY_BLOCK_BRAKES); return STR_BLACK_STRING; @@ -2535,7 +2535,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter& ft return STR_EMPTY; auto stringId = VehicleStatusNames[static_cast(vehicle->status)]; - if ((RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_SINGLE_SESSION) + if ((ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_SINGLE_SESSION) && vehicle->status <= Vehicle::Status::UnloadingPassengers) { stringId = SingleSessionVehicleStatusNames[static_cast(vehicle->status)]; @@ -2544,7 +2544,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter& ft ft.Add(stringId); uint16_t speedInMph = (abs(vehicle->velocity) * 9) >> 18; ft.Add(speedInMph); - const RideComponentName stationName = GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.station); + const RideComponentName stationName = GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.station); ft.Add(ride->num_stations > 1 ? stationName.number : stationName.singular); ft.Add(vehicle->current_station + 1); return stringId != STR_CRASHING && stringId != STR_CRASHED_0 ? STR_BLACK_STRING : STR_RED_OUTLINED_STRING; @@ -2651,12 +2651,12 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi) { if (w->ride.view > ride->num_vehicles) { - ft.Add(GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.station).number); + ft.Add(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.station).number); ft.Add(w->ride.view - ride->num_vehicles); } else { - ft.Add(GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.vehicle).number); + ft.Add(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).number); ft.Add(w->ride.view); } } @@ -2805,7 +2805,7 @@ static OpenRCT2String window_ride_vehicle_tooltip( auto ft = Formatter(); ft.Increment(12); - RideComponentType vehicleType = RideTypeDescriptors[ride->type].NameConvention.vehicle; + RideComponentType vehicleType = ride->GetRideTypeDescriptor().NameConvention.vehicle; rct_string_id stringId = GetRideComponentName(vehicleType).count; if (ride->max_trains > 1) { @@ -2904,7 +2904,7 @@ static void window_ride_vehicle_invalidate(rct_window* w) auto ft = Formatter::Common(); ft.Increment(6); ft.Add(carsPerTrain); - RideComponentType vehicleType = RideTypeDescriptors[ride->type].NameConvention.vehicle; + RideComponentType vehicleType = ride->GetRideTypeDescriptor().NameConvention.vehicle; stringId = GetRideComponentName(vehicleType).count; if (ride->num_vehicles > 1) { @@ -3103,7 +3103,7 @@ static void window_ride_mode_tweak_increase(rct_window* w) if (ride == nullptr) return; - const auto& operatingSettings = RideTypeDescriptors[ride->type].OperatingSettings; + const auto& operatingSettings = ride->GetRideTypeDescriptor().OperatingSettings; uint8_t maxValue = operatingSettings.MaxValue; uint8_t minValue = gCheatsFastLiftHill ? 0 : operatingSettings.MinValue; @@ -3128,7 +3128,7 @@ static void window_ride_mode_tweak_decrease(rct_window* w) if (ride == nullptr) return; - const auto& operatingSettings = RideTypeDescriptors[ride->type].OperatingSettings; + const auto& operatingSettings = ride->GetRideTypeDescriptor().OperatingSettings; uint8_t maxValue = operatingSettings.MaxValue; uint8_t minValue = gCheatsFastLiftHill ? 0 : operatingSettings.MinValue; if (gCheatsFastLiftHill) @@ -3285,15 +3285,15 @@ static void window_ride_operating_mousedown(rct_window* w, rct_widgetindex widge window_ride_mode_tweak_decrease(w); break; case WIDX_LIFT_HILL_SPEED_INCREASE: - upper_bound = gCheatsFastLiftHill ? 255 : RideTypeDescriptors[ride->type].LiftData.maximum_speed; - lower_bound = gCheatsFastLiftHill ? 0 : RideTypeDescriptors[ride->type].LiftData.minimum_speed; + upper_bound = gCheatsFastLiftHill ? 255 : ride->GetRideTypeDescriptor().LiftData.maximum_speed; + lower_bound = gCheatsFastLiftHill ? 0 : ride->GetRideTypeDescriptor().LiftData.minimum_speed; set_operating_setting( w->number, RideSetSetting::LiftHillSpeed, std::clamp(ride->lift_hill_speed + 1, lower_bound, upper_bound)); break; case WIDX_LIFT_HILL_SPEED_DECREASE: - upper_bound = gCheatsFastLiftHill ? 255 : RideTypeDescriptors[ride->type].LiftData.maximum_speed; - lower_bound = gCheatsFastLiftHill ? 0 : RideTypeDescriptors[ride->type].LiftData.minimum_speed; + upper_bound = gCheatsFastLiftHill ? 255 : ride->GetRideTypeDescriptor().LiftData.maximum_speed; + lower_bound = gCheatsFastLiftHill ? 0 : ride->GetRideTypeDescriptor().LiftData.minimum_speed; set_operating_setting( w->number, RideSetSetting::LiftHillSpeed, std::clamp(ride->lift_hill_speed - 1, lower_bound, upper_bound)); @@ -3440,10 +3440,10 @@ static void window_ride_operating_invalidate(rct_window* w) | (1ULL << WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX)); // Sometimes, only one of the alternatives support lift hill pieces. Make sure to check both. - bool hasAlternativeType = RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE); - if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_LIFT_HILL) + bool hasAlternativeType = ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE); + if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_LIFT_HILL) || (hasAlternativeType - && RideTypeDescriptors[RideTypeDescriptors[ride->type].AlternateType].SupportsTrackPiece(TRACK_LIFT_HILL))) + && RideTypeDescriptors[ride->GetRideTypeDescriptor().AlternateType].SupportsTrackPiece(TRACK_LIFT_HILL))) { window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_LABEL].type = WindowWidgetType::Label; window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED].type = WindowWidgetType::Spinner; @@ -3487,7 +3487,7 @@ static void window_ride_operating_invalidate(rct_window* w) window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].type = WindowWidgetType::Checkbox; window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].tooltip = STR_LEAVE_IF_ANOTHER_VEHICLE_ARRIVES_TIP; - window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].text = RideTypeDescriptors[ride->type] + window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].text = ride->GetRideTypeDescriptor() .NameConvention.vehicle == RideComponentType::Boat ? STR_LEAVE_IF_ANOTHER_BOAT_ARRIVES @@ -4043,7 +4043,7 @@ static void window_ride_maintenance_invalidate(rct_window* w) window_ride_maintenance_widgets[WIDX_FORCE_BREAKDOWN].type = WindowWidgetType::Empty; } - if (RideTypeDescriptors[ride->type].AvailableBreakdowns == 0 || !(ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED)) + if (ride->GetRideTypeDescriptor().AvailableBreakdowns == 0 || !(ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED)) { w->disabled_widgets |= (1 << WIDX_REFURBISH_RIDE); window_ride_maintenance_widgets[WIDX_REFURBISH_RIDE].tooltip = STR_CANT_REFURBISH_NOT_NEEDED; @@ -4370,7 +4370,7 @@ static void window_ride_colour_mousedown(rct_window* w, rct_widgetindex widgetIn for (i = 0; i < 3; i++) { gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL; - gDropdownItemsArgs[i] = (GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.vehicle).singular + gDropdownItemsArgs[i] = (GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).singular << 16) | VehicleColourSchemeNames[i]; } @@ -4393,7 +4393,7 @@ static void window_ride_colour_mousedown(rct_window* w, rct_widgetindex widgetIn { gDropdownItemsFormat[i] = STR_DROPDOWN_MENU_LABEL; gDropdownItemsArgs[i] = (static_cast(i + 1) << 32) - | ((GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.vehicle).capitalised) << 16) + | ((GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).capitalised) << 16) | stringId; } @@ -4655,7 +4655,7 @@ static void window_ride_colour_invalidate(rct_window* w) window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WindowWidgetType::Empty; // Entrance style - if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT) + if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT) { window_ride_colour_widgets[WIDX_ENTRANCE_PREVIEW].type = WindowWidgetType::Spinner; window_ride_colour_widgets[WIDX_ENTRANCE_STYLE].type = WindowWidgetType::DropdownMenu; @@ -4745,8 +4745,8 @@ static void window_ride_colour_invalidate(rct_window* w) ft.Rewind(); ft.Increment(6); ft.Add(VehicleColourSchemeNames[vehicleColourSchemeType]); - ft.Add(GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.vehicle).singular); - ft.Add(GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.vehicle).capitalised); + ft.Add(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).singular); + ft.Add(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).capitalised); ft.Add(w->vehicleIndex + 1); // Vehicle index @@ -5959,7 +5959,7 @@ static OpenRCT2String window_ride_graphs_tooltip(rct_window* w, const rct_widget { auto ft = Formatter(); ft.Increment(2); - ft.Add(GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.vehicle).number); + ft.Add(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.vehicle).number); ft.Add(measurement->vehicle_index + 1); return { fallback, ft }; } @@ -6291,7 +6291,7 @@ static void window_ride_income_toggle_secondary_price(rct_window* w) auto shop_item = rideEntry->shop_item[1]; if (shop_item == ShopItem::None) - shop_item = RideTypeDescriptors[ride->type].PhotoItem; + shop_item = ride->GetRideTypeDescriptor().PhotoItem; update_same_price_throughout_flags(shop_item); @@ -6597,7 +6597,7 @@ static void window_ride_income_invalidate(rct_window* w) } // Get secondary item - auto secondaryItem = RideTypeDescriptors[ride->type].PhotoItem; + auto secondaryItem = ride->GetRideTypeDescriptor().PhotoItem; if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)) { if ((secondaryItem = rideEntry->shop_item[1]) != ShopItem::None) @@ -6685,7 +6685,7 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi) screenCoords.y += 44; // Secondary item profit / loss per item sold - secondaryItem = RideTypeDescriptors[ride->type].PhotoItem; + secondaryItem = ride->GetRideTypeDescriptor().PhotoItem; if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)) secondaryItem = rideEntry->shop_item[1]; @@ -6937,7 +6937,7 @@ static void window_ride_customer_paint(rct_window* w, rct_drawpixelinfo* dpi) } // Secondary shop items sold / on-ride photos sold - shopItem = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[ride->type].PhotoItem + shopItem = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? ride->GetRideTypeDescriptor().PhotoItem : ride->GetRideEntry()->shop_item[1]; if (shopItem != ShopItem::None) { diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 69b5b78951..c5a279f0e2 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -487,7 +487,7 @@ static bool is_track_enabled(int32_t trackFlagIndex) static int32_t ride_get_alternative_type(Ride* ride) { - return (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideTypeDescriptors[ride->type].AlternateType + return (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? ride->GetRideTypeDescriptor().AlternateType : ride->type; } @@ -549,13 +549,13 @@ rct_window* window_ride_construction_open() _currentBrakeSpeed2 = 8; _currentSeatRotationAngle = 4; - _currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | RideConstructionSpecialPieceSelected; + _currentTrackCurve = ride->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected; _currentTrackSlopeEnd = 0; _currentTrackBankEnd = 0; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; - if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED) + if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; _previousTrackBankEnd = 0; @@ -759,7 +759,7 @@ static void window_ride_construction_resize(rct_window* w) } if (!is_track_enabled(TRACK_SLOPE) && !is_track_enabled(TRACK_SLOPE_STEEP)) { - if (!RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) + if (!ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { // Disable all slopes disabledWidgets |= (1ULL << WIDX_SLOPE_GROUPBOX) | (1ULL << WIDX_SLOPE_DOWN_STEEP) | (1ULL << WIDX_SLOPE_DOWN) @@ -1096,7 +1096,7 @@ static void window_ride_construction_resize(rct_window* w) disabledWidgets |= (1ULL << WIDX_SLOPE_UP_STEEP); } disabledWidgets |= (1ULL << WIDX_LEFT_CURVE_LARGE) | (1ULL << WIDX_RIGHT_CURVE_LARGE); - if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) + if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { disabledWidgets |= (1ULL << WIDX_STRAIGHT) | (1ULL << WIDX_RIGHT_CURVE) | (1ULL << WIDX_RIGHT_CURVE_SMALL) | (1ULL << WIDX_LEFT_CURVE_SMALL) | (1ULL << WIDX_LEFT_CURVE); @@ -1109,7 +1109,7 @@ static void window_ride_construction_resize(rct_window* w) disabledWidgets |= (1ULL << WIDX_SLOPE_DOWN_STEEP); } disabledWidgets |= (1ULL << WIDX_LEFT_CURVE_LARGE) | (1ULL << WIDX_RIGHT_CURVE_LARGE); - if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) + if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { disabledWidgets |= (1ULL << WIDX_STRAIGHT) | (1ULL << WIDX_RIGHT_CURVE) | (1ULL << WIDX_RIGHT_CURVE_SMALL) | (1ULL << WIDX_LEFT_CURVE_SMALL) | (1ULL << WIDX_LEFT_CURVE); @@ -1420,7 +1420,7 @@ static void window_ride_construction_mousedown(rct_window* w, rct_widgetindex wi { _currentTrackBankEnd = TRACK_BANK_NONE; } - if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) + if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT && _currentTrackCurve == TRACK_CURVE_NONE) { @@ -2408,7 +2408,7 @@ static void sub_6CBCE2( CoordsXY coords = originCoords + offsets.Rotate(trackDirection); int32_t baseZ = originZ + trackBlock->z; - int32_t clearanceZ = trackBlock->var_07 + RideTypeDescriptors[ride->type].Heights.ClearanceHeight + baseZ + int32_t clearanceZ = trackBlock->var_07 + ride->GetRideTypeDescriptor().Heights.ClearanceHeight + baseZ + (4 * COORDS_Z_STEP); auto centreTileCoords = TileCoordsXY{ coords }; diff --git a/src/openrct2/actions/MazePlaceTrackAction.cpp b/src/openrct2/actions/MazePlaceTrackAction.cpp index fbb63a27c6..aa0da1f4fe 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.cpp +++ b/src/openrct2/actions/MazePlaceTrackAction.cpp @@ -115,7 +115,7 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const return res; } - money32 price = (((RideTypeDescriptors[ride->type].BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); res->Cost = clearCost + price / 2 * 10; return res; @@ -163,7 +163,7 @@ GameActions::Result::Ptr MazePlaceTrackAction::Execute() const GameActions::Status::NoClearance, res->ErrorTitle.GetStringId(), gGameCommandErrorText, gCommonFormatArgs); } - money32 price = (((RideTypeDescriptors[ride->type].BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); res->Cost = clearCost + price / 2 * 10; auto startLoc = _loc.ToTileStart(); diff --git a/src/openrct2/actions/MazeSetTrackAction.cpp b/src/openrct2/actions/MazeSetTrackAction.cpp index d71e53a26b..875b6d88d5 100644 --- a/src/openrct2/actions/MazeSetTrackAction.cpp +++ b/src/openrct2/actions/MazeSetTrackAction.cpp @@ -134,7 +134,7 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const return res; } - money32 price = (((RideTypeDescriptors[ride->type].BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); res->Cost = price / 2 * 10; return res; @@ -176,7 +176,7 @@ GameActions::Result::Ptr MazeSetTrackAction::Execute() const auto tileElement = map_get_track_element_at_of_type_from_ride(_loc, TrackElemType::Maze, _rideIndex); if (tileElement == nullptr) { - money32 price = (((RideTypeDescriptors[ride->type].BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); + money32 price = (((ride->GetRideTypeDescriptor().BuildCosts.TrackPrice * TrackPricing[TrackElemType::Maze]) >> 16)); res->Cost = price / 2 * 10; auto startLoc = _loc.ToTileStart(); diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index 42c4eccebb..ef53853aec 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -167,16 +167,16 @@ GameActions::Result::Ptr RideCreateAction::Execute() const ride->min_waiting_time = 10; ride->max_waiting_time = 60; ride->depart_flags = RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH | 3; - if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) + if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) { ride->lifecycle_flags |= RIDE_LIFECYCLE_MUSIC; } - ride->music = RideTypeDescriptors[ride->type].DefaultMusic; + ride->music = ride->GetRideTypeDescriptor().DefaultMusic; - const auto& operatingSettings = RideTypeDescriptors[ride->type].OperatingSettings; + const auto& operatingSettings = ride->GetRideTypeDescriptor().OperatingSettings; ride->operation_option = (operatingSettings.MinValue * 3 + operatingSettings.MaxValue) / 4; - ride->lift_hill_speed = RideTypeDescriptors[ride->type].LiftData.minimum_speed; + ride->lift_hill_speed = ride->GetRideTypeDescriptor().LiftData.minimum_speed; ride->measurement = {}; ride->excitement = RIDE_RATING_UNDEFINED; @@ -193,7 +193,7 @@ GameActions::Result::Ptr RideCreateAction::Execute() const { for (auto i = 0; i < NUM_SHOP_ITEMS_PER_RIDE; i++) { - ride->price[i] = RideTypeDescriptors[ride->type].DefaultPrices[i]; + ride->price[i] = ride->GetRideTypeDescriptor().DefaultPrices[i]; } if (rideEntry->shop_item[0] == ShopItem::None) diff --git a/src/openrct2/actions/RideDemolishAction.cpp b/src/openrct2/actions/RideDemolishAction.cpp index 6ad78b6611..129d699cd1 100644 --- a/src/openrct2/actions/RideDemolishAction.cpp +++ b/src/openrct2/actions/RideDemolishAction.cpp @@ -87,7 +87,7 @@ GameActions::Result::Ptr RideDemolishAction::Query() const } if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_EVER_BEEN_OPENED) - || RideTypeDescriptors[ride->type].AvailableBreakdowns == 0) + || ride->GetRideTypeDescriptor().AvailableBreakdowns == 0) { return std::make_unique( GameActions::Status::Disallowed, STR_CANT_REFURBISH_RIDE, STR_CANT_REFURBISH_NOT_NEEDED); diff --git a/src/openrct2/actions/RideSetPriceAction.cpp b/src/openrct2/actions/RideSetPriceAction.cpp index c15ca31567..bf65f3c7cc 100644 --- a/src/openrct2/actions/RideSetPriceAction.cpp +++ b/src/openrct2/actions/RideSetPriceAction.cpp @@ -121,7 +121,7 @@ GameActions::Result::Ptr RideSetPriceAction::Execute() const shopItem = rideEntry->shop_item[1]; if (shopItem == ShopItem::None) { - shopItem = RideTypeDescriptors[ride->type].PhotoItem; + shopItem = ride->GetRideTypeDescriptor().PhotoItem; if ((ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) == 0) { ride->price[1] = _price; diff --git a/src/openrct2/actions/RideSetSettingAction.cpp b/src/openrct2/actions/RideSetSettingAction.cpp index 4a6b1385fd..3c19a54fa3 100644 --- a/src/openrct2/actions/RideSetSettingAction.cpp +++ b/src/openrct2/actions/RideSetSettingAction.cpp @@ -239,13 +239,13 @@ GameActions::Result::Ptr RideSetSettingAction::Execute() const bool RideSetSettingAction::ride_is_mode_valid(Ride* ride) const { - return RideTypeDescriptors[ride->type].RideModes & (1ULL << _value); + return ride->GetRideTypeDescriptor().RideModes & (1ULL << _value); } bool RideSetSettingAction::ride_is_valid_lift_hill_speed(Ride* ride) const { - int32_t minSpeed = gCheatsFastLiftHill ? 0 : RideTypeDescriptors[ride->type].LiftData.minimum_speed; - int32_t maxSpeed = gCheatsFastLiftHill ? 255 : RideTypeDescriptors[ride->type].LiftData.maximum_speed; + int32_t minSpeed = gCheatsFastLiftHill ? 0 : ride->GetRideTypeDescriptor().LiftData.minimum_speed; + int32_t maxSpeed = gCheatsFastLiftHill ? 255 : ride->GetRideTypeDescriptor().LiftData.maximum_speed; return _value >= minSpeed && _value <= maxSpeed; } @@ -258,7 +258,7 @@ bool RideSetSettingAction::ride_is_valid_num_circuits() const bool RideSetSettingAction::ride_is_valid_operation_option(Ride* ride) const { - const auto& operatingSettings = RideTypeDescriptors[ride->type].OperatingSettings; + const auto& operatingSettings = ride->GetRideTypeDescriptor().OperatingSettings; uint8_t minValue = operatingSettings.MinValue; uint8_t maxValue = operatingSettings.MaxValue; if (gCheatsFastLiftHill) diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index eb06505982..914f585842 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -108,7 +108,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const res->GroundFlags = 0; - uint32_t rideTypeFlags = RideTypeDescriptors[ride->type].Flags; + uint32_t rideTypeFlags = ride->GetRideTypeDescriptor().Flags; if ((ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK) && _trackType == TrackElemType::EndStation) { @@ -144,7 +144,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const } // Backwards steep lift hills are allowed, even on roller coasters that do not support forwards steep lift hills. if ((_trackPlaceFlags & CONSTRUCTION_LIFT_HILL_SELECTED) - && !RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_LIFT_HILL_STEEP) && !gCheatsEnableChainLiftOnAllTrack) + && !ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_LIFT_HILL_STEEP) && !gCheatsEnableChainLiftOnAllTrack) { if (TrackFlags[_trackType] & TRACK_ELEM_FLAG_IS_STEEP_UP) { @@ -212,13 +212,13 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const int32_t clearanceZ = trackBlock->var_07; if (trackBlock->flags & RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL - && RideTypeDescriptors[ride->type].Heights.ClearanceHeight > 24) + && ride->GetRideTypeDescriptor().Heights.ClearanceHeight > 24) { clearanceZ += 24; } else { - clearanceZ += RideTypeDescriptors[ride->type].Heights.ClearanceHeight; + clearanceZ += ride->GetRideTypeDescriptor().Heights.ClearanceHeight; } clearanceZ = floor2(clearanceZ, COORDS_Z_STEP) + baseZ; @@ -228,7 +228,7 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const return std::make_unique(GameActions::Status::InvalidParameters, STR_TOO_HIGH); } - uint8_t crossingMode = (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS) + uint8_t crossingMode = (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS) && _trackType == TrackElemType::Flat) ? CREATE_CROSSING_MODE_TRACK_OVER_PATH : CREATE_CROSSING_MODE_NONE; @@ -334,14 +334,14 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const { uint16_t maxHeight; - if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) && rideEntry->max_height != 0) { maxHeight = rideEntry->max_height; } else { - maxHeight = RideTypeDescriptors[ride->type].Heights.MaxHeight; + maxHeight = ride->GetRideTypeDescriptor().Heights.MaxHeight; } ride_height /= COORDS_Z_PER_TINY_Z; @@ -358,10 +358,10 @@ GameActions::Result::Ptr TrackPlaceAction::Query() const supportHeight = (10 * COORDS_Z_STEP); } - cost += ((supportHeight / (2 * COORDS_Z_STEP)) * RideTypeDescriptors[ride->type].BuildCosts.SupportPrice) * 5; + cost += ((supportHeight / (2 * COORDS_Z_STEP)) * ride->GetRideTypeDescriptor().BuildCosts.SupportPrice) * 5; } - money32 price = RideTypeDescriptors[ride->type].BuildCosts.TrackPrice; + money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; price *= TrackPricing[_trackType]; price >>= 16; @@ -393,7 +393,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const res->GroundFlags = 0; - uint32_t rideTypeFlags = RideTypeDescriptors[ride->type].Flags; + uint32_t rideTypeFlags = ride->GetRideTypeDescriptor().Flags; const uint8_t(*wallEdges)[16]; wallEdges = &TrackSequenceElementAllowedWallEdges[_trackType]; @@ -412,19 +412,19 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const int32_t baseZ = floor2(mapLoc.z, COORDS_Z_STEP); int32_t clearanceZ = trackBlock->var_07; if (trackBlock->flags & RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL - && RideTypeDescriptors[ride->type].Heights.ClearanceHeight > 24) + && ride->GetRideTypeDescriptor().Heights.ClearanceHeight > 24) { clearanceZ += 24; } else { - clearanceZ += RideTypeDescriptors[ride->type].Heights.ClearanceHeight; + clearanceZ += ride->GetRideTypeDescriptor().Heights.ClearanceHeight; } clearanceZ = floor2(clearanceZ, COORDS_Z_STEP) + baseZ; const auto mapLocWithClearance = CoordsXYRangedZ(mapLoc, baseZ, clearanceZ); - uint8_t crossingMode = (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS) + uint8_t crossingMode = (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS) && _trackType == TrackElemType::Flat) ? CREATE_CROSSING_MODE_TRACK_OVER_PATH : CREATE_CROSSING_MODE_NONE; @@ -479,7 +479,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const supportHeight = (10 * COORDS_Z_STEP); } - cost += ((supportHeight / (2 * COORDS_Z_STEP)) * RideTypeDescriptors[ride->type].BuildCosts.SupportPrice) * 5; + cost += ((supportHeight / (2 * COORDS_Z_STEP)) * ride->GetRideTypeDescriptor().BuildCosts.SupportPrice) * 5; if (!(GetFlags() & GAME_COMMAND_FLAG_GHOST)) { @@ -643,7 +643,7 @@ GameActions::Result::Ptr TrackPlaceAction::Execute() const map_invalidate_tile_full(mapLoc); } - money32 price = RideTypeDescriptors[ride->type].BuildCosts.TrackPrice; + money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; price *= TrackPricing[_trackType]; price >>= 16; diff --git a/src/openrct2/actions/TrackRemoveAction.cpp b/src/openrct2/actions/TrackRemoveAction.cpp index d1946ffbe2..c89cc2db92 100644 --- a/src/openrct2/actions/TrackRemoveAction.cpp +++ b/src/openrct2/actions/TrackRemoveAction.cpp @@ -222,10 +222,10 @@ GameActions::Result::Ptr TrackRemoveAction::Query() const _support_height = 10; } - cost += (_support_height / 2) * RideTypeDescriptors[ride->type].BuildCosts.SupportPrice; + cost += (_support_height / 2) * ride->GetRideTypeDescriptor().BuildCosts.SupportPrice; } - money32 price = RideTypeDescriptors[ride->type].BuildCosts.TrackPrice; + money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; price *= TrackPricing[trackType]; price >>= 16; price = (price + cost) / 2; @@ -396,7 +396,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const _support_height = 10; } - cost += (_support_height / 2) * RideTypeDescriptors[ride->type].BuildCosts.SupportPrice; + cost += (_support_height / 2) * ride->GetRideTypeDescriptor().BuildCosts.SupportPrice; // If the removed tile is a station modify station properties. // Don't do this if the ride is simulating and the tile is a ghost to prevent desyncs. @@ -472,7 +472,7 @@ GameActions::Result::Ptr TrackRemoveAction::Execute() const } } - money32 price = RideTypeDescriptors[ride->type].BuildCosts.TrackPrice; + money32 price = ride->GetRideTypeDescriptor().BuildCosts.TrackPrice; price *= TrackPricing[trackType]; price >>= 16; price = (price + cost) / 2; diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index b446c6d033..e8c7410017 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -456,7 +456,7 @@ bool WallPlaceAction::WallCheckObstructionWithTrack( return false; } - if (!(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK)) + if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK)) { return false; } diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 814ab45c8a..30c223c46d 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -1710,7 +1710,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t { // Peeps that are leaving the park will refuse to go on any rides, with the exception of free transport rides. assert(ride->type < std::size(RideTypeDescriptors)); - if (!(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED + if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED || ride_get_price(ride) != 0) { if (PeepFlags & PEEP_FLAGS_LEAVING_PARK) @@ -1776,7 +1776,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t // Assuming the queue conditions are met, peeps will always go on free transport rides. // Ride ratings, recent crashes and weather will all be ignored. money16 ridePrice = ride_get_price(ride); - if (!(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED + if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED || ridePrice != 0) { if (PreviousRide == ride->id) @@ -1908,7 +1908,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t // If the ride has not yet been rated and is capable of having g-forces, // there's a 90% chance that the peep will ignore it. - if (!ride_has_ratings(ride) && (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES)) + if (!ride_has_ratings(ride) && (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES)) { if ((scenario_rand() & 0xFFFF) > 0x1999U) { @@ -3421,7 +3421,7 @@ void Guest::UpdateRideAdvanceThroughEntrance() distanceThreshold += 4; if (xy_distance < distanceThreshold) { - actionZ += RideTypeDescriptors[ride->type].Heights.PlatformHeight; + actionZ += ride->GetRideTypeDescriptor().Heights.PlatformHeight; } MoveTo({ *loc, actionZ }); @@ -3534,7 +3534,7 @@ void Guest::UpdateRideAdvanceThroughEntrance() */ static void peep_go_to_ride_exit(Peep* peep, Ride* ride, int16_t x, int16_t y, int16_t z, uint8_t exit_direction) { - z += RideTypeDescriptors[ride->type].Heights.PlatformHeight; + z += ride->GetRideTypeDescriptor().Heights.PlatformHeight; peep->MoveTo({ x, y, z }); @@ -4003,7 +4003,7 @@ void Guest::UpdateRideLeaveVehicle() Guard::Assert(!exitLocation.isNull()); auto waypointLoc = CoordsXYZ{ ride->stations[CurrentRideStation].Start.ToTileCentre(), - exitLocation.z + RideTypeDescriptors[ride->type].Heights.PlatformHeight }; + exitLocation.z + ride->GetRideTypeDescriptor().Heights.PlatformHeight }; TileElement* trackElement = ride_get_station_start_track_element(ride, CurrentRideStation); @@ -4123,7 +4123,7 @@ void Guest::UpdateRideInExit() { int16_t actionZ = ride->stations[CurrentRideStation].GetBaseZ(); - actionZ += RideTypeDescriptors[ride->type].Heights.PlatformHeight; + actionZ += ride->GetRideTypeDescriptor().Heights.PlatformHeight; MoveTo({ *loc, actionZ }); return; } @@ -4134,7 +4134,7 @@ void Guest::UpdateRideInExit() if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) { - ShopItem secondaryItem = RideTypeDescriptors[ride->type].PhotoItem; + ShopItem secondaryItem = ride->GetRideTypeDescriptor().PhotoItem; if (DecideAndBuyItem(ride, secondaryItem, ride->price[1])) { ride->no_secondary_items_sold++; @@ -5948,14 +5948,14 @@ static bool peep_should_watch_ride(TileElement* tileElement) return true; } - if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT) + if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT) { if ((scenario_rand() & 0xFFFF) > 0x3333) { return false; } } - else if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT) + else if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT) { if ((scenario_rand() & 0xFFFF) > 0x1000) { diff --git a/src/openrct2/peep/Staff.cpp b/src/openrct2/peep/Staff.cpp index d7d86ceff4..735effbf5e 100644 --- a/src/openrct2/peep/Staff.cpp +++ b/src/openrct2/peep/Staff.cpp @@ -1458,7 +1458,7 @@ void Staff::UpdateHeadingToInspect() if (delta_y < 20) { - newZ += RideTypeDescriptors[ride->type].Heights.PlatformHeight; + newZ += ride->GetRideTypeDescriptor().Heights.PlatformHeight; } MoveTo({ *loc, newZ }); @@ -1567,7 +1567,7 @@ void Staff::UpdateAnswering() if (delta_y < 20) { - newZ += RideTypeDescriptors[ride->type].Heights.PlatformHeight; + newZ += ride->GetRideTypeDescriptor().Heights.PlatformHeight; } MoveTo({ *loc, newZ }); @@ -2613,7 +2613,7 @@ bool Staff::UpdateFixingLeaveByEntranceExit(bool firstRun, const Ride* ride) if (xy_distance >= 16) { - stationHeight += RideTypeDescriptors[ride->type].Heights.PlatformHeight; + stationHeight += ride->GetRideTypeDescriptor().Heights.PlatformHeight; } MoveTo({ *loc, stationHeight }); diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index 118b3c96e0..295056928b 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -69,7 +69,7 @@ Vehicle* cable_lift_segment_create( z = z * COORDS_Z_STEP; current->TrackLocation = { x, y, z }; - z += RideTypeDescriptors[ride.type].Heights.VehicleZOffset; + z += ride.GetRideTypeDescriptor().Heights.VehicleZOffset; current->MoveTo({ 16, 16, z }); current->SetTrackType(TrackElemType::CableLiftHill); diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index 56ea596a29..a9d37ac152 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -1939,13 +1939,13 @@ int32_t ride_initialise_construction_window(Ride* ride) if (ride == nullptr) return 0; - _currentTrackCurve = RideTypeDescriptors[ride->type].StartTrackPiece | RideConstructionSpecialPieceSelected; + _currentTrackCurve = ride->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected; _currentTrackSlopeEnd = 0; _currentTrackBankEnd = 0; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; - if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED) + if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; _previousTrackBankEnd = 0; @@ -2274,7 +2274,7 @@ static void ride_inspection_update(Ride* ride) return; } - if (RideTypeDescriptors[ride->type].AvailableBreakdowns == 0) + if (ride->GetRideTypeDescriptor().AvailableBreakdowns == 0) return; if (inspectionIntervalMinutes > ride->last_inspection) @@ -2396,7 +2396,7 @@ static int32_t ride_get_new_breakdown_problem(Ride* ride) if (!ride->CanBreakDown()) return -1; - availableBreakdownProblems = RideTypeDescriptors[ride->type].AvailableBreakdowns; + availableBreakdownProblems = ride->GetRideTypeDescriptor().AvailableBreakdowns; // Calculate the total probability range for all possible breakdown problems totalProbability = 0; @@ -2623,7 +2623,7 @@ static void ride_mechanic_status_update(Ride* ride, int32_t mechanicStatus) } break; case RIDE_MECHANIC_STATUS_CALLING: - if (RideTypeDescriptors[ride->type].AvailableBreakdowns == 0) + if (ride->GetRideTypeDescriptor().AvailableBreakdowns == 0) { ride->lifecycle_flags &= ~( RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_DUE_INSPECTION); @@ -2808,8 +2808,8 @@ Staff* ride_get_assigned_mechanic(Ride* ride) */ static void ride_music_update(Ride* ride) { - if (!(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) - && !(RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_ALLOW_MUSIC)) + if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) + && !(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_ALLOW_MUSIC)) { return; } @@ -3372,7 +3372,7 @@ static void ride_station_set_map_tooltip(TileElement* tileElement) ft.Add(STR_RIDE_MAP_TIP); ft.Add(ride->num_stations <= 1 ? STR_RIDE_STATION : STR_RIDE_STATION_X); ride->FormatNameTo(ft); - ft.Add(GetRideComponentName(RideTypeDescriptors[ride->type].NameConvention.station).capitalised); + ft.Add(GetRideComponentName(ride->GetRideTypeDescriptor().NameConvention.station).capitalised); ft.Add(stationIndex + 1); ride->FormatStatusTo(ft); auto intent = Intent(INTENT_ACTION_SET_MAP_TOOLTIP); @@ -4153,7 +4153,7 @@ static Vehicle* vehicle_create_car( vehicle->TrackLocation = dodgemPos; vehicle->current_station = trackElement->GetStationIndex(); - dodgemPos.z += RideTypeDescriptors[ride->type].Heights.VehicleZOffset; + dodgemPos.z += ride->GetRideTypeDescriptor().Heights.VehicleZOffset; vehicle->SetTrackDirection(0); vehicle->SetTrackType(trackElement->GetTrackType()); @@ -4223,9 +4223,9 @@ static Vehicle* vehicle_create_car( { if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_VEHICLE_IS_INTEGRAL)) { - if (RideTypeDescriptors[ride->type].StartTrackPiece != TrackElemType::FlatTrack1x4B) + if (ride->GetRideTypeDescriptor().StartTrackPiece != TrackElemType::FlatTrack1x4B) { - if (RideTypeDescriptors[ride->type].StartTrackPiece != TrackElemType::FlatTrack1x4A) + if (ride->GetRideTypeDescriptor().StartTrackPiece != TrackElemType::FlatTrack1x4A) { if (ride->type == RIDE_TYPE_ENTERPRISE) { @@ -4240,7 +4240,7 @@ static Vehicle* vehicle_create_car( } } - chosenLoc += CoordsXYZ{ word_9A2A60[direction], RideTypeDescriptors[ride->type].Heights.VehicleZOffset }; + chosenLoc += CoordsXYZ{ word_9A2A60[direction], ride->GetRideTypeDescriptor().Heights.VehicleZOffset }; vehicle->current_station = trackElement->GetStationIndex(); diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 2559f90b87..d2944c4319 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -809,7 +809,7 @@ static void ride_ratings_calculate_value(Ride* ride) } // Start with the base ratings, multiplied by the ride type specific weights for excitement, intensity and nausea. - const auto& ratingsMultipliers = RideTypeDescriptors[ride->type].RatingsMultipliers; + const auto& ratingsMultipliers = ride->GetRideTypeDescriptor().RatingsMultipliers; int32_t value = (((ride->excitement * ratingsMultipliers.Excitement) * 32) >> 15) + (((ride->intensity * ratingsMultipliers.Intensity) * 32) >> 15) + (((ride->nausea * ratingsMultipliers.Nausea) * 32) >> 15); @@ -870,9 +870,9 @@ static void ride_ratings_calculate_value(Ride* ride) static uint16_t ride_compute_upkeep(Ride* ride) { // data stored at 0x0057E3A8, incrementing 18 bytes at a time - uint16_t upkeep = RideTypeDescriptors[ride->type].UpkeepCosts.BaseCost; + uint16_t upkeep = ride->GetRideTypeDescriptor().UpkeepCosts.BaseCost; - uint16_t trackCost = RideTypeDescriptors[ride->type].UpkeepCosts.CostPerTrackPiece; + uint16_t trackCost = ride->GetRideTypeDescriptor().UpkeepCosts.CostPerTrackPiece; uint8_t dropFactor = ride->drops; dropFactor >>= 6; @@ -885,7 +885,7 @@ static uint16_t ride_compute_upkeep(Ride* ride) // rides that had tracks. The 0's were fixed rides like crooked house or // dodgems. // Data source is 0x0097E3AC - totalLength *= RideTypeDescriptors[ride->type].UpkeepCosts.TrackLengthMultiplier; + totalLength *= ride->GetRideTypeDescriptor().UpkeepCosts.TrackLengthMultiplier; upkeep += static_cast(totalLength >> 10); if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) @@ -912,12 +912,12 @@ static uint16_t ride_compute_upkeep(Ride* ride) // various variables set on the ride itself. // https://gist.github.com/kevinburke/e19b803cd2769d96c540 - upkeep += RideTypeDescriptors[ride->type].UpkeepCosts.CostPerTrain * ride->num_vehicles; - upkeep += RideTypeDescriptors[ride->type].UpkeepCosts.CostPerCar * ride->num_cars_per_train; + upkeep += ride->GetRideTypeDescriptor().UpkeepCosts.CostPerTrain * ride->num_vehicles; + upkeep += ride->GetRideTypeDescriptor().UpkeepCosts.CostPerCar * ride->num_cars_per_train; // slight upkeep boosts for some rides - 5 for mini railway, 10 for log // flume/rapids, 10 for roller coaster, 28 for giga coaster - upkeep += RideTypeDescriptors[ride->type].UpkeepCosts.CostPerStation * ride->num_stations; + upkeep += ride->GetRideTypeDescriptor().UpkeepCosts.CostPerStation * ride->num_stations; if (ride->mode == RideMode::ReverseInclineLaunchedShuttle) { @@ -969,7 +969,7 @@ static void ride_ratings_apply_adjustments(Ride* ride, RatingTuple* ratings) // Apply total air time #ifdef ORIGINAL_RATINGS - if (RideTypeDescriptors[ride->type].HasFlag(RIDE_TYPE_FLAG_HAS_AIR_TIME)) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_AIR_TIME)) { uint16_t totalAirTime = ride->total_air_time; if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) @@ -988,7 +988,7 @@ static void ride_ratings_apply_adjustments(Ride* ride, RatingTuple* ratings) } } #else - if (RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_HAS_AIR_TIME) + if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_AIR_TIME) { int32_t excitementModifier; if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) @@ -1032,7 +1032,7 @@ static void ride_ratings_apply_intensity_penalty(RatingTuple* ratings) static void set_unreliability_factor(Ride* ride) { // The bigger the difference in lift speed and minimum the higher the unreliability - uint8_t minLiftSpeed = RideTypeDescriptors[ride->type].LiftData.minimum_speed; + uint8_t minLiftSpeed = ride->GetRideTypeDescriptor().LiftData.minimum_speed; ride->unreliability_factor += (ride->lift_hill_speed - minLiftSpeed) * 2; } diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index b8d652b98f..3f5c076a53 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -226,7 +226,7 @@ rct_string_id TrackDesign::CreateTrackDesignTrack(const Ride& ride) if (trackElement.element->AsTrack()->HasChain()) trackFlags |= RCT12_TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT; trackFlags |= trackElement.element->AsTrack()->GetColourScheme() << 4; - if (RideTypeDescriptors[ride.type].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE + if (ride.GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE && trackElement.element->AsTrack()->IsInverted()) { trackFlags |= TD6_TRACK_ELEMENT_FLAG_INVERTED; diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index ca6d293377..baac794594 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -2157,7 +2157,7 @@ void track_paint(paint_session* session, Direction direction, int32_t height, co session->InteractionType = ViewportInteractionItem::None; if (TrackHeightMarkerPositions[trackType] & (1 << trackSequence)) { - uint16_t ax = RideTypeDescriptors[ride->type].Heights.VehicleZOffset; + uint16_t ax = ride->GetRideTypeDescriptor().Heights.VehicleZOffset; // 0x1689 represents 0 height there are -127 to 128 heights above and below it // There are 3 arrays of 256 heights (units, m, ft) chosen with the get_height_marker_offset() uint32_t imageId = SPRITE_ID_PALETTE_COLOUR_1(COLOUR_LIGHT_BLUE) | (0x1689 + get_height_marker_offset()); @@ -2194,7 +2194,7 @@ void track_paint(paint_session* session, Direction direction, int32_t height, co { return; } - TRACK_PAINT_FUNCTION_GETTER paintFunctionGetter = RideTypeDescriptors[ride->type].TrackPaintFunction; + TRACK_PAINT_FUNCTION_GETTER paintFunctionGetter = ride->GetRideTypeDescriptor().TrackPaintFunction; if (paintFunctionGetter != nullptr) { TRACK_PAINT_FUNCTION paintFunction = paintFunctionGetter(trackType); diff --git a/src/openrct2/world/Park.cpp b/src/openrct2/world/Park.cpp index d748c8678e..efb646c598 100644 --- a/src/openrct2/world/Park.cpp +++ b/src/openrct2/world/Park.cpp @@ -563,7 +563,7 @@ uint32_t Park::CalculateSuggestedMaxGuests() const continue; // Add guest score for ride type - suggestedMaxGuests += RideTypeDescriptors[ride.type].BonusValue; + suggestedMaxGuests += ride.GetRideTypeDescriptor().BonusValue; } // If difficult guest generation, extra guests are available for good rides @@ -588,7 +588,7 @@ uint32_t Park::CalculateSuggestedMaxGuests() const continue; // Bonus guests for good ride - suggestedMaxGuests += RideTypeDescriptors[ride.type].BonusValue * 2; + suggestedMaxGuests += ride.GetRideTypeDescriptor().BonusValue * 2; } } diff --git a/test/tests/RideRatings.cpp b/test/tests/RideRatings.cpp index bdfdc9c869..fc6c920354 100644 --- a/test/tests/RideRatings.cpp +++ b/test/tests/RideRatings.cpp @@ -48,7 +48,7 @@ protected: { RatingTuple ratings = ride.ratings; std::string line = String::StdFormat( - "%s: (%d, %d, %d)", RideTypeDescriptors[ride.type].EnumName, static_cast(ratings.Excitement), + "%s: (%d, %d, %d)", ride.GetRideTypeDescriptor().EnumName, static_cast(ratings.Excitement), static_cast(ratings.Intensity), static_cast(ratings.Nausea)); return line; } From b1ab20ec2738d9bc745e4f765ed716771b03f4d5 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Thu, 25 Feb 2021 22:55:06 +0100 Subject: [PATCH 4/8] Replace loose flag checking with helper function --- src/openrct2-ui/windows/Ride.cpp | 4 ++-- src/openrct2-ui/windows/RideConstruction.cpp | 2 +- src/openrct2/actions/RideCreateAction.cpp | 2 +- src/openrct2/actions/WallPlaceAction.cpp | 2 +- src/openrct2/peep/Guest.cpp | 10 +++++----- src/openrct2/ride/Ride.cpp | 6 +++--- src/openrct2/ride/RideRatings.cpp | 2 +- src/openrct2/ride/TrackDesign.cpp | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index aae04fb0cf..e667616356 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2535,7 +2535,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter& ft return STR_EMPTY; auto stringId = VehicleStatusNames[static_cast(vehicle->status)]; - if ((ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_SINGLE_SESSION) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SINGLE_SESSION) && vehicle->status <= Vehicle::Status::UnloadingPassengers) { stringId = SingleSessionVehicleStatusNames[static_cast(vehicle->status)]; @@ -4655,7 +4655,7 @@ static void window_ride_colour_invalidate(rct_window* w) window_ride_colour_widgets[WIDX_TRACK_PREVIEW].type = WindowWidgetType::Empty; // Entrance style - if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT)) { window_ride_colour_widgets[WIDX_ENTRANCE_PREVIEW].type = WindowWidgetType::Spinner; window_ride_colour_widgets[WIDX_ENTRANCE_STYLE].type = WindowWidgetType::DropdownMenu; diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index c5a279f0e2..552bf8f512 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -555,7 +555,7 @@ rct_window* window_ride_construction_open() _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; - if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; _previousTrackBankEnd = 0; diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index ef53853aec..4734f6c38e 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -167,7 +167,7 @@ GameActions::Result::Ptr RideCreateAction::Execute() const ride->min_waiting_time = 10; ride->max_waiting_time = 60; ride->depart_flags = RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH | 3; - if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT)) { ride->lifecycle_flags |= RIDE_LIFECYCLE_MUSIC; } diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index e8c7410017..cba576b6e3 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -456,7 +456,7 @@ bool WallPlaceAction::WallCheckObstructionWithTrack( return false; } - if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK)) + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_DOORS_ON_TRACK)) { return false; } diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 30c223c46d..33c66147a5 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -1710,7 +1710,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t { // Peeps that are leaving the park will refuse to go on any rides, with the exception of free transport rides. assert(ride->type < std::size(RideTypeDescriptors)); - if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED || ride_get_price(ride) != 0) { if (PeepFlags & PEEP_FLAGS_LEAVING_PARK) @@ -1776,7 +1776,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t // Assuming the queue conditions are met, peeps will always go on free transport rides. // Ride ratings, recent crashes and weather will all be ignored. money16 ridePrice = ride_get_price(ride); - if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED + if (!ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_TRANSPORT_RIDE) || ride->value == RIDE_VALUE_UNDEFINED || ridePrice != 0) { if (PreviousRide == ride->id) @@ -1908,7 +1908,7 @@ bool Guest::ShouldGoOnRide(Ride* ride, int32_t entranceNum, bool atQueue, bool t // If the ride has not yet been rated and is capable of having g-forces, // there's a 90% chance that the peep will ignore it. - if (!ride_has_ratings(ride) && (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES)) + if (!ride_has_ratings(ride) && ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_PEEP_CHECK_GFORCES)) { if ((scenario_rand() & 0xFFFF) > 0x1999U) { @@ -5948,14 +5948,14 @@ static bool peep_should_watch_ride(TileElement* tileElement) return true; } - if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_INTERESTING_TO_LOOK_AT)) { if ((scenario_rand() & 0xFFFF) > 0x3333) { return false; } } - else if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT) + else if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_SLIGHTLY_INTERESTING_TO_LOOK_AT)) { if ((scenario_rand() & 0xFFFF) > 0x1000) { diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index a9d37ac152..cc5c40371b 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -1945,7 +1945,7 @@ int32_t ride_initialise_construction_window(Ride* ride) _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; - if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; _previousTrackBankEnd = 0; @@ -2808,8 +2808,8 @@ Staff* ride_get_assigned_mechanic(Ride* ride) */ static void ride_music_update(Ride* ride) { - if (!(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) - && !(ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_ALLOW_MUSIC)) + const auto& rtd = ride->GetRideTypeDescriptor(); + if (!rtd.HasFlag(RIDE_TYPE_FLAG_MUSIC_ON_DEFAULT) && !rtd.HasFlag(RIDE_TYPE_FLAG_ALLOW_MUSIC)) { return; } diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index d2944c4319..6cf7cd6046 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -988,7 +988,7 @@ static void ride_ratings_apply_adjustments(Ride* ride, RatingTuple* ratings) } } #else - if (ride->GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_AIR_TIME) + if (ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_AIR_TIME)) { int32_t excitementModifier; if (rideEntry->flags & RIDE_ENTRY_FLAG_LIMIT_AIRTIME_BONUS) diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 3f5c076a53..4017e7f746 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -226,7 +226,7 @@ rct_string_id TrackDesign::CreateTrackDesignTrack(const Ride& ride) if (trackElement.element->AsTrack()->HasChain()) trackFlags |= RCT12_TRACK_ELEMENT_TYPE_FLAG_CHAIN_LIFT; trackFlags |= trackElement.element->AsTrack()->GetColourScheme() << 4; - if (ride.GetRideTypeDescriptor().Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE + if (ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE) && trackElement.element->AsTrack()->IsInverted()) { trackFlags |= TD6_TRACK_ELEMENT_FLAG_INVERTED; From f118b2ede4f818604fa638b4ce7610292e78b433 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 26 Feb 2021 09:49:09 +0100 Subject: [PATCH 5/8] Replace ride_type_has_flag() with retrieving RTD --- src/openrct2-ui/windows/InstallTrack.cpp | 4 ++-- src/openrct2-ui/windows/NewRide.cpp | 2 +- src/openrct2-ui/windows/Ride.cpp | 2 +- src/openrct2-ui/windows/RideConstruction.cpp | 12 ++++++------ src/openrct2-ui/windows/TrackList.cpp | 6 +++--- src/openrct2/EditorObjectSelectionSession.cpp | 2 +- src/openrct2/actions/RideSetVehicleAction.cpp | 2 +- src/openrct2/actions/WallPlaceAction.cpp | 2 +- src/openrct2/peep/Guest.cpp | 6 +++--- src/openrct2/rct1/Tables.cpp | 2 +- src/openrct2/rct2/RCT2.cpp | 2 +- src/openrct2/rct2/S6Importer.cpp | 2 +- src/openrct2/ride/Ride.cpp | 18 +----------------- src/openrct2/ride/Ride.h | 1 - src/openrct2/ride/RideData.h | 8 ++++++++ src/openrct2/ride/TrackDesign.cpp | 4 ++-- test/testpaint/Compat.cpp | 5 ----- test/testpaint/TestTrack.cpp | 2 +- test/testpaint/generate.cpp | 2 +- test/testpaint/main.cpp | 4 ++-- 20 files changed, 37 insertions(+), 51 deletions(-) diff --git a/src/openrct2-ui/windows/InstallTrack.cpp b/src/openrct2-ui/windows/InstallTrack.cpp index b36792a9bf..dc55030481 100644 --- a/src/openrct2-ui/windows/InstallTrack.cpp +++ b/src/openrct2-ui/windows/InstallTrack.cpp @@ -321,7 +321,7 @@ static void window_install_track_paint(rct_window* w, rct_drawpixelinfo* dpi) screenPos.y += LIST_ROW_HEIGHT; } - if (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) + if (GetRideTypeDescriptor(td6->type).HasFlag(RIDE_TYPE_FLAG_HAS_G_FORCES)) { // Maximum positive vertical Gs { @@ -358,7 +358,7 @@ static void window_install_track_paint(rct_window* w, rct_drawpixelinfo* dpi) } } - if (ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_DROPS)) + if (GetRideTypeDescriptor(td6->type).HasFlag(RIDE_TYPE_FLAG_HAS_DROPS)) { // Drops uint16_t drops = td6->drops & 0x3F; diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index ee79ca73b0..a89fbcc4b3 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -949,7 +949,7 @@ static void window_new_ride_paint_ride_information( // rct_string_id stringId = STR_NEW_RIDE_COST; - if (!ride_type_has_flag(item.Type, RIDE_TYPE_FLAG_HAS_NO_TRACK)) + if (!GetRideTypeDescriptor(item.Type).HasFlag(RIDE_TYPE_FLAG_HAS_NO_TRACK)) stringId = STR_NEW_RIDE_COST_FROM; ft = Formatter(); diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index e667616356..c1d8875f40 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2107,7 +2107,7 @@ static void populate_vehicle_type_dropdown(Ride* ride) for (; rideTypeIterator <= rideTypeIteratorMax; rideTypeIterator++) { - if (selectionShouldBeExpanded && ride_type_has_flag(rideTypeIterator, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (selectionShouldBeExpanded && GetRideTypeDescriptor(rideTypeIterator).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) continue; if (selectionShouldBeExpanded && (rideTypeIterator == RIDE_TYPE_MAZE || rideTypeIterator == RIDE_TYPE_MINI_GOLF)) continue; diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 552bf8f512..267954250f 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -1188,7 +1188,7 @@ static void window_ride_construction_resize(rct_window* w) disabledWidgets |= (1ULL << WIDX_CONSTRUCT); } } - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES)) { disabledWidgets &= ~(1ULL << WIDX_BANKING_GROUPBOX); } @@ -2772,7 +2772,7 @@ static void window_ride_construction_update_widgets(rct_window* w) int32_t rideType = ride_get_alternative_type(ride); w->hold_down_widgets = 0; - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_IS_SHOP) || !_stationConstructed) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_IS_SHOP) || !_stationConstructed) { window_ride_construction_widgets[WIDX_ENTRANCE_EXIT_GROUPBOX].type = WindowWidgetType::Empty; window_ride_construction_widgets[WIDX_ENTRANCE].type = WindowWidgetType::Empty; @@ -2803,7 +2803,7 @@ static void window_ride_construction_update_widgets(rct_window* w) window_ride_construction_widgets[WIDX_STRAIGHT].type = WindowWidgetType::Empty; } - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_HAS_LARGE_CURVES)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_LARGE_CURVES)) { window_ride_construction_widgets[WIDX_LEFT_CURVE_LARGE].type = WindowWidgetType::FlatBtn; window_ride_construction_widgets[WIDX_RIGHT_CURVE_LARGE].type = WindowWidgetType::FlatBtn; @@ -3047,7 +3047,7 @@ static void window_ride_construction_update_widgets(rct_window* w) window_ride_construction_widgets[WIDX_BANK_STRAIGHT].type = WindowWidgetType::FlatBtn; window_ride_construction_widgets[WIDX_BANK_RIGHT].type = WindowWidgetType::FlatBtn; } - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES)) { if (rideType == RIDE_TYPE_WATER_COASTER) { @@ -3150,7 +3150,7 @@ static void window_ride_construction_update_widgets(rct_window* w) window_ride_construction_widgets[WIDX_CONSTRUCT].type = WindowWidgetType::Empty; window_ride_construction_widgets[WIDX_DEMOLISH].type = WindowWidgetType::FlatBtn; window_ride_construction_widgets[WIDX_ROTATE].type = WindowWidgetType::Empty; - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_CANNOT_HAVE_GAPS)) { window_ride_construction_widgets[WIDX_PREVIOUS_SECTION].type = WindowWidgetType::Empty; window_ride_construction_widgets[WIDX_NEXT_SECTION].type = WindowWidgetType::Empty; @@ -3249,7 +3249,7 @@ static void window_ride_construction_update_widgets(rct_window* w) if (!_currentlyShowingBrakeOrBoosterSpeed) { - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES)) { if (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_PIECES) { diff --git a/src/openrct2-ui/windows/TrackList.cpp b/src/openrct2-ui/windows/TrackList.cpp index dc09c85778..2948502d77 100644 --- a/src/openrct2-ui/windows/TrackList.cpp +++ b/src/openrct2-ui/windows/TrackList.cpp @@ -578,7 +578,7 @@ static void window_track_list_paint(rct_window* w, rct_drawpixelinfo* dpi) screenPos.y += LIST_ROW_HEIGHT + 4; // Information for tracked rides. - if (ride_type_has_flag(_loadedTrackDesign->type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (GetRideTypeDescriptor(_loadedTrackDesign->type).HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) { if (_loadedTrackDesign->type != RIDE_TYPE_MAZE) { @@ -610,7 +610,7 @@ static void window_track_list_paint(rct_window* w, rct_drawpixelinfo* dpi) screenPos.y += LIST_ROW_HEIGHT; } - if (ride_type_has_flag(_loadedTrackDesign->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) + if (GetRideTypeDescriptor(_loadedTrackDesign->type).HasFlag(RIDE_TYPE_FLAG_HAS_G_FORCES)) { // Maximum positive vertical Gs int32_t gForces = _loadedTrackDesign->max_positive_vertical_g * 32; @@ -636,7 +636,7 @@ static void window_track_list_paint(rct_window* w, rct_drawpixelinfo* dpi) } } - if (ride_type_has_flag(_loadedTrackDesign->type, RIDE_TYPE_FLAG_HAS_DROPS)) + if (GetRideTypeDescriptor(_loadedTrackDesign->type).HasFlag(RIDE_TYPE_FLAG_HAS_DROPS)) { // Drops uint16_t drops = _loadedTrackDesign->drops & 0x3F; diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index 9e2c146dc5..ddf732dc34 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -60,7 +60,7 @@ static void setup_track_manager_objects() for (auto rideType : item->RideInfo.RideType) { - if (rideType != RIDE_TYPE_NULL && ride_type_has_flag(rideType, RIDE_TYPE_FLAG_HAS_TRACK)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) { *selectionFlags &= ~OBJECT_SELECTION_FLAG_6; break; diff --git a/src/openrct2/actions/RideSetVehicleAction.cpp b/src/openrct2/actions/RideSetVehicleAction.cpp index 20c6f9b139..2663b1d86b 100644 --- a/src/openrct2/actions/RideSetVehicleAction.cpp +++ b/src/openrct2/actions/RideSetVehicleAction.cpp @@ -231,7 +231,7 @@ bool RideSetVehicleAction::ride_is_vehicle_type_valid(Ride* ride) const { if (selectionShouldBeExpanded) { - if (ride_type_has_flag(rideTypeIterator, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(rideTypeIterator).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) continue; if (rideTypeIterator == RIDE_TYPE_MAZE || rideTypeIterator == RIDE_TYPE_MINI_GOLF) continue; diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index cba576b6e3..7adaff2f90 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -618,7 +618,7 @@ GameActions::Result::Ptr WallPlaceAction::WallCheckObstruction( bool WallPlaceAction::TrackIsAllowedWallEdges( uint8_t rideType, track_type_t trackType, uint8_t trackSequence, uint8_t direction) { - if (!ride_type_has_flag(rideType, RIDE_TYPE_FLAG_TRACK_NO_WALLS)) + if (!GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_TRACK_NO_WALLS)) { if (TrackSequenceElementAllowedWallEdges[trackType][trackSequence] & (1 << direction)) { diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index 33c66147a5..d87e5111a8 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -3012,16 +3012,16 @@ void Guest::StopPurchaseThought(uint8_t ride_type) { auto thoughtType = PeepThoughtType::Hungry; - if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_SELLS_FOOD)) + if (!GetRideTypeDescriptor(ride_type).HasFlag(RIDE_TYPE_FLAG_SELLS_FOOD)) { thoughtType = PeepThoughtType::Thirsty; - if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_SELLS_DRINKS)) + if (!GetRideTypeDescriptor(ride_type).HasFlag(RIDE_TYPE_FLAG_SELLS_DRINKS)) { thoughtType = PeepThoughtType::RunningOut; if (ride_type != RIDE_TYPE_CASH_MACHINE) { thoughtType = PeepThoughtType::Toilet; - if (!ride_type_has_flag(ride_type, RIDE_TYPE_FLAG_IS_TOILET)) + if (!GetRideTypeDescriptor(ride_type).HasFlag(RIDE_TYPE_FLAG_IS_TOILET)) { return; } diff --git a/src/openrct2/rct1/Tables.cpp b/src/openrct2/rct1/Tables.cpp index 0cb45ac90c..b0882fd014 100644 --- a/src/openrct2/rct1/Tables.cpp +++ b/src/openrct2/rct1/Tables.cpp @@ -1390,7 +1390,7 @@ namespace RCT1 track_type_t RCT1TrackTypeToOpenRCT2(RCT12TrackType origTrackType, uint8_t rideType) { - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) return RCT12FlatTrackTypeToOpenRCT2(origTrackType); return origTrackType; diff --git a/src/openrct2/rct2/RCT2.cpp b/src/openrct2/rct2/RCT2.cpp index c306ea5e79..dbead6fffd 100644 --- a/src/openrct2/rct2/RCT2.cpp +++ b/src/openrct2/rct2/RCT2.cpp @@ -145,7 +145,7 @@ bool RCT2TrackTypeIsBooster(uint8_t rideType, uint16_t trackType) track_type_t RCT2TrackTypeToOpenRCT2(RCT12TrackType origTrackType, uint8_t rideType) { - if (rideType < std::size(RideTypeDescriptors) && ride_type_has_flag(rideType, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) return RCT12FlatTrackTypeToOpenRCT2(origTrackType); if (origTrackType == TrackElemType::RotationControlToggleAlias && !RCT2TrackTypeIsBooster(rideType, origTrackType)) return TrackElemType::RotationControlToggle; diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 0584669d63..ca69b1fa8f 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1382,7 +1382,7 @@ public: dst->SetTrackType(src->GetTrackType()); // RotationControlToggle and Booster are saved as the same track piece ID // Which one the vehicle is using must be determined - if (ride_type_has_flag(ride.type, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(ride.type).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) { dst->SetTrackType(RCT12FlatTrackTypeToOpenRCT2(src->GetTrackType())); } diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index cc5c40371b..e466941484 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -5351,19 +5351,6 @@ RideNaming get_ride_naming(const uint8_t rideType, rct_ride_entry* rideEntry) } } -bool ride_type_has_flag(int32_t rideType, uint64_t flag) -{ - if (rideType < static_cast(std::size(RideTypeDescriptors))) - { - return (RideTypeDescriptors[rideType].Flags & flag) != 0; - } - else - { - Guard::Assert(false); - return false; - } -} - /* * The next eight functions are helpers to access ride data at the offset 10E & * 110. Known as the turn counts. There are 3 different types (default, banked, sloped) @@ -7333,10 +7320,7 @@ uint64_t Ride::GetAvailableModes() const const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const { - if (type >= std::size(RideTypeDescriptors)) - return DummyRTD; - - return RideTypeDescriptors[type]; + return ::GetRideTypeDescriptor(type); } uint8_t Ride::GetMinCarsPerTrain() const diff --git a/src/openrct2/ride/Ride.h b/src/openrct2/ride/Ride.h index a2894272c5..6aa102cd88 100644 --- a/src/openrct2/ride/Ride.h +++ b/src/openrct2/ride/Ride.h @@ -1169,7 +1169,6 @@ int32_t get_turn_count_4_plus_elements(Ride* ride, uint8_t type); uint8_t ride_get_helix_sections(Ride* ride); -bool ride_type_has_flag(int32_t rideType, uint64_t flag); bool ride_has_any_track_elements(const Ride* ride); void ride_construction_set_default_next_piece(); diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index bc855ccd36..91e04c291f 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -351,4 +351,12 @@ constexpr const RideTypeDescriptor DummyRTD = }; // clang-format on +constexpr const RideTypeDescriptor& GetRideTypeDescriptor(ObjectEntryIndex rideType) +{ + if (rideType >= std::size(RideTypeDescriptors)) + return DummyRTD; + + return RideTypeDescriptors[rideType]; +} + #endif diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 4017e7f746..13cc4dfd00 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -1912,7 +1912,7 @@ static bool track_design_place_preview(TrackDesign* td6, money32* cost, Ride** o // Flat rides need their vehicle colours loaded for display // in the preview window - if (!ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!GetRideTypeDescriptor(td6->type).HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) { for (int32_t i = 0; i < RCT12_MAX_VEHICLE_COLOURS; i++) { @@ -2017,7 +2017,7 @@ void track_design_draw_preview(TrackDesign* td6, uint8_t* pixels) // Special case for flat rides - Z-axis info is irrelevant // and must be zeroed out lest the preview be off-centre - if (!ride_type_has_flag(td6->type, RIDE_TYPE_FLAG_HAS_TRACK)) + if (!GetRideTypeDescriptor(td6->type).HasFlag(RIDE_TYPE_FLAG_HAS_TRACK)) { centre.z = 0; size_z = 0; diff --git a/test/testpaint/Compat.cpp b/test/testpaint/Compat.cpp index 235f64668a..fdc2858cf0 100644 --- a/test/testpaint/Compat.cpp +++ b/test/testpaint/Compat.cpp @@ -213,11 +213,6 @@ TileElement* map_get_first_element_at(const CoordsXY& elementPos) return gTileElementTilePointers[tileElementPos.x + tileElementPos.y * 256]; } -bool ride_type_has_flag(int rideType, uint64_t flag) -{ - return (RideTypeDescriptors[rideType].Flags & flag) != 0; -} - int16_t get_height_marker_offset() { return 0; diff --git a/test/testpaint/TestTrack.cpp b/test/testpaint/TestTrack.cpp index f725273cb0..cba62ad737 100644 --- a/test/testpaint/TestTrack.cpp +++ b/test/testpaint/TestTrack.cpp @@ -86,7 +86,7 @@ class ChainLiftFilter : public ITestTrackFilter public: bool AppliesTo(uint8_t rideType, uint8_t trackType) override { - return !ride_type_has_flag(rideType, RIDE_TYPE_FLAG_FLAT_RIDE); + return !GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE); } int Variations(uint8_t rideType, uint8_t trackType) override diff --git a/test/testpaint/generate.cpp b/test/testpaint/generate.cpp index 583756df77..0279c7f2b5 100644 --- a/test/testpaint/generate.cpp +++ b/test/testpaint/generate.cpp @@ -1163,7 +1163,7 @@ private: int generatePaintCode(uint8_t rideType) { - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) { fprintf(stderr, "Flat rides not supported.\n"); } diff --git a/test/testpaint/main.cpp b/test/testpaint/main.cpp index e39aecab47..4db67bd03d 100644 --- a/test/testpaint/main.cpp +++ b/test/testpaint/main.cpp @@ -520,7 +520,7 @@ int main(int argc, char* argv[]) TestCase testCase = {}; testCase.rideType = rideType; - if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) { testCase.trackTypes.push_back(RideTypeDescriptors[rideType].StartTrackPiece); } @@ -564,7 +564,7 @@ int main(int argc, char* argv[]) for (auto&& trackType : tc.trackTypes) { utf8string trackTypeName; - if (ride_type_has_flag(tc.rideType, RIDE_TYPE_FLAG_FLAT_RIDE)) + if (GetRideTypeDescriptor(tc.rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) { trackTypeName = FlatTrackNames[trackType]; } From 62f87966774920fa1c283cce110178cd6ae9ba43 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 26 Feb 2021 09:51:17 +0100 Subject: [PATCH 6/8] Replace more flag checking --- src/openrct2/EditorObjectSelectionSession.cpp | 2 +- src/openrct2/ride/Ride.cpp | 6 +++--- src/openrct2/ride/Track.cpp | 2 +- src/openrct2/ride/Vehicle.cpp | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index ddf732dc34..628cf35c0a 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -92,7 +92,7 @@ static void setup_track_designer_objects() { if (rideType != RIDE_TYPE_NULL) { - if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER) + if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER)) { *selectionFlags &= ~OBJECT_SELECTION_FLAG_6; break; diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index e466941484..dd8efa5bf4 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -877,7 +877,7 @@ int32_t ride_get_total_time(Ride* ride) bool Ride::CanHaveMultipleCircuits() const { - if (!(RideTypeDescriptors[type].Flags & RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS)) + if (!(RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS))) return false; // Only allow circuit or launch modes @@ -5076,7 +5076,7 @@ bool Ride::Open(bool isApplying) } } - if ((RideTypeDescriptors[type].Flags & RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL) + if ((RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL)) && (lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) && !(lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) { if (!ride_create_cable_lift(id, isApplying)) @@ -6428,7 +6428,7 @@ void Ride::UpdateMaxVehicles() } while (totalLength <= stationLength); if ((mode != RideMode::StationToStation && mode != RideMode::ContinuousCircuit) - || !(RideTypeDescriptors[type].Flags & RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS)) + || !(RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS))) { maxNumTrains = std::min(maxNumTrains, 31); } diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 05cd057a22..0155cb576e 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -853,7 +853,7 @@ roll_type_t track_get_actual_bank(TileElement* tileElement, roll_type_t bank) roll_type_t track_get_actual_bank_2(int32_t rideType, bool isInverted, roll_type_t bank) { - if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE) + if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (isInverted) { diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 57e9da47c4..46c2c6130e 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -4019,7 +4019,7 @@ void Vehicle::UpdateArriving() goto loc_6D8E36; } - if (RideTypeDescriptors[curRide->type].Flags & RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS + if (RideTypeDescriptors[curRide->type].HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS) && curRide->mode != RideMode::Shuttle && curRide->mode != RideMode::PoweredLaunch) { SetUpdateFlag(VEHICLE_UPDATE_FLAG_12); @@ -8095,7 +8095,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); { int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type; - if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE) + if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -8470,7 +8470,7 @@ bool Vehicle::UpdateTrackMotionBackwardsGetNewTrack(uint16_t trackType, Ride* cu // Update VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); - if (RideTypeDescriptors[curRide->type].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE) + if (RideTypeDescriptors[curRide->type].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -8855,7 +8855,7 @@ loc_6DC476: { int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type; ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); - if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE) + if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -9066,7 +9066,7 @@ loc_6DCA9A: { int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type; ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); - if (RideTypeDescriptors[rideType].Flags & RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE) + if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { From 44d0e77afb3b8e9a2cf1f688ab73ddaf43bbcc2a Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 26 Feb 2021 10:01:00 +0100 Subject: [PATCH 7/8] Make all access to RTD table use the bounds checking function --- .../windows/EditorInventionsList.cpp | 6 ++-- .../windows/EditorObjectSelection.cpp | 6 ++-- src/openrct2-ui/windows/InstallTrack.cpp | 2 +- src/openrct2-ui/windows/NewRide.cpp | 18 +++++----- src/openrct2-ui/windows/Park.cpp | 2 +- src/openrct2-ui/windows/Research.cpp | 4 +-- src/openrct2-ui/windows/Ride.cpp | 10 +++--- src/openrct2-ui/windows/RideConstruction.cpp | 4 +-- src/openrct2-ui/windows/ScenarioSelect.cpp | 2 +- src/openrct2-ui/windows/TrackList.cpp | 2 +- src/openrct2/EditorObjectSelectionSession.cpp | 2 +- src/openrct2/actions/MazePlaceTrackAction.cpp | 2 +- src/openrct2/actions/MazeSetTrackAction.cpp | 2 +- src/openrct2/actions/RideCreateAction.cpp | 2 +- src/openrct2/interface/InteractiveConsole.cpp | 2 +- src/openrct2/management/Research.cpp | 10 +++--- src/openrct2/object/RideObject.cpp | 2 +- src/openrct2/rct1/S4Importer.cpp | 6 ++-- src/openrct2/rct1/T4Importer.cpp | 4 +-- src/openrct2/rct2/S6Exporter.cpp | 6 ++-- src/openrct2/rct2/T6Importer.cpp | 2 +- src/openrct2/ride/CableLift.cpp | 4 +-- src/openrct2/ride/Ride.cpp | 34 +++++++++---------- src/openrct2/ride/RideRatings.cpp | 2 +- src/openrct2/ride/Track.cpp | 2 +- src/openrct2/ride/TrackDesignRepository.cpp | 4 +-- src/openrct2/ride/Vehicle.cpp | 34 +++++++++---------- test/testpaint/Compat.cpp | 2 +- test/testpaint/TestTrack.cpp | 2 +- test/testpaint/Utils.cpp | 4 +-- test/testpaint/main.cpp | 2 +- 31 files changed, 93 insertions(+), 93 deletions(-) diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 3b47cbb443..772e78839b 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -633,7 +633,7 @@ static void window_editor_inventions_list_scrollpaint(rct_window* w, rct_drawpix const rct_string_id itemNameId = researchItem.GetName(); if (researchItem.type == Research::EntryType::Ride - && !RideTypeDescriptors[researchItem.baseRideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + && !GetRideTypeDescriptor(researchItem.baseRideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { const auto rideEntry = get_ride_entry(researchItem.entryIndex); const rct_string_id rideTypeName = get_ride_naming(researchItem.baseRideType, rideEntry).Name; @@ -674,7 +674,7 @@ static void window_editor_inventions_list_drag_open(ResearchItem* researchItem) ptr = buffer; if (researchItem->type == Research::EntryType::Ride - && !RideTypeDescriptors[researchItem->baseRideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + && !GetRideTypeDescriptor(researchItem->baseRideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { const auto rideEntry = get_ride_entry(researchItem->entryIndex); const rct_string_id rideTypeName = get_ride_naming(researchItem->baseRideType, rideEntry).Name; @@ -768,7 +768,7 @@ static std::pair window_editor_inventions_list_prepare auto ft = Formatter(); if (researchItem->type == Research::EntryType::Ride - && !RideTypeDescriptors[researchItem->baseRideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + && !GetRideTypeDescriptor(researchItem->baseRideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { drawString = withGap ? STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME_DRAG : STR_WINDOW_COLOUR_2_STRINGID_STRINGID; rct_string_id rideTypeName = get_ride_naming(researchItem->baseRideType, get_ride_entry(researchItem->entryIndex)).Name; diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 7ce2c6df7b..793a2a0904 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1318,7 +1318,7 @@ static void editor_load_selected_objects() { rct_ride_entry* rideEntry = get_ride_entry(entryIndex); uint8_t rideType = ride_entry_get_first_non_null_ride_type(rideEntry); - ResearchCategory category = static_cast(RideTypeDescriptors[rideType].Category); + ResearchCategory category = static_cast(GetRideTypeDescriptor(rideType).Category); research_insert_ride_entry(rideType, entryIndex, category, true); } else if (objectType == ObjectType::SceneryGroup) @@ -1485,7 +1485,7 @@ static bool filter_chunks(const ObjectRepositoryItem* item) break; } } - return (_filter_flags & (1 << (RideTypeDescriptors[rideType].Category + _numSourceGameItems))) != 0; + return (_filter_flags & (1 << (GetRideTypeDescriptor(rideType).Category + _numSourceGameItems))) != 0; } return true; } @@ -1519,7 +1519,7 @@ static rct_string_id get_ride_type_string_id(const ObjectRepositoryItem* item) uint8_t rideType = item->RideInfo.RideType[i]; if (rideType != RIDE_TYPE_NULL) { - result = RideTypeDescriptors[rideType].Naming.Name; + result = GetRideTypeDescriptor(rideType).Naming.Name; break; } } diff --git a/src/openrct2-ui/windows/InstallTrack.cpp b/src/openrct2-ui/windows/InstallTrack.cpp index dc55030481..449104e3da 100644 --- a/src/openrct2-ui/windows/InstallTrack.cpp +++ b/src/openrct2-ui/windows/InstallTrack.cpp @@ -252,7 +252,7 @@ static void window_install_track_paint(rct_window* w, rct_drawpixelinfo* dpi) else { // Fall back on the technical track name if the vehicle object cannot be loaded - ft.Add(RideTypeDescriptors[td6->type].Naming.Name); + ft.Add(GetRideTypeDescriptor(td6->type).Naming.Name); } gfx_draw_string_left(dpi, STR_TRACK_DESIGN_TYPE, ft.Data(), COLOUR_BLACK, screenPos); diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index a89fbcc4b3..b81b1f924d 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -305,7 +305,7 @@ static void window_new_ride_populate_list() if (rideType == RIDE_TYPE_NULL) continue; - if (RideTypeDescriptors[rideType].Category != currentCategory) + if (GetRideTypeDescriptor(rideType).Category != currentCategory) continue; nextListItem = window_new_ride_iterate_over_ride_type(rideType, nextListItem); @@ -335,7 +335,7 @@ static RideSelection* window_new_ride_iterate_over_ride_type(uint8_t rideType, R rct_ride_entry* rideEntry = get_ride_entry(rideEntryIndex); // Skip if the vehicle isn't the preferred vehicle for this generic track type - if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) + if (!GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) && highestVehiclePriority > rideEntry->BuildMenuPriority) { continue; @@ -343,7 +343,7 @@ static RideSelection* window_new_ride_iterate_over_ride_type(uint8_t rideType, R highestVehiclePriority = rideEntry->BuildMenuPriority; // Determines how and where to draw a button for this ride type/vehicle. - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { // Separate, draw apart allowDrawingOverLastButton = false; @@ -481,7 +481,7 @@ void window_new_ride_focus(RideSelection rideItem) rideEntry = get_ride_entry(rideItem.EntryIndex); uint8_t rideTypeIndex = ride_entry_get_first_non_null_ride_type(rideEntry); - window_new_ride_set_page(w, RideTypeDescriptors[rideTypeIndex].Category); + window_new_ride_set_page(w, GetRideTypeDescriptor(rideTypeIndex).Category); for (RideSelection* listItem = _windowNewRideListItems; listItem->Type != RIDE_TYPE_NULL; listItem++) { @@ -876,7 +876,7 @@ static int32_t get_num_track_designs(RideSelection item) if (item.Type < 0x80) { - if (RideTypeDescriptors[item.Type].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (GetRideTypeDescriptor(item.Type).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { entryName = get_ride_entry_name(item.EntryIndex); } @@ -942,10 +942,10 @@ static void window_new_ride_paint_ride_information( if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { // Get price of ride - int32_t unk2 = RideTypeDescriptors[item.Type].StartTrackPiece; - money32 price = RideTypeDescriptors[item.Type].BuildCosts.TrackPrice; + int32_t unk2 = GetRideTypeDescriptor(item.Type).StartTrackPiece; + money32 price = GetRideTypeDescriptor(item.Type).BuildCosts.TrackPrice; price *= TrackPricing[unk2]; - price = (price >> 17) * 10 * RideTypeDescriptors[item.Type].BuildCosts.PriceEstimateMultiplier; + price = (price >> 17) * 10 * GetRideTypeDescriptor(item.Type).BuildCosts.PriceEstimateMultiplier; // rct_string_id stringId = STR_NEW_RIDE_COST; @@ -986,7 +986,7 @@ static void window_new_ride_select(rct_window* w) static void window_new_ride_list_vehicles_for(uint8_t rideType, const rct_ride_entry* rideEntry, char* buffer, size_t bufferLen) { std::fill_n(buffer, bufferLen, 0); - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { return; } diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index e8378af16a..1f0290cd93 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -1477,7 +1477,7 @@ static void window_park_objective_paint(rct_window* w, rct_drawpixelinfo* dpi) auto rideTypeId = gScenarioObjective.RideId; if (rideTypeId != RIDE_TYPE_NULL && rideTypeId < RIDE_TYPE_COUNT) { - rideTypeString = RideTypeDescriptors[rideTypeId].Naming.Name; + rideTypeString = GetRideTypeDescriptor(rideTypeId).Naming.Name; } ft.Add(rideTypeString); } diff --git a/src/openrct2-ui/windows/Research.cpp b/src/openrct2-ui/windows/Research.cpp index 1ef336729a..377daf7185 100644 --- a/src/openrct2-ui/windows/Research.cpp +++ b/src/openrct2-ui/windows/Research.cpp @@ -325,7 +325,7 @@ void window_research_development_page_paint(rct_window* w, rct_drawpixelinfo* dp strings[0] = gResearchNextItem->GetName(); if (gResearchNextItem->type == Research::EntryType::Ride) { - auto rtd = RideTypeDescriptors[gResearchNextItem->baseRideType]; + auto rtd = GetRideTypeDescriptor(gResearchNextItem->baseRideType); if (!rtd.HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { if (gResearchNextItem->flags & RESEARCH_ENTRY_FLAG_FIRST_OF_TYPE) @@ -380,7 +380,7 @@ void window_research_development_page_paint(rct_window* w, rct_drawpixelinfo* dp else { lastDevelopmentFormat = STR_RESEARCH_RIDE_LABEL; - auto rtd = RideTypeDescriptors[gResearchLastItem->baseRideType]; + auto rtd = GetRideTypeDescriptor(gResearchLastItem->baseRideType); if (!rtd.HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { if (gResearchLastItem->flags & RESEARCH_ENTRY_FLAG_FIRST_OF_TYPE) diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index c1d8875f40..29c8dcff57 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2014,7 +2014,7 @@ static rct_string_id get_ride_type_name_for_dropdown(uint8_t rideType) case RIDE_TYPE_59: return STR_RIDE_NAME_59; default: - return RideTypeDescriptors[rideType].Naming.Name; + return GetRideTypeDescriptor(rideType).Naming.Name; } } @@ -3443,7 +3443,7 @@ static void window_ride_operating_invalidate(rct_window* w) bool hasAlternativeType = ride->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE); if (ride->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_LIFT_HILL) || (hasAlternativeType - && RideTypeDescriptors[ride->GetRideTypeDescriptor().AlternateType].SupportsTrackPiece(TRACK_LIFT_HILL))) + && GetRideTypeDescriptor(ride->GetRideTypeDescriptor().AlternateType).SupportsTrackPiece(TRACK_LIFT_HILL))) { window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_LABEL].type = WindowWidgetType::Label; window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED].type = WindowWidgetType::Spinner; @@ -3828,7 +3828,7 @@ static void window_ride_maintenance_mousedown(rct_window* w, rct_widgetindex wid for (int32_t i = 0; i < 8; i++) { assert(j < static_cast(std::size(rideEntry->ride_type))); - if (RideTypeDescriptors[rideEntry->ride_type[j]].AvailableBreakdowns & static_cast(1 << i)) + if (GetRideTypeDescriptor(rideEntry->ride_type[j]).AvailableBreakdowns & static_cast(1 << i)) { if (i == BREAKDOWN_BRAKES_FAILURE && ride->IsBlockSectioned()) { @@ -3856,7 +3856,7 @@ static void window_ride_maintenance_mousedown(rct_window* w, rct_widgetindex wid { for (int32_t i = 0; i < 8; i++) { - if (RideTypeDescriptors[rideEntry->ride_type[j]].AvailableBreakdowns & static_cast(1 << i)) + if (GetRideTypeDescriptor(rideEntry->ride_type[j]).AvailableBreakdowns & static_cast(1 << i)) { if (i == BREAKDOWN_BRAKES_FAILURE && ride->IsBlockSectioned()) { @@ -3971,7 +3971,7 @@ static void window_ride_maintenance_dropdown(rct_window* w, rct_widgetindex widg for (i = 0; i < BREAKDOWN_COUNT; i++) { assert(j < static_cast(std::size(rideEntry->ride_type))); - if (RideTypeDescriptors[rideEntry->ride_type[j]].AvailableBreakdowns & static_cast(1 << i)) + if (GetRideTypeDescriptor(rideEntry->ride_type[j]).AvailableBreakdowns & static_cast(1 << i)) { if (i == BREAKDOWN_BRAKES_FAILURE && ride->IsBlockSectioned()) { diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 267954250f..786fd4d861 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2518,7 +2518,7 @@ void window_ride_construction_update_enabled_track_pieces() return; int32_t rideType = ride_get_alternative_type(ride); - _enabledRidePieces = RideTypeDescriptors[rideType].GetAvailableTrackPieces(); + _enabledRidePieces = GetRideTypeDescriptor(rideType).GetAvailableTrackPieces(); } /** @@ -2868,7 +2868,7 @@ static void window_ride_construction_update_widgets(rct_window* w) window_ride_construction_widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_STEEP_SLOPE_DOWN_TIP; window_ride_construction_widgets[WIDX_SLOPE_UP_STEEP].image = SPR_RIDE_CONSTRUCTION_SLOPE_UP_STEEP; window_ride_construction_widgets[WIDX_SLOPE_UP_STEEP].tooltip = STR_RIDE_CONSTRUCTION_STEEP_SLOPE_UP_TIP; - if (RideTypeDescriptors[rideType].SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) + if (GetRideTypeDescriptor(rideType).SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { window_ride_construction_widgets[WIDX_LEVEL].type = WindowWidgetType::FlatBtn; window_ride_construction_widgets[WIDX_SLOPE_UP].type = WindowWidgetType::FlatBtn; diff --git a/src/openrct2-ui/windows/ScenarioSelect.cpp b/src/openrct2-ui/windows/ScenarioSelect.cpp index e0c5935790..7da0f2b35c 100644 --- a/src/openrct2-ui/windows/ScenarioSelect.cpp +++ b/src/openrct2-ui/windows/ScenarioSelect.cpp @@ -514,7 +514,7 @@ static void window_scenarioselect_paint(rct_window* w, rct_drawpixelinfo* dpi) auto rideTypeId = scenario->objective_arg_3; if (rideTypeId != RIDE_TYPE_NULL && rideTypeId < RIDE_TYPE_COUNT) { - rideTypeString = RideTypeDescriptors[rideTypeId].Naming.Name; + rideTypeString = GetRideTypeDescriptor(rideTypeId).Naming.Name; } ft.Add(rideTypeString); } diff --git a/src/openrct2-ui/windows/TrackList.cpp b/src/openrct2-ui/windows/TrackList.cpp index 2948502d77..8067850dc2 100644 --- a/src/openrct2-ui/windows/TrackList.cpp +++ b/src/openrct2-ui/windows/TrackList.cpp @@ -760,7 +760,7 @@ static void track_list_load_designs(RideSelection item) std::string entryName; if (item.Type < 0x80) { - if (RideTypeDescriptors[item.Type].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (GetRideTypeDescriptor(item.Type).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { entryName = get_ride_entry_name(item.EntryIndex); } diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index 628cf35c0a..4682f002ce 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -92,7 +92,7 @@ static void setup_track_designer_objects() { if (rideType != RIDE_TYPE_NULL) { - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER)) { *selectionFlags &= ~OBJECT_SELECTION_FLAG_6; break; diff --git a/src/openrct2/actions/MazePlaceTrackAction.cpp b/src/openrct2/actions/MazePlaceTrackAction.cpp index aa0da1f4fe..71b18401c2 100644 --- a/src/openrct2/actions/MazePlaceTrackAction.cpp +++ b/src/openrct2/actions/MazePlaceTrackAction.cpp @@ -75,7 +75,7 @@ GameActions::Result::Ptr MazePlaceTrackAction::Query() const { heightDifference /= COORDS_Z_PER_TINY_Z; - if (heightDifference > RideTypeDescriptors[RIDE_TYPE_MAZE].Heights.MaxHeight) + if (heightDifference > GetRideTypeDescriptor(RIDE_TYPE_MAZE).Heights.MaxHeight) { res->Error = GameActions::Status::TooHigh; res->ErrorMessage = STR_TOO_HIGH_FOR_SUPPORTS; diff --git a/src/openrct2/actions/MazeSetTrackAction.cpp b/src/openrct2/actions/MazeSetTrackAction.cpp index 875b6d88d5..3c5af361ed 100644 --- a/src/openrct2/actions/MazeSetTrackAction.cpp +++ b/src/openrct2/actions/MazeSetTrackAction.cpp @@ -87,7 +87,7 @@ GameActions::Result::Ptr MazeSetTrackAction::Query() const { heightDifference /= COORDS_Z_PER_TINY_Z; - if (heightDifference > RideTypeDescriptors[RIDE_TYPE_MAZE].Heights.MaxHeight) + if (heightDifference > GetRideTypeDescriptor(RIDE_TYPE_MAZE).Heights.MaxHeight) { res->Error = GameActions::Status::TooHigh; res->ErrorMessage = STR_TOO_HIGH_FOR_SUPPORTS; diff --git a/src/openrct2/actions/RideCreateAction.cpp b/src/openrct2/actions/RideCreateAction.cpp index 4734f6c38e..45498fc432 100644 --- a/src/openrct2/actions/RideCreateAction.cpp +++ b/src/openrct2/actions/RideCreateAction.cpp @@ -93,7 +93,7 @@ GameActions::Result::Ptr RideCreateAction::Query() const return MakeResult(GameActions::Status::InvalidParameters, STR_INVALID_RIDE_TYPE); } - const auto& colourPresets = RideTypeDescriptors[_rideType].ColourPresets; + const auto& colourPresets = GetRideTypeDescriptor(_rideType).ColourPresets; if (_colour1 >= colourPresets.count) { return MakeResult(GameActions::Status::InvalidParameters, STR_NONE); diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index d54f5406c1..4d38c980ce 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -1099,7 +1099,7 @@ static int32_t cc_load_object(InteractiveConsole& console, const arguments_t& ar rideType = rideEntry->ride_type[j]; if (rideType != RIDE_TYPE_NULL) { - ResearchCategory category = RideTypeDescriptors[rideType].GetResearchCategory(); + ResearchCategory category = GetRideTypeDescriptor(rideType).GetResearchCategory(); research_insert_ride_entry(rideType, groupIndex, category, true); } } diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index 54a3997204..d041ec72da 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -244,7 +244,7 @@ void research_finish_item(ResearchItem* researchItem) // If a vehicle is the first to be invented for its ride type, show the ride type/group name. // Independently listed vehicles (like all flat rides and shops) should always be announced as such. - if (RideTypeDescriptors[base_ride_type].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) + if (GetRideTypeDescriptor(base_ride_type).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY) || researchItem->flags & RESEARCH_ENTRY_FLAG_FIRST_OF_TYPE) { RideNaming naming = get_ride_naming(base_ride_type, rideEntry); @@ -469,7 +469,7 @@ void research_populate_list_random() { if (rideType != RIDE_TYPE_NULL) { - ResearchCategory category = RideTypeDescriptors[rideType].GetResearchCategory(); + ResearchCategory category = GetRideTypeDescriptor(rideType).GetResearchCategory(); research_insert_ride_entry(rideType, i, category, researched); } } @@ -508,7 +508,7 @@ void research_insert_ride_entry(ObjectEntryIndex entryIndex, bool researched) { if (rideType != RIDE_TYPE_NULL) { - ResearchCategory category = RideTypeDescriptors[rideType].GetResearchCategory(); + ResearchCategory category = GetRideTypeDescriptor(rideType).GetResearchCategory(); research_insert_ride_entry(rideType, entryIndex, category, researched); } } @@ -945,7 +945,7 @@ static void research_update_first_of_type(ResearchItem* researchItem) return; } - const auto& rtd = RideTypeDescriptors[rideType]; + const auto& rtd = GetRideTypeDescriptor(rideType); if (rtd.HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { researchItem->flags |= RESEARCH_ENTRY_FLAG_FIRST_OF_TYPE; @@ -978,7 +978,7 @@ void research_determine_first_of_type() if (rideType >= RIDE_TYPE_COUNT) continue; - const auto& rtd = RideTypeDescriptors[rideType]; + const auto& rtd = GetRideTypeDescriptor(rideType); if (rtd.HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) continue; diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index a49efe3c60..c07399fcf2 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -404,7 +404,7 @@ void RideObject::SetRepositoryItem(ObjectRepositoryItem* item) const { // Find the first non-null ride type, to be used when checking the ride group and determining the category. uint8_t firstRideType = ride_entry_get_first_non_null_ride_type(&_legacyType); - uint8_t category = RideTypeDescriptors[firstRideType].Category; + uint8_t category = GetRideTypeDescriptor(firstRideType).Category; for (int32_t i = 0; i < RCT2_MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) { diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 095a573882..3c42eda896 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -847,7 +847,7 @@ private: if (_gameVersion == FILE_VERSION_RCT1) { // Original RCT had no music settings, take default style - dst->music = RideTypeDescriptors[dst->type].DefaultMusic; + dst->music = GetRideTypeDescriptor(dst->type).DefaultMusic; // Only merry-go-round and dodgems had music and used // the same flag as synchronise stations for the option to enable it @@ -2682,7 +2682,7 @@ private: dst->baseRideType = rideType; dst->type = Research::EntryType::Ride; dst->flags = 0; - dst->category = RideTypeDescriptors[rideType].GetResearchCategory(); + dst->category = GetRideTypeDescriptor(rideType).GetResearchCategory(); } } } @@ -2701,7 +2701,7 @@ private: dst->baseRideType = rideType; dst->type = Research::EntryType::Ride; dst->flags = 0; - dst->category = RideTypeDescriptors[rideType].GetResearchCategory(); + dst->category = GetRideTypeDescriptor(rideType).GetResearchCategory(); } } } diff --git a/src/openrct2/rct1/T4Importer.cpp b/src/openrct2/rct1/T4Importer.cpp index e0bd2b4c38..9f2a1579dd 100644 --- a/src/openrct2/rct1/T4Importer.cpp +++ b/src/openrct2/rct1/T4Importer.cpp @@ -223,7 +223,7 @@ private: td->number_of_cars_per_train = td4Base.number_of_cars_per_train; td->min_waiting_time = td4Base.min_waiting_time; td->max_waiting_time = td4Base.max_waiting_time; - td->operation_setting = std::min(td4Base.operation_setting, RideTypeDescriptors[td->type].OperatingSettings.MaxValue); + td->operation_setting = std::min(td4Base.operation_setting, GetRideTypeDescriptor(td->type).OperatingSettings.MaxValue); td->max_speed = td4Base.max_speed; td->average_speed = td4Base.average_speed; td->ride_length = td4Base.ride_length; @@ -250,7 +250,7 @@ private: td->space_required_y = 255; td->lift_hill_speed = 5; td->num_circuits = 0; - td->operation_setting = std::min(td->operation_setting, RideTypeDescriptors[td->type].OperatingSettings.MaxValue); + td->operation_setting = std::min(td->operation_setting, GetRideTypeDescriptor(td->type).OperatingSettings.MaxValue); if (td->type == RIDE_TYPE_MAZE) { diff --git a/src/openrct2/rct2/S6Exporter.cpp b/src/openrct2/rct2/S6Exporter.cpp index ef672e6195..6b16d1dd73 100644 --- a/src/openrct2/rct2/S6Exporter.cpp +++ b/src/openrct2/rct2/S6Exporter.cpp @@ -208,8 +208,8 @@ void S6Exporter::Export() // Not used by OpenRCT2 any more, but left in to keep RCT2 export working. for (uint8_t i = 0; i < std::size(RideTypeDescriptors); i++) { - researchedTrackPiecesA[i] = (RideTypeDescriptors[i].EnabledTrackPieces) & 0xFFFFFFFFULL; - researchedTrackPiecesB[i] = (RideTypeDescriptors[i].EnabledTrackPieces >> 32ULL) & 0xFFFFFFFFULL; + researchedTrackPiecesA[i] = (GetRideTypeDescriptor(i).EnabledTrackPieces) & 0xFFFFFFFFULL; + researchedTrackPiecesB[i] = (GetRideTypeDescriptor(i).EnabledTrackPieces >> 32ULL) & 0xFFFFFFFFULL; } std::memcpy(_s6.researched_track_types_a, researchedTrackPiecesA, sizeof(_s6.researched_track_types_a)); std::memcpy(_s6.researched_track_types_b, researchedTrackPiecesB, sizeof(_s6.researched_track_types_b)); @@ -534,7 +534,7 @@ void S6Exporter::ExportRide(rct2_ride* dst, const Ride* src) if (useDefaultName) { // Default name with number - dst->name = RideTypeDescriptors[src->type].Naming.Name; + dst->name = GetRideTypeDescriptor(src->type).Naming.Name; dst->name_arguments_number = src->default_name_number; } diff --git a/src/openrct2/rct2/T6Importer.cpp b/src/openrct2/rct2/T6Importer.cpp index 4d8c823340..d45d97aa73 100644 --- a/src/openrct2/rct2/T6Importer.cpp +++ b/src/openrct2/rct2/T6Importer.cpp @@ -141,7 +141,7 @@ public: return nullptr; } - td->operation_setting = std::min(td->operation_setting, RideTypeDescriptors[td->type].OperatingSettings.MaxValue); + td->operation_setting = std::min(td->operation_setting, GetRideTypeDescriptor(td->type).OperatingSettings.MaxValue); if (td->type == RIDE_TYPE_MAZE) { diff --git a/src/openrct2/ride/CableLift.cpp b/src/openrct2/ride/CableLift.cpp index 295056928b..99d6d75c4c 100644 --- a/src/openrct2/ride/CableLift.cpp +++ b/src/openrct2/ride/CableLift.cpp @@ -270,7 +270,7 @@ bool Vehicle::CableLiftUpdateTrackMotionForwards() auto unk = CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z } + TrackLocation; uint8_t bx = 0; - unk.z += RideTypeDescriptors[curRide->type].Heights.VehicleZOffset; + unk.z += GetRideTypeDescriptor(curRide->type).Heights.VehicleZOffset; if (unk.x != unk_F64E20.x) bx |= (1 << 0); if (unk.y != unk_F64E20.y) @@ -336,7 +336,7 @@ bool Vehicle::CableLiftUpdateTrackMotionBackwards() auto unk = CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z } + TrackLocation; uint8_t bx = 0; - unk.z += RideTypeDescriptors[curRide->type].Heights.VehicleZOffset; + unk.z += GetRideTypeDescriptor(curRide->type).Heights.VehicleZOffset; if (unk.x != unk_F64E20.x) bx |= (1 << 0); if (unk.y != unk_F64E20.y) diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index dd8efa5bf4..eecf7eb208 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -397,7 +397,7 @@ money32 Ride::CalculateIncomePerHour() const priceMinusCost -= GetShopItemDescriptor(currentShopItem).Cost; } - currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[type].PhotoItem + currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? ::GetRideTypeDescriptor(type).PhotoItem : entry->shop_item[1]; if (currentShopItem != ShopItem::None) @@ -877,7 +877,7 @@ int32_t ride_get_total_time(Ride* ride) bool Ride::CanHaveMultipleCircuits() const { - if (!(RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS))) + if (!(::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS))) return false; // Only allow circuit or launch modes @@ -2445,7 +2445,7 @@ static int32_t ride_get_new_breakdown_problem(Ride* ride) bool Ride::CanBreakDown() const { - if (RideTypeDescriptors[type].AvailableBreakdowns == 0) + if (::GetRideTypeDescriptor(type).AvailableBreakdowns == 0) { return false; } @@ -3069,8 +3069,8 @@ std::pair Ride::GetMeasurement() else { auto ft = Formatter(); - ft.Add(GetRideComponentName(RideTypeDescriptors[type].NameConvention.vehicle).singular); - ft.Add(GetRideComponentName(RideTypeDescriptors[type].NameConvention.station).singular); + ft.Add(GetRideComponentName(::GetRideTypeDescriptor(type).NameConvention.vehicle).singular); + ft.Add(GetRideComponentName(::GetRideTypeDescriptor(type).NameConvention.station).singular); return { nullptr, { STR_DATA_LOGGING_WILL_START_WHEN_NEXT_LEAVES, ft } }; } } @@ -5076,7 +5076,7 @@ bool Ride::Open(bool isApplying) } } - if ((RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL)) + if ((::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL)) && (lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) && !(lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) { if (!ride_create_cable_lift(id, isApplying)) @@ -5260,7 +5260,7 @@ int32_t ride_get_random_colour_preset_index(uint8_t ride_type) return 0; } - const track_colour_preset_list* colourPresets = &RideTypeDescriptors[ride_type].ColourPresets; + const track_colour_preset_list* colourPresets = &GetRideTypeDescriptor(ride_type).ColourPresets; // 200 attempts to find a colour preset that hasn't already been used in the park for this ride type for (int32_t i = 0; i < 200; i++) @@ -5282,7 +5282,7 @@ int32_t ride_get_random_colour_preset_index(uint8_t ride_type) */ void Ride::SetColourPreset(uint8_t index) { - const track_colour_preset_list* colourPresets = &RideTypeDescriptors[type].ColourPresets; + const track_colour_preset_list* colourPresets = &::GetRideTypeDescriptor(type).ColourPresets; TrackColour colours = { COLOUR_BLACK, COLOUR_BLACK, COLOUR_BLACK }; // Stalls save their default colour in the vehicle settings (since they share a common ride type) if (!IsRide()) @@ -5341,9 +5341,9 @@ void Ride::SetNameToDefault() */ RideNaming get_ride_naming(const uint8_t rideType, rct_ride_entry* rideEntry) { - if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (!GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { - return RideTypeDescriptors[rideType].Naming; + return GetRideTypeDescriptor(rideType).Naming; } else { @@ -6366,7 +6366,7 @@ void Ride::UpdateMaxVehicles() return; auto stationLength = (*stationNumTiles * 0x44180) - 0x16B2A; - int32_t maxMass = RideTypeDescriptors[type].MaxMass << 8; + int32_t maxMass = ::GetRideTypeDescriptor(type).MaxMass << 8; int32_t maxCarsPerTrain = 1; for (int32_t numCars = rideEntry->max_cars_in_train; numCars > 0; numCars--) { @@ -6428,7 +6428,7 @@ void Ride::UpdateMaxVehicles() } while (totalLength <= stationLength); if ((mode != RideMode::StationToStation && mode != RideMode::ContinuousCircuit) - || !(RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS))) + || !(::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS))) { maxNumTrains = std::min(maxNumTrains, 31); } @@ -7015,7 +7015,7 @@ uint8_t ride_entry_get_first_non_null_ride_type(const rct_ride_entry* rideEntry) int32_t get_booster_speed(uint8_t rideType, int32_t rawSpeed) { - int8_t shiftFactor = RideTypeDescriptors[rideType].OperatingSettings.BoosterSpeedFactor; + int8_t shiftFactor = GetRideTypeDescriptor(rideType).OperatingSettings.BoosterSpeedFactor; if (shiftFactor == 0) { return rawSpeed; @@ -7067,7 +7067,7 @@ void fix_invalid_vehicle_sprite_sizes() bool ride_entry_has_category(const rct_ride_entry* rideEntry, uint8_t category) { auto rideType = ride_entry_get_first_non_null_ride_type(rideEntry); - return RideTypeDescriptors[rideType].Category == category; + return GetRideTypeDescriptor(rideType).Category == category; } int32_t ride_get_entry_index(int32_t rideType, int32_t rideSubType) @@ -7095,7 +7095,7 @@ int32_t ride_get_entry_index(int32_t rideType, int32_t rideSubType) continue; } - if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (!GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { subType = rideEntryIndex; break; @@ -7297,8 +7297,8 @@ void Ride::FormatNameTo(Formatter& ft) const } else { - auto rideTypeName = RideTypeDescriptors[type].Naming.Name; - if (RideTypeDescriptors[type].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + auto rideTypeName = ::GetRideTypeDescriptor(type).Naming.Name; + if (::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { auto rideEntry = GetRideEntry(); if (rideEntry != nullptr) diff --git a/src/openrct2/ride/RideRatings.cpp b/src/openrct2/ride/RideRatings.cpp index 6cf7cd6046..ba486eb147 100644 --- a/src/openrct2/ride/RideRatings.cpp +++ b/src/openrct2/ride/RideRatings.cpp @@ -4440,7 +4440,7 @@ void ride_ratings_calculate_single_rail_roller_coaster(Ride* ride) ride_ratings_calculation ride_ratings_get_calculate_func(uint8_t rideType) { - return RideTypeDescriptors[rideType].RatingsCalculationFunction; + return GetRideTypeDescriptor(rideType).RatingsCalculationFunction; } #pragma endregion diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 0155cb576e..73fa7f8946 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -853,7 +853,7 @@ roll_type_t track_get_actual_bank(TileElement* tileElement, roll_type_t bank) roll_type_t track_get_actual_bank_2(int32_t rideType, bool isInverted, roll_type_t bank) { - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (isInverted) { diff --git a/src/openrct2/ride/TrackDesignRepository.cpp b/src/openrct2/ride/TrackDesignRepository.cpp index 4b16da4b24..9af88aa3b8 100644 --- a/src/openrct2/ride/TrackDesignRepository.cpp +++ b/src/openrct2/ride/TrackDesignRepository.cpp @@ -155,7 +155,7 @@ public: { const ObjectRepositoryItem* ori = repo.FindObjectLegacy(item.ObjectEntry.c_str()); - if (ori == nullptr || !RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (ori == nullptr || !GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) entryIsNotSeparate = true; } @@ -189,7 +189,7 @@ public: { const ObjectRepositoryItem* ori = repo.FindObjectLegacy(item.ObjectEntry.c_str()); - if (ori == nullptr || !RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + if (ori == nullptr || !GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) entryIsNotSeparate = true; } diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index 46c2c6130e..d78e182c25 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -1970,7 +1970,7 @@ void Vehicle::GetLiftHillSound(Ride* curRide, SoundIdVolume& curSound) if (curRide->type < std::size(RideTypeDescriptors)) { // Get lift hill sound - curSound.id = RideTypeDescriptors[curRide->type].LiftData.sound_id; + curSound.id = GetRideTypeDescriptor(curRide->type).LiftData.sound_id; curSound.volume = 243; if (!(sound2_flags & VEHICLE_SOUND2_FLAGS_LIFT_HILL)) curSound.id = OpenRCT2::Audio::SoundId::Null; @@ -3524,7 +3524,7 @@ void Vehicle::CheckIfMissing() if (gConfigNotifications.ride_stalled_vehicles) { Formatter ft; - ft.Add(GetRideComponentName(RideTypeDescriptors[curRide->type].NameConvention.vehicle).number); + ft.Add(GetRideComponentName(GetRideTypeDescriptor(curRide->type).NameConvention.vehicle).number); uint8_t vehicleIndex = 0; for (; vehicleIndex < curRide->num_vehicles; ++vehicleIndex) @@ -3534,7 +3534,7 @@ void Vehicle::CheckIfMissing() vehicleIndex++; ft.Add(vehicleIndex); curRide->FormatNameTo(ft); - ft.Add(GetRideComponentName(RideTypeDescriptors[curRide->type].NameConvention.station).singular); + ft.Add(GetRideComponentName(GetRideTypeDescriptor(curRide->type).NameConvention.station).singular); News::AddItemToQueue(News::ItemType::Ride, STR_NEWS_VEHICLE_HAS_STALLED, ride, ft); } @@ -4019,7 +4019,7 @@ void Vehicle::UpdateArriving() goto loc_6D8E36; } - if (RideTypeDescriptors[curRide->type].HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS) + if (GetRideTypeDescriptor(curRide->type).HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS) && curRide->mode != RideMode::Shuttle && curRide->mode != RideMode::PoweredLaunch) { SetUpdateFlag(VEHICLE_UPDATE_FLAG_12); @@ -6263,7 +6263,7 @@ void Vehicle::SetMapToolbar() const ft.Add(STR_RIDE_MAP_TIP); ft.Add(STR_MAP_TOOLTIP_STRINGID_STRINGID); curRide->FormatNameTo(ft); - ft.Add(GetRideComponentName(RideTypeDescriptors[curRide->type].NameConvention.vehicle).capitalised); + ft.Add(GetRideComponentName(GetRideTypeDescriptor(curRide->type).NameConvention.vehicle).capitalised); ft.Add(vehicleIndex + 1); curRide->FormatStatusTo(ft); auto intent = Intent(INTENT_ACTION_SET_MAP_TOOLTIP); @@ -8095,7 +8095,7 @@ bool Vehicle::UpdateTrackMotionForwardsGetNewTrack(uint16_t trackType, Ride* cur ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); { int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type; - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -8221,7 +8221,7 @@ loc_6DAEB9: auto boosterSpeed = get_booster_speed(curRide->type, (brake_speed << 16)); if (boosterSpeed > _vehicleVelocityF64E08) { - acceleration = RideTypeDescriptors[curRide->type].OperatingSettings.BoosterAcceleration + acceleration = GetRideTypeDescriptor(curRide->type).OperatingSettings.BoosterAcceleration << 16; //_vehicleVelocityF64E08 * 1.2; } } @@ -8229,7 +8229,7 @@ loc_6DAEB9: if ((trackType == TrackElemType::Flat && curRide->type == RIDE_TYPE_REVERSE_FREEFALL_COASTER) || (trackType == TrackElemType::PoweredLift)) { - acceleration = RideTypeDescriptors[curRide->type].OperatingSettings.PoweredLiftAcceleration << 16; + acceleration = GetRideTypeDescriptor(curRide->type).OperatingSettings.PoweredLiftAcceleration << 16; } if (trackType == TrackElemType::BrakeForDrop) { @@ -8292,7 +8292,7 @@ loc_6DAEB9: uint8_t moveInfovehicleSpriteType; { auto loc = TrackLocation - + CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z + RideTypeDescriptors[curRide->type].Heights.VehicleZOffset }; + + CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z + GetRideTypeDescriptor(curRide->type).Heights.VehicleZOffset }; uint8_t remainingDistanceFlags = 0; if (loc.x != unk_F64E20.x) @@ -8470,7 +8470,7 @@ bool Vehicle::UpdateTrackMotionBackwardsGetNewTrack(uint16_t trackType, Ride* cu // Update VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); - if (RideTypeDescriptors[curRide->type].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) + if (GetRideTypeDescriptor(curRide->type).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -8596,7 +8596,7 @@ loc_6DBA33:; auto boosterSpeed = get_booster_speed(curRide->type, (brake_speed << 16)); if (boosterSpeed < _vehicleVelocityF64E08) { - acceleration = RideTypeDescriptors[curRide->type].OperatingSettings.BoosterAcceleration << 16; + acceleration = GetRideTypeDescriptor(curRide->type).OperatingSettings.BoosterAcceleration << 16; } } @@ -8620,7 +8620,7 @@ loc_6DBA33:; { const rct_vehicle_info* moveInfo = GetMoveInfo(); auto loc = TrackLocation - + CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z + RideTypeDescriptors[curRide->type].Heights.VehicleZOffset }; + + CoordsXYZ{ moveInfo->x, moveInfo->y, moveInfo->z + GetRideTypeDescriptor(curRide->type).Heights.VehicleZOffset }; uint8_t remainingDistanceFlags = 0; if (loc.x != unk_F64E20.x) @@ -8855,7 +8855,7 @@ loc_6DC476: { int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type; ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -8983,7 +8983,7 @@ loc_6DC743: // loc_6DC8A1 trackPos = { TrackLocation.x + moveInfo->x, TrackLocation.y + moveInfo->y, - TrackLocation.z + moveInfo->z + RideTypeDescriptors[curRide->type].Heights.VehicleZOffset }; + TrackLocation.z + moveInfo->z + GetRideTypeDescriptor(curRide->type).Heights.VehicleZOffset }; remaining_distance -= 0x368A; if (remaining_distance < 0) @@ -9066,7 +9066,7 @@ loc_6DCA9A: { int32_t rideType = get_ride(tileElement->AsTrack()->GetRideIndex())->type; ClearUpdateFlag(VEHICLE_UPDATE_FLAG_USE_INVERTED_SPRITES); - if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) + if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (tileElement->AsTrack()->IsInverted()) { @@ -9099,7 +9099,7 @@ loc_6DCA9A: loc_6DCC2C: moveInfo = GetMoveInfo(); trackPos = { TrackLocation.x + moveInfo->x, TrackLocation.y + moveInfo->y, - TrackLocation.z + moveInfo->z + RideTypeDescriptors[curRide->type].Heights.VehicleZOffset }; + TrackLocation.z + moveInfo->z + GetRideTypeDescriptor(curRide->type).Heights.VehicleZOffset }; remaining_distance -= 0x368A; if (remaining_distance < 0) @@ -9799,7 +9799,7 @@ void Vehicle::UpdateCrossings() const // Many New Element parks have invisible rides hacked into the path. // Limit path blocking to rides actually supporting level crossings to prevent peeps getting stuck everywhere. if (pathElement && curRide != nullptr - && RideTypeDescriptors[curRide->type].HasFlag(RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS)) + && GetRideTypeDescriptor(curRide->type).HasFlag(RIDE_TYPE_FLAG_SUPPORTS_LEVEL_CROSSINGS)) { if (!playedClaxon && !pathElement->IsBlockedByVehicle()) { diff --git a/test/testpaint/Compat.cpp b/test/testpaint/Compat.cpp index fdc2858cf0..0c8d0a07f5 100644 --- a/test/testpaint/Compat.cpp +++ b/test/testpaint/Compat.cpp @@ -867,7 +867,7 @@ void ride_ratings_calculate_single_rail_roller_coaster([[maybe_unused]] Ride* ri const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const { - return RideTypeDescriptors[type]; + return GetRideTypeDescriptor(type); } uint8_t TileElementBase::GetOwner() const diff --git a/test/testpaint/TestTrack.cpp b/test/testpaint/TestTrack.cpp index cba62ad737..6753fab615 100644 --- a/test/testpaint/TestTrack.cpp +++ b/test/testpaint/TestTrack.cpp @@ -193,7 +193,7 @@ static void CallOriginal( static void CallNew( uint8_t rideType, uint8_t trackType, uint8_t direction, uint8_t trackSequence, uint16_t height, TileElement* tileElement) { - TRACK_PAINT_FUNCTION_GETTER newPaintFunctionGetter = RideTypeDescriptors[rideType].TrackPaintFunction; + TRACK_PAINT_FUNCTION_GETTER newPaintFunctionGetter = GetRideTypeDescriptor(rideType).TrackPaintFunction; TRACK_PAINT_FUNCTION newPaintFunction = newPaintFunctionGetter(trackType); newPaintFunction(&gPaintSession, 0, trackSequence, direction, height, tileElement); diff --git a/test/testpaint/Utils.cpp b/test/testpaint/Utils.cpp index 236129ff14..2a5a16e402 100644 --- a/test/testpaint/Utils.cpp +++ b/test/testpaint/Utils.cpp @@ -37,7 +37,7 @@ namespace Utils bool rideSupportsTrackType(uint8_t rideType, uint8_t trackType) { - TRACK_PAINT_FUNCTION_GETTER newPaintGetter = RideTypeDescriptors[rideType].TrackPaintFunction; + TRACK_PAINT_FUNCTION_GETTER newPaintGetter = GetRideTypeDescriptor(rideType).TrackPaintFunction; if (newPaintGetter == nullptr) { @@ -59,7 +59,7 @@ namespace Utils bool rideIsImplemented(uint8_t rideType) { - TRACK_PAINT_FUNCTION_GETTER newPaintGetter = RideTypeDescriptors[rideType].TrackPaintFunction; + TRACK_PAINT_FUNCTION_GETTER newPaintGetter = GetRideTypeDescriptor(rideType).TrackPaintFunction; return (newPaintGetter != 0); } } // namespace Utils diff --git a/test/testpaint/main.cpp b/test/testpaint/main.cpp index 4db67bd03d..b3b7dbcfa3 100644 --- a/test/testpaint/main.cpp +++ b/test/testpaint/main.cpp @@ -522,7 +522,7 @@ int main(int argc, char* argv[]) if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_FLAT_RIDE)) { - testCase.trackTypes.push_back(RideTypeDescriptors[rideType].StartTrackPiece); + testCase.trackTypes.push_back(GetRideTypeDescriptor(rideType).StartTrackPiece); } else { From 48f513f73f7ec2b3450ad73ae1979f931a8b93ad Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Fri, 26 Feb 2021 10:19:03 +0100 Subject: [PATCH 8/8] Apply review request; fix Testpaint --- src/openrct2/ride/Ride.cpp | 22 +++++++++++----------- test/testpaint/Compat.cpp | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/openrct2/ride/Ride.cpp b/src/openrct2/ride/Ride.cpp index eecf7eb208..e24f2da6a0 100644 --- a/src/openrct2/ride/Ride.cpp +++ b/src/openrct2/ride/Ride.cpp @@ -397,7 +397,7 @@ money32 Ride::CalculateIncomePerHour() const priceMinusCost -= GetShopItemDescriptor(currentShopItem).Cost; } - currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? ::GetRideTypeDescriptor(type).PhotoItem + currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? GetRideTypeDescriptor().PhotoItem : entry->shop_item[1]; if (currentShopItem != ShopItem::None) @@ -877,7 +877,7 @@ int32_t ride_get_total_time(Ride* ride) bool Ride::CanHaveMultipleCircuits() const { - if (!(::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS))) + if (!(GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_MULTIPLE_CIRCUITS))) return false; // Only allow circuit or launch modes @@ -2445,7 +2445,7 @@ static int32_t ride_get_new_breakdown_problem(Ride* ride) bool Ride::CanBreakDown() const { - if (::GetRideTypeDescriptor(type).AvailableBreakdowns == 0) + if (GetRideTypeDescriptor().AvailableBreakdowns == 0) { return false; } @@ -3069,8 +3069,8 @@ std::pair Ride::GetMeasurement() else { auto ft = Formatter(); - ft.Add(GetRideComponentName(::GetRideTypeDescriptor(type).NameConvention.vehicle).singular); - ft.Add(GetRideComponentName(::GetRideTypeDescriptor(type).NameConvention.station).singular); + ft.Add(GetRideComponentName(GetRideTypeDescriptor().NameConvention.vehicle).singular); + ft.Add(GetRideComponentName(GetRideTypeDescriptor().NameConvention.station).singular); return { nullptr, { STR_DATA_LOGGING_WILL_START_WHEN_NEXT_LEAVES, ft } }; } } @@ -5076,7 +5076,7 @@ bool Ride::Open(bool isApplying) } } - if ((::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL)) + if ((GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_CABLE_LIFT_HILL)) && (lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT_HILL_COMPONENT_USED) && !(lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT)) { if (!ride_create_cable_lift(id, isApplying)) @@ -5282,7 +5282,7 @@ int32_t ride_get_random_colour_preset_index(uint8_t ride_type) */ void Ride::SetColourPreset(uint8_t index) { - const track_colour_preset_list* colourPresets = &::GetRideTypeDescriptor(type).ColourPresets; + const track_colour_preset_list* colourPresets = &GetRideTypeDescriptor().ColourPresets; TrackColour colours = { COLOUR_BLACK, COLOUR_BLACK, COLOUR_BLACK }; // Stalls save their default colour in the vehicle settings (since they share a common ride type) if (!IsRide()) @@ -6366,7 +6366,7 @@ void Ride::UpdateMaxVehicles() return; auto stationLength = (*stationNumTiles * 0x44180) - 0x16B2A; - int32_t maxMass = ::GetRideTypeDescriptor(type).MaxMass << 8; + int32_t maxMass = GetRideTypeDescriptor().MaxMass << 8; int32_t maxCarsPerTrain = 1; for (int32_t numCars = rideEntry->max_cars_in_train; numCars > 0; numCars--) { @@ -6428,7 +6428,7 @@ void Ride::UpdateMaxVehicles() } while (totalLength <= stationLength); if ((mode != RideMode::StationToStation && mode != RideMode::ContinuousCircuit) - || !(::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS))) + || !(GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_ALLOW_MORE_VEHICLES_THAN_STATION_FITS))) { maxNumTrains = std::min(maxNumTrains, 31); } @@ -7297,8 +7297,8 @@ void Ride::FormatNameTo(Formatter& ft) const } else { - auto rideTypeName = ::GetRideTypeDescriptor(type).Naming.Name; - if (::GetRideTypeDescriptor(type).HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) + auto rideTypeName = GetRideTypeDescriptor().Naming.Name; + if (GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)) { auto rideEntry = GetRideEntry(); if (rideEntry != nullptr) diff --git a/test/testpaint/Compat.cpp b/test/testpaint/Compat.cpp index 0c8d0a07f5..97e7cd31cd 100644 --- a/test/testpaint/Compat.cpp +++ b/test/testpaint/Compat.cpp @@ -867,7 +867,7 @@ void ride_ratings_calculate_single_rail_roller_coaster([[maybe_unused]] Ride* ri const RideTypeDescriptor& Ride::GetRideTypeDescriptor() const { - return GetRideTypeDescriptor(type); + return ::GetRideTypeDescriptor(type); } uint8_t TileElementBase::GetOwner() const