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:
21
src/ride.c
21
src/ride.c
@@ -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;
|
||||
}
|
||||
37
src/ride.h
37
src/ride.h
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user