--- /dev/null
+namespace Content.Shared.Body.Events;
+
+/// <summary>
+/// Raised on an entity before they bleed to modify the amount.
+/// </summary>
+/// <param name="BleedAmount">The amount of blood the entity will lose.</param>
+/// <param name="BleedReductionAmount">The amount of bleed reduction that will happen.</param>
+[ByRefEvent]
+public record struct BleedModifierEvent(float BleedAmount, float BleedReductionAmount);
// 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.
--- /dev/null
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Traits.Assorted;
+
+/// <summary>
+/// This component is used for the Hemophilia Trait, it reduces the passive bleed stack reduction amount so entities with it bleed for longer.
+/// </summary>
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class HemophiliaComponent : Component
+{
+ /// <summary>
+ /// What multiplier should be applied to the BleedReduction when an entity bleeds?
+ /// </summary>
+ [DataField, AutoNetworkedField]
+ public float HemophiliaBleedReductionMultiplier = 0.33f;
+}
--- /dev/null
+using Content.Shared.Body.Events;
+
+namespace Content.Shared.Traits.Assorted;
+
+public sealed class HemophiliaSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ SubscribeLocalEvent<HemophiliaComponent, BleedModifierEvent>(OnBleedModifier);
+ }
+
+ private void OnBleedModifier(Entity<HemophiliaComponent> ent, ref BleedModifierEvent args)
+ {
+ args.BleedReductionAmount *= ent.Comp.HemophiliaBleedReductionMultiplier;
+ }
+}
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.
# traits
- BlackAndWhiteOverlay
- Clumsy
+ - Hemophilia
- ImpairedMobility
# - LegsParalyzed (you get healed)
- LightweightDrunk
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