diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 81994f08a8..2992acc6a4 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -2651,13 +2651,12 @@ static void window_ride_main_invalidate(rct_window* w) * * rct2: 0x006AF10A */ -static rct_string_id window_ride_get_status_overall_view(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status_overall_view(rct_window* w, Formatter& ft) { auto stringId = STR_NONE; auto ride = get_ride(w->number); if (ride != nullptr) { - auto ft = Formatter(static_cast(arguments)); ride->FormatStatusTo(ft); stringId = STR_BLACK_STRING; if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) || (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) @@ -2672,7 +2671,7 @@ static rct_string_id window_ride_get_status_overall_view(rct_window* w, void* ar * * rct2: 0x006AEFEF */ -static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status_vehicle(rct_window* w, Formatter& ft) { auto ride = get_ride(w->number); if (ride == nullptr) @@ -2691,32 +2690,28 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen { if (RideTypeDescriptors[ride->type].SupportsTrackPiece(TRACK_BLOCK_BRAKES) && vehicle->velocity == 0) { - *reinterpret_cast(reinterpret_cast(arguments)) = STR_STOPPED_BY_BLOCK_BRAKES; + ft.Add(STR_STOPPED_BY_BLOCK_BRAKES); return STR_BLACK_STRING; } } } - auto stringId = VehicleStatusNames[static_cast(vehicle->status)]; - - // Get speed in mph - *(reinterpret_cast(reinterpret_cast(arguments) + 2)) = (abs(vehicle->velocity) * 9) >> 18; - if (ride->type == RIDE_TYPE_MINI_GOLF) - return 0; + return STR_EMPTY; + auto stringId = VehicleStatusNames[static_cast(vehicle->status)]; if ((RideTypeDescriptors[ride->type].Flags & RIDE_TYPE_FLAG_SINGLE_SESSION) && vehicle->status <= Vehicle::Status::UnloadingPassengers) { stringId = SingleSessionVehicleStatusNames[static_cast(vehicle->status)]; } + ft.Add(stringId); + uint16_t speedInMph = (abs(vehicle->velocity) * 9) >> 18; + ft.Add(speedInMph); const RideComponentName stationName = RideComponentNames[RideTypeDescriptors[ride->type].NameConvention.station]; - *reinterpret_cast(reinterpret_cast(arguments) + 4) = (ride->num_stations > 1) - ? stationName.number - : stationName.singular; - *(reinterpret_cast(reinterpret_cast(arguments) + 6)) = vehicle->current_station + 1; - *reinterpret_cast(reinterpret_cast(arguments) + 0) = stringId; + 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; } @@ -2724,7 +2719,7 @@ static rct_string_id window_ride_get_status_vehicle(rct_window* w, void* argumen * * rct2: 0x006AEF65 */ -static rct_string_id window_ride_get_status_station(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status_station(rct_window* w, Formatter& ft) { auto ride = get_ride(w->number); if (ride == nullptr) @@ -2732,7 +2727,7 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen int32_t count = w->ride.view - ride->num_vehicles - 1; StationIndex stationIndex = STATION_INDEX_NULL; - rct_string_id stringId = 0; + rct_string_id stringId = STR_EMPTY; do { @@ -2756,18 +2751,23 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen } // Queue length - if (stringId == 0) + if (stringId == STR_EMPTY) { - int32_t queueLength = ride->stations[stationIndex].QueueLength; - set_format_arg_body(static_cast(arguments), 2, static_cast(queueLength), sizeof(uint16_t)); stringId = STR_QUEUE_EMPTY; + uint16_t queueLength = ride->stations[stationIndex].QueueLength; if (queueLength == 1) stringId = STR_QUEUE_ONE_PERSON; else if (queueLength > 1) stringId = STR_QUEUE_PEOPLE; + + ft.Add(stringId); + ft.Add(queueLength); + } + else + { + ft.Add(stringId); } - set_format_arg_body(static_cast(arguments), 0, static_cast(stringId), sizeof(rct_string_id)); return STR_BLACK_STRING; } @@ -2775,16 +2775,16 @@ static rct_string_id window_ride_get_status_station(rct_window* w, void* argumen * * rct2: 0x006AEE73 */ -static rct_string_id window_ride_get_status(rct_window* w, void* arguments) +static rct_string_id window_ride_get_status(rct_window* w, Formatter& ft) { auto ride = get_ride(w->number); if (w->ride.view == 0) - return window_ride_get_status_overall_view(w, arguments); + return window_ride_get_status_overall_view(w, ft); if (ride != nullptr && w->ride.view <= ride->num_vehicles) - return window_ride_get_status_vehicle(w, arguments); + return window_ride_get_status_vehicle(w, ft); if (ride != nullptr && ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) - return window_ride_get_status_overall_view(w, arguments); - return window_ride_get_status_station(w, arguments); + return window_ride_get_status_overall_view(w, ft); + return window_ride_get_status_station(w, ft); } /** @@ -2837,10 +2837,11 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi) gCommonFormatArgs); // Status + ft = Formatter::Common(); widget = &window_ride_main_widgets[WIDX_STATUS]; - rct_string_id ride_status = window_ride_get_status(w, gCommonFormatArgs); + rct_string_id rideStatus = window_ride_get_status(w, ft); gfx_draw_string_centred_clipped( - dpi, ride_status, gCommonFormatArgs, COLOUR_BLACK, + dpi, rideStatus, gCommonFormatArgs, COLOUR_BLACK, w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->top }, widget->width()); } diff --git a/src/openrct2/localisation/Localisation.h b/src/openrct2/localisation/Localisation.h index ef94fa3d87..4277f3295c 100644 --- a/src/openrct2/localisation/Localisation.h +++ b/src/openrct2/localisation/Localisation.h @@ -80,11 +80,6 @@ extern const rct_string_id DateDayNames[31]; extern const rct_string_id DateGameMonthNames[MONTH_COUNT]; extern const rct_string_id DateGameShortMonthNames[MONTH_COUNT]; -[[maybe_unused]] static inline void set_format_arg_body(uint8_t* args, size_t offset, uintptr_t value, size_t size) -{ - std::memcpy(args + offset, &value, size); -} - class Formatter { const uint8_t* StartBuf; @@ -156,7 +151,7 @@ public: { convertedValue = reinterpret_cast(value); } - set_format_arg_body(CurrentBuf, 0, convertedValue, sizeof(TSpecified)); + std::memcpy(CurrentBuf, &convertedValue, sizeof(TSpecified)); Increment(sizeof(TSpecified)); return *this; }