This commit is contained in:
Duncan Frost 2015-04-12 16:47:02 +01:00 committed by duncanspumpkin
parent 7afc7453fd
commit 8ac940de47
4 changed files with 42 additions and 20 deletions

View File

@ -2210,8 +2210,7 @@ static void peep_update_ride_sub_state_2(rct_peep* peep){
rct_vehicle *currentTrain = GET_VEHICLE(ride->vehicles[peep->current_train]);
if (ride->status == RIDE_STATUS_OPEN &&
++peep->var_AC != 0 &&
!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART)
) {
!(currentTrain->update_flags & VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART)){
return;
}

View File

@ -2261,6 +2261,10 @@ void ride_prepare_breakdown(int rideIndex, int breakdownReason)
}
if (vehicle != NULL)
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_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->update_flags |= VEHICLE_UPDATE_FLAG_BROKEN_CAR;
break;
case BREAKDOWN_VEHICLE_MALFUNCTION:
// Choose a random train

View File

@ -531,7 +531,7 @@ static int sub_6D6A2C(rct_vehicle* vehicle){
continue;
}
if (vehicle->var_48 & (1 << 8) &&
if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_BROKEN_CAR &&
vehicle->var_B5 != 0xFF &&
(
ride->breakdown_reason_pending == BREAKDOWN_RESTRAINTS_STUCK_CLOSED ||
@ -586,7 +586,7 @@ static void vehicle_update_measurements(rct_vehicle *vehicle)
ride->lifecycle_flags |= RIDE_LIFECYCLE_TESTED;
ride->lifecycle_flags |= RIDE_LIFECYCLE_NO_RAW_STATS;
ride->lifecycle_flags &= ~RIDE_LIFECYCLE_TEST_IN_PROGRESS;
vehicle->var_48 &= ~(1 << 5);
vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_TESTING;
window_invalidate_by_number(WC_RIDE, vehicle->ride);
return;
}
@ -653,7 +653,7 @@ static void vehicle_update_measurements(rct_vehicle *vehicle)
return;
uint16 track_elem_type = vehicle->track_type / 4;
if (track_elem_type == TRACK_ELEM_POWERED_LIFT || !(vehicle->var_48 & (1 << 0))){
if (track_elem_type == TRACK_ELEM_POWERED_LIFT || !(vehicle->update_flags & VEHICLE_UPDATE_FLAG_0)){
if (!(ride->testing_flags & RIDE_TESTING_POWERED_LIFT)){
ride->testing_flags |= RIDE_TESTING_POWERED_LIFT;
if (ride->drops + 64 < 0xFF){
@ -952,7 +952,7 @@ static void vehicle_update(rct_vehicle *vehicle)
rct_ride_type_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type];
ride = GET_RIDE(vehicle->ride);
if (vehicle->var_48 & 0x20)
if (vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING)
vehicle_update_measurements(vehicle);
RCT2_GLOBAL(0x00F64E34, uint8) = 255;
@ -965,7 +965,7 @@ static void vehicle_update(rct_vehicle *vehicle)
vehicle->velocity <= 0x20000
)
) {
vehicle->var_48 |= 0x80;
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_15;
}
}
}
@ -1156,7 +1156,7 @@ static void train_ready_to_depart(rct_vehicle* vehicle, uint8 num_peeps_on_train
if (ride->status == RIDE_STATUS_OPEN &&
!(ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) &&
!(vehicle->var_48 & (1<<4))){
!(vehicle->update_flags & VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART)){
return;
}
@ -1231,7 +1231,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
if (vehicle->var_C0 != 0xFFFF)
vehicle->var_C0++;
vehicle->var_48 &= ~(1 << 4);
vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
// 0xF64E31, 0xF64E32, 0xF64E33
uint8 num_peeps_on_train = 0, num_used_seats_on_train = 0, num_seats_on_train = 0;
@ -1270,7 +1270,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
}
if (ride->depart_flags & RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH){
if (ride->max_waiting_time * 32 < vehicle->var_C0){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
@ -1292,7 +1292,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
if (train->status == VEHICLE_STATUS_UNLOADING_PASSENGERS ||
train->status == VEHICLE_STATUS_MOVING_TO_END_OF_STATION){
if (train->current_station == vehicle->current_station){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
@ -1304,7 +1304,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
ride->depart_flags & RIDE_DEPART_WAIT_FOR_LOAD){
if (num_peeps_on_train == num_seats_on_train){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
@ -1317,7 +1317,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
uint8 three_quater_seats = (3 * num_seats_on_train) / 4;
if (three_quater_seats != 0 && num_peeps_on_train >= three_quater_seats){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
@ -1328,7 +1328,7 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
}
if (num_seats_on_train / 2 != 0 && num_peeps_on_train >= num_seats_on_train / 2){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
@ -1339,24 +1339,24 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
}
if (num_seats_on_train / 4 != 0 && num_peeps_on_train >= num_seats_on_train / 4){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
if (load == 0){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
if (num_peeps_on_train != 0){
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
}
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
vehicle->var_48 |= (1 << 4);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART;
train_ready_to_depart(vehicle, num_peeps_on_train, num_used_seats_on_train);
return;
}
@ -1367,10 +1367,10 @@ static void vehicle_update_waiting_for_passengers(rct_vehicle* vehicle){
vehicle->velocity = 0;
vehicle->status = VEHICLE_STATUS_WAITING_TO_DEPART;
vehicle->var_51 = 0;
vehicle->var_48 &= ~(1 << 2);
vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT;
if (ride->depart_flags & RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS){
vehicle->var_48 |= (1 << 2);
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT;
}
vehicle_invalidate_window(vehicle);

View File

@ -267,6 +267,25 @@ enum {
VEHICLE_VISUAL_SUBMARINE
};
enum{
VEHICLE_UPDATE_FLAG_0 = (1 << 0),
VEHICLE_UPDATE_FLAG_1 = (1 << 1),
VEHICLE_UPDATE_FLAG_WAIT_ON_ADJACENT = (1 << 2),
VEHICLE_UPDATE_FLAG_3 = (1 << 3),
VEHICLE_UPDATE_FLAG_TRAIN_READY_DEPART = (1 << 4),
VEHICLE_UPDATE_FLAG_TESTING = (1 << 5),
VEHICLE_UPDATE_FLAG_6 = (1 << 6),
VEHICLE_UPDATE_FLAG_7 = (1 << 7),
VEHICLE_UPDATE_FLAG_BROKEN_CAR = (1 << 8),
VEHICLE_UPDATE_FLAG_BROKEN_TRAIN = (1 << 9),
VEHICLE_UPDATE_FLAG_10 = (1 << 10),
VEHICLE_UPDATE_FLAG_11 = (1 << 11),
VEHICLE_UPDATE_FLAG_12 = (1 << 12),
VEHICLE_UPDATE_FLAG_13 = (1 << 13),
VEHICLE_UPDATE_FLAG_14 = (1 << 14),
VEHICLE_UPDATE_FLAG_15 = (1 << 15)
};
#define VEHICLE_SEAT_PAIR_FLAG 0x80
#define VEHICLE_SEAT_NUM_MASK 0x7F