diff --git a/Content.Shared/Body/Events/BleedModifierEvent.cs b/Content.Shared/Body/Events/BleedModifierEvent.cs
new file mode 100644
index 0000000000..c836738d63
--- /dev/null
+++ b/Content.Shared/Body/Events/BleedModifierEvent.cs
@@ -0,0 +1,9 @@
+namespace Content.Shared.Body.Events;
+
+///
+/// Raised on an entity before they bleed to modify the amount.
+///
+/// The amount of blood the entity will lose.
+/// The amount of bleed reduction that will happen.
+[ByRefEvent]
+public record struct BleedModifierEvent(float BleedAmount, float BleedReductionAmount);
diff --git a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs
index 182cdb47d3..7db9f42280 100644
--- a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs
+++ b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs
@@ -81,10 +81,14 @@ public abstract class SharedBloodstreamSystem : EntitySystem
// as well as stop their bleeding to a certain extent.
if (bloodstream.BleedAmount > 0)
{
+ var ev = new BleedModifierEvent(bloodstream.BleedAmount, bloodstream.BleedReductionAmount);
+ RaiseLocalEvent(uid, ref ev);
+
// Blood is removed from the bloodstream at a 1-1 rate with the bleed amount
- TryModifyBloodLevel((uid, bloodstream), -bloodstream.BleedAmount);
+ TryModifyBloodLevel((uid, bloodstream), -ev.BleedAmount);
+
// Bleed rate is reduced by the bleed reduction amount in the bloodstream component.
- TryModifyBleedAmount((uid, bloodstream), -bloodstream.BleedReductionAmount);
+ TryModifyBleedAmount((uid, bloodstream), -ev.BleedReductionAmount);
}
// deal bloodloss damage if their blood level is below a threshold.
diff --git a/Content.Shared/Traits/Assorted/HemophiliaComponent.cs b/Content.Shared/Traits/Assorted/HemophiliaComponent.cs
new file mode 100644
index 0000000000..208883f11c
--- /dev/null
+++ b/Content.Shared/Traits/Assorted/HemophiliaComponent.cs
@@ -0,0 +1,16 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Traits.Assorted;
+
+///
+/// This component is used for the Hemophilia Trait, it reduces the passive bleed stack reduction amount so entities with it bleed for longer.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class HemophiliaComponent : Component
+{
+ ///
+ /// What multiplier should be applied to the BleedReduction when an entity bleeds?
+ ///
+ [DataField, AutoNetworkedField]
+ public float HemophiliaBleedReductionMultiplier = 0.33f;
+}
diff --git a/Content.Shared/Traits/Assorted/HemophiliaSystem.cs b/Content.Shared/Traits/Assorted/HemophiliaSystem.cs
new file mode 100644
index 0000000000..53f6609575
--- /dev/null
+++ b/Content.Shared/Traits/Assorted/HemophiliaSystem.cs
@@ -0,0 +1,16 @@
+using Content.Shared.Body.Events;
+
+namespace Content.Shared.Traits.Assorted;
+
+public sealed class HemophiliaSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnBleedModifier);
+ }
+
+ private void OnBleedModifier(Entity ent, ref BleedModifierEvent args)
+ {
+ args.BleedReductionAmount *= ent.Comp.HemophiliaBleedReductionMultiplier;
+ }
+}
diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl
index f4c51d863e..3895ce162d 100644
--- a/Resources/Locale/en-US/traits/traits.ftl
+++ b/Resources/Locale/en-US/traits/traits.ftl
@@ -66,5 +66,8 @@ trait-spanish-desc = Hola señor, donde esta la biblioteca.
trait-painnumbness-name = Numb
trait-painnumbness-desc = You lack any sense of feeling pain, being unaware of how hurt you may be.
+trait-hemophilia-name = Hemophilia
+trait-hemophilia-desc = Your body fails to make blood clots.
+
trait-impaired-mobility-name = Impaired Mobility
trait-impaired-mobility-desc = You have difficulty moving without a mobility aid.
diff --git a/Resources/Prototypes/Entities/Mobs/Player/clone.yml b/Resources/Prototypes/Entities/Mobs/Player/clone.yml
index 98d99d7321..5c59f82744 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/clone.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/clone.yml
@@ -16,6 +16,7 @@
# traits
- BlackAndWhiteOverlay
- Clumsy
+ - Hemophilia
- ImpairedMobility
# - LegsParalyzed (you get healed)
- LightweightDrunk
diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml
index 0bb6f0da3c..c5356149f2 100644
--- a/Resources/Prototypes/Traits/disabilities.yml
+++ b/Resources/Prototypes/Traits/disabilities.yml
@@ -84,6 +84,14 @@
components:
- type: PainNumbness
+- type: trait
+ id: Hemophilia
+ name: trait-hemophilia-name
+ description: trait-hemophilia-desc
+ category: Disabilities
+ components:
+ - type: Hemophilia
+
- type: trait
id: ImpairedMobility
name: trait-impaired-mobility-name