diff --git a/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs b/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs index 095b0daf384..8adb47ebb0a 100644 --- a/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs +++ b/Content.Shared/Clothing/Components/EmitsSoundOnMoveComponent.cs @@ -32,4 +32,22 @@ public sealed partial class EmitsSoundOnMoveComponent : Component /// [ViewVariables(VVAccess.ReadOnly)] public bool IsSlotValid = true; + + /// + /// If worn, how far the wearer has to walk in order to make a sound. + /// + [DataField] + public float DistanceWalking = 1.5f; + + /// + /// If worn, how far the wearer has to sprint in order to make a sound. + /// + [DataField] + public float DistanceSprinting = 2f; + + /// + /// Whether or not this item must be worn in order to make sounds. + /// + [DataField] + public bool RequiresWorn; } diff --git a/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs b/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs index 3224b5bca32..452a3c37053 100644 --- a/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/EmitsSoundOnMoveSystem.cs @@ -54,7 +54,8 @@ public override void Update(float frameTime) private void UpdateSound(EntityUid uid, EmitsSoundOnMoveComponent component) { - if (!_physicsQuery.TryGetComponent(uid, out var physics)) + if (!_physicsQuery.TryGetComponent(uid, out var physics) + || !_timing.IsFirstTimePredicted) return; // Space does not transmit sound @@ -70,11 +71,15 @@ private void UpdateSound(EntityUid uid, EmitsSoundOnMoveComponent component) _clothingQuery.TryGetComponent(uid, out var clothing) && clothing.InSlot != null && component.IsSlotValid; + + if (component.RequiresWorn && !isWorn) + return; + // If this entity is worn by another entity, use that entity's coordinates var coordinates = isWorn ? Transform(parent).Coordinates : Transform(uid).Coordinates; var distanceNeeded = (isWorn && _moverQuery.TryGetComponent(parent, out var mover) && mover.Sprinting) - ? 1.5f // The parent is a mob that is currently sprinting - : 2f; // The parent is not a mob or is not sprinting + ? component.DistanceWalking // The parent is a mob that is currently sprinting + : component.DistanceSprinting; // The parent is not a mob or is not sprinting if (!coordinates.TryDistance(EntityManager, component.LastPosition, out var distance) || distance > distanceNeeded) component.SoundDistance = distanceNeeded; diff --git a/Content.Shared/Psionics/Glimmer/GlimmerSystem.cs b/Content.Shared/Psionics/Glimmer/GlimmerSystem.cs index df7be34cc1e..1945bae295d 100644 --- a/Content.Shared/Psionics/Glimmer/GlimmerSystem.cs +++ b/Content.Shared/Psionics/Glimmer/GlimmerSystem.cs @@ -118,7 +118,7 @@ public void DeltaGlimmerInput(float delta) if (_enabled && delta != 0) { GlimmerInput += delta; - GlimmerOutput = 2000 / (1 + MathF.Pow(MathF.E, -.0022f * GlimmerInput)) - 1000; + GlimmerOutput = Math.Clamp(2000 / (1 + MathF.Pow(MathF.E, -.0022f * GlimmerInput)) - 1000, 0, 999.999999f); } } @@ -132,7 +132,7 @@ public void DeltaGlimmerOutput(float delta) if (_enabled && delta != 0) { GlimmerOutput += delta; - GlimmerInput = 2000 / (1 + MathF.Pow(MathF.E, -.0022f * GlimmerOutput)) - 1000; + GlimmerInput = Math.Max(2000 / (1 + MathF.Pow(MathF.E, -.0022f * GlimmerOutput)) - 1000, 0); } } diff --git a/Resources/Audio/Effects/Footsteps/attributions.yml b/Resources/Audio/Effects/Footsteps/attributions.yml index 603a379ab3d..2d3d9e038cf 100644 --- a/Resources/Audio/Effects/Footsteps/attributions.yml +++ b/Resources/Audio/Effects/Footsteps/attributions.yml @@ -88,3 +88,11 @@ license: "CC0-1.0" copyright: "Made by philRacoIndie freesound.org, modified by Skubman" source: "https://freesound.org/people/nhaudio/sounds/179203/" + +- files: + - tacsuit_step_00.ogg + - tacsuit_step_01.ogg + - tacsuit_step_02.ogg + license: "CC-BY-SA-3.0" + copyright: "Made by majormoth(Discord)" + source: "https://discord.com/channels/1301753657024319488/1332696230572331048/1335279751866351759" diff --git a/Resources/Audio/Effects/Footsteps/tacsuit_step_00.ogg b/Resources/Audio/Effects/Footsteps/tacsuit_step_00.ogg new file mode 100644 index 00000000000..343ee26ea2a Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/tacsuit_step_00.ogg differ diff --git a/Resources/Audio/Effects/Footsteps/tacsuit_step_01.ogg b/Resources/Audio/Effects/Footsteps/tacsuit_step_01.ogg new file mode 100644 index 00000000000..2209e86da5f Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/tacsuit_step_01.ogg differ diff --git a/Resources/Audio/Effects/Footsteps/tacsuit_step_02.ogg b/Resources/Audio/Effects/Footsteps/tacsuit_step_02.ogg new file mode 100644 index 00000000000..22dc965533b Binary files /dev/null and b/Resources/Audio/Effects/Footsteps/tacsuit_step_02.ogg differ diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 633a80c3169..b9d1642f8f3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -10997,3 +10997,39 @@ Entries: id: 6784 time: '2025-01-31T20:22:45.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1692 +- author: VMSolidus + changes: + - type: Fix + message: >- + Fixed an issue where Glimmer can reach infinite values under certain + conditions. + id: 6785 + time: '2025-01-31T23:42:34.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1694 +- author: VMSolidus and MajorMoth + changes: + - type: Add + message: Hardsuits now have sounds made when the wearer moves! + - type: Fix + message: >- + Fixed several bugs with EmitSoundOnMove. It no longer plays the same + sound 7 times in a row for the client. It can now differentiate between + items that must be worn to make sounds and otherwise. It can also have + variable distance needed to travel to make a sound. + - type: Add + message: >- + Hardsuits and Tacsuits are now separated into Light, Medium, and Heavy + categories, with each category having its own sound effects, mass, + throwing statistics, and don/doff time. Most hardsuits are Light. Most + Tacsuits are Medium. Some suits like Warden, Juggernaut, Nukie + Commander, and Mysta Bombsuit are heavy. + id: 6786 + time: '2025-02-01T17:46:07.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1698 +- author: dootythefrooty + changes: + - type: Fix + message: Fixed holopads being unable to be right clicked on. + id: 6787 + time: '2025-02-01T22:43:56.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1699 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml index 041a1482b88..36a132e88b1 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/hardsuits.yml @@ -1,6 +1,6 @@ # Standard Combat Hardsuits - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitCombatStandard name: combat hardsuit description: A purpose-built combat suit designed to protect its user against all manner of enemy combatants in low pressure environments. @@ -44,7 +44,7 @@ # Medical Combat Hardsuits - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitCombatMedical name: medical combat hardsuit description: A purpose-built combat suit designed to allow its user greater mobility for superior support of friendly units in active combat zones. @@ -88,7 +88,7 @@ # Riot Combat Hardsuits - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitCombatRiot name: riot combat hardsuit description: A purpose-built combat suit designed for crowd control against armed combatants in low pressure environments. @@ -132,7 +132,7 @@ # Advanced Combat Hardsuits - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitCombatAdvanced name: advanced combat hardsuit description: A purpose-built combat suit of second-generation design, providing unparalleled protection against all manner of kinetic forces in low pressure environments. diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 74561ef1975..96a5f77c5ee 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -205,6 +205,80 @@ - ItemMask restitution: 0.3 friction: 0.2 + - type: EmitsSoundOnMove + soundCollection: + collection: FootstepHardsuitLight + requiresWorn: true + distanceWalking: 2 + distanceSprinting: 3 + +- type: entity + abstract: true + parent: ClothingOuterHardsuitBase + id: ClothingOuterHardsuitBaseMedium + name: base hardsuit + components: + - type: EmitsSoundOnMove + soundCollection: + collection: FootstepHardsuitMedium + requiresWorn: true + distanceWalking: 2 + distanceSprinting: 3 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 600 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + - type: DamageOtherOnHit + damage: + types: + Blunt: 30 + staminaCost: 60 + soundHit: + collection: MetalThud + - type: Clothing + equipDelay: 4 # For stuff like standard Tacsuits and Heavy Hardsuits. + unequipDelay: 4 + +- type: entity + abstract: true + parent: ClothingOuterHardsuitBase + id: ClothingOuterHardsuitBaseHeavy + name: base hardsuit + components: + - type: EmitsSoundOnMove + soundCollection: + collection: FootstepHardsuitHeavy + requiresWorn: true + distanceWalking: 2 + distanceSprinting: 3 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 800 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + - type: DamageOtherOnHit + damage: + types: + Blunt: 45 + staminaCost: 110 + soundHit: + collection: MetalThud + - type: Clothing + equipDelay: 5 # For stuff like "Heavy" Tacsuits. + unequipDelay: 5 - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index 0590e41e6b5..5966c3f579a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -222,7 +222,7 @@ - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitMaxim name: salvager maxim hardsuit description: Fire. Heat. These things forge great weapons, they also forge great salvagers. @@ -258,7 +258,7 @@ #Security Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitSecurity name: security hardsuit description: A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor. @@ -290,7 +290,7 @@ #Brigmedic Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitBrigmedic name: corpsman hardsuit # DeltaV - rename brigmedic to corpsman description: Special hardsuit of the guardian angel of the brig. It is the medical version of the security hardsuit. # I will fix the rest of this entry later when I resprite sec suits @@ -319,7 +319,7 @@ #Warden's Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitWarden name: warden's hardsuit description: A specialized riot suit geared to combat low pressure environments. @@ -351,7 +351,7 @@ #Captain's Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitCap name: captain's armored spacesuit description: A formal armored spacesuit, made for the station's captain. @@ -387,7 +387,7 @@ #Chief Engineer's Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitEngineeringWhite name: chief engineer's hardsuit description: A special hardsuit that protects against hazardous, low pressure environments, made for the chief engineer of the station. @@ -457,7 +457,7 @@ #Research Director's Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitRd name: experimental research hardsuit description: A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor. @@ -590,13 +590,13 @@ clothingPrototype: ClothingHeadHelmetHardsuitShanlinUnpainted - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitSyndie name: blood-red hardsuit description: A heavily armored hardsuit designed for work in special operations. Property of Gorlex Marauders. components: - type: Sprite - sprite: Clothing/OuterClothing/Hardsuits/syndicate-base.rsi + sprite: Clothing/OuterClothing/Hardsuits/syndicate.rsi - type: Item size: Huge - type: Clothing @@ -653,7 +653,7 @@ #Syndicate Elite Hardsuit - type: entity - parent: ClothingOuterHardsuitSyndie + parent: ClothingOuterHardsuitSyndieElite id: ClothingOuterHardsuitShiweiUnpainted name: Cybersun tacsuit description: A special suit that protects against hazardous, low pressure environments. Has radiation shielding. @@ -711,7 +711,7 @@ #Syndicate Commander Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitSyndieCommander name: syndicate commander hardsuit description: A bulked up version of the blood-red hardsuit, purpose-built for the commander of a syndicate operative squad. Has significantly improved armor for those deadly front-lines firefights. @@ -745,7 +745,7 @@ #Cybersun Juggernaut Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitJuggernaut name: cybersun juggernaut suit description: A suit made by the cutting edge R&D department at cybersun to be hyper resilient. @@ -1015,7 +1015,7 @@ #Deathsquad - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseHeavy id: ClothingOuterHardsuitDeathsquad name: death squad hardsuit description: An advanced hardsuit favored by commandos for use in special operations. @@ -1051,7 +1051,7 @@ #CBURN Hardsuit - type: entity - parent: ClothingOuterHardsuitBase + parent: ClothingOuterHardsuitBaseMedium id: ClothingOuterHardsuitCBURN name: CBURN exosuit description: A lightweight yet strong exosuit used for special cleanup operations. diff --git a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml index 84ecb085530..234652ed40f 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml @@ -16,7 +16,8 @@ - SubfloorMask layer: - LowImpassable - hard: false + - type: Physics + canCollide: False - type: ApcPowerReceiver powerLoad: 300 - type: StationAiVision @@ -90,7 +91,7 @@ - type: WiresVisuals - type: Wires boardName: wires-board-name-holopad - layoutId: Holopad + layoutId: Holopad - type: Destructible thresholds: - trigger: @@ -104,7 +105,7 @@ node: machineFrame - !type:DoActsBehavior acts: ["Destruction"] - + - type: entity name: long-range holopad description: "A floor-mounted device for projecting holographic images to similar devices that are far away." @@ -117,7 +118,7 @@ - Map - Unlimited ignoreTelephonesOnSameGrid: true - + - type: entity name: quantum entangling holopad description: "An floor-mounted device for projecting holographic images to similar devices at extreme distances." @@ -151,7 +152,7 @@ id: HolopadHologram name: hologram categories: [ HideSpawnMenu ] - suffix: DO NOT MAP + suffix: DO NOT MAP components: - type: Transform anchored: true @@ -179,4 +180,4 @@ scrollRate: 0.125 - type: Tag tags: - - HideContextMenu \ No newline at end of file + - HideContextMenu diff --git a/Resources/Prototypes/SoundCollections/footsteps.yml b/Resources/Prototypes/SoundCollections/footsteps.yml index 66ee06dccbb..bc4fea720fc 100644 --- a/Resources/Prototypes/SoundCollections/footsteps.yml +++ b/Resources/Prototypes/SoundCollections/footsteps.yml @@ -220,3 +220,18 @@ - /Audio/Effects/Footsteps/highheels3.ogg - /Audio/Effects/Footsteps/highheels4.ogg - /Audio/Effects/Footsteps/highheels5.ogg + +- type: soundCollection + id: FootstepHardsuitLight + files: + - /Audio/Effects/Footsteps/tacsuit_step_01.ogg + +- type: soundCollection + id: FootstepHardsuitMedium + files: + - /Audio/Effects/Footsteps/tacsuit_step_02.ogg + +- type: soundCollection + id: FootstepHardsuitHeavy + files: + - /Audio/Effects/Footsteps/tacsuit_step_00.ogg