From 8589f52bd55d66adf4945b290e6766f5905e461f Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Tue, 17 May 2022 13:49:07 +1000 Subject: [PATCH] More dynamic melee sounds (#8207) --- Content.Client/Entry/IgnoredComponents.cs | 1 + .../Melee/Components/MeleeSoundComponent.cs | 33 +++++ .../Melee/Components/MeleeWeaponComponent.cs | 2 +- .../Weapon/Melee/MeleeWeaponSystem.cs | 122 ++++++++++++++---- Resources/Audio/Weapons/dodgeball.ogg | Bin 0 -> 5306 bytes Resources/Audio/Weapons/grille_hit.ogg | Bin 0 -> 9181 bytes Resources/Audio/Weapons/licenses.txt | 7 + Resources/Audio/Weapons/slash.ogg | Bin 0 -> 7129 bytes Resources/Audio/Weapons/tap.ogg | Bin 0 -> 6592 bytes .../Entities/Objects/Misc/kudzu.yml | 5 + .../Entities/Objects/Power/lights.yml | 5 + .../Structures/Doors/Airlocks/airlocks.yml | 13 +- .../Doors/Airlocks/base_structureairlocks.yml | 5 + .../Doors/Windoors/base_structurewindoors.yml | 5 + .../Entities/Structures/Furniture/toilet.yml | 5 + .../Computers/base_structurecomputers.yml | 5 + .../Structures/Power/Generation/solar.yml | 5 + .../Entities/Structures/Storage/storage.yml | 5 + .../Structures/Wallmounts/Signs/bar_sign.yml | 5 + .../Structures/Wallmounts/fireaxe_cabinet.yml | 5 + .../Structures/Wallmounts/lighting.yml | 5 + .../Entities/Structures/Walls/grille.yml | 5 + .../Entities/Structures/Windows/window.yml | 5 + 23 files changed, 215 insertions(+), 28 deletions(-) create mode 100644 Content.Server/Weapon/Melee/Components/MeleeSoundComponent.cs create mode 100644 Resources/Audio/Weapons/dodgeball.ogg create mode 100644 Resources/Audio/Weapons/grille_hit.ogg create mode 100644 Resources/Audio/Weapons/licenses.txt create mode 100644 Resources/Audio/Weapons/slash.ogg create mode 100644 Resources/Audio/Weapons/tap.ogg diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index a40b695885..12aa84413b 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -345,6 +345,7 @@ namespace Content.Client.Entry "Artifact", "RandomArtifactSprite", "EnergySword", + "MeleeSound", "DoorRemote", "InteractionPopup", "HealthAnalyzer", diff --git a/Content.Server/Weapon/Melee/Components/MeleeSoundComponent.cs b/Content.Server/Weapon/Melee/Components/MeleeSoundComponent.cs new file mode 100644 index 0000000000..0a338b16de --- /dev/null +++ b/Content.Server/Weapon/Melee/Components/MeleeSoundComponent.cs @@ -0,0 +1,33 @@ +using Content.Shared.Damage.Prototypes; +using Content.Shared.Sound; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; + +namespace Content.Server.Weapon.Melee.Components; + +/// +/// Plays the specified sound upon receiving damage of the specified type. +/// +[RegisterComponent] +public sealed class MeleeSoundComponent : Component +{ + /// + /// Specified sounds to apply when the entity takes damage with the specified group. + /// Will fallback to defaults if none specified. + /// + [DataField("soundGroups", + customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] + public Dictionary? SoundGroups; + + /// + /// Specified sounds to apply when the entity takes damage with the specified type. + /// Will fallback to defaults if none specified. + /// + [DataField("soundTypes", + customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] + public Dictionary? SoundTypes; + + /// + /// Sound that plays if no damage is done. + /// + [DataField("noDamageSound")] public SoundSpecifier? NoDamageSound; +} diff --git a/Content.Server/Weapon/Melee/Components/MeleeWeaponComponent.cs b/Content.Server/Weapon/Melee/Components/MeleeWeaponComponent.cs index cf1786fe9e..6841c91b3a 100644 --- a/Content.Server/Weapon/Melee/Components/MeleeWeaponComponent.cs +++ b/Content.Server/Weapon/Melee/Components/MeleeWeaponComponent.cs @@ -9,7 +9,7 @@ namespace Content.Server.Weapon.Melee.Components { [ViewVariables(VVAccess.ReadWrite)] [DataField("hitSound")] - public SoundSpecifier HitSound { get; set; } = new SoundCollectionSpecifier("GenericHit"); + public SoundSpecifier? HitSound; [ViewVariables(VVAccess.ReadWrite)] [DataField("missSound")] diff --git a/Content.Server/Weapon/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapon/Melee/MeleeWeaponSystem.cs index 712a8212f8..98f1ed2f2e 100644 --- a/Content.Server/Weapon/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapon/Melee/MeleeWeaponSystem.cs @@ -10,8 +10,8 @@ using Content.Shared.Damage; using Content.Shared.Sound; using Content.Shared.Audio; using Content.Shared.Database; +using Content.Shared.FixedPoint; using Content.Shared.Hands; -using Content.Shared.Interaction; using Content.Shared.Physics; using Content.Shared.Weapons.Melee; using Robust.Shared.Audio; @@ -19,18 +19,22 @@ using Robust.Shared.Containers; using Robust.Shared.Map; using Robust.Shared.Physics; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Server.Weapon.Melee { public sealed class MeleeWeaponSystem : EntitySystem { - [Dependency] private IGameTiming _gameTiming = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private SolutionContainerSystem _solutionsSystem = default!; + [Dependency] private readonly SolutionContainerSystem _solutionsSystem = default!; [Dependency] private readonly AdminLogSystem _logSystem = default!; [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; + private const float DamagePitchVariation = 0.15f; + public override void Initialize() { base.Initialize(); @@ -73,7 +77,7 @@ namespace Content.Server.Weapon.Melee if (curTime < comp.CooldownEnd || args.Target == null) return; - var location = EntityManager.GetComponent(args.User).Coordinates; + var location = Transform(args.User).Coordinates; var diff = args.ClickLocation.ToMapPos(EntityManager) - location.ToMapPos(EntityManager); var angle = Angle.FromWorldVec(diff); @@ -103,19 +107,12 @@ namespace Content.Server.Weapon.Melee $"{ToPrettyString(args.User):user} melee attacked {ToPrettyString(args.Target.Value):target} using {ToPrettyString(args.Used):used} and dealt {damageResult.Total:damage} damage"); } - if (hitEvent.HitSoundOverride != null) - { - SoundSystem.Play(Filter.Pvs(owner), hitEvent.HitSoundOverride.GetSound(), target, AudioHelpers.WithVariation(0.25f)); - } - else - { - SoundSystem.Play(Filter.Pvs(owner), comp.HitSound.GetSound(), target); - } + PlayHitSound(target, GetHighestDamageSound(modifiedDamage), hitEvent.HitSoundOverride, comp.HitSound); } } else { - SoundSystem.Play(Filter.Pvs(owner), comp.MissSound.GetSound(), args.User); + SoundSystem.Play(Filter.Pvs(owner, entityManager: EntityManager), comp.MissSound.GetSound(), args.User); return; } @@ -161,24 +158,20 @@ namespace Content.Server.Weapon.Melee if (!hitEvent.Handled) { + var modifiedDamage = DamageSpecifier.ApplyModifierSets(comp.Damage + hitEvent.BonusDamage, hitEvent.ModifiersList); + if (entities.Count != 0) { - if (hitEvent.HitSoundOverride != null) - { - SoundSystem.Play(Filter.Pvs(owner), hitEvent.HitSoundOverride.GetSound(), Transform(entities.First()).Coordinates); - } - else - { - SoundSystem.Play(Filter.Pvs(owner), comp.HitSound.GetSound(), Transform(entities.First()).Coordinates); - } + var target = entities.First(); + TryComp(target, out var meleeWeapon); + + PlayHitSound(target, GetHighestDamageSound(modifiedDamage), hitEvent.HitSoundOverride, meleeWeapon?.HitSound); } else { SoundSystem.Play(Filter.Pvs(owner), comp.MissSound.GetSound(), Transform(args.User).Coordinates); } - var modifiedDamage = DamageSpecifier.ApplyModifierSets(comp.Damage + hitEvent.BonusDamage, hitEvent.ModifiersList); - foreach (var entity in hitEntities) { RaiseLocalEvent(entity, new AttackedEvent(args.Used, args.User, args.ClickLocation)); @@ -203,6 +196,89 @@ namespace Content.Server.Weapon.Melee RaiseLocalEvent(owner, new RefreshItemCooldownEvent(comp.LastAttackTime, comp.CooldownEnd), false); } + private string? GetHighestDamageSound(DamageSpecifier modifiedDamage) + { + var groups = modifiedDamage.GetDamagePerGroup(_protoManager); + + // Use group if it's exclusive, otherwise fall back to type. + if (groups.Count == 1) + { + return groups.Keys.First(); + } + + var highestDamage = FixedPoint2.Zero; + string? highestDamageType = null; + + foreach (var (type, damage) in modifiedDamage.DamageDict) + { + if (damage <= highestDamage) continue; + highestDamageType = type; + } + + return highestDamageType; + } + + private void PlayHitSound(EntityUid target, string? type, SoundSpecifier? hitSoundOverride, SoundSpecifier? hitSound) + { + var playedSound = false; + + // Play sound based off of highest damage type. + if (TryComp(target, out var damageSoundComp)) + { + if (type == null && damageSoundComp.NoDamageSound != null) + { + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), damageSoundComp.NoDamageSound.GetSound(), target, AudioHelpers.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else if (type != null && damageSoundComp.SoundTypes?.TryGetValue(type, out var damageSoundType) == true) + { + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), damageSoundType!.GetSound(), target, AudioHelpers.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else if (type != null && damageSoundComp.SoundGroups?.TryGetValue(type, out var damageSoundGroup) == true) + { + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), damageSoundGroup!.GetSound(), target, AudioHelpers.WithVariation(DamagePitchVariation)); + playedSound = true; + } + } + + // Use weapon sounds if the thing being hit doesn't specify its own sounds. + if (!playedSound) + { + if (hitSoundOverride != null) + { + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), hitSoundOverride.GetSound(), target, AudioHelpers.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else if (hitSound != null) + { + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), hitSound.GetSound(), target); + playedSound = true; + } + } + + // Fallback to generic sounds. + if (!playedSound) + { + switch (type) + { + // Unfortunately heat returns caustic group so can't just use the damagegroup in that instance. + case "Burn": + case "Heat": + case "Cold": + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), "/Audio/Items/welder.ogg", target); + break; + // No damage, fallback to tappies + case null: + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), "/Audio/Weapons/tap.ogg", target); + break; + case "Brute": + SoundSystem.Play(Filter.Pvs(target, entityManager: EntityManager), "/Audio/Weapons/smash.ogg", target); + break; + } + } + } + private HashSet ArcRayCast(Vector2 position, Angle angle, float arcWidth, float range, MapId mapId, EntityUid ignore) { var widthRad = Angle.FromDegrees(arcWidth); diff --git a/Resources/Audio/Weapons/dodgeball.ogg b/Resources/Audio/Weapons/dodgeball.ogg new file mode 100644 index 0000000000000000000000000000000000000000..878d923a8dfdd149c441b43eca2e1ec1496ba4eb GIT binary patch literal 5306 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Weapons/grille_hit.ogg b/Resources/Audio/Weapons/grille_hit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0dc6c33367f51db38c542d0706d6c86ef51ad3bd GIT binary patch literal 9181 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Weapons/licenses.txt b/Resources/Audio/Weapons/licenses.txt new file mode 100644 index 0000000000..747730fba5 --- /dev/null +++ b/Resources/Audio/Weapons/licenses.txt @@ -0,0 +1,7 @@ +dodgeball.ogg taken from https://github.com/tgstation/tgstation/blob/5d264fbea0124e5af511af3fed24203e196d108b/sound/items/dodgeball.ogg under CC BY-SA 3.0 + +grille_hit.ogg taken from https://github.com/tgstation/tgstation/blob/803ca4537df35cf252b056d8460d510be8a4f353/sound/effects/grillehit.ogg under CC BY-SA 3.0 + +slash.ogg taken from https://github.com/tgstation/tgstation/blob/5d264fbea0124e5af511af3fed24203e196d108b/sound/weapons/slash.ogg under CC BY-SA 3.0 + +tap.ogg taken from https://github.com/tgstation/tgstation/blob/803ca4537df35cf252b056d8460d510be8a4f353/sound/weapons/tap.ogg under CC BY-SA 3.0 \ No newline at end of file diff --git a/Resources/Audio/Weapons/slash.ogg b/Resources/Audio/Weapons/slash.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ad357891eb7d924ab5019cb95161f8e84a545b54 GIT binary patch literal 7129 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Weapons/tap.ogg b/Resources/Audio/Weapons/tap.ogg new file mode 100644 index 0000000000000000000000000000000000000000..711cb0ac386e3ff8066c04a7979fbae554b24669 GIT binary patch literal 6592 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 HA|&@eV+2Ls literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index 69649d4fe7..5ec243612f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -7,6 +7,11 @@ snap: - Wall components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" - type: Sprite sprite: Objects/Misc/kudzu.rsi state: kudzu_11 diff --git a/Resources/Prototypes/Entities/Objects/Power/lights.yml b/Resources/Prototypes/Entities/Objects/Power/lights.yml index 7abb8e5c1f..39949c5d96 100644 --- a/Resources/Prototypes/Entities/Objects/Power/lights.yml +++ b/Resources/Prototypes/Entities/Objects/Power/lights.yml @@ -3,6 +3,11 @@ id: BaseLightbulb abstract: true components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: Sprite netsync: false sprite: Objects/Power/light_bulb.rsi diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml index 2ff88c46cb..2e420304a0 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -13,7 +13,7 @@ components: - type: Sprite sprite: Structures/Doors/Airlocks/Standard/engineering.rsi - + - type: entity parent: Airlock id: AirlockAtmospherics @@ -21,7 +21,7 @@ components: - type: Sprite sprite: Structures/Doors/Airlocks/Standard/atmospherics.rsi - + - type: entity parent: Airlock id: AirlockCargo @@ -85,6 +85,11 @@ parent: Airlock name: glass airlock components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: Door occludes: false - type: Occluder @@ -116,7 +121,7 @@ sprite: Structures/Doors/Airlocks/Glass/engineering.rsi - type: PaintableAirlock group: Glass - + - type: entity parent: AirlockGlass id: AirlockAtmosphericsGlass @@ -125,7 +130,7 @@ - type: Sprite sprite: Structures/Doors/Airlocks/Glass/atmospherics.rsi - type: PaintableAirlock - group: Glass + group: Glass - type: entity parent: AirlockGlass diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index caad086b62..c2adffdca7 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -4,6 +4,11 @@ name: airlock description: It opens, it closes, and maybe crushes you. components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/smash.ogg" - type: InteractionOutline - type: Sprite netsync: false diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index 661e4fafa9..47c77070c1 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -5,6 +5,11 @@ placement: mode: SnapgridCenter components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: InteractionOutline - type: Physics - type: Fixtures diff --git a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml index bacce5ec45..593a1efc62 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml @@ -5,6 +5,11 @@ parent: SeatBase description: The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean. components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" - type: Anchorable - type: Sprite sprite: Structures/Furniture/toilet.rsi diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index 69c555d729..08a5a1c43b 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -6,6 +6,11 @@ placement: mode: SnapgridCenter components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: Construction graph: Computer node: computer diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml index a9fb711db1..5fa17d3641 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/solar.yml @@ -5,6 +5,11 @@ placement: mode: SnapgridCenter components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: Clickable - type: InteractionOutline - type: Transform diff --git a/Resources/Prototypes/Entities/Structures/Storage/storage.yml b/Resources/Prototypes/Entities/Structures/Storage/storage.yml index 7b75330bf3..229986682a 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/storage.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/storage.yml @@ -4,6 +4,11 @@ name: rack description: A rack for storing things on. components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/dodgeball.ogg" - type: Construction graph: Rack node: Rack diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml index 407293aea4..00a3e2c876 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml @@ -3,6 +3,11 @@ parent: BaseStructure name: bar sign components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: WallMount - type: Sprite drawdepth: Objects diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml index 3d75006e41..84760fec9c 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/fireaxe_cabinet.yml @@ -3,6 +3,11 @@ name: fire axe cabinet description: There is a small label that reads "For Emergency use only" along with details for safe use of the axe. As if. components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: WallMount - type: Clickable - type: InteractionOutline diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml index ed670d3ea8..0262610616 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/lighting.yml @@ -4,6 +4,11 @@ description: "An unpowered light." suffix: Unpowered components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: Transform anchored: true - type: Clickable diff --git a/Resources/Prototypes/Entities/Structures/Walls/grille.yml b/Resources/Prototypes/Entities/Structures/Walls/grille.yml index 6aabe2102c..ed31c9262b 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/grille.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/grille.yml @@ -4,6 +4,11 @@ name: grille description: A flimsy framework of iron rods. components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/grille_hit.ogg" - type: Tag tags: - RCDDeconstructWhitelist diff --git a/Resources/Prototypes/Entities/Structures/Windows/window.yml b/Resources/Prototypes/Entities/Structures/Windows/window.yml index 0969147bb5..ea58cf9a32 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/window.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/window.yml @@ -8,6 +8,11 @@ snap: - Window components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" - type: WallMount arc: 360 # interact despite grilles - type: Tag