From 32b79ea216c4cc4e7136ba234a1f81dd1f474078 Mon Sep 17 00:00:00 2001 From: Robert Jordan Date: Tue, 9 Jun 2015 23:17:08 -0400 Subject: [PATCH] Fix ride works for all breakdown types --- src/windows/ride.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/windows/ride.c b/src/windows/ride.c index df0b243a67..ad2ac44a48 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -3481,12 +3481,7 @@ static void window_ride_maintenance_mousedown(int widgetIndex, rct_window *w, rc } } - if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING) == 0 || - breakdownReason == BREAKDOWN_VEHICLE_MALFUNCTION || - breakdownReason == BREAKDOWN_RESTRAINTS_STUCK_CLOSED || - breakdownReason == BREAKDOWN_RESTRAINTS_STUCK_OPEN || - breakdownReason == BREAKDOWN_DOORS_STUCK_CLOSED || - breakdownReason == BREAKDOWN_DOORS_STUCK_OPEN) { + if ((ride->lifecycle_flags & RIDE_LIFECYCLE_BREAKDOWN_PENDING) == 0) { *gDropdownItemsDisabled = (1 << 0); } } @@ -3504,6 +3499,7 @@ static void window_ride_maintenance_dropdown() rct_window *w; rct_ride *ride; rct_ride_type *ride_type; + rct_vehicle *vehicle; short widgetIndex, dropdownIndex; int i, j, num_items; @@ -3525,6 +3521,19 @@ static void window_ride_maintenance_dropdown() if (dropdownIndex == 0) { // This doesn't work for all breakdown types. //We'll need to decompile the peep_fixing function to figure out how to solve this. + switch (ride->breakdown_reason_pending) { + case BREAKDOWN_RESTRAINTS_STUCK_CLOSED: + case BREAKDOWN_RESTRAINTS_STUCK_OPEN: + case BREAKDOWN_DOORS_STUCK_CLOSED: + case BREAKDOWN_DOORS_STUCK_OPEN: + vehicle = &(g_sprite_list[ride->vehicles[ride->broken_vehicle]].vehicle); + vehicle->var_48 &= ~0x100; + break; + case BREAKDOWN_VEHICLE_MALFUNCTION: + vehicle = &(g_sprite_list[ride->vehicles[ride->broken_vehicle]].vehicle); + vehicle->var_48 &= ~0x200; + break; + } ride->lifecycle_flags &= ~(RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN); window_invalidate_by_number(WC_RIDE, w->number); break;