diff --git a/Content.Server/GameObjects/Components/Sound/EmitSoundOnUseComponent].cs b/Content.Server/GameObjects/Components/Sound/EmitSoundOnUseComponent.cs similarity index 68% rename from Content.Server/GameObjects/Components/Sound/EmitSoundOnUseComponent].cs rename to Content.Server/GameObjects/Components/Sound/EmitSoundOnUseComponent.cs index 96059435a7..0d01ce2bb9 100644 --- a/Content.Server/GameObjects/Components/Sound/EmitSoundOnUseComponent].cs +++ b/Content.Server/GameObjects/Components/Sound/EmitSoundOnUseComponent.cs @@ -1,4 +1,5 @@ using Content.Server.GameObjects.EntitySystems; +using Content.Shared.Audio; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; @@ -16,17 +17,24 @@ namespace Content.Server.GameObjects.Components.Sound public override string Name => "EmitSoundOnUse"; public string _soundName; + public float _pitchVariation; public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); - serializer.DataField(ref _soundName, "sound", ""); + serializer.DataField(ref _soundName, "sound", string.Empty); + serializer.DataField(ref _pitchVariation, "variation", 0.0f); } bool IUse.UseEntity(UseEntityEventArgs eventArgs) { if (!string.IsNullOrWhiteSpace(_soundName)) { + if (_pitchVariation > 0.0) + { + Owner.GetComponent().Play(_soundName, AudioHelpers.WithVariation(_pitchVariation).WithVolume(-2f)); + return true; + } Owner.GetComponent().Play(_soundName, AudioParams.Default.WithVolume(-2f)); return true; } diff --git a/Content.Shared/Audio/AudioHelpers.cs b/Content.Shared/Audio/AudioHelpers.cs new file mode 100644 index 0000000000..f6a920f479 --- /dev/null +++ b/Content.Shared/Audio/AudioHelpers.cs @@ -0,0 +1,22 @@ +using System; +using Content.Shared.GameObjects.Components.Sound; +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Random; + +namespace Content.Shared.Audio +{ + public static class AudioHelpers{ + /// + /// Returns a random pitch. + /// + public static AudioParams WithVariation(float amplitude) + { + var scale = (float)(IoCManager.Resolve().NextGaussian(1, amplitude)); + return AudioParams.Default.WithPitchScale(scale); + } + } +} diff --git a/Resources/Prototypes/Entities/Items/bike_horn.yml b/Resources/Prototypes/Entities/Items/bike_horn.yml index 51d72315ae..8314634c1c 100644 --- a/Resources/Prototypes/Entities/Items/bike_horn.yml +++ b/Resources/Prototypes/Entities/Items/bike_horn.yml @@ -20,6 +20,7 @@ - type: Sound - type: EmitSoundOnUse sound: /Audio/items/bikehorn.ogg + variation: 0.2 - type: UseDelay delay: 0.5