diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs
new file mode 100644
index 0000000000..60f948f9db
--- /dev/null
+++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs
@@ -0,0 +1,58 @@
+using Content.Server.Shuttles.Components;
+using Robust.Shared.Audio;
+using Robust.Shared.Map;
+using Robust.Shared.Physics.Dynamics;
+using Robust.Shared.Physics.Events;
+using Robust.Shared.Player;
+
+namespace Content.Server.Shuttles.Systems;
+
+public sealed partial class ShuttleSystem
+{
+ ///
+ /// Minimum velocity difference between 2 bodies for a shuttle "impact" to occur.
+ ///
+ private const int MinimumImpactVelocity = 10;
+
+ private readonly SoundCollectionSpecifier _shuttleImpactSound = new("ShuttleImpactSound");
+
+ private void InitializeImpact()
+ {
+ SubscribeLocalEvent(OnShuttleCollide);
+ }
+
+ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref StartCollideEvent args)
+ {
+ var ourBody = args.OurFixture.Body;
+ var otherBody = args.OtherFixture.Body;
+
+ if (!HasComp(otherBody.Owner))
+ return;
+
+ // TODO: Would also be nice to have a continuous sound for scraping.
+ var ourXform = Transform(ourBody.Owner);
+
+ if (ourXform.MapUid == null)
+ return;
+
+ var otherXform = Transform(otherBody.Owner);
+
+ var ourPoint = ourXform.InvWorldMatrix.Transform(args.WorldPoint);
+ var otherPoint = otherXform.InvWorldMatrix.Transform(args.WorldPoint);
+
+ var ourVelocity = _physics.GetLinearVelocity(ourBody.Owner, ourPoint, ourBody, ourXform);
+ var otherVelocity = _physics.GetLinearVelocity(otherBody.Owner, otherPoint, otherBody, otherXform);
+ var jungleDiff = (ourVelocity - otherVelocity).Length;
+
+ if (jungleDiff < MinimumImpactVelocity)
+ {
+ return;
+ }
+
+ 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);
+
+ _audio.Play(_shuttleImpactSound, Filter.Pvs(coordinates, rangeMultiplier: 4f, entityMan: EntityManager), coordinates, audioParams);
+ }
+}
diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs
index cf69c7d932..4d8312d852 100644
--- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs
+++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs
@@ -17,6 +17,7 @@ namespace Content.Server.Shuttles.Systems
{
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly FixtureSystem _fixtures = default!;
+ [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
@@ -36,6 +37,7 @@ namespace Content.Server.Shuttles.Systems
InitializeEscape();
InitializeFTL();
InitializeIFF();
+ InitializeImpact();
SubscribeLocalEvent(OnShuttleAdd);
SubscribeLocalEvent(OnShuttleStartup);
diff --git a/Resources/Audio/Effects/Shuttle/shuttle_impact1.ogg b/Resources/Audio/Effects/Shuttle/shuttle_impact1.ogg
new file mode 100644
index 0000000000..cbfc3ceeeb
Binary files /dev/null and b/Resources/Audio/Effects/Shuttle/shuttle_impact1.ogg differ
diff --git a/Resources/Audio/Effects/Shuttle/shuttle_impact2.ogg b/Resources/Audio/Effects/Shuttle/shuttle_impact2.ogg
new file mode 100644
index 0000000000..d573f6ee18
Binary files /dev/null and b/Resources/Audio/Effects/Shuttle/shuttle_impact2.ogg differ
diff --git a/Resources/Audio/Effects/Shuttle/shuttle_impact3.ogg b/Resources/Audio/Effects/Shuttle/shuttle_impact3.ogg
new file mode 100644
index 0000000000..9a2d819a2a
Binary files /dev/null and b/Resources/Audio/Effects/Shuttle/shuttle_impact3.ogg differ
diff --git a/Resources/Prototypes/SoundCollections/shuttle.yml b/Resources/Prototypes/SoundCollections/shuttle.yml
new file mode 100644
index 0000000000..b3e2180771
--- /dev/null
+++ b/Resources/Prototypes/SoundCollections/shuttle.yml
@@ -0,0 +1,6 @@
+- type: soundCollection
+ id: ShuttleImpactSound
+ files:
+ - "/Audio/Effects/Shuttle/shuttle_impact1.ogg"
+ - "/Audio/Effects/Shuttle/shuttle_impact2.ogg"
+ - "/Audio/Effects/Shuttle/shuttle_impact3.ogg"