Refactor ride name to dynamic args and std::string

This commit is contained in:
Ted John 2019-07-20 19:43:02 +01:00
parent 3ee7824df4
commit 6fff2079f9
22 changed files with 154 additions and 232 deletions

View File

@ -1749,8 +1749,7 @@ void window_guest_rides_scroll_paint(rct_window* w, rct_drawpixelinfo* dpi, int3
auto ride = get_ride(w->list_item_positions[list_index]);
if (ride != nullptr)
{
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
gfx_draw_string_left(dpi, stringId, gCommonFormatArgs, COLOUR_BLACK, 0, y - 1);
}
}
@ -1961,8 +1960,7 @@ static rct_string_id window_guest_inventory_format_item(Peep* peep, int32_t item
break;
case SHOP_ITEM_PHOTO:
ride = get_ride(peep->photo1_ride_ref);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
break;
case SHOP_ITEM_UMBRELLA:
set_format_arg(0, uint32_t, SPRITE_ID_PALETTE_COLOUR_1(peep->umbrella_colour) | ShopItems[item].Image);
@ -1978,8 +1976,7 @@ static rct_string_id window_guest_inventory_format_item(Peep* peep, int32_t item
case VOUCHER_TYPE_RIDE_FREE:
ride = get_ride(peep->voucher_arguments);
set_format_arg(6, rct_string_id, STR_PEEP_INVENTORY_VOUCHER_RIDE_FREE);
set_format_arg(8, rct_string_id, ride->name);
set_format_arg(10, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 8);
break;
case VOUCHER_TYPE_PARK_ENTRY_HALF_PRICE:
set_format_arg(6, rct_string_id, STR_PEEP_INVENTORY_VOUCHER_PARK_ENTRY_HALF_PRICE);
@ -2000,18 +1997,15 @@ static rct_string_id window_guest_inventory_format_item(Peep* peep, int32_t item
break;
case SHOP_ITEM_PHOTO2:
ride = get_ride(peep->photo2_ride_ref);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
break;
case SHOP_ITEM_PHOTO3:
ride = get_ride(peep->photo3_ride_ref);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
break;
case SHOP_ITEM_PHOTO4:
ride = get_ride(peep->photo4_ride_ref);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
break;
}

View File

@ -1974,13 +1974,13 @@ static void window_ride_init_viewport(rct_window* w)
*/
static void window_ride_rename(rct_window* w)
{
Ride* ride;
ride = get_ride(w->number);
set_format_arg(16, uint32_t, ride->name_arguments);
window_text_input_open(
w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, ride->name, ride->name_arguments,
32);
auto ride = get_ride(w->number);
if (ride != nullptr)
{
auto rideName = ride->GetName();
window_text_input_raw_open(
w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, rideName.c_str(), 32);
}
}
/**
@ -2286,8 +2286,9 @@ static void populate_vehicle_type_dropdown(Ride* ride)
bool selectionShouldBeExpanded;
int32_t rideTypeIterator, rideTypeIteratorMax;
if (gCheatsShowVehiclesFromOtherTrackTypes
&& !(ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE
|| ride->type == RIDE_TYPE_MINI_GOLF))
&& !(
ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_FLAT_RIDE) || ride->type == RIDE_TYPE_MAZE
|| ride->type == RIDE_TYPE_MINI_GOLF))
{
selectionShouldBeExpanded = true;
rideTypeIterator = 0;

View File

@ -608,8 +608,7 @@ static void window_ride_list_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi,
ride = get_ride(w->list_item_positions[i]);
// Ride name
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
gfx_draw_string_left_clipped(dpi, format, gCommonFormatArgs, COLOUR_BLACK, 0, y - 1, 159);
// Ride information

View File

@ -303,16 +303,6 @@ namespace Editor
}
}
//
{
int32_t i;
Ride* ride;
FOR_ALL_RIDES (i, ride)
{
user_string_free(ride->name);
}
}
ride_init_all();
//

View File

@ -138,16 +138,7 @@ public:
ride->subtype = rideEntryIndex;
ride->SetColourPreset(_colour1);
ride->overall_view.xy = RCT_XY8_UNDEFINED;
// Ride name
if (rideEntryIndex == RIDE_ENTRY_INDEX_NULL)
{
ride_set_name_to_track_default(ride, rideEntry);
}
else
{
ride_set_name_to_default(ride, rideEntry);
}
ride->SetNameToDefault();
for (int32_t i = 0; i < MAX_STATIONS; i++)
{

View File

@ -79,9 +79,6 @@ public:
GameActionResult::Ptr Execute() const override
{
rct_string_id newUserStringId = user_string_allocate(
USER_STRING_HIGH_ID_NUMBER | USER_STRING_DUPLICATION_PERMITTED, _name.c_str());
Ride* ride = get_ride(_rideIndex);
if (ride->type == RIDE_TYPE_NULL)
{
@ -89,8 +86,7 @@ public:
return std::make_unique<GameActionResult>(GA_ERROR::INVALID_PARAMETERS, STR_CANT_RENAME_RIDE_ATTRACTION, STR_NONE);
}
user_string_free(ride->name);
ride->name = newUserStringId;
ride->custom_name = _name;
scrolling_text_invalidate();
gfx_invalidate_screen();

View File

@ -61,8 +61,7 @@ public:
GameActionResult::Ptr res = std::make_unique<GameActionResult>();
Ride* ride = get_ride(_rideIndex);
res->ErrorTitle = _StatusErrorTitles[_status];
set_format_arg_on(res->ErrorMessageArgs.data(), 6, rct_string_id, ride->name);
set_format_arg_on(res->ErrorMessageArgs.data(), 8, uint32_t, ride->name_arguments);
ride->FormatNameTo(res->ErrorMessageArgs.data() + 6);
if (_rideIndex >= MAX_RIDES || _rideIndex < 0)
{
@ -110,8 +109,7 @@ public:
Ride* ride = get_ride(_rideIndex);
res->ErrorTitle = _StatusErrorTitles[_status];
set_format_arg_on(res->ErrorMessageArgs.data(), 6, rct_string_id, ride->name);
set_format_arg_on(res->ErrorMessageArgs.data(), 8, uint32_t, ride->name_arguments);
ride->FormatNameTo(res->ErrorMessageArgs.data() + 6);
if (ride->type == RIDE_TYPE_NULL)
{

View File

@ -190,14 +190,13 @@ template<> struct DataSerializerTraits<NetworkRideId_t>
stream->Write(rideId, strlen(rideId));
Ride* ride = get_ride(val.id);
if (ride)
auto ride = get_ride(val.id);
if (ride != nullptr)
{
char rideName[256] = {};
format_string(rideName, 256, ride->name, &ride->name_arguments);
auto rideName = ride->GetName();
stream->Write(" \"", 2);
stream->Write(rideName, strlen(rideName));
stream->Write(rideName.c_str(), rideName.size());
stream->Write("\"", 1);
}
}

View File

@ -141,11 +141,10 @@ static int32_t cc_rides(InteractiveConsole& console, const arguments_t& argv)
int32_t i;
FOR_ALL_RIDES (i, ride)
{
char name[128];
format_string(name, 128, ride->name, &ride->name_arguments);
auto name = ride->GetName();
console.WriteFormatLine(
"ride: %03d type: %02u subtype %03u operating mode: %02u name: %s", i, ride->type, ride->subtype,
ride->mode, name);
ride->mode, name.c_str());
}
}
else if (argv[0] == "set")

View File

@ -74,8 +74,7 @@ static void marketing_raise_finished_notification(const MarketingCampaign& campa
if (campaign.Type == ADVERTISING_CAMPAIGN_RIDE_FREE || campaign.Type == ADVERTISING_CAMPAIGN_RIDE)
{
Ride* ride = get_ride(campaign.RideId);
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
}
else if (campaign.Type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{

View File

@ -165,8 +165,7 @@ static void ride_entrance_exit_paint(paint_session* session, uint8_t direction,
if (ride->status == RIDE_STATUS_OPEN && !(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN))
{
set_format_arg(2, rct_string_id, ride->name);
set_format_arg(4, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 2);
}
else
{

View File

@ -316,8 +316,11 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei
if (banner->flags & BANNER_FLAG_LINKED_TO_RIDE)
{
auto ride = get_ride(banner->ride_index);
stringId = ride->name;
set_format_arg(0, uint32_t, ride->name_arguments);
if (ride != nullptr)
{
stringId = STR_STRINGID;
ride->FormatNameTo(gCommonFormatArgs);
}
}
utf8 signString[256];
format_string(signString, sizeof(signString), stringId, gCommonFormatArgs);
@ -436,9 +439,11 @@ void large_scenery_paint(paint_session* session, uint8_t direction, uint16_t hei
set_format_arg(0, rct_string_id, banner->string_idx);
if (banner->flags & BANNER_FLAG_LINKED_TO_RIDE)
{
Ride* ride = get_ride(banner->ride_index);
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
auto ride = get_ride(banner->ride_index);
if (ride != nullptr)
{
ride->FormatNameTo(gCommonFormatArgs);
}
}
utf8 signString[256];
rct_string_id stringId = STR_SCROLLING_SIGN_TEXT;

View File

@ -454,8 +454,7 @@ static void sub_6A4101(
if (ride->status == RIDE_STATUS_OPEN && !(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN))
{
set_format_arg(0, rct_string_id, STR_RIDE_ENTRANCE_NAME);
set_format_arg(2, rct_string_id, ride->name);
set_format_arg(4, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 2);
}
else
{

View File

@ -435,9 +435,11 @@ void fence_paint(paint_session* session, uint8_t direction, int32_t height, cons
set_format_arg(0, rct_string_id, banner->string_idx);
if (banner->flags & BANNER_FLAG_LINKED_TO_RIDE)
{
Ride* ride = get_ride(banner->ride_index);
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
auto ride = get_ride(banner->ride_index);
if (ride != nullptr)
{
ride->FormatNameTo(gCommonFormatArgs);
}
}
utf8 signString[256];

View File

@ -3849,8 +3849,7 @@ void Guest::UpdateRideAdvanceThroughEntrance()
ride->current_issues |= RIDE_ISSUE_GUESTS_STUCK;
ride->last_issue_time = gCurrentTicks;
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_warnings)
{
news_item_add_to_queue(NEWS_ITEM_RIDE, STR_GUESTS_GETTING_STUCK_ON_RIDE, current_ride);
@ -4013,8 +4012,7 @@ void Guest::UpdateRideFreeVehicleEnterRide(Ride* ride)
{
set_format_arg(0, rct_string_id, name_string_idx);
set_format_arg(2, uint32_t, id);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
rct_string_id msg_string;
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IN_RIDE))
@ -5169,8 +5167,7 @@ void Guest::UpdateRideLeaveExit()
{
set_format_arg(0, rct_string_id, name_string_idx);
set_format_arg(2, uint32_t, id);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
if (gConfigNotifications.guest_left_ride)
{

View File

@ -1972,9 +1972,15 @@ void peep_thought_set_format_args(rct_peep_thought* thought)
uint8_t flags = PeepThoughtToActionMap[thought->type].flags;
if (flags & 1)
{
Ride* ride = get_ride(thought->item);
set_format_arg(2, rct_string_id, ride->name);
set_format_arg(4, uint32_t, ride->name_arguments);
auto ride = get_ride(thought->item);
if (ride != nullptr)
{
ride->FormatNameTo(gCommonFormatArgs + 2);
}
else
{
set_format_arg(2, rct_string_id, STR_NONE);
}
}
else if (flags & 2)
{
@ -2355,8 +2361,7 @@ static void peep_interact_with_entrance(Peep* peep, int16_t x, int16_t y, TileEl
{
set_format_arg(0, rct_string_id, peep->name_string_idx);
set_format_arg(2, uint32_t, peep->id);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
if (gConfigNotifications.guest_queuing_for_ride)
{
news_item_add_to_queue(NEWS_ITEM_PEEP_ON_RIDE, STR_PEEP_TRACKING_PEEP_JOINED_QUEUE_FOR_X, peep->sprite_index);
@ -2799,8 +2804,7 @@ static void peep_interact_with_path(Peep* peep, int16_t x, int16_t y, TileElemen
{
set_format_arg(0, rct_string_id, peep->name_string_idx);
set_format_arg(2, uint32_t, peep->id);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
if (gConfigNotifications.guest_queuing_for_ride)
{
news_item_add_to_queue(
@ -2909,8 +2913,7 @@ static bool peep_interact_with_shop(Peep* peep, int16_t x, int16_t y, TileElemen
{
set_format_arg(0, rct_string_id, peep->name_string_idx);
set_format_arg(2, uint32_t, peep->id);
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
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;
if (gConfigNotifications.guest_used_facility)

View File

@ -3059,10 +3059,9 @@ private:
Ride* ride;
FOR_ALL_RIDES (i, ride)
{
if (ride->name == 0)
if (ride->custom_name.empty())
{
auto rideEntry = get_ride_entry(ride->subtype);
ride_set_name_to_default(ride, rideEntry);
ride->SetNameToDefault();
}
}
}

View File

@ -205,7 +205,6 @@ static void ride_breakdown_update(Ride* ride);
static void ride_call_closest_mechanic(Ride* ride);
static void ride_call_mechanic(Ride* ride, Peep* mechanic, int32_t forInspection);
static void ride_entrance_exit_connected(Ride* ride);
static void ride_set_name_to_vehicle_default(Ride* ride, rct_ride_entry* rideEntry);
static int32_t ride_get_new_breakdown_problem(Ride* ride);
static void ride_inspection_update(Ride* ride);
static void ride_mechanic_status_update(Ride* ride, int32_t mechanicStatus);
@ -259,9 +258,8 @@ rct_ride_entry* Ride::GetRideEntry() const
rct_ride_entry* rideEntry = get_ride_entry(subtype);
if (rideEntry == nullptr)
{
char oldname[128];
format_string(oldname, 128, name, &name_arguments);
log_error("Invalid ride subtype for ride %s", oldname);
auto rideName = GetName();
log_error("Invalid ride subtype for ride %s", rideName.c_str());
}
return rideEntry;
}
@ -1010,16 +1008,14 @@ static int32_t ride_check_if_construction_allowed(Ride* ride)
}
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)
{
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
context_show_error(STR_CANT_START_CONSTRUCTION_ON, STR_HAS_BROKEN_DOWN_AND_REQUIRES_FIXING);
return 0;
}
if (ride->status != RIDE_STATUS_CLOSED && ride->status != RIDE_STATUS_SIMULATING)
{
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
context_show_error(STR_CANT_START_CONSTRUCTION_ON, STR_MUST_BE_CLOSED_FIRST);
return 0;
}
@ -1942,8 +1938,7 @@ int32_t ride_modify(CoordsXYE* input)
if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE)
{
set_format_arg(6, rct_string_id, ride->name);
set_format_arg(8, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 6);
context_show_error(
STR_CANT_START_CONSTRUCTION_ON, STR_LOCAL_AUTHORITY_FORBIDS_DEMOLITION_OR_MODIFICATIONS_TO_THIS_RIDE);
return 0;
@ -2637,8 +2632,7 @@ void ride_prepare_breakdown(Ride* ride, int32_t breakdownReason)
*/
void ride_breakdown_add_news_item(Ride* ride)
{
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_broken_down)
{
news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_BROKEN_DOWN, ride->id);
@ -2664,8 +2658,7 @@ static void ride_breakdown_status_update(Ride* ride)
if (!(ride->not_fixed_timeout & 15) && ride->mechanic_status != RIDE_MECHANIC_STATUS_FIXING
&& ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES)
{
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_warnings)
{
news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_IS_STILL_NOT_FIXED, ride->id);
@ -3346,8 +3339,7 @@ static void ride_entrance_exit_connected(Ride* ride)
if (!entrance.isNull() && !ride_entrance_exit_is_reachable(entrance))
{
// name of ride is parameter of the format string
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_warnings)
{
news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride->id);
@ -3358,8 +3350,7 @@ static void ride_entrance_exit_connected(Ride* ride)
if (!exit.isNull() && !ride_entrance_exit_is_reachable(exit))
{
// name of ride is parameter of the format string
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_warnings)
{
news_item_add_to_queue(1, STR_EXIT_NOT_CONNECTED, ride->id);
@ -3443,8 +3434,7 @@ static void ride_shop_connected(Ride* ride)
}
// Name of ride is parameter of the format string
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_warnings)
{
news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride->id);
@ -3463,8 +3453,7 @@ static void ride_track_set_map_tooltip(TileElement* tileElement)
auto ride = get_ride(rideIndex);
set_map_tooltip_format_arg(0, rct_string_id, STR_RIDE_MAP_TIP);
set_map_tooltip_format_arg(2, rct_string_id, ride->name);
set_map_tooltip_format_arg(4, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 2);
rct_string_id formatSecondary;
int32_t arg1 = 0;
@ -3479,8 +3468,7 @@ static void ride_queue_banner_set_map_tooltip(TileElement* tileElement)
auto ride = get_ride(rideIndex);
set_map_tooltip_format_arg(0, rct_string_id, STR_RIDE_MAP_TIP);
set_map_tooltip_format_arg(2, rct_string_id, ride->name);
set_map_tooltip_format_arg(4, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 2);
rct_string_id formatSecondary;
int32_t arg1 = 0;
@ -3500,8 +3488,7 @@ static void ride_station_set_map_tooltip(TileElement* tileElement)
set_map_tooltip_format_arg(0, rct_string_id, STR_RIDE_MAP_TIP);
set_map_tooltip_format_arg(2, rct_string_id, ride->num_stations <= 1 ? STR_RIDE_STATION : STR_RIDE_STATION_X);
set_map_tooltip_format_arg(4, rct_string_id, ride->name);
set_map_tooltip_format_arg(6, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 4);
set_map_tooltip_format_arg(10, rct_string_id, RideComponentNames[RideNameConvention[ride->type].station].capitalised);
set_map_tooltip_format_arg(12, uint16_t, stationIndex + 1);
@ -3532,8 +3519,7 @@ static void ride_entrance_set_map_tooltip(TileElement* tileElement)
set_map_tooltip_format_arg(0, rct_string_id, STR_RIDE_MAP_TIP);
set_map_tooltip_format_arg(2, rct_string_id, ride->num_stations <= 1 ? STR_RIDE_ENTRANCE : STR_RIDE_STATION_X_ENTRANCE);
set_map_tooltip_format_arg(4, rct_string_id, ride->name);
set_map_tooltip_format_arg(6, uint32_t, ride->name_arguments);
ride->FormatNameTo(gMapTooltipFormatArgs + 4);
set_map_tooltip_format_arg(12, uint16_t, stationIndex + 1);
if (queueLength == 0)
{
@ -3558,8 +3544,7 @@ static void ride_entrance_set_map_tooltip(TileElement* tileElement)
stationIndex--;
set_map_tooltip_format_arg(0, rct_string_id, ride->num_stations <= 1 ? STR_RIDE_EXIT : STR_RIDE_STATION_X_EXIT);
set_map_tooltip_format_arg(2, rct_string_id, ride->name);
set_map_tooltip_format_arg(4, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 2);
set_map_tooltip_format_arg(10, uint16_t, stationIndex + 1);
}
}
@ -5745,12 +5730,15 @@ static bool ride_with_colour_config_exists(uint8_t ride_type, const TrackColour*
static bool ride_name_exists(char* name)
{
char buffer[256];
char buffer[256]{};
uint32_t formatArgs[32]{};
Ride* ride;
int32_t i;
FOR_ALL_RIDES (i, ride)
{
format_string(buffer, 256, ride->name, &ride->name_arguments);
ride->FormatNameTo(formatArgs);
format_string(buffer, 256, STR_STRINGID, formatArgs);
if ((strcmp(buffer, name) == 0) && ride_has_any_track_elements(ride))
{
return true;
@ -5833,76 +5821,19 @@ money32 ride_get_common_price(Ride* forRide)
return MONEY32_UNDEFINED;
}
void ride_set_name_to_default(Ride* ride, rct_ride_entry* rideEntry)
void Ride::SetNameToDefault()
{
if (RideGroupManager::RideTypeIsIndependent(ride->type))
{
ride_set_name_to_vehicle_default(ride, rideEntry);
}
else
{
ride_set_name_to_track_default(ride, rideEntry);
}
}
char rideNameBuffer[256]{};
uint8_t rideNameArgs[32]{};
void ride_set_name_to_track_default(Ride* ride, rct_ride_entry* rideEntry)
{
char rideNameBuffer[256];
ride_name_args name_args;
ride->name = STR_NONE;
if (RideGroupManager::RideTypeHasRideGroups(ride->type))
{
const RideGroup* rideGroup = RideGroupManager::GetRideGroup(ride->type, rideEntry);
name_args.type_name = rideGroup->Naming.name;
}
else
{
name_args.type_name = RideNaming[ride->type].name;
}
name_args.number = 0;
// Increment default name number until we find a unique name
default_name_number = 0;
do
{
name_args.number++;
format_string(rideNameBuffer, 256, 1, &name_args);
default_name_number++;
FormatNameTo(rideNameArgs);
format_string(rideNameBuffer, 256, STR_STRINGID, &rideNameArgs);
} while (ride_name_exists(rideNameBuffer));
ride->name = 1;
ride->name_arguments_type_name = name_args.type_name;
ride->name_arguments_number = name_args.number;
}
static void ride_set_name_to_vehicle_default(Ride* ride, rct_ride_entry* rideEntry)
{
char rideNameBuffer[256];
ride_name_args name_args;
ride->name = 1;
ride->name_arguments_type_name = rideEntry->naming.name;
rct_string_id rideNameStringId = 0;
name_args.type_name = rideEntry->naming.name;
name_args.number = 0;
do
{
name_args.number++;
format_string(rideNameBuffer, 256, ride->name, &name_args);
} while (ride_name_exists(rideNameBuffer));
ride->name_arguments_type_name = name_args.type_name;
ride->name_arguments_number = name_args.number;
rideNameStringId = user_string_allocate(USER_STRING_HIGH_ID_NUMBER | USER_STRING_DUPLICATION_PERMITTED, rideNameBuffer);
if (rideNameStringId != 0)
{
ride->name = rideNameStringId;
}
else
{
ride_set_name_to_track_default(ride, rideEntry);
}
}
/**
@ -7305,8 +7236,7 @@ void Ride::Crash(uint8_t vehicleIndex)
}
}
set_format_arg(0, rct_string_id, name);
set_format_arg(2, uint32_t, name_arguments);
FormatNameTo(gCommonFormatArgs);
if (gConfigNotifications.ride_crashed)
{
news_item_add_to_queue(NEWS_ITEM_RIDE, STR_RIDE_HAS_CRASHED, id);
@ -7317,24 +7247,9 @@ void ride_reset_all_names()
{
int32_t i;
Ride* ride;
char rideNameBuffer[256];
ride_name_args name_args;
FOR_ALL_RIDES (i, ride)
{
ride->name = STR_NONE;
name_args.type_name = RideNaming[ride->type].name;
name_args.number = 0;
do
{
name_args.number++;
format_string(rideNameBuffer, 256, 1, &name_args);
} while (ride_name_exists(rideNameBuffer));
ride->name = 1;
ride->name_arguments_type_name = name_args.type_name;
ride->name_arguments_number = name_args.number;
ride->SetNameToDefault();
}
}
@ -7404,7 +7319,7 @@ rct_vehicle* ride_get_broken_vehicle(Ride* ride)
*/
void Ride::Delete()
{
user_string_free(name);
custom_name = {};
measurement = {};
type = RIDE_TYPE_NULL;
}
@ -7976,3 +7891,52 @@ void ride_clear_leftover_entrances(Ride* ride)
}
}
}
std::string Ride::GetName() const
{
uint8_t args[32]{};
FormatNameTo(args);
return format_string(STR_STRINGID, args);
}
void Ride::FormatNameTo(void* argsV) const
{
auto args = (uint8_t*)argsV;
if (!custom_name.empty())
{
auto str = custom_name.c_str();
set_format_arg_on(args, 0, rct_string_id, STR_STRING);
set_format_arg_on(args, 2, void*, str);
}
else
{
rct_string_id rideTypeName{};
if (RideGroupManager::RideTypeIsIndependent(type))
{
auto rideEntry = GetRideEntry();
if (rideEntry != nullptr)
{
rideTypeName = rideEntry->naming.name;
}
}
else
{
if (RideGroupManager::RideTypeHasRideGroups(type))
{
auto rideEntry = GetRideEntry();
if (rideEntry != nullptr)
{
auto rideGroup = RideGroupManager::GetRideGroup(type, rideEntry);
rideTypeName = rideGroup->Naming.name;
}
}
else
{
rideTypeName = RideNaming[type].name;
}
}
set_format_arg_on(args, 0, rct_string_id, 1);
set_format_arg_on(args, 2, rct_string_id, rideTypeName);
set_format_arg_on(args, 4, uint16_t, default_name_number);
}
}

