mirror of https://github.com/OpenRCT2/OpenRCT2.git
Implemented vehicle_update_unloading_passengers
This commit is contained in:
parent
0a8ef64a83
commit
a372637bd8
|
@ -65,6 +65,7 @@ static void vehicle_update_crash(rct_vehicle *vehicle);
|
||||||
static void vehicle_update_travelling_cable_lift(rct_vehicle* vehicle);
|
static void vehicle_update_travelling_cable_lift(rct_vehicle* vehicle);
|
||||||
static void vehicle_update_travelling_boat(rct_vehicle* vehicle);
|
static void vehicle_update_travelling_boat(rct_vehicle* vehicle);
|
||||||
static void vehicle_update_arriving(rct_vehicle* vehicle);
|
static void vehicle_update_arriving(rct_vehicle* vehicle);
|
||||||
|
static void vehicle_update_unloading_passengers(rct_vehicle* vehicle);
|
||||||
|
|
||||||
static void vehicle_update_sound(rct_vehicle *vehicle);
|
static void vehicle_update_sound(rct_vehicle *vehicle);
|
||||||
static int vehicle_update_scream_sound(rct_vehicle *vehicle);
|
static int vehicle_update_scream_sound(rct_vehicle *vehicle);
|
||||||
|
@ -1123,10 +1124,7 @@ static void vehicle_update(rct_vehicle *vehicle)
|
||||||
vehicle_update_arriving(vehicle);
|
vehicle_update_arriving(vehicle);
|
||||||
break;
|
break;
|
||||||
case VEHICLE_STATUS_UNLOADING_PASSENGERS:
|
case VEHICLE_STATUS_UNLOADING_PASSENGERS:
|
||||||
{
|
vehicle_update_unloading_passengers(vehicle);
|
||||||
int *addressSwitchPtr = (int*)(0x006D7B70 + (vehicle->status * 4));
|
|
||||||
RCT2_CALLPROC_X(*addressSwitchPtr, 0, 0, 0, (vehicle->sub_state << 8) | ride->mode, (int)vehicle, 0, 0);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT:
|
case VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT:
|
||||||
vehicle_update_waiting_for_cable_lift(vehicle);
|
vehicle_update_waiting_for_cable_lift(vehicle);
|
||||||
|
@ -2633,6 +2631,95 @@ static void vehicle_update_arriving(rct_vehicle* vehicle) {
|
||||||
vehicle_invalidate_window(vehicle);
|
vehicle_invalidate_window(vehicle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* rct2: 0x006D9002 */
|
||||||
|
static void vehicle_update_unloading_passengers(rct_vehicle* vehicle) {
|
||||||
|
if (vehicle->sub_state == 0) {
|
||||||
|
if (!vehicle_open_restraints(vehicle)) {
|
||||||
|
vehicle->sub_state = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rct_ride* ride = GET_RIDE(vehicle->ride);
|
||||||
|
if (ride->mode == RIDE_MODE_FORWARD_ROTATION ||
|
||||||
|
ride->mode == RIDE_MODE_BACKWARD_ROTATION) {
|
||||||
|
uint8 seat = ((-vehicle->var_1F) >> 3) & 0xF;
|
||||||
|
if (vehicle->restraints_position == 255 &&
|
||||||
|
(vehicle->peep[seat * 2] != 0xFFFF)) {
|
||||||
|
vehicle->next_free_seat -= 2;
|
||||||
|
|
||||||
|
rct_peep* peep = GET_PEEP(vehicle->peep[seat * 2]);
|
||||||
|
vehicle->peep[seat * 2] = 0xFFFF;
|
||||||
|
|
||||||
|
peep_decrement_num_riders(peep);
|
||||||
|
peep->sub_state = 7;
|
||||||
|
peep->state = PEEP_STATE_LEAVING_RIDE;
|
||||||
|
peep_window_state_update(peep);
|
||||||
|
|
||||||
|
peep = GET_PEEP(vehicle->peep[seat * 2 + 1]);
|
||||||
|
vehicle->peep[seat * 2 + 1] = 0xFFFF;
|
||||||
|
|
||||||
|
peep_decrement_num_riders(peep);
|
||||||
|
peep->sub_state = 7;
|
||||||
|
peep->state = PEEP_STATE_LEAVING_RIDE;
|
||||||
|
peep_window_state_update(peep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (ride->exits[vehicle->current_station] == 0xFFFF) {
|
||||||
|
if (vehicle->sub_state != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) &&
|
||||||
|
vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING &&
|
||||||
|
ride->current_test_segment + 1 >= ride->num_stations) {
|
||||||
|
vehicle_update_test_finish(vehicle);
|
||||||
|
}
|
||||||
|
vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION;
|
||||||
|
vehicle->sub_state = 0;
|
||||||
|
vehicle_invalidate_window(vehicle);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16 spriteId = vehicle->sprite_index;
|
||||||
|
for (rct_vehicle* train; spriteId != 0xFFFF; spriteId = train->next_vehicle_on_train) {
|
||||||
|
train = GET_VEHICLE(spriteId);
|
||||||
|
if (train->restraints_position != 255)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (train->next_free_seat == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
train->next_free_seat = 0;
|
||||||
|
for (uint8 peepIndex = 0; peepIndex < train->num_peeps; peepIndex++) {
|
||||||
|
rct_peep* peep = GET_PEEP(train->peep[peepIndex]);
|
||||||
|
peep_decrement_num_riders(peep);
|
||||||
|
peep->sub_state = 7;
|
||||||
|
peep->state = PEEP_STATE_LEAVING_RIDE;
|
||||||
|
peep_window_state_update(peep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vehicle->sub_state != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
uint16 spriteId = vehicle->sprite_index;
|
||||||
|
for (rct_vehicle* train; spriteId != 0xFFFF; spriteId = train->next_vehicle_on_train) {
|
||||||
|
train = GET_VEHICLE(spriteId);
|
||||||
|
if (train->num_peeps != train->next_free_seat)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED) &&
|
||||||
|
vehicle->update_flags & VEHICLE_UPDATE_FLAG_TESTING &&
|
||||||
|
ride->current_test_segment + 1 >= ride->num_stations) {
|
||||||
|
vehicle_update_test_finish(vehicle);
|
||||||
|
}
|
||||||
|
vehicle->status = VEHICLE_STATUS_MOVING_TO_END_OF_STATION;
|
||||||
|
vehicle->sub_state = 0;
|
||||||
|
vehicle_invalidate_window(vehicle);
|
||||||
|
}
|
||||||
|
|
||||||
/* rct2: 0x006D9820 */
|
/* rct2: 0x006D9820 */
|
||||||
static void vehicle_update_travelling_boat(rct_vehicle* vehicle) {
|
static void vehicle_update_travelling_boat(rct_vehicle* vehicle) {
|
||||||
vehicle_check_if_missing(vehicle);
|
vehicle_check_if_missing(vehicle);
|
||||||
|
|
Loading…
Reference in New Issue