diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index ea9772b0439..e17103682e6 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -427,6 +427,13 @@ private bool TryGetSound( var coordinates = xform.Coordinates; var distanceNeeded = mover.Sprinting ? StepSoundMoveDistanceRunning : StepSoundMoveDistanceWalking; + if (_entities.TryGetComponent(uid, out FootstepVolumeModifierComponent? volumeModifier)) + { + distanceNeeded *= mover.Sprinting + ? volumeModifier.SprintDistanceMultiplier + : volumeModifier.WalkDistanceMultiplier; + } + // Handle footsteps. if (!weightless) { diff --git a/Content.Shared/Traits/Assorted/Components/FootstepVolumeModifierComponent.cs b/Content.Shared/Traits/Assorted/Components/FootstepVolumeModifierComponent.cs index 3756ba4296f..8e0b33529ad 100644 --- a/Content.Shared/Traits/Assorted/Components/FootstepVolumeModifierComponent.cs +++ b/Content.Shared/Traits/Assorted/Components/FootstepVolumeModifierComponent.cs @@ -19,4 +19,16 @@ public sealed partial class FootstepVolumeModifierComponent : Component /// [DataField, AutoNetworkedField] public float WalkingModifier { get; set; } = 0f; + + /// + /// What to multiply the distance needed to hear sprinting by. + /// + [DataField, AutoNetworkedField] + public float SprintDistanceMultiplier { get; set; } = 1f; + + /// + /// What to multiply the distance needed to hear walking by. + /// + [DataField, AutoNetworkedField] + public float WalkDistanceMultiplier { get; set; } = 1f; } diff --git a/Resources/Prototypes/Traits/skills.yml b/Resources/Prototypes/Traits/skills.yml index fa0228ceb4a..92aa664078c 100644 --- a/Resources/Prototypes/Traits/skills.yml +++ b/Resources/Prototypes/Traits/skills.yml @@ -40,3 +40,5 @@ - type: FootstepVolumeModifier sprintingModifier: -10 walkingModifier: -10 + sprintDistanceMultiplier: 0.85 + walkDistanceMultiplier: 0.85