diff --git a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs
index 307a5e1986..126031dc6b 100644
--- a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs
+++ b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs
@@ -13,13 +13,13 @@ public sealed partial class EnsnareableComponent : Component
///
/// How much should this slow down the entities walk?
///
- [DataField]
+ [DataField, AutoNetworkedField]
public float WalkSpeed = 1.0f;
///
/// How much should this slow down the entities sprint?
///
- [DataField]
+ [DataField, AutoNetworkedField]
public float SprintSpeed = 1.0f;
///
diff --git a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs
index 94dad1dfff..7d78e72b24 100644
--- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs
+++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs
@@ -40,6 +40,12 @@ public sealed partial class EnsnaringComponent : Component
[DataField]
public float StaminaDamage = 55f;
+ ///
+ /// How many times can the ensnare be applied to the same target?
+ ///
+ [DataField]
+ public float MaxEnsnares = 1;
+
///
/// Should this ensnare someone when thrown?
///
diff --git a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs
index 9753756933..ad0a1841c2 100644
--- a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs
+++ b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs
@@ -259,23 +259,18 @@ public abstract class SharedEnsnareableSystem : EntitySystem
|| component.IgnoredTargets is not null && _entityWhitelist.IsValid(component.IgnoredTargets, target))
return false;
- // Need to insert before free legs check.
- Container.Insert(ensnare, ensnareable.Container);
+ var numEnsnares = ensnareable.Container.ContainedEntities.Count;
- var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count();
- var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count);
- var freeLegs = legs - ensnaredLegs;
-
- if (freeLegs > 0)
+ //Don't do anything if the maximum number of ensnares is applied.
+ if (numEnsnares >= component.MaxEnsnares)
return false;
- // Apply stamina damage to target if they weren't ensnared before.
- if (ensnareable.IsEnsnared != true)
+ Container.Insert(ensnare, ensnareable.Container);
+
+ // Apply stamina damage to target
+ if (TryComp(target, out var stamina))
{
- if (TryComp(target, out var stamina))
- {
- _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina);
- }
+ _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina);
}
component.Ensnared = target;
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
index dc781d4ada..5b42a3a9a8 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml
@@ -22,6 +22,7 @@
staminaDamage: 20 # WD EDIT: 0 -> 20
canThrowTrigger: true
canMoveBreakout: true
+ maxEnsnares: 1
- type: LandAtCursor
- type: LayDownOnCollide # WD EDIT