diff --git a/Content.Server/Gatherable/Components/SoundOnGatherComponent.cs b/Content.Server/Gatherable/Components/SoundOnGatherComponent.cs new file mode 100644 index 0000000000..8471275e03 --- /dev/null +++ b/Content.Server/Gatherable/Components/SoundOnGatherComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Audio; +using Robust.Shared.Audio; + +namespace Content.Server.Gatherable.Components; + +/// +/// Plays the specified sound when this entity is gathered. +/// +[RegisterComponent, Access(typeof(GatherableSystem))] +public sealed class SoundOnGatherComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite), DataField("sound")] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Effects/break_stone.ogg") + { + Params = AudioParams.Default + .WithVariation(SharedContentAudioSystem.DefaultVariation) + .WithVolume(-3f), + }; +} diff --git a/Content.Server/Gatherable/GatherableSystem.cs b/Content.Server/Gatherable/GatherableSystem.cs index 84976bb4bc..5eaff020d5 100644 --- a/Content.Server/Gatherable/GatherableSystem.cs +++ b/Content.Server/Gatherable/GatherableSystem.cs @@ -43,14 +43,18 @@ public sealed partial class GatherableSystem : EntitySystem Gather(uid, args.User, component); } - public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, GatherableComponent? component = null, SoundSpecifier? sound = null) + public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, GatherableComponent? component = null) { if (!Resolve(gatheredUid, ref component)) return; + if (TryComp(gatheredUid, out var soundComp)) + { + _audio.PlayPvs(soundComp.Sound, Transform(gatheredUid).Coordinates); + } + // Complete the gathering process _destructible.DestroyEntity(gatheredUid); - _audio.PlayPvs(sound, gatheredUid); // Spawn the loot! if (component.MappedLoot == null) diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs index 4fbd90449f..73dc4b208c 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs @@ -1,4 +1,5 @@ using Content.Server.Shuttles.Components; +using Content.Shared.Audio; using Robust.Shared.Audio; using Robust.Shared.Map; using Robust.Shared.Physics.Dynamics; @@ -51,7 +52,7 @@ public sealed partial class ShuttleSystem var coordinates = new EntityCoordinates(ourXform.MapUid.Value, args.WorldPoint); var volume = MathF.Min(10f, 1f * MathF.Pow(jungleDiff, 0.5f) - 5f); - var audioParams = AudioParams.Default.WithVariation(0.05f).WithVolume(volume); + var audioParams = AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation).WithVolume(volume); _audio.Play(_shuttleImpactSound, Filter.Pvs(coordinates, rangeMultiplier: 4f, entityMan: EntityManager), coordinates, true, audioParams); } diff --git a/Content.Server/Toilet/ToiletSystem.cs b/Content.Server/Toilet/ToiletSystem.cs index 1177fdf1d7..91685640a7 100644 --- a/Content.Server/Toilet/ToiletSystem.cs +++ b/Content.Server/Toilet/ToiletSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Buckle; using Content.Server.Popups; using Content.Server.Storage.Components; using Content.Server.Storage.EntitySystems; +using Content.Shared.Audio; using Content.Shared.Body.Components; using Content.Shared.Body.Part; using Content.Shared.Buckle.Components; @@ -158,7 +159,7 @@ namespace Content.Server.Toilet return; component.IsSeatUp = !component.IsSeatUp; - _audio.PlayPvs(component.ToggleSound, uid, AudioParams.Default.WithVariation(0.05f)); + _audio.PlayPvs(component.ToggleSound, uid, AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation)); UpdateSprite(uid, component); } diff --git a/Content.Shared/Audio/SharedContentAudioSystem.cs b/Content.Shared/Audio/SharedContentAudioSystem.cs index 77f1ab87ec..7151ef2c17 100644 --- a/Content.Shared/Audio/SharedContentAudioSystem.cs +++ b/Content.Shared/Audio/SharedContentAudioSystem.cs @@ -6,6 +6,11 @@ public abstract class SharedContentAudioSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; + /// + /// Standard variation to use for sounds. + /// + public const float DefaultVariation = 0.05f; + public override void Initialize() { base.Initialize(); diff --git a/Content.Shared/Fluids/AbsorbentComponent.cs b/Content.Shared/Fluids/AbsorbentComponent.cs index 4966c8c5f6..8da715ce2f 100644 --- a/Content.Shared/Fluids/AbsorbentComponent.cs +++ b/Content.Shared/Fluids/AbsorbentComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Audio; using Content.Shared.FixedPoint; using Robust.Shared.Audio; using Robust.Shared.GameStates; @@ -23,18 +24,18 @@ public sealed class AbsorbentComponent : Component [DataField("pickupSound")] public SoundSpecifier PickupSound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg") { - Params = AudioParams.Default.WithVariation(0.05f), + Params = AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation), }; [DataField("transferSound")] public SoundSpecifier TransferSound = new SoundPathSpecifier("/Audio/Effects/Fluids/slosh.ogg") { - Params = AudioParams.Default.WithVariation(0.05f).WithVolume(-3f), + Params = AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation).WithVolume(-3f), }; public static readonly SoundSpecifier DefaultTransferSound = new SoundPathSpecifier("/Audio/Effects/Fluids/slosh.ogg") { - Params = AudioParams.Default.WithVariation(0.05f).WithVolume(-3f), + Params = AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation).WithVolume(-3f), }; } diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index cbf48432f9..bc64985544 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Actions; using Content.Shared.Administration.Logs; +using Content.Shared.Audio; using Content.Shared.CombatMode; using Content.Shared.Containers.ItemSlots; using Content.Shared.Damage; @@ -403,7 +404,7 @@ public abstract partial class SharedGunSystem : EntitySystem } if (playSound && TryComp(entity, out var cartridge)) { - Audio.PlayPvs(cartridge.EjectSound, entity, AudioParams.Default.WithVariation(0.05f).WithVolume(-1f)); + Audio.PlayPvs(cartridge.EjectSound, entity, AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation).WithVolume(-1f)); } } diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index 77a3e0cd0d..f9239f4dab 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -51,4 +51,9 @@ - files: ["falling.ogg"] license: "CC0-1.0" copyright: "Taken from MATRIXXX_ via freesound.org and mixed from stereo to mono." - source: "https://freesound.org/people/MATRIXXX_/sounds/415990/" \ No newline at end of file + source: "https://freesound.org/people/MATRIXXX_/sounds/415990/" + +- files: ["break_stone.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation" + source: "https://github.com/tgstation/tgstation/blob/e3a835b96043fad1269ee7b0c3a6cb340a466f3a/sound/effects/break_stone.ogg" \ No newline at end of file diff --git a/Resources/Audio/Effects/break_stone.ogg b/Resources/Audio/Effects/break_stone.ogg new file mode 100644 index 0000000000..64256cb8f9 Binary files /dev/null and b/Resources/Audio/Effects/break_stone.ogg differ diff --git a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml index 8d19f41e51..c69355f6df 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml @@ -7,6 +7,7 @@ suffix: Low Ore Yield description: A rocky asteroid. components: + - type: SoundOnGather - type: Gatherable whitelist: tags: @@ -63,10 +64,6 @@ suffix: higher ore yield description: An asteroid. components: - - type: Gatherable - whitelist: - tags: - - Pickaxe - type: OreVein oreChance: 0.33 oreRarityPrototypeId: RandomOreDistributionStandard @@ -103,10 +100,6 @@ suffix: higher ore yield description: An asteroid. components: - - type: Gatherable - whitelist: - tags: - - Pickaxe - type: OreVein oreChance: 0.33 oreRarityPrototypeId: RandomOreDistributionStandard @@ -118,6 +111,7 @@ parent: BaseStructure name: rock components: + - type: SoundOnGather - type: Gatherable whitelist: tags: