diff --git a/src/peep/peep.c b/src/peep/peep.c index 0dda4b0923..bd566339ba 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -1201,7 +1201,7 @@ void peep_update_ride_sub_state_1(rct_peep* peep){ map_element = ride_get_station_start_track_element(ride, peep->current_ride_station); - uint8 direction_track = map_element->type & MAP_ELEMENT_DIRECTION_MASK; + uint8 direction_track = (!map_element ? 0 : map_element->type & MAP_ELEMENT_DIRECTION_MASK); peep->var_37 = (direction_entrance << 2) | (direction_track << 4); @@ -1246,7 +1246,7 @@ void peep_update_ride_sub_state_1(rct_peep* peep){ map_element = ride_get_station_start_track_element(ride, peep->current_ride_station); - uint8 direction_track = map_element->type & MAP_ELEMENT_DIRECTION_MASK; + uint8 direction_track = (!map_element ? 0 : map_element->type & MAP_ELEMENT_DIRECTION_MASK); vehicle = GET_VEHICLE(ride->vehicles[peep->current_train]); ride_entry = GET_RIDE_ENTRY(vehicle->ride_subtype); @@ -1726,7 +1726,7 @@ static void peep_update_ride_sub_state_7(rct_peep* peep){ map_element = ride_get_station_start_track_element(ride, peep->current_ride_station); - uint8 station_direction = map_element->type & MAP_ELEMENT_DIRECTION_MASK; + uint8 station_direction = (!map_element ? 0 : map_element->type & MAP_ELEMENT_DIRECTION_MASK); vehicle = GET_VEHICLE(ride->vehicles[peep->current_train]); diff --git a/src/ride/ride.c b/src/ride/ride.c index a3e9d34d20..b3a8c1a4e5 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -1707,9 +1707,17 @@ static void ride_prepare_breakdown(int rideIndex, int breakdownReason) // Set flag on broken car vehicle = &(g_sprite_list[ride->vehicles[ride->broken_vehicle]].vehicle); - for (i = ride->broken_car; i > 0; i--) - vehicle = &(g_sprite_list[vehicle->next_vehicle_on_train].vehicle); - vehicle->var_48 |= 0x100; + for (i = ride->broken_car; i > 0; i--) { + if (vehicle->next_vehicle_on_train == (uint16)0xFFFFFFFF) { + vehicle = NULL; + break; + } + else { + vehicle = &(g_sprite_list[vehicle->next_vehicle_on_train].vehicle); + } + } + if (vehicle != NULL) + vehicle->var_48 |= 0x100; break; case BREAKDOWN_VEHICLE_MALFUNCTION: // Choose a random train