implement ride window drawing

This commit is contained in:
IntelOrca 2014-09-03 19:13:37 +01:00
parent 55fc04ae82
commit 76fda20859
11 changed files with 389 additions and 75 deletions

View File

@ -212,7 +212,7 @@ void news_item_get_subject_location(int type, int subject, int *x, int *y, int *
}
// Find the first car of the train peep is on
vehicle = &(g_sprite_list[ride->train_car_map[peep->current_train]]).vehicle;
vehicle = &(g_sprite_list[ride->vehicles[peep->current_train]]).vehicle;
// Find the actual car peep is on
for (i = 0; i < peep->current_car; i++)
vehicle = &(g_sprite_list[vehicle->next_vehicle_on_train]).vehicle;

View File

@ -475,3 +475,49 @@ int ride_try_construct(rct_map_element *trackMapElement)
RCT2_CALLPROC_X(0x006CC056, 0, 0, 0, (int)trackMapElement, 0, 0, 0);
return 1;
}
/**
*
* rct2: 0x006AF561
*/
void ride_get_status(int rideIndex, int *formatSecondary, int *argument)
{
rct_ride *ride = &g_ride_list[rideIndex];
if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) {
*formatSecondary = STR_CRASHED;
return;
}
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) {
*formatSecondary = STR_BROKEN_DOWN;
return;
}
if (ride->status == RIDE_STATUS_CLOSED) {
*formatSecondary = STR_CLOSED;
return;
}
if (ride->status == RIDE_STATUS_TESTING) {
*formatSecondary = STR_TEST_RUN;
return;
}
rct_peep *peep = GET_PEEP(ride->race_winner);
if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != 0xFFFF && peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP) {
if (peep->name_string_idx == STR_GUEST) {
*argument = peep->id;
*formatSecondary = STR_RACE_WON_BY_GUEST;
} else {
*argument = peep->name_string_idx;
*formatSecondary = STR_RACE_WON_BY;
}
} else {
if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) {
*argument = ride->num_riders;
*formatSecondary = STR_PERSON_ON_RIDE;
if(*argument != 1)
*formatSecondary = STR_PEOPLE_ON_RIDE;
} else {
*formatSecondary = STR_OPEN;
}
}
}

View File

