diff --git a/Content.Client/_DV/Pain/PainSystem.cs b/Content.Client/_DV/Pain/PainSystem.cs new file mode 100644 index 0000000000..8633c0cdb7 --- /dev/null +++ b/Content.Client/_DV/Pain/PainSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared._DV.Pain; + +namespace Content.Client._DV.Pain; + +public abstract class PainSystem : SharedPainSystem; \ No newline at end of file diff --git a/Content.Server/_DV/EntityEffects/Effects/AffectsGlimmerEntityEffectSystem.cs b/Content.Server/_DV/EntityEffects/Effects/AffectsGlimmerEntityEffectSystem.cs deleted file mode 100644 index 0616b3c335..0000000000 --- a/Content.Server/_DV/EntityEffects/Effects/AffectsGlimmerEntityEffectSystem.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Content.Shared._DV.Pain; -using Content.Shared.EntityEffects; -using Content.Shared.StatusEffect; -using Robust.Shared.Prototypes; -using Content.Server.Abilities.Psionics; -using Content.Server.Psionics; -using Content.Shared.Psionics.Glimmer; - -namespace Content.Server._DV.EntityEffects.Effects; - -/// -/// Changes glimmer when reaction happens. -/// -/// -public sealed partial class AffectsGlimmerEntityEffectSystem : EntityEffectSystem -{ - [Dependency] private readonly GlimmerSystem _glimmer = default!; - protected override void Effect(Entity entity, ref EntityEffectEvent args) - { - _glimmer.Glimmer += args.Effect.Amount; - } -} - -/// -public sealed partial class AffectsGlimmer : EntityEffectBase -{ - /// - /// Amount that is added or subtracted from glimmer. - /// - [DataField] - public int Amount = 1; - - public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-change-glimmer-reaction-effect", ("chance", Probability), - ("amount", Amount)); -} diff --git a/Content.Server/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffectSystem.cs b/Content.Server/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffectSystem.cs index 1ea7cc1e01..ee6e57bad6 100644 --- a/Content.Server/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffectSystem.cs +++ b/Content.Server/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffectSystem.cs @@ -1,11 +1,6 @@ -using Content.Shared._DV.Pain; -using Content.Shared.EntityEffects; -using Content.Shared.StatusEffect; -using Robust.Shared.Prototypes; -using Content.Server.Abilities.Psionics; -using Content.Server.Psionics; -using Content.Shared.Psionics.Glimmer; +using Content.Shared._DV.EntityEffects.Effects.CosmicCult; using Content.Shared._DV.CosmicCult.Components; +using Content.Shared.EntityEffects; namespace Content.Server._DV.EntityEffects.Effects; @@ -21,11 +16,4 @@ public sealed partial class CleanseCosmicCultEntityEffectSystem : EntityEffectSy if (_ent.HasComponent(entity)) _ent.EnsureComponent(entity); // We just slap them with the component and let the Deconversion system handle the rest. } -} - -/// -public sealed partial class CleanseCosmicCult : EntityEffectBase -{ - public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-cleanse-cultist", ("chance", Probability)); -} +} \ No newline at end of file diff --git a/Content.Server/_DV/EntityEffects/Effects/Glimmer/AffectsGlimmerEntityEffectSystem.cs b/Content.Server/_DV/EntityEffects/Effects/Glimmer/AffectsGlimmerEntityEffectSystem.cs new file mode 100644 index 0000000000..34b3f808b3 --- /dev/null +++ b/Content.Server/_DV/EntityEffects/Effects/Glimmer/AffectsGlimmerEntityEffectSystem.cs @@ -0,0 +1,18 @@ +using Content.Shared.EntityEffects; +using Content.Shared.Psionics.Glimmer; +using Content.Shared._DV.EntityEffects.Effects.Glimmer; + +namespace Content.Server._DV.EntityEffects.Effects.Glimmer; + +/// +/// Changes glimmer when reaction happens. +/// +/// +public sealed partial class AffectsGlimmerEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly GlimmerSystem _glimmer = default!; + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _glimmer.Glimmer += args.Effect.Amount; + } +} \ No newline at end of file diff --git a/Content.Server/_DV/EntityEffects/Effects/RemovePsionicAbilitiesEntityEffectSystem.cs b/Content.Server/_DV/EntityEffects/Effects/Psionics/RemovePsionicAbilitiesEntityEffectSystem.cs similarity index 68% rename from Content.Server/_DV/EntityEffects/Effects/RemovePsionicAbilitiesEntityEffectSystem.cs rename to Content.Server/_DV/EntityEffects/Effects/Psionics/RemovePsionicAbilitiesEntityEffectSystem.cs index a9c3772bea..46d86f3631 100644 --- a/Content.Server/_DV/EntityEffects/Effects/RemovePsionicAbilitiesEntityEffectSystem.cs +++ b/Content.Server/_DV/EntityEffects/Effects/Psionics/RemovePsionicAbilitiesEntityEffectSystem.cs @@ -1,11 +1,12 @@ -using Content.Shared._DV.Pain; +using Content.Shared._DV.EntityEffects.Effects.Psionics; using Content.Shared.EntityEffects; using Content.Shared.StatusEffect; -using Robust.Shared.Prototypes; using Content.Server.Abilities.Psionics; using Content.Server.Psionics; -namespace Content.Server._DV.EntityEffects.Effects; +using Robust.Shared.Prototypes; + +namespace Content.Server._DV.EntityEffects.Effects.Psionics; /// /// Removes psionic abilities when at least 1u of the reagent is in the system. @@ -23,11 +24,4 @@ public sealed partial class RemovePsionicAbilitiesEntityEffectSystem : EntityEff _psionicAbilities.RemovePsionics(entity); _psionic.GrantNewPsionicReroll(entity); } -} - -/// -public sealed partial class RemovePsionicAbilities : EntityEffectBase -{ - public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-chem-remove-psionic", ("chance", Probability)); -} +} \ No newline at end of file diff --git a/Content.Server/_DV/EntityEffects/Effects/RerollPsionicAbilitiesEntityEffectSystem.cs b/Content.Server/_DV/EntityEffects/Effects/Psionics/RerollPsionicAbilitiesEntityEffectSystem.cs similarity index 59% rename from Content.Server/_DV/EntityEffects/Effects/RerollPsionicAbilitiesEntityEffectSystem.cs rename to Content.Server/_DV/EntityEffects/Effects/Psionics/RerollPsionicAbilitiesEntityEffectSystem.cs index 5f075f854b..b2b4f6f883 100644 --- a/Content.Server/_DV/EntityEffects/Effects/RerollPsionicAbilitiesEntityEffectSystem.cs +++ b/Content.Server/_DV/EntityEffects/Effects/Psionics/RerollPsionicAbilitiesEntityEffectSystem.cs @@ -1,11 +1,11 @@ -using Content.Shared._DV.Pain; +using Content.Server.Psionics; +using Content.Shared._DV.EntityEffects.Effects.Psionics; using Content.Shared.EntityEffects; using Content.Shared.StatusEffect; -using Robust.Shared.Prototypes; using Content.Server.Abilities.Psionics; -using Content.Server.Psionics; +using Robust.Shared.Prototypes; -namespace Content.Server._DV.EntityEffects.Effects; +namespace Content.Server._DV.EntityEffects.Effects.Psionics; /// /// Rerolls psionic abilities when at least 1u of the reagent is in the system. @@ -21,17 +21,4 @@ public sealed partial class RerollPsionicAbilitiesEntityEffectSystem : EntityEff _psionic.RerollPsionics(entity, bonusMuliplier: args.Effect.BonusMultiplier); } -} - -/// -public sealed partial class RerollPsionicAbilities : EntityEffectBase -{ - /// - /// Reroll multiplier. - /// - [DataField("bonusMultiplier")] - public float BonusMultiplier = 1f; - - public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-chem-reroll-psionic", ("chance", Probability)); -} +} \ No newline at end of file diff --git a/Content.Server/_DV/Pain/PainSystem.cs b/Content.Server/_DV/Pain/PainSystem.cs index ce4b6711d7..f7cccdd536 100644 --- a/Content.Server/_DV/Pain/PainSystem.cs +++ b/Content.Server/_DV/Pain/PainSystem.cs @@ -1,90 +1,5 @@ using Content.Shared._DV.Pain; -using Content.Shared.Popups; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Robust.Shared.Timing; namespace Content.Server._DV.Pain; -public sealed class PainSystem : SharedPainSystem -{ - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IPrototypeManager _prototype = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnMapInit); - } - - private void OnMapInit(Entity ent, ref MapInitEvent args) - { - ent.Comp.NextUpdateTime = _timing.CurTime; - ent.Comp.NextPopupTime = _timing.CurTime; - } - - protected override void UpdatePainSuppression(Entity ent, float duration, PainSuppressionLevel level) - { - var curTime = _timing.CurTime; - var newEndTime = curTime + TimeSpan.FromSeconds(duration); - - // Only update if this would extend the suppression - if (newEndTime <= ent.Comp.SuppressionEndTime) - return; - - ent.Comp.LastPainkillerTime = curTime; - ent.Comp.SuppressionEndTime = newEndTime; - UpdateSuppressed(ent); - } - - private void UpdateSuppressed(Entity ent) - { - ent.Comp.Suppressed = (_timing.CurTime < ent.Comp.SuppressionEndTime); - Dirty(ent); - } - - private void ShowPainPopup(Entity ent) - { - if (!_prototype.TryIndex(ent.Comp.DatasetPrototype, out var dataset)) - return; - - var effects = dataset.Values; - if (effects.Count == 0) - return; - - var effect = _random.Pick(effects); - _popup.PopupEntity(Loc.GetString(effect), ent, ent); - - // Set next popup time - var delay = _random.NextFloat(ent.Comp.MinimumPopupDelay, ent.Comp.MaximumPopupDelay); - ent.Comp.NextPopupTime = _timing.CurTime + TimeSpan.FromSeconds(delay); - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - var curTime = _timing.CurTime; - var query = EntityQueryEnumerator(); - - while (query.MoveNext(out var uid, out var component)) - { - if (curTime < component.NextUpdateTime) - continue; - - var ent = new Entity(uid, component); - - if (component.Suppressed) - { - UpdateSuppressed(ent); - } - else if (curTime >= component.NextPopupTime) - { - ShowPainPopup(ent); - } - component.NextUpdateTime = curTime + TimeSpan.FromSeconds(1); - } - } -} +public sealed class PainSystem : SharedPainSystem; \ No newline at end of file diff --git a/Content.Shared/_DV/EntityEffects/Effects/AddictingEntityEffectSystem.cs b/Content.Shared/_DV/EntityEffects/Effects/Addiction/AddictingEntityEffectSystem.cs similarity index 95% rename from Content.Shared/_DV/EntityEffects/Effects/AddictingEntityEffectSystem.cs rename to Content.Shared/_DV/EntityEffects/Effects/Addiction/AddictingEntityEffectSystem.cs index 2e8ca28089..d303b44311 100644 --- a/Content.Shared/_DV/EntityEffects/Effects/AddictingEntityEffectSystem.cs +++ b/Content.Shared/_DV/EntityEffects/Effects/Addiction/AddictingEntityEffectSystem.cs @@ -3,7 +3,7 @@ using Content.Shared.EntityEffects; using Content.Shared.StatusEffect; using Robust.Shared.Prototypes; -namespace Content.Shared._DV.EntityEffects.Effects; +namespace Content.Shared._DV.EntityEffects.Effects.Addiction; // TODO: When Addiction is moved to new Status, make this use StatusEffectsContainerComponent. /// diff --git a/Content.Shared/_DV/EntityEffects/Effects/SuppressAddictionEntityEffectSystem.cs b/Content.Shared/_DV/EntityEffects/Effects/Addiction/SuppressAddictionEntityEffectSystem.cs similarity index 95% rename from Content.Shared/_DV/EntityEffects/Effects/SuppressAddictionEntityEffectSystem.cs rename to Content.Shared/_DV/EntityEffects/Effects/Addiction/SuppressAddictionEntityEffectSystem.cs index ab75bc326f..15b9744835 100644 --- a/Content.Shared/_DV/EntityEffects/Effects/SuppressAddictionEntityEffectSystem.cs +++ b/Content.Shared/_DV/EntityEffects/Effects/Addiction/SuppressAddictionEntityEffectSystem.cs @@ -3,7 +3,7 @@ using Content.Shared.EntityEffects; using Content.Shared.StatusEffect; using Robust.Shared.Prototypes; -namespace Content.Shared._DV.EntityEffects.Effects; +namespace Content.Shared._DV.EntityEffects.Effects.Addiction; // TODO: When Addiction is moved to new Status, make this use StatusEffectsContainerComponent. /// diff --git a/Content.Shared/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffect.cs b/Content.Shared/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffect.cs new file mode 100644 index 0000000000..88ab058240 --- /dev/null +++ b/Content.Shared/_DV/EntityEffects/Effects/CosmicCult/CleanseCosmicCultEntityEffect.cs @@ -0,0 +1,11 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DV.EntityEffects.Effects.CosmicCult; + +/// +public sealed partial class CleanseCosmicCult : EntityEffectBase +{ + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-cleanse-cultist", ("chance", Probability)); +} \ No newline at end of file diff --git a/Content.Shared/_DV/EntityEffects/Effects/Glimmer/AffectsGlimmerEntityEffect.cs b/Content.Shared/_DV/EntityEffects/Effects/Glimmer/AffectsGlimmerEntityEffect.cs new file mode 100644 index 0000000000..ba4e4c9eac --- /dev/null +++ b/Content.Shared/_DV/EntityEffects/Effects/Glimmer/AffectsGlimmerEntityEffect.cs @@ -0,0 +1,18 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DV.EntityEffects.Effects.Glimmer; + +/// +public sealed partial class AffectsGlimmer : EntityEffectBase +{ + /// + /// Amount that is added or subtracted from glimmer. + /// + [DataField] + public int Amount = 1; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-change-glimmer-reaction-effect", ("chance", Probability), + ("amount", Amount)); +} diff --git a/Content.Shared/_DV/EntityEffects/Effects/InPainEntityEffectSystem.cs b/Content.Shared/_DV/EntityEffects/Effects/Pain/InPainEntityEffectSystem.cs similarity index 95% rename from Content.Shared/_DV/EntityEffects/Effects/InPainEntityEffectSystem.cs rename to Content.Shared/_DV/EntityEffects/Effects/Pain/InPainEntityEffectSystem.cs index 3bd90767e5..b3e1d7f609 100644 --- a/Content.Shared/_DV/EntityEffects/Effects/InPainEntityEffectSystem.cs +++ b/Content.Shared/_DV/EntityEffects/Effects/Pain/InPainEntityEffectSystem.cs @@ -3,7 +3,7 @@ using Content.Shared.EntityEffects; using Content.Shared.StatusEffect; using Robust.Shared.Prototypes; -namespace Content.Shared._DV.EntityEffects.Effects; +namespace Content.Shared._DV.EntityEffects.Effects.Pain; // TODO: When Pain is moved to new Status, make this use StatusEffectsContainerComponent. /// diff --git a/Content.Shared/_DV/EntityEffects/Effects/SuppressPainEntityEffectSystem.cs b/Content.Shared/_DV/EntityEffects/Effects/Pain/SuppressPainEntityEffectSystem.cs similarity index 96% rename from Content.Shared/_DV/EntityEffects/Effects/SuppressPainEntityEffectSystem.cs rename to Content.Shared/_DV/EntityEffects/Effects/Pain/SuppressPainEntityEffectSystem.cs index 74ad77c5c2..5522deb322 100644 --- a/Content.Shared/_DV/EntityEffects/Effects/SuppressPainEntityEffectSystem.cs +++ b/Content.Shared/_DV/EntityEffects/Effects/Pain/SuppressPainEntityEffectSystem.cs @@ -3,7 +3,7 @@ using Content.Shared.EntityEffects; using Content.Shared.StatusEffect; using Robust.Shared.Prototypes; -namespace Content.Shared._DV.EntityEffects.Effects; +namespace Content.Shared._DV.EntityEffects.Effects.Pain; // TODO: When Pain is moved to new Status, make this use StatusEffectsContainerComponent. /// diff --git a/Content.Shared/_DV/EntityEffects/Effects/Psionics/RemovePsionicAbilitiesEntityEffect.cs b/Content.Shared/_DV/EntityEffects/Effects/Psionics/RemovePsionicAbilitiesEntityEffect.cs new file mode 100644 index 0000000000..0cf5405aca --- /dev/null +++ b/Content.Shared/_DV/EntityEffects/Effects/Psionics/RemovePsionicAbilitiesEntityEffect.cs @@ -0,0 +1,11 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DV.EntityEffects.Effects.Psionics; + +/// +public sealed partial class RemovePsionicAbilities : EntityEffectBase +{ + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-chem-remove-psionic", ("chance", Probability)); +} diff --git a/Content.Shared/_DV/EntityEffects/Effects/Psionics/RerollPsionicAbilitiesEntityEffect.cs b/Content.Shared/_DV/EntityEffects/Effects/Psionics/RerollPsionicAbilitiesEntityEffect.cs new file mode 100644 index 0000000000..90365a87b7 --- /dev/null +++ b/Content.Shared/_DV/EntityEffects/Effects/Psionics/RerollPsionicAbilitiesEntityEffect.cs @@ -0,0 +1,17 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DV.EntityEffects.Effects.Psionics; + +/// +public sealed partial class RerollPsionicAbilities : EntityEffectBase +{ + /// + /// Reroll multiplier. + /// + [DataField("bonusMultiplier")] + public float BonusMultiplier = 1f; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-chem-reroll-psionic", ("chance", Probability)); +} diff --git a/Content.Shared/_DV/Pain/SharedPainSystem.cs b/Content.Shared/_DV/Pain/SharedPainSystem.cs index b4addc0881..ab0709a14c 100644 --- a/Content.Shared/_DV/Pain/SharedPainSystem.cs +++ b/Content.Shared/_DV/Pain/SharedPainSystem.cs @@ -1,17 +1,27 @@ using Content.Shared.StatusEffect; +using Content.Shared.Popups; using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Timing; namespace Content.Shared._DV.Pain; public abstract class SharedPainSystem : EntitySystem { + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; public ProtoId StatusEffectKey = "InPain"; - protected abstract void UpdatePainSuppression(Entity ent, float duration, PainSuppressionLevel level); + public override void Initialize() + { + SubscribeLocalEvent(OnMapInit); + } - public virtual void TryApplyPain(EntityUid uid, float painTime, StatusEffectsComponent? status = null) + public void TryApplyPain(EntityUid uid, float painTime, StatusEffectsComponent? status = null) { if (!Resolve(uid, ref status, false)) return; @@ -26,13 +36,83 @@ public abstract class SharedPainSystem : EntitySystem } } - public virtual void TrySuppressPain(EntityUid uid, float duration, PainSuppressionLevel level = PainSuppressionLevel.Normal) + public void TrySuppressPain(EntityUid uid, float duration, PainSuppressionLevel level = PainSuppressionLevel.Normal) { if (!TryComp(uid, out var comp)) return; UpdatePainSuppression((uid, comp), duration, level); } + + protected void UpdatePainSuppression(Entity ent, float duration, PainSuppressionLevel level) + { + var curTime = _timing.CurTime; + var newEndTime = curTime + TimeSpan.FromSeconds(duration); + + // Only update if this would extend the suppression + if (newEndTime <= ent.Comp.SuppressionEndTime) + return; + + ent.Comp.LastPainkillerTime = curTime; + ent.Comp.SuppressionEndTime = newEndTime; + UpdateSuppressed(ent); + } + + private void UpdateSuppressed(Entity ent) + { + ent.Comp.Suppressed = (_timing.CurTime < ent.Comp.SuppressionEndTime); + Dirty(ent); + } + + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextUpdateTime = _timing.CurTime; + ent.Comp.NextPopupTime = _timing.CurTime; + } + + private void ShowPainPopup(Entity ent) + { + if (!_prototype.TryIndex(ent.Comp.DatasetPrototype, out var dataset)) + return; + + var effects = dataset.Values; + if (effects.Count == 0) + return; + + var effect = _random.Pick(effects); + _popup.PopupEntity(Loc.GetString(effect), ent, ent); + + // Set next popup time + var delay = _random.NextFloat(ent.Comp.MinimumPopupDelay, ent.Comp.MaximumPopupDelay); + ent.Comp.NextPopupTime = _timing.CurTime + TimeSpan.FromSeconds(delay); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var curTime = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var component)) + { + if (curTime < component.NextUpdateTime) + continue; + + var ent = new Entity(uid, component); + + if (component.Suppressed) + { + UpdateSuppressed(ent); + } + else if (curTime >= component.NextPopupTime) + { + ShowPainPopup(ent); + } + component.NextUpdateTime = curTime + TimeSpan.FromSeconds(1); + } + } } // Used by the StatusEffect diff --git a/Resources/Locale/en-US/_Funkystation/reagents/meta/medicine.ftl b/Resources/Locale/en-US/_Funkystation/reagents/meta/medicine.ftl index 968d31dc81..4ded799f73 100644 --- a/Resources/Locale/en-US/_Funkystation/reagents/meta/medicine.ftl +++ b/Resources/Locale/en-US/_Funkystation/reagents/meta/medicine.ftl @@ -31,9 +31,6 @@ reagent-desc-penteticacid = A complicated anti-toxin solution that quickly flush reagent-name-granibitulari = granibitulari reagent-desc-granibitulari = A common, slow-acting medicine for all types of injuries. -reagent-name-pielovene = pielovene -reagent-desc-pielovene = A honk-spectrum anti-toxin, which treats a broad variety of damage in clowns. Harmful to mimes. - reagent-name-hypothium = hypothium reagent-desc-hypothium = A difficult to synthesize drug used to cure most wounds and clot blood.