1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-10 09:32:29 +01:00

Merge pull request #937 from Gymnasiast/develop

Refactor powered launch modes, add RCT1 style launch to looping RC
This commit is contained in:
Ted John
2015-03-20 23:23:04 +00:00
9 changed files with 165 additions and 34 deletions

View File

@@ -1065,7 +1065,7 @@ STR_1060 :Invalid ride/attraction name
STR_1061 :Normal mode
STR_1062 :Continuous circuit mode
STR_1063 :Reverse-Incline launched shuttle mode
STR_1064 :Powered launch
STR_1064 :Powered launch (passing station)
STR_1065 :Shuttle mode
STR_1066 :Boat hire mode
STR_1067 :Upward launch
@@ -1097,7 +1097,7 @@ STR_1092 :Downward launch
STR_1093 :Crooked house mode
STR_1094 :Freefall drop mode
STR_1095 :Continuous circuit block sectioned mode
STR_1096 :Powered launch
STR_1096 :Powered launch (without passing station)
STR_1097 :Powered launch block sectioned mode
STR_1098 :Moving to end of {POP16}{STRINGID}
STR_1099 :Waiting for passengers at {POP16}{STRINGID}

View File

@@ -880,7 +880,7 @@ static uint32 game_do_command_table[58] = {
0,
0x006B52D4,
0, // 10
0x006B5559,
0,
0x006660A8,
0x0066640B,
0x006E0E01,
@@ -943,7 +943,7 @@ static GAME_COMMAND_POINTER* new_game_command_table[58] = {
game_command_set_ride_status,
game_command_emptysub,
game_command_set_ride_name, // 10
game_command_emptysub,
game_command_set_ride_setting,
game_command_emptysub,
game_command_emptysub,
game_command_emptysub,

View File

@@ -35,7 +35,7 @@ enum GAME_COMMAND {
GAME_COMMAND_SET_RIDE_STATUS, // 8
GAME_COMMAND_9,
GAME_COMMAND_SET_RIDE_NAME,
GAME_COMMAND_11,
GAME_COMMAND_SET_RIDE_SETTING,
GAME_COMMAND_12,
GAME_COMMAND_13,
GAME_COMMAND_REMOVE_SCENERY,

View File

@@ -220,7 +220,7 @@ enum {
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_POWERED_LAUNCH_PASSTROUGH = 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,
@@ -252,7 +252,7 @@ enum {
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 = STR_RIDE_MODE_START + 35,
STR_RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED_MODE = STR_RIDE_MODE_START + 36,
STR_MOVING_TO_END_OF = 1098,

View File

@@ -451,7 +451,7 @@ int ride_can_have_multiple_circuits(rct_ride *ride)
if (
ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT &&
ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE &&
ride->mode != RIDE_MODE_POWERED_LAUNCH
ride->mode != RIDE_MODE_POWERED_LAUNCH_PASSTROUGH
) {
return 0;
}
@@ -937,7 +937,7 @@ int ride_modify(rct_xy_element *input)
return 0;
}
if (ride->lifecycle_flags & RIDE_LIFECYCLE_19) {
if (ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS) {
RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->name;
RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments;
window_error_open(STR_CANT_START_CONSTRUCTION_ON, STR_THIS_RIDE_CANNOT_BE_MODIFIED);
@@ -1445,7 +1445,7 @@ static int ride_get_new_breakdown_problem(rct_ride *ride)
// Again the probability is lower, this time if young or two other unknown reasons...
monthsOld = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint8) - ride->build_date;
if (monthsOld < 16 || ride->var_196 > 12800 || ride->lifecycle_flags & RIDE_LIFECYCLE_19)
if (monthsOld < 16 || ride->var_196 > 12800 || ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS)
return -1;
return BREAKDOWN_BRAKES_FAILURE;
@@ -2760,6 +2760,135 @@ void ride_music_update_final()
#pragma endregion
/* rct2: 0x006B5559 */
void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp)
{
RCT2_GLOBAL(0x141F56C, uint8) = 4;
uint8 ride_id = *edx & 0xFF;
rct_ride* ride = GET_RIDE(ride_id);
uint8 flags = *ebx & 0xFF;
uint8 new_value = (*ebx >> 8) & 0xFF;
uint8 setting = (*edx >> 8) & 0xFF;
if (setting == 0){
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN){
RCT2_GLOBAL(0x141E9AC, uint16) = 1796;
*ebx = 0x80000000;
return;
}
if (ride->status != RIDE_STATUS_CLOSED){
RCT2_GLOBAL(0x141E9AC, uint16) = 1006;
*ebx = 0x80000000;
return;
}
}
if (ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS){
if (setting == 0 || setting == 4 || setting == 8 || setting == 9)
{
RCT2_GLOBAL(0x141E9AC, uint16) = 1797;
*ebx = 0x80000000;
return;
}
}
if (setting == 9 &&
ride->lifecycle_flags & RIDE_LIFECYCLE_CABLE_LIFT &&
new_value > 1){
RCT2_GLOBAL(0x141E9AC, uint16) = 3141;
*ebx = 0x80000000;
return;
}
if (flags == 0){
*ebx = 0;
return;
}
switch (setting){
case 0:
RCT2_CALLPROC_X(0x006B59C6, 0, 0, 0, ride_id, 0, 0, 0);
ride_clear_for_construction(ride_id);
ride_remove_peeps(ride_id);
rct_ride_type* ride_entry = GET_RIDE_ENTRY(ride->subtype);
const uint8* available_modes = RideAvailableModes;
for (int i = 0; i < ride->type; i++) {
while (*(available_modes++) != 255) {}
}
if (ride_entry->var_008 & (1 << 17)){
available_modes += 2;
}
uint8 default_mode = available_modes[0];
for (; *available_modes != 0xFF; available_modes++){
if (*available_modes == new_value)
break;
}
if (*available_modes == 0xFF) new_value = default_mode;
if (available_modes[1] == 0xFF){
if (ride_entry->var_008 & (1 << 15))
new_value = default_mode;
}
ride->mode = new_value;
RCT2_CALLPROC_X(0x6DD57D, 0, 0, 0, ride_id, 0, 0, 0);
break;
case 1:
ride->depart_flags = new_value;
break;
case 2:
ride->min_waiting_time = new_value;
ride->max_waiting_time = max(new_value, ride->max_waiting_time);
break;
case 3:
ride->max_waiting_time = new_value;
ride->min_waiting_time = min(new_value, ride->min_waiting_time);
break;
case 4:
RCT2_CALLPROC_X(0x006B59C6, 0, 0, 0, ride_id, 0, 0, 0);
ride->time_limit = new_value;
break;
case 5:
ride->inspection_interval = new_value;
break;
case 6:
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_MUSIC;
if (new_value){
ride->lifecycle_flags |= RIDE_LIFECYCLE_MUSIC;
}
break;
case 7:
if (new_value != ride->music){
ride->music = new_value;
ride->music_tune_id = 0xFF;
}
break;
case 8:
if (new_value != ride->lift_hill_speed){
ride->lift_hill_speed = new_value;
RCT2_CALLPROC_X(0x006B59C6, 0, 0, 0, ride_id, 0, 0, 0);
}
break;
case 9:
if (new_value != ride->num_circuits){
ride->num_circuits = new_value;
RCT2_CALLPROC_X(0x006B59C6, 0, 0, 0, ride_id, 0, 0, 0);
}
break;
}
window_invalidate_by_number(WC_RIDE, ride_id);
*ebx = 0;
}
/**
*
* rct2: 0x006B4CC1
@@ -2773,8 +2902,8 @@ int ride_mode_check_valid_station_numbers(rct_ride *ride)
switch (ride->mode){
case RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE:
case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH:
case RIDE_MODE_POWERED_LAUNCH:
case RIDE_MODE_POWERED_LAUNCH_35:
case RIDE_MODE_LIM_POWERED_LAUNCH:
if (no_stations <= 1) return 1;
RCT2_GLOBAL(0x141E9AC, uint16) = 1015;
@@ -3459,4 +3588,4 @@ void game_command_set_ride_name(int *eax, int *ebx, int *ecx, int *edx, int *esi
bool ride_type_has_flag(int rideType, int flag)
{
return (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + (rideType * 8), uint32) & flag) != 0;
}
}

View File

@@ -343,7 +343,7 @@ enum {
RIDE_LIFECYCLE_16 = 1 << 16,
RIDE_LIFECYCLE_CABLE_LIFT = 1 << 17,
RIDE_LIFECYCLE_18 = 1 << 18,
RIDE_LIFECYCLE_19 = 1 << 19
RIDE_LIFECYCLE_SIX_FLAGS = 1 << 19
};
enum {
@@ -451,7 +451,7 @@ enum {
RIDE_MODE_NORMAL,
RIDE_MODE_CONTINUOUS_CIRCUIT,
RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE,
RIDE_MODE_POWERED_LAUNCH, // RCT1 style?
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, // RCT2 style, pass through station
RIDE_MODE_SHUTTLE,
RIDE_MODE_BOAT_HIRE,
RIDE_MODE_UPWARD_LAUNCH,
@@ -483,7 +483,7 @@ enum {
RIDE_MODE_CROOKED_HOUSE,
RIDE_MODE_FREEFALL_DROP,
RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED,
RIDE_MODE_POWERED_LAUNCH_35, // RCT2 style?
RIDE_MODE_POWERED_LAUNCH, // RCT1 style, don't pass through station
RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED
};
@@ -726,6 +726,7 @@ void ride_set_status(int rideIndex, int status);
void game_command_set_ride_status(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
void ride_set_name(int rideIndex, const char *name);
void game_command_set_ride_name(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
bool ride_type_has_flag(int rideType, int flag);

View File

@@ -678,6 +678,7 @@ const rct_ride_name_convention RideNameConvention[96] = {
{ 1229, 1243, 1257, 0 }
};
/* rct2: 0x0097C8AC */
const uint8 RideAvailableModes[] = {
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 00 Spiral Roller coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 01 Stand Up Coaster
@@ -694,11 +695,11 @@ const uint8 RideAvailableModes[] = {
RIDE_MODE_UPWARD_LAUNCH, RIDE_MODE_DOWNWARD_LAUNCH, 0xFF, // 0C Launched Freefall
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 0D Bobsleigh Coaster
RIDE_MODE_ROTATING_LIFT, 0xFF, // 0E Observation Tower
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 0F Looping Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 0F Looping Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 10 Dinghy Slide
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 11 Mine Train Coaster
RIDE_MODE_STATION_TO_STATION, 0xFF, // 12 Chairlift
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0x23, 2, 0xFF, // 13 Corkscrew Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 13 Corkscrew Roller Coaster
RIDE_MODE_MAZE, 0xFF, // 14 Maze
RIDE_MODE_SINGLE_RIDE_PER_ADMISSION, RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION, 0xFF, // 15 Spiral Slide
RIDE_MODE_RACE, RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 16 Go Karts
@@ -752,9 +753,9 @@ const uint8 RideAvailableModes[] = {
RIDE_MODE_BUMPERCAR, 0xFF, // 46 Flying Saucers
RIDE_MODE_CROOKED_HOUSE, 0xFF, // 47 Crooked House
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 48 Monorail Cycles
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 2, 0xFF, // 49 Compact Inverted Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, 0xFF, // 49 Compact Inverted Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 4A Water Coaster
RIDE_MODE_POWERED_LAUNCH, 0xFF, // 4B Air Powered Vertical Coaster
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, 0xFF, // 4B Air Powered Vertical Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 4C Inverted Hairpin Coaster
RIDE_MODE_SWING, 0xFF, // 4D Magic Carpet
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 4E Submarine Ride
@@ -765,11 +766,11 @@ const uint8 RideAvailableModes[] = {
RIDE_MODE_SHOP_STALL, 0xFF, // 53 (none)
RIDE_MODE_SHOP_STALL, 0xFF, // 54 (none)
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 55 (none)
RIDE_MODE_POWERED_LAUNCH, 0xFF, // 56 Inverted Impulse Coaster
RIDE_MODE_POWERED_LAUNCH_PASSTROUGH, 0xFF, // 56 Inverted Impulse Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 57 Mini Roller Coaster
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 58 Mine Ride
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 59 LIM Launched Roller Coaster
RIDE_MODE_POWERED_LAUNCH_35, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF // 60 (none)
RIDE_MODE_POWERED_LAUNCH, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF // 60 (none)
};
const uint8 RideAvailableBreakdowns[] = {
@@ -879,4 +880,4 @@ const rct_ride_entrance_definition RideEntranceDefinitions[12] = {
{ 22824, 35, 23 }, // RIDE_ENTRANCE_STYLE_SNOW_ICE
{ 22840, 33, 19 }, // RIDE_ENTRANCE_STYLE_PAGODA
{ 22856, 33, 2 } // RIDE_ENTRANCE_STYLE_SPACE
};
};

View File

@@ -493,11 +493,11 @@ static uint16 ride_compute_upkeep(rct_ride *ride)
if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) {
upkeep += 30;
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH) {
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH_PASSTROUGH) {
upkeep += 160;
} else if (ride->mode == RIDE_MODE_LIM_POWERED_LAUNCH) {
upkeep += 320;
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH_35 ||
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH ||
ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) {
upkeep += 220;
}
@@ -1598,4 +1598,4 @@ static const ride_ratings_calculation ride_ratings_calculate_func_table[91] = {
NULL, // 90
};
#pragma endregion
#pragma endregion

View File

@@ -1983,7 +1983,7 @@ static void window_ride_main_invalidate()
w->disabled_widgets &= ~((1 << 22) | (1 << 19));
if (ride->lifecycle_flags & (RIDE_LIFECYCLE_INDESTRUCTIBLE | RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK))
w->disabled_widgets |= (1 << 22);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_19)
if (ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS)
w->disabled_widgets |= (1 << 19);
RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name;
@@ -2647,7 +2647,7 @@ static void window_ride_vehicle_scrollpaint()
static void set_operating_setting(int rideNumber, uint8 setting, uint8 value)
{
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_CHANGE_OPERATING_MODE;
game_do_command(0, (value << 8) | 1, 0, (setting << 8) | rideNumber, GAME_COMMAND_11, 0, 0);
game_do_command(0, (value << 8) | 1, 0, (setting << 8) | rideNumber, GAME_COMMAND_SET_RIDE_SETTING, 0, 0);
}
static void window_ride_mode_tweak_set(rct_window *w, uint8 value)
@@ -2674,7 +2674,7 @@ static void window_ride_mode_tweak_set(rct_window *w, uint8 value)
)
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 1868;
game_do_command(0, (value << 8) | 1, 0, (4 << 8) | w->number, GAME_COMMAND_11, 0, 0);
game_do_command(0, (value << 8) | 1, 0, (4 << 8) | w->number, GAME_COMMAND_SET_RIDE_SETTING, 0, 0);
}
/**
@@ -3095,8 +3095,8 @@ static void window_ride_operating_invalidate()
// Mode specific functionality
RCT2_GLOBAL(0x013CE964, uint16) = ride->var_0D0;
switch (ride->mode) {
case RIDE_MODE_POWERED_LAUNCH_PASSTROUGH:
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;
@@ -3344,7 +3344,7 @@ static void window_ride_maintenance_dropdown()
ride = GET_RIDE(w->number);
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_CHANGE_OPERATING_MODE;
game_do_command(0, (dropdownIndex << 8) | 1, 0, (5 << 8) | w->number, GAME_COMMAND_11, 0, 0);
game_do_command(0, (dropdownIndex << 8) | 1, 0, (5 << 8) | w->number, GAME_COMMAND_SET_RIDE_SETTING, 0, 0);
}
/**
@@ -4245,7 +4245,7 @@ static void window_ride_toggle_music(rct_window *w)
int activateMusic = (ride->lifecycle_flags & RIDE_LIFECYCLE_MUSIC) ? 0 : 1;
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_CHANGE_OPERATING_MODE;
game_do_command(0, (activateMusic << 8) | 1, 0, (6 << 8) | w->number, GAME_COMMAND_11, 0, 0);
game_do_command(0, (activateMusic << 8) | 1, 0, (6 << 8) | w->number, GAME_COMMAND_SET_RIDE_SETTING, 0, 0);
}
/**
@@ -4360,7 +4360,7 @@ static void window_ride_music_dropdown()
ride = GET_RIDE(w->number);
musicStyle = window_ride_current_music_style_order[dropdownIndex];
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_CHANGE_OPERATING_MODE;
game_do_command(0, (musicStyle << 8) | 1, 0, (7 << 8) | w->number, GAME_COMMAND_11, 0, 0);
game_do_command(0, (musicStyle << 8) | 1, 0, (7 << 8) | w->number, GAME_COMMAND_SET_RIDE_SETTING, 0, 0);
}
/**
@@ -4702,7 +4702,7 @@ static void window_ride_measurements_invalidate()
window_ride_measurements_widgets[WIDX_RESET_SELECTION].type = WWT_EMPTY;
window_ride_measurements_widgets[WIDX_SAVE_DESIGN].type = WWT_EMPTY;
window_ride_measurements_widgets[WIDX_CANCEL_DESIGN].type = WWT_EMPTY;
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_19)) {
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS)) {
if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_TRACK)) {
window_ride_measurements_widgets[WIDX_SAVE_TRACK_DESIGN].type = WWT_FLATBTN;
w->disabled_widgets |= (1 << WIDX_SAVE_TRACK_DESIGN);
@@ -4753,7 +4753,7 @@ static void window_ride_measurements_paint()
} else {
ride = GET_RIDE(w->number);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_19)
if (ride->lifecycle_flags & RIDE_LIFECYCLE_SIX_FLAGS)
gfx_draw_sprite(dpi, 23225, w->x + w->width - 53, w->y + w->height - 73, 0);
x = w->x + window_ride_measurements_widgets[WIDX_PAGE_BACKGROUND].left + 4;