View File

@ -195,16 +195,8 @@ struct Ride
VehicleColour vehicle_colours[MAX_CARS_PER_TRAIN];
// 0 = closed, 1 = open, 2 = test
uint8_t status;
rct_string_id name;
union
{
uint32_t name_arguments;
struct
{
rct_string_id name_arguments_type_name;
uint16_t name_arguments_number;
};
};
std::string custom_name;
uint16_t default_name_number;
LocationXY8 overall_view;
uint16_t vehicles[MAX_VEHICLES_PER_RIDE]; // Points to the first car in the train
uint8_t depart_flags;
@ -416,6 +408,10 @@ public:
void QueueInsertGuestAtFront(int32_t stationIndex, Peep* peep);
Peep* GetQueueHeadGuest(int32_t stationIndex) const;
void SetNameToDefault();
std::string GetName() const;
void FormatNameTo(void* args) const;
static void UpdateAll();
};
@ -1092,9 +1088,7 @@ int32_t ride_get_random_colour_preset_index(uint8_t ride_type);
money32 ride_get_common_price(Ride* forRide);
rct_ride_name get_ride_naming(const uint8_t rideType, rct_ride_entry* rideEntry);
money32 ride_create_command(int32_t type, int32_t subType, int32_t flags, ride_id_t* outRideIndex, uint8_t* outRideColour);
void ride_set_name_to_default(Ride* ride, rct_ride_entry* rideEntry);
void ride_set_name_to_track_default(Ride* ride, rct_ride_entry* rideEntry);
void ride_clear_for_construction(Ride* ride);
void ride_entrance_exit_place_provisional_ghost();
void ride_entrance_exit_remove_ghost();

