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