@ -70,7 +70,7 @@ typedef struct {
uint16 pad_002;
uint8 mode; // 0x004
uint8 colour_scheme_type; // 0x005
uint16 car_colours[32]; // 0x006
uint16 vehicle_colours[32]; // 0x006
uint8 pad_046[0x03];
// 0 = closed, 1 = open, 2 = test
uint8 status; // 0x049
@ -83,12 +83,12 @@ typedef struct {
uint16 entrances[4]; // 0x06A
uint16 exits[4]; // 0x072
uint8 pad_07A[0x0C];
uint16 train_car_map[1]; // 0x086 Points to the first car in the train
uint8 pad_088[0x3F];
uint16 vehicles[32]; // 0x086 Points to the first car in the train
uint8 pad_C6;
// Not sure if these should be uint or sint.
uint8 var_0C7;
uint8 var_0C8;
uint8 num_stations; // 0x0C7
uint8 num_vehicles; // 0x0C8
uint8 var_0C9;
uint8 pad_0CA[0x1A];
@ -387,5 +387,6 @@ rct_map_element *sub_6CAF80(int rideIndex, int *outX, int *outY);
rct_map_element *ride_find_track_gap(rct_map_element *startTrackElement, int *outX, int *outY);
void ride_construct_new(int list_item);
int ride_try_construct(rct_map_element *trackMapElement);
void ride_get_status(int rideIndex, int *formatSecondary, int *argument);
#endif

View File

@ -130,7 +130,7 @@ uint16 compute_upkeep(rct_ride *ride)
// various variables set on the ride itself.
// https://gist.github.com/kevinburke/e19b803cd2769d96c540
upkeep += rideUnknownData1[ride->type] * ride->var_0C8;
upkeep += rideUnknownData1[ride->type] * ride->num_vehicles;
// either set to 3 or 0, extra boosts for some rides including mini golf
if (rideUnknownData2[ride->type]) {
@ -139,7 +139,7 @@ uint16 compute_upkeep(rct_ride *ride)
// slight upkeep boosts for some rides - 5 for mini railroad, 10 for log
// flume/rapids, 10 for roller coaster, 28 for giga coaster
upkeep += rideUnknownData3[ride->type] * ride->var_0C7;
upkeep += rideUnknownData3[ride->type] * ride->num_stations;
if (ride->mode == RIDE_MODE_REVERSE_INCLINED_SHUTTLE) {
upkeep += 30;

View File

@ -420,10 +420,10 @@ void scenario_objective8_check()
ride->excitement >= RIDE_RATING(7,00) && type_already_counted[subtype_id] == 0){
// this calculates the length, no idea why it's done so complicated though.
uint8 limit = ride->pad_088[63];
uint8 limit = ride->num_stations;
uint32 sum = 0;
for (int j = 0; j < limit; ++j) {
sum += ((uint32*)&ride->pad_088[92])[j];
sum += ((uint32*)&ride->var_0E4)[j];
}
if ((sum >> 16) > (uint32)objective_length) {
type_already_counted[subtype_id]++;

View File

@ -288,6 +288,38 @@ enum {
STR_CANT_RENAME_RIDE_ATTRACTION = 1059,
STR_INVALID_RIDE_ATTRACTION_NAME = 1060,
STR_MOVING_TO_END_OF = 1098,
STR_WAITING_FOR_PASSENGERS_AT = 1099,
STR_WAITING_TO_DEPART = 1100,
STR_DEPARTING = 1101,
STR_TRAVELLING_AT_0 = 1102,
STR_ARRIVING_AT = 1103,
STR_UNLOADING_PASSENGERS_AT = 1104,
STR_TRAVELLING_AT_1 = 1105,
STR_CRASHING = 1106,
STR_CRASHED_0 = 1107,
STR_TRAVELLING_AT_2 = 1108,
STR_SWINGING = 1109,
STR_ROTATING_0 = 1110,
STR_ROTATING_1 = 1111,
STR_OPERATING_0 = 1112,
STR_SHOWING_FILM = 1113,
STR_ROTATING_2 = 1114,
STR_OPERATING_1 = 1115,
STR_OPERATING_2 = 1116,
STR_DOING_CIRCUS_SHOW = 1117,
STR_OPERATING_3 = 1118,
STR_WAITING_FOR_CABLE_LIFT = 1119,
STR_TRAVELLING_AT_3 = 1120,
STR_STOPPING_0 = 1121,
STR_WAITING_FOR_PASSENGERS = 1122,
STR_WAITING_TO_START = 1123,
STR_STARTING = 1124,
STR_OPERATING = 1125,
STR_STOPPING_1 = 1126,
STR_UNLOADING_PASSENGERS = 1127,
STR_STOPPED_BY_BLOCK_BRAKES = 1128,
STR_PLACE_SCENERY_TIP = 1159,
STR_ADJUST_WATER_TIP = 1160,
@ -327,7 +359,9 @@ enum {
STR_NUMERIC_UP = 1218,
STR_NUMERIC_DOWN = 1219,
STR_EXIT_ONLY = 1220,
STR_NO_ENTRANCE = 1221,
STR_NO_EXIT = 1222,
STR_TRANSPORT_RIDES_TIP = 1223,
STR_GENTLE_RIDES_TIP = 1224,
STR_ROLLER_COASTERS_TIP = 1225,

View File

@ -48,16 +48,20 @@ typedef struct {
rct_widthheight view; // 0x1A
uint16 var_1E;
uint8 pad_20[0x08];
uint32 var_28;
sint32 velocity;
uint8 pad_2C[0x04];
uint8 ride; // 0x30
uint8 var_31;
uint8 pad_32[0x0C];
uint8 pad_32[0x04];
sint16 var_36;
uint8 pad_38[0x06];
uint16 next_vehicle_on_train; // 0x3E
uint8 pad_40[0x08];
uint16 var_48;
uint8 pad_4A[0x06];
uint8 var_50;
uint8 pad_4A;
uint8 var_4B;
uint8 pad_4C[0x4];
uint8 status;
uint8 var_51;
uint8 pad_52[0x2E];
uint8 var_BB;
@ -69,6 +73,40 @@ typedef struct {
uint8 var_D6;
} rct_vehicle;
enum {
VEHICLE_STATUS_MOVING_TO_END_OF_STATION,
VEHICLE_STATUS_WAITING_FOR_PASSENGERS,
VEHICLE_STATUS_WAITING_TO_DEPART,
VEHICLE_STATUS_DEPARTING,
VEHICLE_STATUS_TRAVELLING,
VEHICLE_STATUS_ARRIVING,
VEHICLE_STATUS_UNLOADING_PASSENGERS,
VEHICLE_STATUS_TRAVELLING_07,
VEHICLE_STATUS_CRASHING,
VEHICLE_STATUS_CRASHED,
VEHICLE_STATUS_TRAVELLING_0A,
VEHICLE_STATUS_SWINGING,
VEHICLE_STATUS_ROTATING,
VEHICLE_STATUS_ROTATING_0D,
VEHICLE_STATUS_OPERATING,
VEHICLE_STATUS_SHOWING_FILM,
VEHICLE_STATUS_ROTATING_10,
VEHICLE_STATUS_OPERATING_11,
VEHICLE_STATUS_OPERATING_12,
VEHICLE_STATUS_DOING_CIRCUS_SHOW,
VEHICLE_STATUS_OPERATING_13,
VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT,
VEHICLE_STATUS_TRAVELLING_15,
VEHICLE_STATUS_STOPPING,
VEHICLE_STATUS_WAITING_FOR_PASSENGERS_17,
VEHICLE_STATUS_WAITING_TO_START,
VEHICLE_STATUS_STARTING,
VEHICLE_STATUS_OPERATING_1A,
VEHICLE_STATUS_STOPPING_1B,
VEHICLE_STATUS_UNLOADING_PASSENGERS_1C,
VEHICLE_STATUS_STOPPED_BY_BLOCK_BRAKES
};
void vehicle_update_all();
/** Helper macro until rides are stored in this module. */

View File

@ -158,7 +158,7 @@ typedef struct{
} map_variables;
typedef struct {
sint16 var_480;
sint16 view;
sint32 var_482;
sint32 var_486;
} ride_variables;

View File

@ -674,7 +674,7 @@ void window_peep_viewport_init(rct_window* w){
rct_ride* ride = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[peep->current_ride]);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK){
rct_vehicle* train = GET_VEHICLE(ride->train_car_map[peep->current_train]);
rct_vehicle* train = GET_VEHICLE(ride->vehicles[peep->current_train]);
int car = peep->current_car;
for (; car != 0; car--){

View File

@ -163,6 +163,7 @@ const uint64 window_ride_page_enabled_widgets[] = {
static void window_ride_emptysub() { }
static void window_ride_main_mouseup();
static void window_ride_main_resize();
static void window_ride_main_mousedown(int widgetIndex, rct_window *w, rct_widget *widget);
static void window_ride_main_dropdown();
static void window_ride_main_update(rct_window *w);
@ -181,7 +182,7 @@ static void window_ride_music_paint();
static void* window_ride_main_events[] = {
window_ride_emptysub,
window_ride_main_mouseup,
window_ride_emptysub,
window_ride_main_resize,
window_ride_main_mousedown,
window_ride_main_dropdown,
window_ride_emptysub,
@ -342,7 +343,7 @@ void window_ride_main_open(int rideIndex)
w->pressed_widgets = 0;
RCT2_CALLPROC_X(0x006AEB9F, 0, 0, 0, 0, (int)w, 0, 0);
window_init_scroll_widgets(w);
w->ride.var_480 = 0;
w->ride.view = 0;
RCT2_CALLPROC_X(0x006AF994, 0, 0, 0, 0, (int)w, 0, 0);
}
@ -409,6 +410,15 @@ static void window_ride_anchor_border_widgets(rct_window *w)
#pragma region Main
/**
*
* rct2: 0x006AF994
*/
static void window_ride_init_viewport(rct_window *w)
{
RCT2_CALLPROC_X(0x006AF994, 0, 0, 0, 0, (int)w, 0, 0);
}
/**
*
* rct2: 0x006B4971
@ -552,6 +562,21 @@ static void window_ride_main_mouseup()
}
}
/**
*
* rct2: 0x006AF4A2
*/
static void window_ride_main_resize()
{
rct_window *w;
window_get_register(w);
w->flags |= WF_RESIZABLE;
window_set_resize(w, 316, 180, 500, 450);
window_ride_init_viewport(w);
}
/**
*
* rct2: 0x006AF825
@ -567,8 +592,8 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget)
numItems = 1;
if (!(RCT2_GLOBAL(0x0097CF40 + (ride->type * 8), uint32) & 0x2000)) {
numItems += ride->var_0C7;
numItems += ride->var_0C8;
numItems += ride->num_stations;
numItems += ride->num_vehicles;
}
window_dropdown_show_text_custom_width(
@ -588,7 +613,7 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget)
// Vehicles
name = RideNameConvention[ride->type].vehicle_name + 6;
for (i = 1; i <= ride->var_0C8; i++) {
for (i = 1; i <= ride->num_vehicles; i++) {
gDropdownItemsFormat[currentItem] = 1142;
gDropdownItemsArgs[currentItem] = name | (currentItem << 16);
currentItem++;
@ -596,7 +621,7 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget)
// Stations
name = RideNameConvention[ride->type].station_name + 6;
for (i = 1; i <= ride->var_0C7; i++) {
for (i = 1; i <= ride->num_stations; i++) {
gDropdownItemsFormat[currentItem] = 1142;
gDropdownItemsArgs[currentItem] = name | (i << 16);
currentItem++;
@ -605,14 +630,14 @@ static void window_ride_show_view_dropdown(rct_window *w, rct_widget *widget)
// Set highlighted item
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)) {
j = 2;
for (i = 0; i < ride->var_0C8; i++) {
for (i = 0; i < ride->num_vehicles; i++) {
RCT2_GLOBAL(0x009DED34, uint32) |= j;
j <<= 1;
}
}
// Set checked item
gDropdownItemsChecked |= (1 << w->ride.var_480);
gDropdownItemsChecked |= (1 << w->ride.view);
}
/**
@ -723,17 +748,17 @@ static void window_ride_main_dropdown()
switch (widgetIndex) {
case WIDX_VIEW_DROPDOWN:
if (dropdownIndex == -1) {
dropdownIndex = w->ride.var_480;
dropdownIndex = w->ride.view;
ride = GET_RIDE(w->number);
dropdownIndex++;
if (dropdownIndex != 0 && dropdownIndex <= ride->var_0C8 && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK))
dropdownIndex = ride->var_0C8 + 1;
if (dropdownIndex != 0 && dropdownIndex <= ride->num_vehicles && !(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK))
dropdownIndex = ride->num_vehicles + 1;
if (dropdownIndex >= gDropdownNumItems)
dropdownIndex = 0;
}
w->ride.var_480 = dropdownIndex;
w->ride.view = dropdownIndex;
RCT2_CALLPROC_X(0x006AF994, 0, 0, 0, 0, (int)w, 0, 0);
window_invalidate(w);
break;
@ -773,7 +798,42 @@ static void window_ride_main_dropdown()
*/
static void window_ride_main_update(rct_window *w)
{
rct_ride *ride;
int vehicleIndex;
uint16 vehicleSpriteIndex;
rct_vehicle *vehicle;
// Update tab animation
w->frame_no++;
RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0);
widget_invalidate(WC_RIDE, w->number, WIDX_TAB_1);
// Update status
ride = GET_RIDE(w->number);
if (!(ride->var_14D & 4)) {
if (w->ride.view == 0)
return;
if (w->ride.view <= ride->num_vehicles) {
vehicleIndex = w->ride.view - 1;
vehicleSpriteIndex = ride->vehicles[vehicleIndex];
if (vehicleSpriteIndex == 0xFFFF)
return;
vehicle = &(g_sprite_list[vehicleSpriteIndex].vehicle);
if (
vehicle->status != 4 &&
vehicle->status != 22 &&
vehicle->status != 10 &&
vehicle->status != 7
) {
return;
}
}
}
ride->var_14D &= ~4;
widget_invalidate(WC_RIDE, w->number, WIDX_STATUS);
}
/**
@ -849,6 +909,140 @@ static void window_ride_main_invalidate()
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
}
/**
*
* rct2: 0x006AF10A
*/
static rct_string_id window_ride_get_status_overall_view(rct_window *w, void *arguments)
{
int formatSecondary, argument;
rct_string_id stringId;
ride_get_status(w->number, &formatSecondary, &argument);
RCT2_GLOBAL((int)arguments + 0, uint16) = formatSecondary;
RCT2_GLOBAL((int)arguments + 2, uint32) = argument;
stringId = STR_LOSS;
if (formatSecondary != STR_BROKEN_DOWN && formatSecondary != STR_CRASHED)
stringId = STR_COST;
return stringId;
}
/**
*
* rct2: 0x006AEFEF
*/
static rct_string_id window_ride_get_status_vehicle(rct_window *w, void *arguments)
{
rct_ride *ride;
rct_vehicle *vehicle;
int vehicleIndex;
uint16 vehicleSpriteIndex;
rct_string_id stringId;
ride = GET_RIDE(w->number);
vehicleIndex = w->ride.view - 1;
vehicleSpriteIndex = ride->vehicles[vehicleIndex];
if (vehicleSpriteIndex == 0xFFFF)
return 0;
vehicle = &(g_sprite_list[vehicleSpriteIndex].vehicle);
if (vehicle->status != VEHICLE_STATUS_CRASHING && vehicle->status != VEHICLE_STATUS_CRASHED) {
int ax = vehicle->var_36 / 4;
if (ax == 216 || ax == 123 || ax == 9 || ax == 63 || ax == 147 || ax == 155) {
if (!(RCT2_ADDRESS(0x01357644, uint32)[ride->type] & 0x40) && vehicle->velocity == 0) {
RCT2_GLOBAL((int)arguments + 0, uint16) = STR_STOPPED_BY_BLOCK_BRAKES;
return 1191;
}
}
}
stringId = STR_MOVING_TO_END_OF + vehicle->status;
// Get speed in mph
RCT2_GLOBAL((int)arguments + 2, uint16) = (abs(vehicle->velocity) * 9) >> 18;
if (ride->type == RIDE_TYPE_MINI_GOLF)
return 0;
if ((RCT2_GLOBAL(0x0097D4F2 + (ride->type * 8), uint16) & 0x100) && stringId > 1104)
stringId += 23;
RCT2_GLOBAL((int)arguments + 4, uint16) = RideNameConvention[ride->type].station_name;
RCT2_GLOBAL((int)arguments + 6, uint16) = vehicle->var_4B + 1;
if (ride->num_stations > 1)
RCT2_GLOBAL((int)arguments + 4, uint16) += 6;
RCT2_GLOBAL((int)arguments + 0, uint16) = stringId;
return stringId != 1106 && stringId != 1107 ? 1191 : 1192;
}
/**
*
* rct2: 0x006AEF65
*/
static rct_string_id window_ride_get_status_station(rct_window *w, void *arguments)
{
rct_ride *ride;
int stationIndex, count, queueLength;
rct_string_id stringId;
ride = GET_RIDE(w->number);
count = w->ride.view - ride->num_vehicles - 1;
stationIndex = -1;
do {
stationIndex++;
if (ride->station_starts[stationIndex] != 0xFFFF)
count--;
} while (count >= 0);
stringId = 0;
// Entrance / exit
if (ride->status == RIDE_STATUS_CLOSED) {
if (ride->entrances[stationIndex] == 0xFFFF)
stringId = STR_NO_ENTRANCE;
else if (ride->exits[stationIndex] == 0xFFFF)
stringId = STR_NO_EXIT;
} else {
if (ride->entrances[stationIndex] == 0xFFFF)
stringId = STR_EXIT_ONLY;
}
// Queue length
if (stringId == 0) {
queueLength = ride->queue_length[stationIndex];
RCT2_GLOBAL((int)arguments + 2, uint16) = queueLength;
stringId = STR_QUEUE_EMPTY;
if (queueLength == 1)
stringId++;
else if (queueLength > 1)
stringId += 2;
}
RCT2_GLOBAL((int)arguments + 0, uint16) = stringId;
return 1191;
}
/**
*
* rct2: 0x006AEE73
*/
static rct_string_id window_ride_get_status(rct_window *w, void *arguments)
{
rct_ride *ride = GET_RIDE(w->number);
if (w->ride.view == 0)
return window_ride_get_status_overall_view(w, arguments);
if (w->ride.view <= ride->num_vehicles)
return window_ride_get_status_vehicle(w, arguments);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN)
return window_ride_get_status_overall_view(w, arguments);
return window_ride_get_status_station(w, arguments);
}
/**
*
* rct2: 0x006AEE73
@ -857,10 +1051,57 @@ static void window_ride_main_paint()
{
rct_window *w;
rct_drawpixelinfo *dpi;
rct_ride *ride;
rct_widget *widget;
rct_string_id stringId;
window_paint_get_registers(w, dpi);
window_draw_widgets(w, dpi);
// window_ride_draw_tabs(w);
// Viewport and ear icon
if (w->viewport != NULL) {
window_draw_viewport(dpi, w);
if (w->viewport->flags & VIEWPORT_FLAG_SOUND_ON)
gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->x + 2, w->y + 2, 0);
}
// View dropdown
ride = GET_RIDE(w->number);
stringId = STR_OVERALL_VIEW;
if (w->ride.view != 0) {
stringId = RideNameConvention[ride->type].vehicle_name + 6;
if (w->ride.view > ride->num_vehicles) {
RCT2_GLOBAL(0x013CE952 + 2, uint16) = w->ride.view - ride->num_vehicles;
stringId = RideNameConvention[ride->type].station_name + 6;
} else {
RCT2_GLOBAL(0x013CE952 + 2, uint16) = w->ride.view;
}
}
RCT2_GLOBAL(0x013CE952, uint16) = stringId;
widget = &window_ride_main_widgets[WIDX_VIEW];
gfx_draw_string_centred(
dpi,
1193,
w->x + (widget->left + widget->right - 11) / 2,
w->y + widget->top,
0,
(void*)0x013CE952
);
// Status
widget = &window_ride_main_widgets[WIDX_STATUS];
gfx_draw_string_centred_clipped(
dpi,
window_ride_get_status(w, (void*)0x013CE952),
(void*)0x013CE952,
0,
w->x + (widget->left + widget->right) / 2,
w->y + widget->top - 1,
widget->right - widget->left
);
}
#pragma endregion

View File

@ -432,52 +432,6 @@ static void window_ride_list_paint()
window_ride_list_draw_tab_images(dpi, w);
}
/**
*
* rct2: 0x006AF561
*/
static void ride_get_status(int rideIndex, int *formatSecondary, int *argument)
{
rct_ride *ride = &g_ride_list[rideIndex];
if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) {
*formatSecondary = STR_CRASHED;
return;
}
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) {
*formatSecondary = STR_BROKEN_DOWN;
return;
}
if (ride->status == RIDE_STATUS_CLOSED) {
*formatSecondary = STR_CLOSED;
return;
}
if (ride->status == RIDE_STATUS_TESTING) {
*formatSecondary = STR_TEST_RUN;
return;
}
rct_peep *peep = GET_PEEP(ride->race_winner);
if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != 0xFFFF && peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP) {
if (peep->name_string_idx == STR_GUEST) {
*argument = peep->id;
*formatSecondary = STR_RACE_WON_BY_GUEST;
} else {
*argument = peep->name_string_idx;
*formatSecondary = STR_RACE_WON_BY;
}
} else {
if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) {
*argument = ride->num_riders;
*formatSecondary = STR_PERSON_ON_RIDE;
if(*argument != 1)
*formatSecondary = STR_PEOPLE_ON_RIDE;
} else {
*formatSecondary = STR_OPEN;
}
}
}
/**
*
* rct2: 0x006B3240