mirror of https://github.com/OpenRCT2/OpenRCT2.git
Can now force ride breakdowns
This commit is contained in:
parent
fa49e5745e
commit
10c1c29c11
|
@ -3618,3 +3618,11 @@ STR_5281 :{SMALLFONT}{BLACK}Features
|
|||
STR_5282 :RCT1 Ride Open/Close Lights
|
||||
STR_5283 :RCT1 Park Open/Close Lights
|
||||
STR_5284 :RCT1 Scenario Selection Font
|
||||
STR_5285 :EXPLODE!!!
|
||||
STR_5286 :{MEDIUMFONT}{BLACK}Makes guests explode
|
||||
STR_5287 :Ride is already broken down
|
||||
STR_5288 :Ride is closed
|
||||
STR_5289 :No breakdowns available for this ride
|
||||
STR_5290 :Fix ride
|
||||
STR_5291 :Can't force breakdown
|
||||
STR_5292 :{SMALLFONT}{BLACK}Force a breakdown
|
||||
|
|
|
@ -134,7 +134,7 @@ static int ride_get_new_breakdown_problem(rct_ride *ride);
|
|||
static void ride_inspection_update(rct_ride *ride);
|
||||
static void ride_mechanic_status_update(int rideIndex, int mechanicStatus);
|
||||
static void ride_music_update(int rideIndex);
|
||||
static void ride_prepare_breakdown(int rideIndex, int breakdownReason);
|
||||
void ride_prepare_breakdown(int rideIndex, int breakdownReason);
|
||||
static void ride_shop_connected(rct_ride* ride, int ride_idx);
|
||||
static void ride_spiral_slide_update(rct_ride *ride);
|
||||
static void ride_update(int rideIndex);
|
||||
|
@ -1655,7 +1655,7 @@ static int ride_get_new_breakdown_problem(rct_ride *ride)
|
|||
return -1;
|
||||
|
||||
// If brakes failure is disabled, also take it out of the equation (see above comment why)
|
||||
if(gConfigCheat.disable_brakes_failure)
|
||||
if (gConfigCheat.disable_brakes_failure)
|
||||
return -1;
|
||||
|
||||
monthsOld = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint8) - ride->build_date;
|
||||
|
@ -1669,7 +1669,7 @@ static int ride_get_new_breakdown_problem(rct_ride *ride)
|
|||
*
|
||||
* rct2: 0x006B7348
|
||||
*/
|
||||
static void ride_prepare_breakdown(int rideIndex, int breakdownReason)
|
||||
void ride_prepare_breakdown(int rideIndex, int breakdownReason)
|
||||
{
|
||||
int i;
|
||||
rct_ride *ride;
|
||||
|
|
|
@ -802,6 +802,7 @@ int sub_6C683D(int* x, int* y, int* z, int direction, int type, uint16 extra_par
|
|||
void ride_set_map_tooltip(rct_map_element *mapElement);
|
||||
int ride_music_params_update(sint16 x, sint16 y, sint16 z, uint8 rideIndex, uint16 sampleRate, uint32 position, uint8 *tuneId);
|
||||
void ride_music_update_final();
|
||||
void ride_prepare_breakdown(int rideIndex, int breakdownReason);
|
||||
rct_map_element *ride_get_station_start_track_element(rct_ride *ride, int stationIndex);
|
||||
rct_map_element *ride_get_station_exit_element(rct_ride *ride, int x, int y, int z);
|
||||
void ride_set_status(int rideIndex, int status);
|
||||
|
@ -814,6 +815,7 @@ void game_command_demolish_ride(int *eax, int *ebx, int *ecx, int *edx, int *esi
|
|||
void game_command_set_ride_appearance(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
|
||||
void game_command_set_ride_price(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
|
||||
|
||||
|
||||
int get_var_10E_unk_1(rct_ride* ride);
|
||||
int get_var_10E_unk_2(rct_ride* ride);
|
||||
int get_var_10E_unk_3(rct_ride* ride);
|
||||
|
|
|
@ -124,6 +124,7 @@ enum {
|
|||
WIDX_INSPECTION_INTERVAL = 14,
|
||||
WIDX_INSPECTION_INTERVAL_DROPDOWN,
|
||||
WIDX_LOCATE_MECHANIC,
|
||||
WIDX_FORCE_BREAKDOWN,
|
||||
|
||||
WIDX_TRACK_PREVIEW = 14,
|
||||
WIDX_TRACK_COLOUR_SCHEME,
|
||||
|
@ -306,6 +307,7 @@ static rct_widget window_ride_maintenance_widgets[] = {
|
|||
{ WWT_DROPDOWN, 1, 107, 308, 71, 82, 0, STR_SELECT_HOW_OFTEN_A_MECHANIC_SHOULD_CHECK_THIS_RIDE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 72, 81, 876, STR_SELECT_HOW_OFTEN_A_MECHANIC_SHOULD_CHECK_THIS_RIDE },
|
||||
{ WWT_FLATBTN, 1, 289, 312, 108, 131, 0xFFFFFFFF, STR_LOCATE_NEAREST_AVAILABLE_MECHANIC_TIP },
|
||||
{ WWT_FLATBTN, 1, 265, 288, 108, 131, SPR_NO_ENTRY, 5292 },
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
|
@ -492,7 +494,7 @@ const uint64 window_ride_page_enabled_widgets[] = {
|
|||
0x0000000003FDBFF4,
|
||||
0x00000000001EFFF4,
|
||||
0x0000019E777DBFF4,
|
||||
0x000000000001FFF4,
|
||||
0x000000000003FFF4,
|
||||
0x00000003F37F3FF4,
|
||||
0x000000000001FFF4,
|
||||
0x000000000007FFF4,
|
||||
|
@ -3396,30 +3398,94 @@ static void window_ride_maintenance_resize()
|
|||
*/
|
||||
static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rct_widget *widget)
|
||||
{
|
||||
rct_ride *ride;
|
||||
rct_ride_type *ride_type;
|
||||
rct_widget *dropdownWidget;
|
||||
int i;
|
||||
int i, j, num_items;
|
||||
uint8 breakdownReason;
|
||||
|
||||
dropdownWidget = widget;
|
||||
|
||||
if (widgetIndex != WIDX_INSPECTION_INTERVAL_DROPDOWN)
|
||||
return;
|
||||
ride = GET_RIDE(w->number);
|
||||
ride_type = gRideTypeList[ride->subtype];
|
||||
|
||||
dropdownWidget = widget - 1;
|
||||
rct_ride *ride = GET_RIDE(w->number);
|
||||
switch (widgetIndex) {
|
||||
case WIDX_INSPECTION_INTERVAL_DROPDOWN:
|
||||
dropdownWidget--;
|
||||
for (i = 0; i < 7; i++) {
|
||||
gDropdownItemsFormat[i] = 1142;
|
||||
gDropdownItemsArgs[i] = STR_EVERY_10_MINUTES + i;
|
||||
}
|
||||
window_dropdown_show_text_custom_width(
|
||||
w->x + dropdownWidget->left,
|
||||
w->y + dropdownWidget->top,
|
||||
dropdownWidget->bottom - dropdownWidget->top + 1,
|
||||
w->colours[1],
|
||||
DROPDOWN_FLAG_STAY_OPEN,
|
||||
7,
|
||||
widget->right - dropdownWidget->left
|
||||
);
|
||||
|
||||
for (i = 0; i < 7; i++) {
|
||||
gDropdownItemsFormat[i] = 1142;
|
||||
gDropdownItemsArgs[i] = STR_EVERY_10_MINUTES + i;
|
||||
gDropdownItemsChecked = (1 << ride->inspection_interval);
|
||||
break;
|
||||
|
||||
case WIDX_FORCE_BREAKDOWN:
|
||||
num_items = 1;
|
||||
for (j = 0; j < 3; j++) {
|
||||
if (ride_type->ride_type[j] != 0xFF)
|
||||
break;
|
||||
}
|
||||
gDropdownItemsFormat[0] = 1142;
|
||||
gDropdownItemsArgs[0] = 5290;
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) {
|
||||
if (i == BREAKDOWN_BRAKES_FAILURE && (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)) {
|
||||
if (ride->num_vehicles != 1)
|
||||
continue;
|
||||
}
|
||||
gDropdownItemsFormat[num_items] = 1142;
|
||||
gDropdownItemsArgs[num_items] = STR_SAFETY_CUT_OUT + i;
|
||||
num_items++;
|
||||
}
|
||||
}
|
||||
if (num_items <= 1) {
|
||||
window_error_open(5289, STR_NONE);
|
||||
}
|
||||
else {
|
||||
window_dropdown_show_text(
|
||||
w->x + dropdownWidget->left,
|
||||
w->y + dropdownWidget->top,
|
||||
dropdownWidget->bottom - dropdownWidget->top + 1,
|
||||
w->colours[1],
|
||||
DROPDOWN_FLAG_STAY_OPEN,
|
||||
num_items
|
||||
);
|
||||
|
||||
breakdownReason = ride->breakdown_reason_pending;
|
||||
//if (breakdownReason == BREAKDOWN_NONE)
|
||||
// breakdownReason = ride->breakdown_reason;
|
||||
num_items = 1;
|
||||
if (breakdownReason != BREAKDOWN_NONE && (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING))) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) {
|
||||
if (i == BREAKDOWN_BRAKES_FAILURE && (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)) {
|
||||
if (ride->num_vehicles != 1)
|
||||
continue;
|
||||
}
|
||||
if (i == breakdownReason) {
|
||||
gDropdownItemsChecked = (1 << num_items);
|
||||
break;
|
||||
}
|
||||
gDropdownItemsFormat[num_items] = 1142;
|
||||
gDropdownItemsArgs[num_items] = STR_SAFETY_CUT_OUT + i;
|
||||
num_items++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
window_dropdown_show_text_custom_width(
|
||||
w->x + dropdownWidget->left,
|
||||
w->y + dropdownWidget->top,
|
||||
dropdownWidget->bottom - dropdownWidget->top + 1,
|
||||
w->colours[1],
|
||||
DROPDOWN_FLAG_STAY_OPEN,
|
||||
7,
|
||||
widget->right - dropdownWidget->left
|
||||
);
|
||||
|
||||
gDropdownItemsChecked = (1 << ride->inspection_interval);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3430,17 +3496,61 @@ static void window_ride_maintenance_dropdown()
|
|||
{
|
||||
rct_window *w;
|
||||
rct_ride *ride;
|
||||
rct_ride_type *ride_type;
|
||||
short widgetIndex, dropdownIndex;
|
||||
int i, j, num_items;
|
||||
|
||||
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
||||
|
||||
if (widgetIndex != WIDX_INSPECTION_INTERVAL_DROPDOWN || dropdownIndex == -1)
|
||||
if (dropdownIndex == -1)
|
||||
return;
|
||||
|
||||
|
||||
ride = GET_RIDE(w->number);
|
||||
ride_type = gRideTypeList[ride->subtype];
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_INSPECTION_INTERVAL_DROPDOWN:
|
||||
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_SET_RIDE_SETTING, 0, 0);
|
||||
break;
|
||||
|
||||
case WIDX_FORCE_BREAKDOWN:
|
||||
if (dropdownIndex == 0) {
|
||||
ride->lifecycle_flags &= ~(RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN);
|
||||
window_invalidate_by_number(WC_RIDE, w->number);
|
||||
break;
|
||||
}
|
||||
if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN | RIDE_LIFECYCLE_CRASHED)) {
|
||||
window_error_open(5291, 5287);
|
||||
}
|
||||
else if (ride->status == RIDE_STATUS_CLOSED) {
|
||||
window_error_open(5291, 5288);
|
||||
}
|
||||
else {
|
||||
num_items = 0;
|
||||
for (j = 0; j < 3; j++) {
|
||||
if (ride_type->ride_type[j] != 0xFF)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (RideAvailableBreakdowns[ride_type->ride_type[j]] & (uint8)(1 << i)) {
|
||||
if (i == BREAKDOWN_BRAKES_FAILURE && (ride->mode == RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED || ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED)) {
|
||||
if (ride->num_vehicles != 1)
|
||||
continue;
|
||||
}
|
||||
if (num_items == (dropdownIndex - 1))
|
||||
break;
|
||||
num_items++;
|
||||
}
|
||||
}
|
||||
ride_prepare_breakdown(w->number, i);
|
||||
//ride_breakdown_status_update(w->number);
|
||||
//ride_inspection_update(ride);
|
||||
//gForceRideBreakdown[w->number] = i + 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
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_SET_RIDE_SETTING, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3490,6 +3600,14 @@ static void window_ride_maintenance_invalidate()
|
|||
|
||||
window_ride_anchor_border_widgets(w);
|
||||
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
|
||||
|
||||
if (gConfigGeneral.debugging_tools) {
|
||||
window_ride_maintenance_widgets[WIDX_FORCE_BREAKDOWN].type = WWT_FLATBTN;
|
||||
}
|
||||
else {
|
||||
window_ride_maintenance_widgets[WIDX_FORCE_BREAKDOWN].type = WWT_EMPTY;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue