mirror of https://github.com/OpenRCT2/OpenRCT2.git
Implement vehicle_update_arriving
This commit is contained in:
parent
cbf859bffb
commit
cd5a18b2c5
|
@ -2073,7 +2073,7 @@ static void vehicle_update_departing(rct_vehicle* vehicle) {
|
|||
|
||||
if (flags & ((1 << 5) | (1 << 12))) {
|
||||
if (ride->mode == RIDE_MODE_BOAT_HIRE) {
|
||||
RCT2_CALLPROC_X(0x006D982F, 0, 0, 0, 0, (int)vehicle, 0, 0);
|
||||
vehicle_update_departing_boat_hire(vehicle);
|
||||
return;
|
||||
}
|
||||
else if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) {
|
||||
|
@ -2424,6 +2424,212 @@ static void vehicle_update_travelling(rct_vehicle* vehicle) {
|
|||
vehicle->sub_state = 1;
|
||||
}
|
||||
|
||||
/* rct2: 0x006D8C36 */
|
||||
static void vehicle_update_arriving(rct_vehicle* vehicle) {
|
||||
RCT2_GLOBAL(0x00F64E35, uint8) = 1;
|
||||
rct_ride* ride = GET_RIDE(vehicle->ride);
|
||||
|
||||
switch (ride->mode) {
|
||||
case RIDE_MODE_SWING:
|
||||
case RIDE_MODE_ROTATION:
|
||||
case RIDE_MODE_FORWARD_ROTATION:
|
||||
case RIDE_MODE_BACKWARD_ROTATION:
|
||||
case RIDE_MODE_FILM_AVENGING_AVIATORS:
|
||||
case RIDE_MODE_FILM_THRILL_RIDERS:
|
||||
case RIDE_MODE_BEGINNERS:
|
||||
case RIDE_MODE_INTENSE:
|
||||
case RIDE_MODE_BERSERK:
|
||||
case RIDE_MODE_3D_FILM_MOUSE_TAILS:
|
||||
case RIDE_MODE_3D_FILM_STORM_CHASERS:
|
||||
case RIDE_MODE_3D_FILM_SPACE_RAIDERS:
|
||||
case RIDE_MODE_CIRCUS_SHOW:
|
||||
case RIDE_MODE_SPACE_RINGS:
|
||||
case RIDE_MODE_HAUNTED_HOUSE:
|
||||
case RIDE_MODE_CROOKED_HOUSE:
|
||||
vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_12;
|
||||
vehicle->velocity = 0;
|
||||
vehicle->var_2C = 0;
|
||||
vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS;
|
||||
vehicle->sub_state = 0;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN &&
|
||||
ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE &&
|
||||
ride->inspection_station == vehicle->current_station &&
|
||||
ride->mechanic_status != RIDE_MECHANIC_STATUS_4)
|
||||
RCT2_GLOBAL(0x00F64E35, uint8) = 0;
|
||||
|
||||
rct_ride_type* rideEntry = GET_RIDE_ENTRY(vehicle->ride_subtype);
|
||||
rct_ride_type_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type];
|
||||
|
||||
if (vehicle->sub_state == 0) {
|
||||
if (ride->mode == RIDE_MODE_RACE &&
|
||||
ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) {
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
if (vehicle->velocity <= 131940) {
|
||||
vehicle->var_2C = 3298;
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
sint32 velocity_diff = vehicle->velocity;
|
||||
if (velocity_diff >= 1572864)
|
||||
velocity_diff /= 8;
|
||||
else
|
||||
velocity_diff /= 16;
|
||||
|
||||
if (RCT2_GLOBAL(0x00F64E35, uint8) == 0) {
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
if (ride->num_circuits != 1) {
|
||||
if (vehicle->num_laps + 1 < ride->num_circuits) {
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
}
|
||||
vehicle->velocity -= velocity_diff;
|
||||
vehicle->var_2C = 0;
|
||||
}
|
||||
else {
|
||||
if (!(vehicleEntry->var_14 & (1 << 3)) &&
|
||||
vehicle->velocity >= -131940) {
|
||||
vehicle->var_2C = -3298;
|
||||
}
|
||||
|
||||
if (vehicle->velocity >= -131940) {
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
sint32 velocity_diff = vehicle->velocity;
|
||||
if (velocity_diff < -1572864)
|
||||
velocity_diff /= 8;
|
||||
else
|
||||
velocity_diff /= 16;
|
||||
|
||||
if (RCT2_GLOBAL(0x00F64E35, uint8) == 0) {
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
if (vehicle->num_laps + 1 < ride->num_circuits) {
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
if (vehicle->num_laps + 1 != ride->num_circuits) {
|
||||
vehicle->velocity -= velocity_diff;
|
||||
vehicle->var_2C = 0;
|
||||
goto loc_6D8E36;
|
||||
}
|
||||
|
||||
if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS &&
|
||||
ride->mode != RIDE_MODE_SHUTTLE &&
|
||||
ride->mode != RIDE_MODE_POWERED_LAUNCH) {
|
||||
vehicle->update_flags |= VEHICLE_UPDATE_FLAG_0;
|
||||
}
|
||||
else{
|
||||
vehicle->velocity -= velocity_diff;
|
||||
vehicle->var_2C = 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 flags;
|
||||
loc_6D8E36:
|
||||
flags = sub_6DAB4C(vehicle, NULL);
|
||||
if (flags & (1 << 7) &&
|
||||
RCT2_GLOBAL(0x00F64E35, uint8) == 0) {
|
||||
RCT2_CALLPROC_X(0x006DA059, 0, 0, 0, 0, (int)vehicle, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags & (1 << 0) &&
|
||||
RCT2_GLOBAL(0x00F64E35, uint8) == 0) {
|
||||
vehicle->status = VEHICLE_STATUS_DEPARTING;
|
||||
vehicle->sub_state = 1;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(flags & ((1 << 0) | (1 << 1) | (1 << 5)))) {
|
||||
if (vehicle->velocity > 98955)
|
||||
vehicle->var_C0 = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
vehicle->var_C0++;
|
||||
if (flags & (1 << 1) &&
|
||||
vehicleEntry->var_14 & (1 << 13) &&
|
||||
vehicle->var_C0 < 40){
|
||||
return;
|
||||
}
|
||||
|
||||
rct_map_element* mapElement = map_get_track_element_at(
|
||||
vehicle->track_x,
|
||||
vehicle->track_y,
|
||||
vehicle->track_z / 8
|
||||
);
|
||||
|
||||
vehicle->current_station = map_get_station(mapElement);
|
||||
vehicle->num_laps++;
|
||||
|
||||
if (vehicle->sub_state != 0) {
|
||||
if (vehicle->num_laps < ride->num_circuits) {
|
||||
vehicle->status = VEHICLE_STATUS_DEPARTING;
|
||||
vehicle->sub_state = 1;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
|
||||
if (vehicle->num_laps == ride->num_circuits &&
|
||||
vehicle->update_flags & VEHICLE_UPDATE_FLAG_12) {
|
||||
vehicle->status = VEHICLE_STATUS_DEPARTING;
|
||||
vehicle->sub_state = 1;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (ride->num_circuits != 1 &&
|
||||
vehicle->num_laps < ride->num_circuits) {
|
||||
vehicle->status = VEHICLE_STATUS_DEPARTING;
|
||||
vehicle->sub_state = 1;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((ride->mode == RIDE_MODE_UPWARD_LAUNCH ||
|
||||
ride->mode == RIDE_MODE_DOWNWARD_LAUNCH) &&
|
||||
vehicle->var_CE < 2) {
|
||||
audio_play_sound_at_location(
|
||||
SOUND_RIDE_LAUNCH_2,
|
||||
vehicle->x,
|
||||
vehicle->y,
|
||||
vehicle->z);
|
||||
vehicle->velocity = 0;
|
||||
vehicle->var_2C = 0;
|
||||
vehicle->status = VEHICLE_STATUS_DEPARTING;
|
||||
vehicle->sub_state = 1;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ride->mode == RIDE_MODE_RACE &&
|
||||
ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) {
|
||||
vehicle->status = VEHICLE_STATUS_DEPARTING;
|
||||
vehicle->sub_state = 1;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
return;
|
||||
}
|
||||
|
||||
vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_12;
|
||||
vehicle->velocity = 0;
|
||||
vehicle->var_2C = 0;
|
||||
vehicle->status = VEHICLE_STATUS_UNLOADING_PASSENGERS;
|
||||
vehicle->sub_state = 0;
|
||||
vehicle_invalidate_window(vehicle);
|
||||
}
|
||||
|
||||
/* rct2: 0x006D9820 */
|
||||
static void vehicle_update_travelling_boat(rct_vehicle* vehicle) {
|
||||
vehicle_check_if_missing(vehicle);
|
||||
|
|
Loading…
Reference in New Issue