1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-17 12:03:07 +01:00

finish invalidate event for ride window

This commit is contained in:
IntelOrca
2014-09-09 14:16:09 +01:00
parent fcc847beb4
commit a132b52766
5 changed files with 321 additions and 36 deletions

View File

@@ -548,3 +548,24 @@ int ride_get_total_length(rct_ride *ride)
totalLength += ride->length[i];
return totalLength;
}
int ride_can_have_multiple_circuits(rct_ride *ride)
{
if (!(RCT2_GLOBAL(0x0097D4F2 + (ride->type * 8), uint16) & 0x200))
return 0;
// Only allow circuit or launch modes
if (
ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT &&
ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE &&
ride->mode != RIDE_MODE_POWERED_LAUNCH
) {
return 0;
}
// Must have no more than one vehicle and one station
if (ride->num_vehicles > 1 || ride->num_stations > 1)
return 0;
return 1;
}

View File

@@ -56,7 +56,9 @@ typedef struct {
sint8 excitement_multipler; // 0x1B2
sint8 intensity_multipler; // 0x1B3
sint8 nausea_multipler; // 0x1B4
uint8 pad_1B5[0x09];
uint8 pad_1B5;
uint32 var_1B6;
uint8 pad_1BA[0x04];
uint8 category[2]; // 0x1BE
uint8 shop_item; // 0x1C0
uint8 shop_item_secondary; // 0x1C1
@@ -88,14 +90,17 @@ typedef struct {
uint16 exits[4]; // 0x072
uint8 pad_07A[0x0C];
uint16 vehicles[32]; // 0x086 Points to the first car in the train
uint8 pad_C6;
uint8 depart_flags; // 0x0C6
// Not sure if these should be uint or sint.
uint8 num_stations; // 0x0C7
uint8 num_vehicles; // 0x0C8
uint8 var_0C9;
uint8 pad_0CA[0xE];
uint8 pad_0CA[0x4];
uint8 min_waiting_time; // 0x0CE
uint8 max_waiting_time; // 0x0CF
uint8 var_0D0;
uint8 pad_0D1[0x7];
sint32 max_speed; // 0x0D8
sint32 average_speed; // 0x0DC
uint8 pad_0E0[0x4];
@@ -166,7 +171,7 @@ typedef struct {
uint8 music;
uint8 pad_1C9[0x03];
uint8 num_block_brakes; // 0x1CC
uint8 var_1CD;
uint8 lift_hill_speed; // 0x1CD
uint16 guests_favourite; // 0x1CE
uint32 lifecycle_flags; // 0x1D0
uint8 var_1D4;
@@ -175,7 +180,9 @@ typedef struct {
// I tried searching the IDA file for "1F4" but couldn't find places where
// this is written to.
uint16 total_air_time; // 0x1F4
uint8 pad_1F6[0x0a];
uint8 pad_1F6;
uint8 num_circuits; // 0x1F7
uint8 pad_1F8[0x8];
uint16 queue_length[4]; // 0x200
uint8 pad_208[0x58];
} rct_ride;
@@ -319,9 +326,9 @@ enum {
};
enum {
RIDE_MODE_NORMAL = 0,
RIDE_MODE_NORMAL,
RIDE_MODE_CONTINUOUS_CIRCUIT,
RIDE_MODE_REVERSE_INCLINED_SHUTTLE,
RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE,
RIDE_MODE_POWERED_LAUNCH, // RCT1 style?
RIDE_MODE_SHUTTLE,
RIDE_MODE_BOAT_HIRE,
@@ -342,7 +349,7 @@ enum {
RIDE_MODE_3D_FILM_MOUSE_TAILS,
RIDE_MODE_SPACE_RINGS,
RIDE_MODE_BEGINNERS,
RIDE_MODE_LIM_POWERED_LAUNCH, // 0x17
RIDE_MODE_LIM_POWERED_LAUNCH,
RIDE_MODE_FILM_THRILL_RIDERS,
RIDE_MODE_3D_FILM_STORM_CHASERS,
RIDE_MODE_3D_FILM_SPACE_RAIDERS,
@@ -354,7 +361,7 @@ enum {
RIDE_MODE_CROOKED_HOUSE,
RIDE_MODE_FREEFALL_DROP,
RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED,
RIDE_MODE_POWERED_LAUNCH2, // 0x23. RCT2 style?
RIDE_MODE_POWERED_LAUNCH_35, // RCT2 style?
RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED
};
@@ -427,6 +434,15 @@ enum {
RIDE_MECHANIC_STATUS_FIXING = 3,
};
enum {
RIDE_DEPART_WAIT_FOR_LOAD_MASK = 7,
RIDE_DEPART_WAIT_FOR_LOAD = 1 << 3,
RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES = 1 << 4,
RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS = 1 << 5,
RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH = 1 << 6,
RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH = 1 << 7
};
#define MAX_RIDES 255
#define MAX_RIDE_MEASUREMENTS 8
@@ -465,5 +481,6 @@ int ride_try_construct(rct_map_element *trackMapElement);
void ride_get_status(int rideIndex, int *formatSecondary, int *argument);
rct_peep *ride_get_assigned_mechanic(rct_ride *ride);
int ride_get_total_length(rct_ride *ride);
int ride_can_have_multiple_circuits(rct_ride *ride);
#endif

View File

@@ -136,13 +136,13 @@ uint16 compute_upkeep(rct_ride *ride)
// flume/rapids, 10 for roller coaster, 28 for giga coaster
upkeep += rideUnknownData3[ride->type] * ride->num_stations;
if (ride->mode == RIDE_MODE_REVERSE_INCLINED_SHUTTLE) {
if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) {
upkeep += 30;
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH) {
upkeep += 160;
} else if (ride->mode == RIDE_MODE_LIM_POWERED_LAUNCH) {
upkeep += 320;
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH2 ||
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH_35 ||
ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) {
upkeep += 220;
}
@@ -239,7 +239,7 @@ ride_rating apply_intensity_penalty(ride_rating excitement, ride_rating intensit
*/
void sub_655FD6(rct_ride *ride)
{
uint8 al = ride->var_1CD;
uint8 al = ride->lift_hill_speed;
// No idea what this address is; maybe like compensation of some kind? The
// maximum possible value?
// List of ride names/values is here:

View File

@@ -290,6 +290,45 @@ enum {
STR_CANT_RENAME_RIDE_ATTRACTION = 1059,
STR_INVALID_RIDE_ATTRACTION_NAME = 1060,
STR_RIDE_MODE_START = 1061,
STR_RIDE_MODE_NORMAL = STR_RIDE_MODE_START + 0,
STR_RIDE_MODE_CONTINUOUS_CIRCUIT = STR_RIDE_MODE_START + 1,
STR_RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE = STR_RIDE_MODE_START + 2,
STR_RIDE_MODE_POWERED_LAUNCH = STR_RIDE_MODE_START + 3,
STR_RIDE_MODE_SHUTTLE = STR_RIDE_MODE_START + 4,
STR_RIDE_MODE_BOAT_HIRE = STR_RIDE_MODE_START + 5,
STR_RIDE_MODE_UPWARD_LAUNCH = STR_RIDE_MODE_START + 6,
STR_RIDE_MODE_ROTATING_LIFT = STR_RIDE_MODE_START + 7,
STR_RIDE_MODE_STATION_TO_STATION = STR_RIDE_MODE_START + 8,
STR_RIDE_MODE_SINGLE_RIDE_PER_ADMISSION = STR_RIDE_MODE_START + 9,
STR_RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION = STR_RIDE_MODE_START + 10,
STR_RIDE_MODE_MAZE = STR_RIDE_MODE_START + 11,
STR_RIDE_MODE_RACE = STR_RIDE_MODE_START + 12,
STR_RIDE_MODE_BUMPER_CAR = STR_RIDE_MODE_START + 13,
STR_RIDE_MODE_SWING = STR_RIDE_MODE_START + 14,
STR_RIDE_MODE_SHOP_STALL = STR_RIDE_MODE_START + 15,
STR_RIDE_MODE_ROTATION = STR_RIDE_MODE_START + 16,
STR_RIDE_MODE_FORWARD_ROTATION = STR_RIDE_MODE_START + 17,
STR_RIDE_MODE_BACKWARD_ROTATION = STR_RIDE_MODE_START + 18,
STR_RIDE_MODE_FILM_AVENGING_AVIATORS = STR_RIDE_MODE_START + 19,
STR_RIDE_MODE_3D_FILM_MOUSE_TAILS = STR_RIDE_MODE_START + 20,
STR_RIDE_MODE_SPACE_RINGS = STR_RIDE_MODE_START + 21,
STR_RIDE_MODE_BEGINNERS = STR_RIDE_MODE_START + 22,
STR_RIDE_MODE_LIM_POWERED_LAUNCH = STR_RIDE_MODE_START + 23,
STR_RIDE_MODE_FILM_THRILL_RIDERS = STR_RIDE_MODE_START + 24,
STR_RIDE_MODE_3D_FILM_STORM_CHASERS = STR_RIDE_MODE_START + 25,
STR_RIDE_MODE_3D_FILM_SPACE_RAIDERS = STR_RIDE_MODE_START + 26,
STR_RIDE_MODE_INTENSE = STR_RIDE_MODE_START + 27,
STR_RIDE_MODE_BERSERK = STR_RIDE_MODE_START + 28,
STR_RIDE_MODE_HAUNTED_HOUSE = STR_RIDE_MODE_START + 29,
STR_RIDE_MODE_CIRCUS_SHOW = STR_RIDE_MODE_START + 30,
STR_RIDE_MODE_DOWNWARD_LAUNCH = STR_RIDE_MODE_START + 31,
STR_RIDE_MODE_CROOKED_HOUSE = STR_RIDE_MODE_START + 32,
STR_RIDE_MODE_FREEFALL_DROP = STR_RIDE_MODE_START + 33,
STR_RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED = STR_RIDE_MODE_START + 34,
STR_RIDE_MODE_POWERED_LAUNCH_35 = STR_RIDE_MODE_START + 35,
STR_RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED_MODE = STR_RIDE_MODE_START + 36,
STR_MOVING_TO_END_OF = 1098,
STR_WAITING_FOR_PASSENGERS_AT = 1099,
STR_WAITING_TO_DEPART = 1100,
@@ -322,6 +361,12 @@ enum {
STR_UNLOADING_PASSENGERS = 1127,
STR_STOPPED_BY_BLOCK_BRAKES = 1128,
STR_QUARTER_LOAD = 1148,
STR_HALF_LOAD = 1149,
STR_THREE_QUARTER_LOAD = 1150,
STR_FULL_LOAD = 1151,
STR_ANY_LOAD = 1152,
STR_PLACE_SCENERY_TIP = 1159,
STR_ADJUST_WATER_TIP = 1160,
@@ -360,7 +405,10 @@ enum {
STR_QUEUE_TIME_PLURAL_LABEL = 1205,
STR_WAIT_FOR = 1206,
STR_LEAVE_IF_ANOTHER_TRAIN_ARRIVES = 1207,
STR_LEAVE_IF_ANOTHER_BOAT_ARRIVES = 1208,
STR_WAIT_FOR_PASSENGERS_BEFORE_DEPARTING_TIP = 1209,
STR_LEAVE_IF_ANOTHER_VEHICLE_ARRIVES_TIP = 1210,
STR_MINIMUM_WAITING_TIME = 1211,
STR_MAXIMUM_WAITING_TIME = 1212,
STR_MINIMUM_LENGTH_BEFORE_DEPARTING_TIP = 1213,
@@ -381,6 +429,8 @@ enum {
STR_SHOPS_STALLS_TIP = 1228,
STR_ROTATE_OBJECTS_90 = 1327,
STR_LAUNCH_SPEED = 1329,
STR_LAUNCH_SPEED_TIP = 1330,
STR_NO_TEST_RESULTS_YET = 1339,
STR_MAX_SPEED = 1340,
@@ -442,6 +492,9 @@ enum {
STR_GUESTS = 1463,
STR_STAFF = 1468,
STR_SPEED = 1471,
STR_SPEED_TIP = 1472,
STR_EXCITEMENT_RATING = 1473,
STR_EXCITEMENT_RATING_NOT_YET_AVAILABLE = 1474,
@@ -490,14 +543,26 @@ enum {
STR_CANT_OPEN_PARK = 1723,
STR_CANT_CLOSE_PARK = 1724,
STR_NUMBER_OF_LAPS = 1734,
STR_NUMBER_OF_LAPS_TIP = 1735,
STR_RACE_WON_BY_GUEST = 1739,
STR_RACE_WON_BY = 1740,
STR_MAX_PEOPLE_ON_RIDE = 1742,
STR_MAX_PEOPLE_ON_RIDE_TIP = 1743,
STR_TIME_LIMIT = 1747,
STR_TIME_LIMIT_TIP = 1748,
STR_INDIVIDUAL_GUESTS_TIP = 1752,
STR_SUMMARISED_GUESTS_TIP = 1753,
STR_ADMISSION_PRICE = 1756,
STR_RELIABILITY_LABEL_1757 = 1757,
STR_NUMBER_OF_SWINGS = 1769,
STR_NUMBER_OF_SWINGS_TIP = 1770,
STR_OFF = 1775,
STR_ON = 1776,
STR_MUSIC = 1777,
@@ -578,6 +643,9 @@ enum {
STR_ENTERTAINER_SINGULAR = 1866,
STR_STAFF_LIST_COUNTER = 1867,
STR_NUMBER_OF_ROTATIONS = 1869,
STR_NUMBER_OF_ROTATIONS_TIP = 1870,
STR_INCOME_PER_HOUR = 1873,
STR_PROFIT_PER_HOUR = 1874,

View File

@@ -75,14 +75,14 @@ enum {
WIDX_LOCATE,
WIDX_DEMOLISH,
WIDX_OPERATE_UNK_14 = 14,
WIDX_OPERATION_UNK_14_INCREASE,
WIDX_OPERATION_UNK_14_DECREASE,
WIDX_MODE_TWEAK = 14,
WIDX_MODE_TWEAK_INCREASE,
WIDX_MODE_TWEAK_DECREASE,
WIDX_LIFT_HILL_SPEED,
WIDX_LIFT_HILL_SPEED_INCREASE,
WIDX_LIFT_HILL_SPEED_DECREASE,
WIDX_WAIT_FOR_PASSENGERS,
WIDX_OPERATE_UNK_21,
WIDX_LOAD_CHECKBOX,
WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX,
WIDX_MINIMUM_LENGTH_CHECKBOX,
WIDX_MINIMUM_LENGTH,
WIDX_MINIMUM_LENGTH_INCREASE,
@@ -92,12 +92,12 @@ enum {
WIDX_MAXIMUM_LENGTH_INCREASE,
WIDX_MAXIMUM_LENGTH_DECREASE,
WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX,
WIDX_OPERATE_UNK_31,
WIDX_OPERATE_UNK_32,
WIDX_OPERATE_UNK_33,
WIDX_OPERATE_UNK_34,
WIDX_OPERATE_UNK_35,
WIDX_OPERATE_UNK_36,
WIDX_MODE_TWEAK_LABEL,
WIDX_LIFT_HILL_SPEED_LABEL,
WIDX_MODE,
WIDX_MODE_DROPDOWN,
WIDX_LOAD,
WIDX_LOAD_DROPDOWN,
WIDX_OPERATE_NUMBER_OF_CIRCUITS_LABEL,
WIDX_OPERATE_NUMBER_OF_CIRCUITS,
WIDX_OPERATE_NUMBER_OF_CIRCUITS_INCREASE,
@@ -1723,9 +1723,9 @@ static void window_ride_operating_mouseup()
case WIDX_TAB_10:
window_ride_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_WAIT_FOR_PASSENGERS:
case WIDX_LOAD_CHECKBOX:
break;
case WIDX_OPERATE_UNK_21:
case WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX:
break;
case WIDX_MINIMUM_LENGTH_CHECKBOX:
break;
@@ -1756,9 +1756,9 @@ static void window_ride_operating_resize()
static void window_ride_operating_mousedown(int widgetIndex, rct_window *w, rct_widget *widget)
{
switch (widgetIndex) {
case WIDX_OPERATION_UNK_14_INCREASE:
case WIDX_MODE_TWEAK_INCREASE:
break;
case WIDX_OPERATION_UNK_14_DECREASE:
case WIDX_MODE_TWEAK_DECREASE:
break;
case WIDX_LIFT_HILL_SPEED_INCREASE:
break;
@@ -1772,9 +1772,9 @@ static void window_ride_operating_mousedown(int widgetIndex, rct_window *w, rct_
break;
case WIDX_MAXIMUM_LENGTH_DECREASE:
break;
case WIDX_OPERATE_UNK_34:
case WIDX_MODE_DROPDOWN:
break;
case WIDX_OPERATE_UNK_36:
case WIDX_LOAD_DROPDOWN:
break;
case WIDX_OPERATE_NUMBER_OF_CIRCUITS_INCREASE:
break;
@@ -1795,9 +1795,9 @@ static void window_ride_operating_dropdown()
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
switch (widgetIndex) {
case WIDX_OPERATE_UNK_34:
case WIDX_MODE_DROPDOWN:
break;
case WIDX_OPERATE_UNK_36:
case WIDX_LOAD_DROPDOWN:
break;
}
}
@@ -1829,6 +1829,9 @@ static void window_ride_operating_invalidate()
{
rct_window *w;
rct_widget *widgets;
rct_ride *ride;
rct_ride_type *rideEntry, **rideEntries = (rct_ride_type**)0x009ACFA4;
rct_string_id format, caption, tooltip;
window_get_register(w);
@@ -1840,11 +1843,186 @@ static void window_ride_operating_invalidate()
window_ride_set_pressed_tab(w);
rct_ride *ride = GET_RIDE(w->number);
ride = GET_RIDE(w->number);
rideEntry = rideEntries[ride->subtype];
RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name;
RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments;
// TODO lots of widget setup
// Widget setup
w->pressed_widgets &= ~0x44700000;
// Lift hill speed
if ((rideEntry->var_1B6 & RCT2_ADDRESS(0x01357444, uint32)[ride->type]) & 8) {
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_LABEL].type = WWT_24;
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED].type = WWT_SPINNER;
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_INCREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_DECREASE].type = WWT_DROPDOWN_BUTTON;
RCT2_GLOBAL(0x013CE966, uint16) = ride->lift_hill_speed;
} else {
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_LABEL].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_INCREASE].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_LIFT_HILL_SPEED_DECREASE].type = WWT_EMPTY;
}
// Number of circuits
if (ride_can_have_multiple_circuits(ride)) {
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS_LABEL].type = WWT_24;
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS].type = WWT_SPINNER;
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS_INCREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS_DECREASE].type = WWT_DROPDOWN_BUTTON;
RCT2_GLOBAL(0x013CE968, uint16) = ride->num_circuits;
} else {
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS_LABEL].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS_INCREASE].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_OPERATE_NUMBER_OF_CIRCUITS_DECREASE].type = WWT_EMPTY;
}
// Leave if another vehicle arrives at station
if (
(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x10) &&
ride->num_vehicles > 1 &&
ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED &&
ride->mode != RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED
) {
window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].type = WWT_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].image = RideNameConvention[ride->type].vehicle_name == 1236 ?
STR_LEAVE_IF_ANOTHER_BOAT_ARRIVES :
STR_LEAVE_IF_ANOTHER_TRAIN_ARRIVES;
} else {
window_ride_operating_widgets[WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX].type = WWT_EMPTY;
}
// Synchronise with adjacent stations
if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x20) {
window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].type = WWT_CHECKBOX;
window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].image = STR_SYNCHRONISE_WITH_ADJACENT_STATIONS;
window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].tooltip = STR_SYNCHRONISE_WITH_ADJACENT_STATIONS_TIP;
} else {
window_ride_operating_widgets[WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX].type = WWT_EMPTY;
}
// Mode
window_ride_operating_widgets[WIDX_MODE].image = STR_RIDE_MODE_START + ride->mode;
// Waiting
window_ride_operating_widgets[WIDX_LOAD].image = STR_QUARTER_LOAD + (ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD_MASK);
if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x4000) {
window_ride_operating_widgets[WIDX_LOAD_CHECKBOX].type = WWT_CHECKBOX;
window_ride_operating_widgets[WIDX_LOAD].type = WWT_DROPDOWN;
window_ride_operating_widgets[WIDX_LOAD_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH_CHECKBOX].type = WWT_CHECKBOX;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH].type = WWT_SPINNER;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH_INCREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH_DECREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_CHECKBOX].type = WWT_CHECKBOX;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH].type = WWT_SPINNER;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_INCREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_DECREASE].type = WWT_DROPDOWN_BUTTON;
RCT2_GLOBAL(0x013CE952 + 10, uint16) = 1217;
RCT2_GLOBAL(0x013CE95E, uint16) = ride->min_waiting_time;
RCT2_GLOBAL(0x013CE960, uint16) = 1217;
RCT2_GLOBAL(0x013CE962, uint16) = ride->max_waiting_time;
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD)
w->pressed_widgets |= (1 << WIDX_LOAD_CHECKBOX);
} else {
window_ride_operating_widgets[WIDX_LOAD_CHECKBOX].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_LOAD].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_LOAD_DROPDOWN].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH_CHECKBOX].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH_INCREASE].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MINIMUM_LENGTH_DECREASE].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_CHECKBOX].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_INCREASE].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MAXIMUM_LENGTH_DECREASE].type = WWT_EMPTY;
}
if (ride->depart_flags & RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES)
w->pressed_widgets |= (1 << WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX);
if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS)
w->pressed_widgets |= (1 << WIDX_SYNCHRONISE_WITH_ADJACENT_STATIONS_CHECKBOX);
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH)
w->pressed_widgets |= (1 << WIDX_MINIMUM_LENGTH_CHECKBOX);
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH)
w->pressed_widgets |= (1 << WIDX_MAXIMUM_LENGTH_CHECKBOX);
// Mode specific functionality
RCT2_GLOBAL(0x013CE964, uint16) = ride->var_0D0;
switch (ride->mode) {
case RIDE_MODE_POWERED_LAUNCH:
case RIDE_MODE_POWERED_LAUNCH_35:
case RIDE_MODE_UPWARD_LAUNCH:
case RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED:
RCT2_GLOBAL(0x013CE964, uint16) = (ride->var_0D0 * 9) / 4;
format = 1331;
caption = STR_LAUNCH_SPEED;
tooltip = STR_LAUNCH_SPEED_TIP;
case RIDE_MODE_STATION_TO_STATION:
RCT2_GLOBAL(0x013CE964, uint16) = (ride->var_0D0 * 9) / 4;
caption = STR_SPEED;
tooltip = STR_SPEED_TIP;
break;
case RIDE_MODE_RACE:
RCT2_GLOBAL(0x013CE964, uint16) = ride->var_0D0;
format = 1736;
caption = STR_NUMBER_OF_LAPS;
tooltip = STR_NUMBER_OF_LAPS_TIP;
break;
case RIDE_MODE_BUMPERCAR:
format = 1749;
caption = STR_TIME_LIMIT;
tooltip = STR_TIME_LIMIT_TIP;
break;
case RIDE_MODE_SWING:
format = 1771;
caption = STR_NUMBER_OF_SWINGS;
tooltip = STR_NUMBER_OF_SWINGS_TIP;
break;
case RIDE_MODE_ROTATION:
case RIDE_MODE_FORWARD_ROTATION:
case RIDE_MODE_BACKWARD_ROTATION:
format = 1871;
caption = STR_NUMBER_OF_ROTATIONS;
tooltip = STR_NUMBER_OF_ROTATIONS_TIP;
break;
default:
format = 1736;
caption = STR_MAX_PEOPLE_ON_RIDE;
tooltip = STR_MAX_PEOPLE_ON_RIDE_TIP;
if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (ride->type * 8), uint32) & 0x2000))
format = 0;
break;
}
if (format != 0) {
if (ride->type == RIDE_TYPE_TWIST)
RCT2_GLOBAL(0x013CE964, uint16) *= 3;
window_ride_operating_widgets[WIDX_MODE_TWEAK_LABEL].type = WWT_24;
window_ride_operating_widgets[WIDX_MODE_TWEAK_LABEL].image = caption;
window_ride_operating_widgets[WIDX_MODE_TWEAK_LABEL].tooltip = tooltip;
window_ride_operating_widgets[WIDX_MODE_TWEAK].type = WWT_SPINNER;
window_ride_operating_widgets[WIDX_MODE_TWEAK].image = format;
window_ride_operating_widgets[WIDX_MODE_TWEAK_INCREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_operating_widgets[WIDX_MODE_TWEAK_DECREASE].type = WWT_DROPDOWN_BUTTON;
w->pressed_widgets &= ~(1 << WIDX_LEAVE_WHEN_ANOTHER_ARRIVES_CHECKBOX);
} else {
window_ride_operating_widgets[WIDX_MODE_TWEAK_LABEL].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MODE_TWEAK].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MODE_TWEAK_INCREASE].type = WWT_EMPTY;
window_ride_operating_widgets[WIDX_MODE_TWEAK_DECREASE].type = WWT_EMPTY;
}
window_ride_anchor_border_widgets(w);
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
@@ -1868,6 +2046,7 @@ static void window_ride_operating_paint()
ride = GET_RIDE(w->number);
// Horizontal rule between mode settings and depart settings
gfx_fill_rect_inset(
dpi,
w->x + window_ride_operating_widgets[WIDX_PAGE_BACKGROUND].left + 4,
@@ -1878,11 +2057,11 @@ static void window_ride_operating_paint()
0x20
);
if (ride->mode == 34 || ride->mode == 36) {
// Number of block sections
if (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) {
blockSections = ride->num_block_brakes + ride->num_stations;
gfx_draw_string_left(dpi, STR_BLOCK_SECTIONS, &blockSections, 0, w->x + 21, ride->mode == 36 ? w->y + 76 : w->y + 61);
}
}
#pragma endregion