1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 19:13:07 +01:00

Part of #9473: vehicle_update_sound to Vehicle::UpdateSound

This commit is contained in:
hdpoliveira
2020-04-10 04:35:35 -03:00
parent 32b3448b92
commit 16d00bd204
2 changed files with 28 additions and 28 deletions

View File

@@ -58,7 +58,6 @@ static int32_t vehicle_update_motion_dodgems(Vehicle* vehicle);
static void vehicle_update_additional_animation(Vehicle* vehicle);
static bool vehicle_update_motion_collision_detection(
Vehicle* vehicle, int16_t x, int16_t y, int16_t z, uint16_t* otherVehicleIndex);
static void vehicle_update_sound(Vehicle* vehicle);
static SoundId vehicle_update_scream_sound(Vehicle* vehicle);
static void vehicle_kill_all_passengers(Vehicle* vehicle);
@@ -2045,7 +2044,7 @@ void Vehicle::Update()
break;
}
vehicle_update_sound(this);
UpdateSound();
}
/**
@@ -5454,7 +5453,7 @@ void Vehicle::UpdateCrash()
*
* rct2: 0x006D7888
*/
static void vehicle_update_sound(Vehicle* vehicle)
void Vehicle::UpdateSound()
{
// frictionVolume (bl) should be set before hand
uint8_t frictionVolume = 255;
@@ -5463,17 +5462,17 @@ static void vehicle_update_sound(Vehicle* vehicle)
SoundId screamId = SoundId::Null;
uint8_t screamVolume = 255;
auto ride = get_ride(vehicle->ride);
if (ride == nullptr)
auto curRide = get_ride(ride);
if (curRide == nullptr)
return;
auto rideEntry = get_ride_entry(vehicle->ride_subtype);
auto rideEntry = get_ride_entry(ride_subtype);
if (rideEntry == nullptr)
return;
rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle->vehicle_type];
rct_ride_entry_vehicle* vehicleEntry = &rideEntry->vehicles[vehicle_type];
int32_t ecx = abs(vehicle->velocity) - 0x10000;
int32_t ecx = abs(velocity) - 0x10000;
if (ecx >= 0)
{
frictionId = vehicleEntry->friction_sound_id;
@@ -5484,15 +5483,15 @@ static void vehicle_update_sound(Vehicle* vehicle)
switch (vehicleEntry->sound_range)
{
case 3:
screamId = vehicle->scream_sound_id;
screamId = scream_sound_id;
if (!(gCurrentTicks & 0x7F))
{
if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != SoundId::Null)
if (velocity < 0x40000 || scream_sound_id != SoundId::Null)
goto loc_6D7A97;
if ((scenario_rand() & 0xFFFF) <= 0x5555)
{
vehicle->scream_sound_id = SoundId::TrainWhistle;
scream_sound_id = SoundId::TrainWhistle;
screamVolume = 255;
break;
}
@@ -5503,15 +5502,15 @@ static void vehicle_update_sound(Vehicle* vehicle)
break;
case 4:
screamId = vehicle->scream_sound_id;
screamId = scream_sound_id;
if (!(gCurrentTicks & 0x7F))
{
if (vehicle->velocity < 0x40000 || vehicle->scream_sound_id != SoundId::Null)
if (velocity < 0x40000 || scream_sound_id != SoundId::Null)
goto loc_6D7A97;
if ((scenario_rand() & 0xFFFF) <= 0x5555)
{
vehicle->scream_sound_id = SoundId::Tram;
scream_sound_id = SoundId::Tram;
screamVolume = 255;
break;
}
@@ -5524,7 +5523,7 @@ static void vehicle_update_sound(Vehicle* vehicle)
default:
if ((vehicleEntry->flags & VEHICLE_ENTRY_FLAG_RIDERS_SCREAM))
{
screamId = vehicle_update_scream_sound(vehicle);
screamId = vehicle_update_scream_sound(this);
if (screamId == SoundId::NoScream)
screamId = SoundId::Null;
if (screamId == SoundId::Null)
@@ -5533,33 +5532,33 @@ static void vehicle_update_sound(Vehicle* vehicle)
}
loc_6D7A97:
vehicle->scream_sound_id = SoundId::Null;
if (ride->type < std::size(RideLiftData))
scream_sound_id = SoundId::Null;
if (curRide->type < std::size(RideLiftData))
{
// Get lift hill sound
screamId = RideLiftData[ride->type].sound_id;
screamId = RideLiftData[curRide->type].sound_id;
screamVolume = 243;
if (!(vehicle->sound2_flags & VEHICLE_SOUND2_FLAGS_LIFT_HILL))
if (!(sound2_flags & VEHICLE_SOUND2_FLAGS_LIFT_HILL))
screamId = SoundId::Null;
}
}
// Friction sound
auto soundIdVolume = sub_6D7AC0(vehicle->sound1_id, vehicle->sound1_volume, frictionId, frictionVolume);
vehicle->sound1_id = soundIdVolume.id;
vehicle->sound1_volume = soundIdVolume.volume;
auto soundIdVolume = sub_6D7AC0(sound1_id, sound1_volume, frictionId, frictionVolume);
sound1_id = soundIdVolume.id;
sound1_volume = soundIdVolume.volume;
// Scream sound
soundIdVolume = sub_6D7AC0(vehicle->sound2_id, vehicle->sound2_volume, screamId, screamVolume);
vehicle->sound2_id = soundIdVolume.id;
vehicle->sound2_volume = soundIdVolume.volume;
soundIdVolume = sub_6D7AC0(sound2_id, sound2_volume, screamId, screamVolume);
sound2_id = soundIdVolume.id;
sound2_volume = soundIdVolume.volume;
// Calculate Sound Vector (used for sound frequency calcs)
int32_t soundDirection = SpriteDirectionToSoundDirection[vehicle->sprite_direction];
int32_t soundVector = ((vehicle->velocity >> 14) * soundDirection) >> 14;
int32_t soundDirection = SpriteDirectionToSoundDirection[sprite_direction];
int32_t soundVector = ((velocity >> 14) * soundDirection) >> 14;
soundVector = std::clamp(soundVector, -127, 127);
vehicle->sound_vector_factor = soundVector & 0xFF;
sound_vector_factor = soundVector & 0xFF;
}
/**

View File

@@ -330,6 +330,7 @@ private:
void UpdateWaitingForCableLift();
void UpdateShowingFilm();
void UpdateDoingCircusShow();
void UpdateSound();
};
struct train_ref