From b77aa9a956c5b920aaa930ff4af58c64c24456b1 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek <1478678+Gymnasiast@users.noreply.github.com> Date: Fri, 4 Jul 2025 18:52:58 +0200 Subject: [PATCH] Small cleanup of sound range parameters --- src/openrct2/audio/Audio.h | 2 +- src/openrct2/object/RideObject.cpp | 6 +-- src/openrct2/ride/CarEntry.h | 4 +- src/openrct2/ride/RideData.cpp | 2 +- src/openrct2/ride/Vehicle.cpp | 38 ++++++++++--------- src/openrct2/ride/Vehicle.h | 14 +++---- .../scripting/bindings/object/ScObject.hpp | 2 +- 7 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/openrct2/audio/Audio.h b/src/openrct2/audio/Audio.h index 758c83dc1e..3edac36578 100644 --- a/src/openrct2/audio/Audio.h +++ b/src/openrct2/audio/Audio.h @@ -121,7 +121,7 @@ namespace OpenRCT2::Audio LiftWildMouse, LiftBM, TrackFrictionBM, - Scream8, + Scream8, // Blood-curdling, Haunted House-like scream Tram, DoorOpen, DoorClose, diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index 03032ea46b..5d3ac6fe86 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -417,7 +417,7 @@ void RideObject::ReadLegacyCar([[maybe_unused]] IReadObjectContext* context, ISt car->spinning_friction = stream->ReadValue(); car->friction_sound_id = stream->ReadValue(); car->ReversedCarIndex = stream->ReadValue(); - car->sound_range = stream->ReadValue(); + car->soundRange = stream->ReadValue(); car->double_sound_frequency = stream->ReadValue(); car->powered_acceleration = stream->ReadValue(); car->powered_max_speed = stream->ReadValue(); @@ -561,7 +561,7 @@ void RideObject::ReadJson(IReadObjectContext* context, json_t& root) car.flags = CAR_ENTRY_FLAG_SPINNING; car.PaintStyle = VEHICLE_VISUAL_FLAT_RIDE_OR_CAR_RIDE; car.friction_sound_id = OpenRCT2::Audio::SoundId::Null; - car.sound_range = 0xFF; + car.soundRange = SoundRange::none; car.draw_order = 6; // Shop item @@ -719,7 +719,7 @@ CarEntry RideObject::ReadJsonCar([[maybe_unused]] IReadObjectContext* context, j car.spinning_friction = Json::GetNumber(jCar["spinningFriction"]); car.friction_sound_id = Json::GetEnum(jCar["frictionSoundId"], OpenRCT2::Audio::SoundId::Null); car.ReversedCarIndex = Json::GetNumber(jCar["logFlumeReverserVehicleType"]); - car.sound_range = Json::GetNumber(jCar["soundRange"], 255); + car.soundRange = Json::GetEnum(jCar["soundRange"], SoundRange::none); car.double_sound_frequency = Json::GetNumber(jCar["doubleSoundFrequency"]); car.powered_acceleration = Json::GetNumber(jCar["poweredAcceleration"]); car.powered_max_speed = Json::GetNumber(jCar["poweredMaxSpeed"]); diff --git a/src/openrct2/ride/CarEntry.h b/src/openrct2/ride/CarEntry.h index 3e7322792f..7abc6007df 100644 --- a/src/openrct2/ride/CarEntry.h +++ b/src/openrct2/ride/CarEntry.h @@ -23,6 +23,8 @@ namespace OpenRCT2::Audio enum class SoundId : uint8_t; } +enum class SoundRange : uint8_t; + enum class CarEntryAnimation : uint8_t { None = 0, @@ -213,7 +215,7 @@ struct CarEntry uint8_t spinning_friction; OpenRCT2::Audio::SoundId friction_sound_id; // Only valid for front/default car of train uint8_t ReversedCarIndex; // When the car is reversed (using a turntable or reverser), it will be changed to this car. - uint8_t sound_range; + SoundRange soundRange; uint8_t double_sound_frequency; // (Doubles the velocity when working out the sound frequency {used on go karts}) uint8_t powered_acceleration; uint8_t powered_max_speed; diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 08ae7a49b1..382c7d189c 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -190,7 +190,7 @@ const CarEntry kCableLiftVehicle = { .spinning_friction = 255, .friction_sound_id = Audio::SoundId::LiftClassic, .ReversedCarIndex = 0, - .sound_range = 0, + .soundRange = SoundRange::screamsMisc, .double_sound_frequency = 0, .powered_acceleration = 0, .powered_max_speed = 0, diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index d2937d7ac4..07c5a61bc9 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -94,16 +94,16 @@ uint8_t _vehicleF64E2C; Vehicle* _vehicleFrontVehicle; CoordsXYZ _vehicleCurPosition; -static constexpr OpenRCT2::Audio::SoundId _screamSet0[] = { +static constexpr OpenRCT2::Audio::SoundId _screamSetMisc[] = { OpenRCT2::Audio::SoundId::Scream8, OpenRCT2::Audio::SoundId::Scream1, }; -static constexpr OpenRCT2::Audio::SoundId _screamSet1Wooden[] = { +static constexpr OpenRCT2::Audio::SoundId _screamSetWooden[] = { OpenRCT2::Audio::SoundId::Scream3, OpenRCT2::Audio::SoundId::Scream1, OpenRCT2::Audio::SoundId::Scream5, OpenRCT2::Audio::SoundId::Scream6, OpenRCT2::Audio::SoundId::Scream7, OpenRCT2::Audio::SoundId::Scream2, OpenRCT2::Audio::SoundId::Scream4, }; -static constexpr OpenRCT2::Audio::SoundId _screamSet2[] = { +static constexpr OpenRCT2::Audio::SoundId _screamSetSteel[] = { OpenRCT2::Audio::SoundId::Scream1, OpenRCT2::Audio::SoundId::Scream6, }; @@ -2528,8 +2528,8 @@ void Vehicle::UpdateDeparting() if (rideEntry->flags & RIDE_ENTRY_FLAG_PLAY_DEPART_SOUND) { - auto soundId = (rideEntry->Cars[0].sound_range == 4) ? OpenRCT2::Audio::SoundId::Tram - : OpenRCT2::Audio::SoundId::TrainDeparting; + auto soundId = (rideEntry->Cars[0].soundRange == SoundRange::tramBell) ? OpenRCT2::Audio::SoundId::Tram + : OpenRCT2::Audio::SoundId::TrainDeparting; OpenRCT2::Audio::Play3D(soundId, GetLocation()); } @@ -4884,9 +4884,9 @@ void Vehicle::UpdateSound() } const auto currentTicks = getGameState().currentTicks; - switch (carEntry.sound_range) + switch (carEntry.soundRange) { - case SOUND_RANGE_WHISTLE: + case SoundRange::steamWhistle: screamSound.id = scream_sound_id; if (!(currentTicks & 0x7F)) { @@ -4908,7 +4908,7 @@ void Vehicle::UpdateSound() screamSound.volume = 255; break; - case SOUND_RANGE_BELL: + case SoundRange::tramBell: screamSound.id = scream_sound_id; if (!(currentTicks & 0x7F)) { @@ -5032,16 +5032,16 @@ OpenRCT2::Audio::SoundId Vehicle::ProduceScreamSound(const int32_t totalNumPeeps auto r = ScenarioRand(); if (totalNumPeeps >= static_cast(r % 16)) { - switch (carEntry.sound_range) + switch (carEntry.soundRange) { - case SOUND_RANGE_SCREAMS_0: - scream_sound_id = _screamSet0[r % std::size(_screamSet0)]; + case SoundRange::screamsMisc: + scream_sound_id = _screamSetMisc[r % std::size(_screamSetMisc)]; break; - case SOUND_RANGE_SCREAMS_1_WOODEN_COASTERS: - scream_sound_id = _screamSet1Wooden[r % std::size(_screamSet1Wooden)]; + case SoundRange::screamsWoodenRollerCoaster: + scream_sound_id = _screamSetWooden[r % std::size(_screamSetWooden)]; break; - case SOUND_RANGE_SCREAMS_2: - scream_sound_id = _screamSet2[r % std::size(_screamSet2)]; + case SoundRange::screamSteelRollerCoaster: + scream_sound_id = _screamSetSteel[r % std::size(_screamSetSteel)]; break; default: scream_sound_id = OpenRCT2::Audio::SoundId::NoScream; @@ -8919,14 +8919,16 @@ void Vehicle::UpdateCrossings() const void Vehicle::Claxon() const { const auto* rideEntry = GetRideEntry(); - switch (rideEntry->Cars[vehicle_type].sound_range) + switch (rideEntry->Cars[vehicle_type].soundRange) { - case SOUND_RANGE_WHISTLE: + case SoundRange::steamWhistle: OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::TrainWhistle, { x, y, z }); break; - case SOUND_RANGE_BELL: + case SoundRange::tramBell: OpenRCT2::Audio::Play3D(OpenRCT2::Audio::SoundId::Tram, { x, y, z }); break; + default: + break; } } diff --git a/src/openrct2/ride/Vehicle.h b/src/openrct2/ride/Vehicle.h index a842d3dc14..d0b641671a 100644 --- a/src/openrct2/ride/Vehicle.h +++ b/src/openrct2/ride/Vehicle.h @@ -535,14 +535,14 @@ enum FRICTION_SOUND_NONE = 255 }; -enum +enum class SoundRange : uint8_t { - SOUND_RANGE_SCREAMS_0 = 0, - SOUND_RANGE_SCREAMS_1_WOODEN_COASTERS = 1, - SOUND_RANGE_SCREAMS_2 = 2, - SOUND_RANGE_WHISTLE = 3, - SOUND_RANGE_BELL = 4, - SOUND_RANGE_NONE = 255 + screamsMisc = 0, // Used by rides where the screams should not include rolling sounds. + screamsWoodenRollerCoaster = 1, + screamSteelRollerCoaster = 2, + steamWhistle = 3, + tramBell = 4, + none = 255, }; constexpr uint8_t kVehicleSeatPairFlag = 0x80; diff --git a/src/openrct2/scripting/bindings/object/ScObject.hpp b/src/openrct2/scripting/bindings/object/ScObject.hpp index e11bf731cd..e81c2e7a41 100644 --- a/src/openrct2/scripting/bindings/object/ScObject.hpp +++ b/src/openrct2/scripting/bindings/object/ScObject.hpp @@ -398,7 +398,7 @@ namespace OpenRCT2::Scripting auto entry = GetEntry(); if (entry != nullptr) { - return entry->sound_range; + return EnumValue(entry->soundRange); } return 0; }