View File

@ -182,12 +182,10 @@ bool track_design_save(ride_id_t rideIndex)
}
}
utf8 track_name[256];
format_string(track_name, sizeof(track_name), ride->name, &ride->name_arguments);
auto trackName = ride->GetName();
auto intent = Intent(WC_LOADSAVE);
intent.putExtra(INTENT_EXTRA_LOADSAVE_TYPE, LOADSAVETYPE_SAVE | LOADSAVETYPE_TRACK);
intent.putExtra(INTENT_EXTRA_PATH, std::string{ track_name });
intent.putExtra(INTENT_EXTRA_PATH, trackName);
intent.putExtra(INTENT_EXTRA_CALLBACK, (void*)track_design_save_callback);
context_open_intent(&intent);

View File

@ -3471,8 +3471,7 @@ static void vehicle_check_if_missing(rct_vehicle* vehicle)
vehicleIndex++;
set_format_arg(2, uint16_t, vehicleIndex);
set_format_arg(4, rct_string_id, ride->name);
set_format_arg(6, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 4);
set_format_arg(10, rct_string_id, RideComponentNames[RideNameConvention[ride->type].station].singular);
news_item_add_to_queue(NEWS_ITEM_RIDE, STR_NEWS_VEHICLE_HAS_STALLED, vehicle->ride);
@ -5153,8 +5152,7 @@ static void vehicle_kill_all_passengers(rct_vehicle* vehicle)
if (numFatalities != 0)
{
set_format_arg(2, rct_string_id, ride->name);
set_format_arg(4, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 2);
news_item_add_to_queue(NEWS_ITEM_RIDE, STR_X_PEOPLE_DIED_ON_X, vehicle->ride);
if (gParkRatingCasualtyPenalty < 500)
@ -6140,8 +6138,7 @@ void vehicle_set_map_toolbar(const rct_vehicle* vehicle)
set_map_tooltip_format_arg(0, rct_string_id, STR_RIDE_MAP_TIP);
set_map_tooltip_format_arg(2, rct_string_id, STR_MAP_TOOLTIP_STRINGID_STRINGID);
set_map_tooltip_format_arg(4, rct_string_id, ride->name);
set_map_tooltip_format_arg(6, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs + 4);
set_map_tooltip_format_arg(10, rct_string_id, RideComponentNames[RideNameConvention[ride->type].vehicle].capitalised);
set_map_tooltip_format_arg(12, uint16_t, vehicleIndex + 1);

View File

@ -1298,8 +1298,7 @@ void map_obstruction_set_error_text(TileElement* tileElement)
case TILE_ELEMENT_TYPE_TRACK:
ride = get_ride(tileElement->AsTrack()->GetRideIndex());
errorStringId = STR_X_IN_THE_WAY;
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32_t, ride->name_arguments);
ride->FormatNameTo(gCommonFormatArgs);
break;
case TILE_ELEMENT_TYPE_SMALL_SCENERY:
sceneryEntry = tileElement->AsSmallScenery()->GetEntry();