diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index de18b4b479..2756d2e573 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -5293,68 +5293,68 @@ static void vehicle_crash_on_land(Vehicle* vehicle) vehicle->crash_z = 0; } -static void vehicle_crash_on_water(Vehicle* vehicle) +void Vehicle::CrashOnWater() { - auto ride = get_ride(vehicle->ride); - if (ride == nullptr) + auto curRide = get_ride(ride); + if (curRide == nullptr) return; - if (ride->status == RIDE_STATUS_SIMULATING) + if (curRide->status == RIDE_STATUS_SIMULATING) { - vehicle_simulate_crash(vehicle); + vehicle_simulate_crash(this); return; } - vehicle->SetState(VEHICLE_STATUS_CRASHED, vehicle->sub_state); + SetState(VEHICLE_STATUS_CRASHED, sub_state); - if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) + if (!(curRide->lifecycle_flags & RIDE_LIFECYCLE_CRASHED)) { - auto frontVehicle = vehicle->GetHead(); - auto trainIndex = ride_get_train_index_from_vehicle(ride, frontVehicle->sprite_index); + auto frontVehicle = GetHead(); + auto trainIndex = ride_get_train_index_from_vehicle(curRide, frontVehicle->sprite_index); if (!trainIndex) { return; } - ride->Crash(*trainIndex); + curRide->Crash(*trainIndex); - if (ride->status != RIDE_STATUS_CLOSED) + if (curRide->status != RIDE_STATUS_CLOSED) { // We require this to execute right away during the simulation, always ignore network and queue. - auto gameAction = RideSetStatusAction(ride->id, RIDE_STATUS_CLOSED); + auto gameAction = RideSetStatusAction(curRide->id, RIDE_STATUS_CLOSED); GameActions::ExecuteNested(&gameAction); } } - ride->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; - ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; + curRide->lifecycle_flags |= RIDE_LIFECYCLE_CRASHED; + curRide->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAIN | RIDE_INVALIDATE_RIDE_LIST; - if (vehicle->IsHead()) + if (IsHead()) { - vehicle_kill_all_passengers(vehicle); + vehicle_kill_all_passengers(this); } - vehicle->sub_state = 2; - audio_play_sound_at_location(SoundId::Water1, { vehicle->x, vehicle->y, vehicle->z }); + sub_state = 2; + audio_play_sound_at_location(SoundId::Water1, { x, y, z }); - crash_splash_create(vehicle->x, vehicle->y, vehicle->z); - crash_splash_create(vehicle->x - 8, vehicle->y - 9, vehicle->z); - crash_splash_create(vehicle->x + 11, vehicle->y - 9, vehicle->z); - crash_splash_create(vehicle->x + 11, vehicle->y + 8, vehicle->z); - crash_splash_create(vehicle->x - 4, vehicle->y + 8, vehicle->z); + crash_splash_create(x, y, z); + crash_splash_create(x - 8, y - 9, z); + crash_splash_create(x + 11, y - 9, z); + crash_splash_create(x + 11, y + 8, z); + crash_splash_create(x - 4, y + 8, z); for (int32_t i = 0; i < 10; ++i) - crashed_vehicle_particle_create(vehicle->colours, vehicle->x - 4, vehicle->y + 8, vehicle->z); + crashed_vehicle_particle_create(colours, x - 4, y + 8, z); - vehicle->flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; - vehicle->animation_frame = 0; - vehicle->var_C8 = 0; - vehicle->sprite_width = 13; - vehicle->sprite_height_negative = 45; - vehicle->sprite_height_positive = 5; + flags |= SPRITE_FLAGS_IS_CRASHED_VEHICLE_SPRITE; + animation_frame = 0; + var_C8 = 0; + sprite_width = 13; + sprite_height_negative = 45; + sprite_height_positive = 5; - sprite_move(vehicle->x, vehicle->y, vehicle->z, vehicle); - vehicle->Invalidate(); + sprite_move(x, y, z, this); + Invalidate(); - vehicle->crash_z = -1; + crash_z = -1; } /** @@ -5410,7 +5410,7 @@ void Vehicle::UpdateCrash() zDiff = curVehicle->z - waterHeight; if (zDiff <= 0 && zDiff >= -20) { - vehicle_crash_on_water(curVehicle); + curVehicle->CrashOnWater(); continue; } } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index e88d7c9f98..f828c641cb 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -384,6 +384,7 @@ private: void UpdateVelocity(); bool OpenRestraints(); bool CloseRestraints(); + void CrashOnWater(); }; struct train_ref