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: