From 2d6de1628ad01cafa09c9a1b1e7e6adb04f1086f Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Sat, 18 Apr 2026 17:23:10 +0200 Subject: [PATCH 01/11] One Commit Ops --- .../Damage/Systems/SlowOnDamageSystem.cs | 11 ++ .../StatusEffectSystem.Relay.cs | 7 ++ .../ClothingSlowResistanceComponent.cs | 4 +- .../Systems/ClothingSlowResistanceSystem.cs | 28 +++++ ...HystericalStrengthStatusEffectComponent.cs | 46 +++++++ .../HystericalStrengthPowerComponent.cs | 51 ++++++++ .../HystericalStrengthPowerActionEvent.cs | 5 + .../PsionicPowers/BasePsionicPowerSystem.cs | 4 +- .../HystericalStrengthPowerSystem.cs | 113 ++++++++++++++++++ .../Locale/en-US/_DV/abilities/psionic.ftl | 6 + Resources/Prototypes/_DV/Actions/psionic.yml | 18 +++ .../_DV/Entities/StatusEffects/psionics.yml | 9 ++ .../Prototypes/_DV/Psionics/psionicPowers.yml | 12 +- .../hysterical_strength_off.png | Bin 0 -> 751 bytes .../hysterical_strength_on.png | Bin 0 -> 689 bytes .../actions_psionics_small.rsi/meta.json | 8 +- 16 files changed, 315 insertions(+), 7 deletions(-) create mode 100644 Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs create mode 100644 Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs create mode 100644 Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs create mode 100644 Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs create mode 100644 Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/hysterical_strength_off.png create mode 100644 Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/hysterical_strength_on.png diff --git a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs index fef7b6ae06a..92466f29d06 100644 --- a/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs +++ b/Content.Shared/Damage/Systems/SlowOnDamageSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.Inventory; using Content.Shared.Movement.Systems; +using Content.Shared.StatusEffectNew; // DeltaV - Added Hysterical Power namespace Content.Shared.Damage.Systems; @@ -26,6 +27,8 @@ public sealed class SlowOnDamageSystem : EntitySystem SubscribeLocalEvent(OnIgnoreStartup); SubscribeLocalEvent(OnIgnoreShutdown); SubscribeLocalEvent(OnIgnoreModifySpeed); + + SubscribeLocalEvent>(OnStatusRelayIgnoreModifySpeed); // DeltaV - Add Hysterical Strength } private void OnRefreshMovespeed(EntityUid uid, SlowOnDamageComponent component, RefreshMovementSpeedModifiersEvent args) @@ -103,6 +106,14 @@ public sealed class SlowOnDamageSystem : EntitySystem { args.Speed = 1f; } + // Start DeltaV - Adding HystericalStrength Psionic Power. + private void OnStatusRelayIgnoreModifySpeed(Entity ent, ref StatusEffectRelayedEvent args) + { + var ev = args.Args; + ev.Speed = 1f; + args.Args = ev; + } + // End DeltaV - Adding HystericalStrength Psionic Power. } [ByRefEvent] diff --git a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs index 2522034f0a0..9a12bf1029e 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs @@ -1,6 +1,9 @@ +using Content.Shared._DV.Clothing.Events; // DeltaV - Added Hysterical Power using Content.Shared._DV.Psionics.Events; // DeltaV - Psionics Refactor using Content.Shared.Body.Events; using Content.Shared.Damage.Events; +using Content.Shared.Damage.Systems; // DeltaV - Added Hysterical Power +using Content.Shared.Mobs; // DeltaV - Added Hysterical Power using Content.Shared.Mobs.Events; using Content.Shared.Movement.Events; using Content.Shared.Movement.Systems; @@ -40,6 +43,10 @@ public sealed partial class StatusEffectsSystem // DeltaV Start - Psionics Refactor SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RefRelayStatusEffectEvent); + SubscribeLocalEvent(RelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power + SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power + SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power <- REMOVE THIS IF UPSTREAM ADDS THIS // DeltaV End - Psionics Refactor } diff --git a/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs b/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs index f3fefdbd520..b8579f68910 100644 --- a/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs +++ b/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs @@ -2,12 +2,12 @@ using Robust.Shared.GameStates; namespace Content.Shared._DV.Clothing.Components; -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class ClothingSlowResistanceComponent : Component { /// /// Modifier for both walk and sprint slowdown. /// - [DataField(required: true)] + [DataField, AutoNetworkedField] public float Modifier = 0.25f; } diff --git a/Content.Shared/_DV/Clothing/Systems/ClothingSlowResistanceSystem.cs b/Content.Shared/_DV/Clothing/Systems/ClothingSlowResistanceSystem.cs index feb5a9a1e2c..cdff2fea08e 100644 --- a/Content.Shared/_DV/Clothing/Systems/ClothingSlowResistanceSystem.cs +++ b/Content.Shared/_DV/Clothing/Systems/ClothingSlowResistanceSystem.cs @@ -1,6 +1,7 @@ using Content.Shared._DV.Clothing.Components; using Content.Shared._DV.Clothing.Events; using Content.Shared.Movement.Systems; +using Content.Shared.StatusEffectNew; namespace Content.Shared._DV.Clothing.Systems; @@ -13,6 +14,10 @@ public sealed class ClothingSlowResistanceSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(OnModifyClothingSlowdown); + SubscribeLocalEvent>(OnRelayedModifyClothingSlowdown); + + SubscribeLocalEvent(OnStatusEffectApplied); + SubscribeLocalEvent(OnStatusEffectRemoved); } public void SetModifier(Entity ent, float modifier) @@ -33,4 +38,27 @@ public sealed class ClothingSlowResistanceSystem : EntitySystem if (args.RunModifier < 1) args.RunModifier += (1 - args.RunModifier) * modifier; } + + private void OnRelayedModifyClothingSlowdown(Entity ent, ref StatusEffectRelayedEvent args) + { + var ev = args.Args; + var modifier = ent.Comp.Modifier; + + if (ev.WalkModifier < 1) + ev.WalkModifier += (1 - ev.WalkModifier) * modifier; + if (ev.RunModifier < 1) + ev.RunModifier += (1 - ev.RunModifier) * modifier; + + args.Args = ev; + } + + private void OnStatusEffectApplied(Entity ent, ref StatusEffectAppliedEvent args) + { + _movementSpeed.RefreshMovementSpeedModifiers(ent); + } + + private void OnStatusEffectRemoved(Entity ent, ref StatusEffectRemovedEvent args) + { + _movementSpeed.RefreshMovementSpeedModifiers(ent); + } } diff --git a/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs b/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs new file mode 100644 index 00000000000..c9c37939b08 --- /dev/null +++ b/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs @@ -0,0 +1,46 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared._DV.Psionics.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class HystericalStrengthStatusEffectComponent : Component +{ + /// + /// The damage dealt to entities that have this effect. + /// + [DataField, AutoNetworkedField] + public DamageSpecifier Damage = new() + { + DamageDict = new () + { + { "Asphyxiation", 2.5 }, + { "Bloodloss", 1.5 }, + } + }; + + /// + /// How long each damage tick is delayed by. + /// + [DataField] + public TimeSpan DamageDelay = TimeSpan.FromSeconds(1); + + /// + /// The next tick for the damage to be applied. + /// + [DataField(customTypeSerializer:typeof(TimeOffsetSerializer)), AutoNetworkedField] + public TimeSpan NextTick; + + /// + /// The stun duration when the psionic gets dispelled while actively using that ability. + /// + [DataField] + public TimeSpan StunDurationOnDispel = TimeSpan.FromSeconds(6); + + /// + /// How much glimmer it generates each damage tick. + /// + [DataField, AutoNetworkedField] + public int PassiveGlimmerGeneration = 1; +} diff --git a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs new file mode 100644 index 00000000000..d107cf1ab56 --- /dev/null +++ b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs @@ -0,0 +1,51 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._DV.Psionics.Components.PsionicPowers; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class HystericalStrengthPowerComponent : BasePsionicPowerComponent +{ + public override EntProtoId ActionProtoId { get; set; } = "ActionHystericalStrength"; + + public override string PowerName { get; set; } = "psionic-power-name-hysterical-strength"; + + public override int MinGlimmerChanged { get; set; } = 0; + + public override int MaxGlimmerChanged { get; set; } = 0; + + /// + /// The density added to the user when the power is active. + /// + [DataField] + public float AddedDensity = 500; + + /// + /// The strength of the resistance to the clothing slowdown. + /// + /// + /// 0.75 equals to a 75% resistance to clothing slowdown modifiers. + /// + [DataField] + public float ClothingSlowdownModifier = 0.75f; + + /// + /// How much glimmer it generates each damage tick. + /// + [DataField] + public int PassiveGlimmerGeneration = 1; + + /// + /// The damage dealt to the psionic when the power is active. + /// + [DataField] + public DamageSpecifier Damage = new() + { + DamageDict = new () + { + { "Asphyxiation", 2.5 }, + { "Bloodloss", 1.5 }, + } + }; +} diff --git a/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs b/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs new file mode 100644 index 00000000000..04542090849 --- /dev/null +++ b/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs @@ -0,0 +1,5 @@ +using Content.Shared.Actions; + +namespace Content.Shared._DV.Psionics.Events.PowerActionEvents; + +public sealed partial class HystericalStrengthPowerActionEvent : InstantActionEvent; diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/BasePsionicPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/BasePsionicPowerSystem.cs index e3bec3b65c1..2258f1e794b 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/BasePsionicPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/BasePsionicPowerSystem.cs @@ -23,7 +23,7 @@ public abstract class BasePsionicPowerSystem : EntitySystem where T : Bas [Dependency] protected readonly IGameTiming Timing = default!; [Dependency] protected readonly SharedActionsSystem Action = default!; [Dependency] protected readonly SharedDoAfterSystem DoAfter = default!; - [Dependency] private readonly GlimmerSystem _glimmer = default!; + [Dependency] protected readonly GlimmerSystem Glimmer = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] protected readonly SharedPsionicSystem Psionic = default!; @@ -182,7 +182,7 @@ public abstract class BasePsionicPowerSystem : EntitySystem where T : Bas var ev = new PsionicPowerUsedEvent(performer, psionicSource, power); RaiseLocalEvent(psionicSource, ev); - _glimmer.Glimmer += Random.Next(psionicSource.Comp.MinGlimmerChanged, psionicSource.Comp.MaxGlimmerChanged); + Glimmer.Glimmer += Random.Next(psionicSource.Comp.MinGlimmerChanged, psionicSource.Comp.MaxGlimmerChanged); } /// diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs new file mode 100644 index 00000000000..af3f5b6ff73 --- /dev/null +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -0,0 +1,113 @@ +using Content.Shared._DV.Clothing.Components; +using Content.Shared._DV.Psionics.Components; +using Content.Shared._DV.Psionics.Components.PsionicPowers; +using Content.Shared._DV.Psionics.Events; +using Content.Shared._DV.Psionics.Events.PowerActionEvents; +using Content.Shared.Damage.Systems; +using Content.Shared.IdentityManagement; +using Content.Shared.Mobs; +using Content.Shared.Popups; +using Content.Shared.Psionics.Glimmer; +using Content.Shared.StatusEffectNew; +using Content.Shared.StatusEffectNew.Components; +using Content.Shared.Stunnable; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Physics.Systems; +using Robust.Shared.Prototypes; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.Shared._DV.Psionics.Systems.PsionicPowers; + +public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly FixtureSystem _fixture = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + + public static readonly EntProtoId HystericalStrengthEffectProto = "HystericalStrengthStatusEffect"; + private readonly string _fixtureID = "HystericalStrengthFixture"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnMobStateChanged); + SubscribeLocalEvent>(OnActiveDispelled); + } + + protected override void OnPowerUsed(Entity psionic, ref HystericalStrengthPowerActionEvent args) + { + args.Toggle = true; // This will toggle them AFTER the code has run. + // If the action ISN'T toggled, it WILL be toggled after this code, so we have to treat it as if it IS toggled on. + if (!args.Action.Comp.Toggled) + { + if (!_statusEffects.TrySetStatusEffectDuration(args.Performer, HystericalStrengthEffectProto, out var statusEffect) + || !TryComp(statusEffect, out var resistanceComp) + || !TryComp(statusEffect, out var hystericalEffectComp)) + return; + + resistanceComp.Modifier = psionic.Comp.ClothingSlowdownModifier; + hystericalEffectComp.Damage = psionic.Comp.Damage; + hystericalEffectComp.PassiveGlimmerGeneration = psionic.Comp.PassiveGlimmerGeneration; + Dirty((statusEffect.Value, resistanceComp, hystericalEffectComp)); + + _fixture.TryCreateFixture(args.Performer, new PhysShapeCircle(), _fixtureID, 500, false, friction: 0f); + + var messageUser = Loc.GetString("psionic-power-hysterical-strength-used"); + var messageOthers = Loc.GetString("psionic-power-hysterical-strength-used-others", ("user", Identity.Entity(args.Performer, EntityManager))); + + Popup.PopupPredicted(messageUser, messageOthers, args.Performer, args.Performer, PopupType.Medium); + } + else + { + StopPower(args.Performer); + } + + AfterPowerUsed(psionic, args.Performer); + } + + private void StopPower(Entity performer, bool toggleOff = false) + { + _statusEffects.TryRemoveStatusEffect(performer, HystericalStrengthEffectProto); + _fixture.DestroyFixture(performer, _fixtureID); + + if (toggleOff && Resolve(performer, ref performer.Comp)) + Action.SetToggled(performer.Comp.ActionEntity, false); + } + + private void OnActiveDispelled(Entity effect, ref StatusEffectRelayedEvent args) + { + StopPower(args.Args.Target, true); + + var message = Loc.GetString("psionic-power-hysterical-strength-being-dispelled", ("dispelled", Identity.Entity(args.Args.Target, EntityManager))); + + Popup.PopupPredicted(message, args.Args.Target, args.Args.Dispeller, PopupType.MediumCaution); + // TODO: Fix StatusEffectsArrays firing an error when adding a statuseffect amidst relaying events to statuseffects. + //_stun.TryAddParalyzeDuration(args.Args.Target, TimeSpan.FromSeconds(6)); + } + + private void OnMobStateChanged(Entity effect, ref StatusEffectRelayedEvent args) + { + if (args.Args.NewMobState == MobState.Alive) + return; + + StopPower(args.Args.Target, true); + } + + public override void Update(float frameTime) + { + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp, out var statusEffect)) + { + if (comp.NextTick > Timing.CurTime || statusEffect.AppliedTo is null) + continue; + comp.NextTick = Timing.CurTime + comp.DamageDelay; + Dirty(uid, comp); + + Glimmer.Glimmer += comp.PassiveGlimmerGeneration; + _damageable.TryChangeDamage(statusEffect.AppliedTo.Value, comp.Damage, ignoreResistances: true, interruptsDoAfters: false); + } + } +} diff --git a/Resources/Locale/en-US/_DV/abilities/psionic.ftl b/Resources/Locale/en-US/_DV/abilities/psionic.ftl index 2429afe1d04..6497645db48 100644 --- a/Resources/Locale/en-US/_DV/abilities/psionic.ftl +++ b/Resources/Locale/en-US/_DV/abilities/psionic.ftl @@ -2,6 +2,7 @@ psionic-power-name-dispel = Dispel psionic-power-name-eruption = Psionic Eruption psionic-power-name-fractured-form = Fractured Form +psionic-power-name-hysterical-strength = Hysterical Strength psionic-power-name-mass-sleep = Mass Sleep psionic-power-name-mindswap = Mind Swap psionic-power-name-mindswap-return = Mind Swap Return @@ -34,6 +35,11 @@ psionic-power-fractured-form-ssd = { CAPITALIZE(SUBJECT($ent)) } { CONJUGATE-BE( psionic-power-fractured-form-examine-self = You feel a strange connection to { OBJECT($ent) }. psionic-power-fractured-form-dispelled = Someone dispelled your sleepiness.. +# Hysterical Strength +psionic-power-hysterical-strength-used = Your muscles begin to burn.. it's hard to breathe. +psionic-power-hysterical-strength-used-others = {CAPITALIZE(THE($user))}'s muscles begin to convulse! +psionic-power-hysterical-strength-being-dispelled = {CAPITALIZE(THE($dispelled))}'s muscles seize up! + # Metapsionic Pulse psionic-power-metapsionic-success = You detect psychic presence there. psionic-power-metapsionic-failure = You don't detect any psychic presence there. diff --git a/Resources/Prototypes/_DV/Actions/psionic.yml b/Resources/Prototypes/_DV/Actions/psionic.yml index 5bd9fed95ae..eb793e332f8 100644 --- a/Resources/Prototypes/_DV/Actions/psionic.yml +++ b/Resources/Prototypes/_DV/Actions/psionic.yml @@ -228,3 +228,21 @@ checkCanInteract: false - type: InstantAction event: !type:FracturedFormPowerActionEvent + +- type: entity + parent: BasePsionicAction + id: ActionHystericalStrength + name: Toggle Hysterical Strength + description: Turn your muscles on overdrive to be slowed down less by clothing and pulling things. It'll hurt. + components: + - type: Action + icon: + sprite: _DV/Interface/Actions/actions_psionics_small.rsi + state: hysterical_strength_off + iconOn: + sprite: _DV/Interface/Actions/actions_psionics_small.rsi + state: hysterical_strength_on + useDelay: 5 + checkCanInteract: false + - type: InstantAction + event: !type:HystericalStrengthPowerActionEvent diff --git a/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml b/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml index eb003d1a3db..f0c2ccdc670 100644 --- a/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml +++ b/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml @@ -33,3 +33,12 @@ parent: [ StatusEffectSlowdown, MobStatusEffectDebuff ] id: MassSleepSlowdownStatusEffect name: slowed by mass sleep power + +- type: entity + parent: MobStatusEffectBase + id: HystericalStrengthStatusEffect + name: affected by hysterical strength + components: + - type: HystericalStrengthStatusEffect + - type: ClothingSlowResistance + - type: IgnoreSlowOnDamage diff --git a/Resources/Prototypes/_DV/Psionics/psionicPowers.yml b/Resources/Prototypes/_DV/Psionics/psionicPowers.yml index 98474df4825..f04efed70c7 100644 --- a/Resources/Prototypes/_DV/Psionics/psionicPowers.yml +++ b/Resources/Prototypes/_DV/Psionics/psionicPowers.yml @@ -5,6 +5,8 @@ children: - id: DispelPowerEntity weight: 1 + - id: HystericalStrengthPowerEntity + weight: 1 - id: PrecognitionPowerEntity weight: 1 - id: PsionicRegenerationPowerEntity @@ -13,12 +15,12 @@ weight: 1 - id: TelegnosisPowerEntity weight: 1 + - id: MetapsionicPulsePowerEntity + weight: 0.5 - id: FracturedFormPowerEntity weight: 0.3 - id: MassSleepPowerEntity weight: 0.3 - - id: MetapsionicPulsePowerEntity - weight: 0.5 - id: NoosphericZapPowerEntity weight: 0.3 - id: MindSwapPowerEntity @@ -92,3 +94,9 @@ categories: [ HideSpawnMenu ] components: - type: TelegnosisPower + +- type: entity + id: HystericalStrengthPowerEntity + categories: [ HideSpawnMenu ] + components: + - type: HystericalStrengthPower diff --git a/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/hysterical_strength_off.png b/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/hysterical_strength_off.png new file mode 100644 index 0000000000000000000000000000000000000000..19c8410196df5d47fbf8741b629f972b37709300 GIT binary patch literal 751 zcmVPx#1ZP1_K>z@;j|==^1poj7nMp)JR9Hvlma%G8K@f%~A}ENU7NQ~&)WSY0R(8IH zU>C9SaYFjMg`JhC=`B=J2#SRYA}9#)e)sHu^PfGldy{an&<~b#_nh6Ce|BbfZ~U{o zj*b2Dv&&j}F6HHuSQxy!)t|RtobS%s?bz*(J(K{PU%gj4Gd{d%i;#1%OvH)uZ1Vi! z*!kOM5tnX_S47m#VPn>M>F5f;$;}6)GlR(2??mjqia399EFyC*dLo(veA#gf^l^Uq zM#RT=!#n6X7cCKKZt9!^B8d9bg+YY4zY}ZQW_Yta1vNkukE?p<3LxL7&kl~yTp#+1 zUQYy+X>(RqgulNeCNG$% zZ3mfv%s4Pc-#D&Mo}0g(LqSv6wTQF`eT#AMI1-2h(nRC8?gxsO@9rGvXLra*jf}eh zl(Pld1=L0znZwwoq6+~;U!VUq_2d?a zV8uWOm_Q_fQ0(-Z2a)gyvWOggV;t#XsiC(DBLSIlj{t-8$)k_uH}CjHlVjmFz|%Mq zz(5(6QP6UNj7x|d3wO?rXsrT83JU>LC5~iRMrAl}C+j$Y82i(aM-l=E-)|0fa!c+BxWVwhHMk@FHQdQbXjP zOUBU<=ansoy0&RvN6sV#pd%G@?<+N+D8cIjn3w%m&?Se^YflfprveUx3vx2&f;ptu h1^iW7qW@Px#1ZP1_K>z@;j|==^1poj7TS-JgR9HvlmBDHiF%*VRMW`Tx?LxGOh<4$=D6ZW3 z7J|#-%17`STuJx7g*#W$>Rzadh@iMoK?DWiI$tyY^&~mTSne$q{2(MVlga-lCpoeI zo|Um~vU|^FW7BRtn(lAUXY>9Cyco*%O7p)HV;zF{#hYd--psOS8hCmqiHlcH%+6n1 zzKPHPBAd6zhk^Ic%r0Lyd%I`0c5b;QDg#<}Kp1#N{K8eU53kd^Wsz+TFD@{_tXJ2Q z3ApvR*o-^F#@ia(J%SAxhJbh@{QXUuJ+uD#Iej~ICe<0+Lt*e92jZ#esSN!3YDWBj zd`rSS18qVOGt8=IVlG}E$IJktA7B0vMNl)Refmo36Vou!5r=98ya2PN5OZomQ^h}{ zFfkzx*$2)(F(&TB|I4Sp%zhQarra5-32~@afE~X$<4R13LwE{+crTW8ro|yM5FW7w z*?(X&m1r{63XpJwZyyFP${4IBCAv$pW#S{9PM#fK43Lmo8xeuAnIYqT9KjLisB6s1 zK$(imAG|0+EfI*m0Vhnydu||_z0jqkJE1kO2a#T1<&^aehRxK=<}G(u@TGoT+m z(YqeLKZ%T$=#d$~u^*rmFTZC(-$_i Xs@V_Kq+7y@00000NkvXXu0mjf72G#z literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json b/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json index 94274492e77..e84f8698afe 100644 --- a/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json +++ b/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "Fractured Form sprited by TehFlaminTaco on Github for DeltaV.", + "copyright": "Fractured Form sprited by TehFlaminTaco on Github for DeltaV. Hysterical Strength sprited by Salamis on DeltaV Discord.", "size": { "x": 32, "y": 32 @@ -9,6 +9,12 @@ "states": [ { "name": "fractured_form" + }, + { + "name": "hysterical_strength_on" + }, + { + "name": "hysterical_strength_off" } ] } From 5e319b90a13d40e0db5e82a8bb6979ed60941247 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 15:37:36 +0000 Subject: [PATCH 02/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../Components/HystericalStrengthStatusEffectComponent.cs | 2 +- .../PsionicPowers/HystericalStrengthPowerComponent.cs | 2 +- .../PowerActionEvents/HystericalStrengthPowerActionEvent.cs | 2 +- .../Systems/PsionicPowers/HystericalStrengthPowerSystem.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs b/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs index c9c37939b08..1a926dde452 100644 --- a/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs +++ b/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; diff --git a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs index d107cf1ab56..03c0abfd255 100644 --- a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs +++ b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; diff --git a/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs b/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs index 04542090849..9cd747a01da 100644 --- a/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs +++ b/Content.Shared/_DV/Psionics/Events/PowerActionEvents/HystericalStrengthPowerActionEvent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Actions; +using Content.Shared.Actions; namespace Content.Shared._DV.Psionics.Events.PowerActionEvents; diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index af3f5b6ff73..cd3423cc900 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared._DV.Clothing.Components; +using Content.Shared._DV.Clothing.Components; using Content.Shared._DV.Psionics.Components; using Content.Shared._DV.Psionics.Components.PsionicPowers; using Content.Shared._DV.Psionics.Events; From 244dc92cb7abd731104d90df1dcf91542af0796c Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Sat, 18 Apr 2026 17:39:30 +0200 Subject: [PATCH 03/11] Unused Imports BEGONE --- .../Systems/PsionicPowers/HystericalStrengthPowerSystem.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index af3f5b6ff73..dc964fe6a3e 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -7,14 +7,12 @@ using Content.Shared.Damage.Systems; using Content.Shared.IdentityManagement; using Content.Shared.Mobs; using Content.Shared.Popups; -using Content.Shared.Psionics.Glimmer; using Content.Shared.StatusEffectNew; using Content.Shared.StatusEffectNew.Components; using Content.Shared.Stunnable; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Systems; using Robust.Shared.Prototypes; -using Robust.Shared.Toolshed.TypeParsers; namespace Content.Shared._DV.Psionics.Systems.PsionicPowers; From 22e8716474c1f91caa5dc68d2914fc9025dc01cd Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Sat, 18 Apr 2026 17:59:12 +0200 Subject: [PATCH 04/11] Add Suppression Behavior --- .../StatusEffectSystem.Relay.cs | 1 + .../HystericalStrengthPowerSystem.cs | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs index 9a12bf1029e..6c652f23d71 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs @@ -44,6 +44,7 @@ public sealed partial class StatusEffectsSystem SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power <- REMOVE THIS IF UPSTREAM ADDS THIS diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index b20c04cd617..cc0b6226aa0 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -32,6 +32,7 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem>(OnMobStateChanged); SubscribeLocalEvent>(OnActiveDispelled); + SubscribeLocalEvent>(OnActiveSuppressed); } protected override void OnPowerUsed(Entity psionic, ref HystericalStrengthPowerActionEvent args) @@ -74,17 +75,27 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem effect, ref StatusEffectRelayedEvent args) + private void PunishPsionic(EntityUid victim, EntityUid? dispeller = null) { - StopPower(args.Args.Target, true); + StopPower(victim, true); - var message = Loc.GetString("psionic-power-hysterical-strength-being-dispelled", ("dispelled", Identity.Entity(args.Args.Target, EntityManager))); + var message = Loc.GetString("psionic-power-hysterical-strength-being-dispelled", ("dispelled", Identity.Entity(victim, EntityManager))); - Popup.PopupPredicted(message, args.Args.Target, args.Args.Dispeller, PopupType.MediumCaution); + Popup.PopupPredicted(message, victim, dispeller ?? victim, PopupType.MediumCaution); // TODO: Fix StatusEffectsArrays firing an error when adding a statuseffect amidst relaying events to statuseffects. //_stun.TryAddParalyzeDuration(args.Args.Target, TimeSpan.FromSeconds(6)); } + private void OnActiveDispelled(Entity effect, ref StatusEffectRelayedEvent args) + { + PunishPsionic(args.Args.Target, args.Args.Target); + } + + private void OnActiveSuppressed(Entity ent, ref StatusEffectRelayedEvent args) + { + PunishPsionic(args.Args.Victim, args.Args.Victim); + } + private void OnMobStateChanged(Entity effect, ref StatusEffectRelayedEvent args) { if (args.Args.NewMobState == MobState.Alive) From 1760a98b4bc7fef498485bf3d7d7c547f153c2c0 Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Sat, 18 Apr 2026 21:10:41 +0200 Subject: [PATCH 05/11] Adjusted Copyright Signed-off-by: Sir Warock <67167466+SirWarock@users.noreply.github.com> --- .../_DV/Interface/Actions/actions_psionics_small.rsi/meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json b/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json index e84f8698afe..b357b623e3c 100644 --- a/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json +++ b/Resources/Textures/_DV/Interface/Actions/actions_psionics_small.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "Fractured Form sprited by TehFlaminTaco on Github for DeltaV. Hysterical Strength sprited by Salamis on DeltaV Discord.", + "copyright": "Fractured Form sprited by TehFlaminTaco on Github for DeltaV. Hysterical Strength sprited by Sal_DragonsNOA on DeltaV Discord.", "size": { "x": 32, "y": 32 From e5ec529215ad802d5efb55fb3f17022cc35d5988 Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:33:09 +0200 Subject: [PATCH 06/11] Removed Stupidness. --- .../ClothingSlowResistanceComponent.cs | 6 ++--- ...HystericalStrengthStatusEffectComponent.cs | 13 +++-------- .../HystericalStrengthPowerComponent.cs | 23 ------------------- .../HystericalStrengthPowerSystem.cs | 9 +------- .../_DV/Entities/StatusEffects/psionics.yml | 5 ++++ 5 files changed, 12 insertions(+), 44 deletions(-) diff --git a/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs b/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs index b8579f68910..94f303798cd 100644 --- a/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs +++ b/Content.Shared/_DV/Clothing/Components/ClothingSlowResistanceComponent.cs @@ -2,12 +2,12 @@ using Robust.Shared.GameStates; namespace Content.Shared._DV.Clothing.Components; -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[RegisterComponent, NetworkedComponent] public sealed partial class ClothingSlowResistanceComponent : Component { /// /// Modifier for both walk and sprint slowdown. /// - [DataField, AutoNetworkedField] - public float Modifier = 0.25f; + [DataField(required: true)] + public float Modifier; } diff --git a/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs b/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs index 1a926dde452..cca57146ffb 100644 --- a/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs +++ b/Content.Shared/_DV/Psionics/Components/HystericalStrengthStatusEffectComponent.cs @@ -10,15 +10,8 @@ public sealed partial class HystericalStrengthStatusEffectComponent : Component /// /// The damage dealt to entities that have this effect. /// - [DataField, AutoNetworkedField] - public DamageSpecifier Damage = new() - { - DamageDict = new () - { - { "Asphyxiation", 2.5 }, - { "Bloodloss", 1.5 }, - } - }; + [DataField(required: true)] + public DamageSpecifier Damage; /// /// How long each damage tick is delayed by. @@ -41,6 +34,6 @@ public sealed partial class HystericalStrengthStatusEffectComponent : Component /// /// How much glimmer it generates each damage tick. /// - [DataField, AutoNetworkedField] + [DataField] public int PassiveGlimmerGeneration = 1; } diff --git a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs index 03c0abfd255..2fb6db14638 100644 --- a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs +++ b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs @@ -1,4 +1,3 @@ -using Content.Shared.Damage; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -21,31 +20,9 @@ public sealed partial class HystericalStrengthPowerComponent : BasePsionicPowerC [DataField] public float AddedDensity = 500; - /// - /// The strength of the resistance to the clothing slowdown. - /// - /// - /// 0.75 equals to a 75% resistance to clothing slowdown modifiers. - /// - [DataField] - public float ClothingSlowdownModifier = 0.75f; - /// /// How much glimmer it generates each damage tick. /// [DataField] public int PassiveGlimmerGeneration = 1; - - /// - /// The damage dealt to the psionic when the power is active. - /// - [DataField] - public DamageSpecifier Damage = new() - { - DamageDict = new () - { - { "Asphyxiation", 2.5 }, - { "Bloodloss", 1.5 }, - } - }; } diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index cc0b6226aa0..f91e8479fbb 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -41,16 +41,9 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem(statusEffect, out var resistanceComp) - || !TryComp(statusEffect, out var hystericalEffectComp)) + if (!_statusEffects.TrySetStatusEffectDuration(args.Performer, HystericalStrengthEffectProto, out var statusEffect)) return; - resistanceComp.Modifier = psionic.Comp.ClothingSlowdownModifier; - hystericalEffectComp.Damage = psionic.Comp.Damage; - hystericalEffectComp.PassiveGlimmerGeneration = psionic.Comp.PassiveGlimmerGeneration; - Dirty((statusEffect.Value, resistanceComp, hystericalEffectComp)); - _fixture.TryCreateFixture(args.Performer, new PhysShapeCircle(), _fixtureID, 500, false, friction: 0f); var messageUser = Loc.GetString("psionic-power-hysterical-strength-used"); diff --git a/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml b/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml index f0c2ccdc670..da67feb6db9 100644 --- a/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml +++ b/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml @@ -40,5 +40,10 @@ name: affected by hysterical strength components: - type: HystericalStrengthStatusEffect + damage: + types: + Asphyxiation: 2.5 + Bloodloss: 1.5 - type: ClothingSlowResistance + modifier: 0.75 - type: IgnoreSlowOnDamage From 6bde69dfde9050b48a84a8721aa209f499c8df77 Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:46:17 +0200 Subject: [PATCH 07/11] Small tweak --- .../Systems/PsionicPowers/HystericalStrengthPowerSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index f91e8479fbb..f1bf799c46f 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -41,7 +41,7 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem Date: Thu, 30 Apr 2026 15:45:04 +0200 Subject: [PATCH 08/11] Adhere to the Maintainer God --- .../StatusEffectSystem.Relay.cs | 10 +------ .../HystericalStrengthPowerComponent.cs | 6 ----- .../HystericalStrengthPowerSystem.cs | 1 - .../StatusEffectsSystem.Relay.cs | 27 +++++++++++++++++++ 4 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs diff --git a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs index 6c652f23d71..e7f6adb2ba1 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs @@ -40,15 +40,7 @@ public sealed partial class StatusEffectsSystem SubscribeLocalEvent(RefRelayStatusEffectEvent); - // DeltaV Start - Psionics Refactor - SubscribeLocalEvent(RefRelayStatusEffectEvent); - SubscribeLocalEvent(RefRelayStatusEffectEvent); - SubscribeLocalEvent(RelayStatusEffectEvent); - SubscribeLocalEvent(RefRelayStatusEffectEvent); - SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power - SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power - SubscribeLocalEvent(RefRelayStatusEffectEvent); // For Hysterical Strength Power <- REMOVE THIS IF UPSTREAM ADDS THIS - // DeltaV End - Psionics Refactor + InitializeDeltaV(); // DeltaV - Added DeltaV partial file of the system. } private void RefRelayStatusEffectEvent(EntityUid uid, StatusEffectContainerComponent component, ref T args) where T : struct diff --git a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs index 2fb6db14638..7635e4bf44d 100644 --- a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs +++ b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs @@ -19,10 +19,4 @@ public sealed partial class HystericalStrengthPowerComponent : BasePsionicPowerC /// [DataField] public float AddedDensity = 500; - - /// - /// How much glimmer it generates each damage tick. - /// - [DataField] - public int PassiveGlimmerGeneration = 1; } diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index f1bf799c46f..86c896f86c9 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -1,4 +1,3 @@ -using Content.Shared._DV.Clothing.Components; using Content.Shared._DV.Psionics.Components; using Content.Shared._DV.Psionics.Components.PsionicPowers; using Content.Shared._DV.Psionics.Events; diff --git a/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs b/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs new file mode 100644 index 00000000000..13a7995f17b --- /dev/null +++ b/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs @@ -0,0 +1,27 @@ +using Content.Shared._DV.Clothing.Events; +using Content.Shared._DV.Psionics.Events; +using Content.Shared.Damage.Systems; +using Content.Shared.Mobs; +using Content.Shared.StatusEffectNew.Components; + +namespace Content.Shared.StatusEffectNew; + +/// +/// Partial file for DeltaV specific Status Effects to avoid upstream merge conflicts. +/// +public sealed partial class StatusEffectsSystem +{ + private void InitializeDeltaV() + { + // Psionics + SubscribeLocalEvent(RefRelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); + SubscribeLocalEvent(RelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); + + // Generic + SubscribeLocalEvent(RefRelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); // <- REMOVE THIS IF UPSTREAM ADDS THIS + } +} From 5d8324d52e17bab18a20b8eea9a67acba1c54284 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 13:45:44 +0000 Subject: [PATCH 09/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs b/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs index 13a7995f17b..d49c2aeb261 100644 --- a/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs +++ b/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs @@ -1,4 +1,4 @@ -using Content.Shared._DV.Clothing.Events; +using Content.Shared._DV.Clothing.Events; using Content.Shared._DV.Psionics.Events; using Content.Shared.Damage.Systems; using Content.Shared.Mobs; From b52e4850eb9b84df0d7e60fbb0bef60fb3b5b734 Mon Sep 17 00:00:00 2001 From: Sir Warock <67167466+SirWarock@users.noreply.github.com> Date: Tue, 14 Jul 2026 15:32:41 +0200 Subject: [PATCH 10/11] De-Hardcode Fixture ID --- .../ChangeDensityStatusEffectComponent.cs | 19 ++++++++++ .../ChangeDensityStatusEffectSystem.cs | 30 ++++++++++++++++ .../HystericalStrengthPowerComponent.cs | 6 ++++ .../HystericalStrengthPowerSystem.cs | 36 +++++++------------ .../SubSystems/SharedPsionicSystem.Effects.cs | 1 + .../StatusEffectsSystem.Relay.cs | 1 - .../_DV/Entities/StatusEffects/psionics.yml | 3 ++ 7 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs create mode 100644 Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs diff --git a/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs b/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs new file mode 100644 index 00000000000..522ddad9e83 --- /dev/null +++ b/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._DV.Physics.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ChangeDensityStatusEffectComponent : Component +{ + /// + /// The amount of density added by a new fixture. + /// + [DataField(required: true)] + public int Amount; + + /// + /// The ID of the fixture containing said density. + /// + [DataField(required: true)] + public string FixtureId; +} diff --git a/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs b/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs new file mode 100644 index 00000000000..be5f029aa96 --- /dev/null +++ b/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared._DV.Physics.Components; +using Content.Shared.StatusEffectNew; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared._DV.Physics.Systems; + +/// +/// This takes care of adding and removing Density when the component is added or removed. +/// +public sealed class ChangeDensityStatusEffectSystem : EntitySystem +{ + [Dependency] private readonly FixtureSystem _fixture = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnEffectApplied); + SubscribeLocalEvent(OnEffectRemoved); + } + + private void OnEffectApplied(Entity effect, ref StatusEffectAppliedEvent args) + { + _fixture.TryCreateFixture(args.Target, new PhysShapeCircle(), effect.Comp.FixtureId, effect.Comp.Amount, false, friction: 0f); + } + + private void OnEffectRemoved(Entity effect, ref StatusEffectRemovedEvent args) + { + _fixture.DestroyFixture(args.Target, effect.Comp.FixtureId); + } +} diff --git a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs index 7635e4bf44d..94ebf9c3eef 100644 --- a/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs +++ b/Content.Shared/_DV/Psionics/Components/PsionicPowers/HystericalStrengthPowerComponent.cs @@ -19,4 +19,10 @@ public sealed partial class HystericalStrengthPowerComponent : BasePsionicPowerC /// [DataField] public float AddedDensity = 500; + + /// + /// The prototype ID of the status effect. + /// + [DataField] + public EntProtoId HystericalStrengthEffectProto = "HystericalStrengthStatusEffect"; } diff --git a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs index 86c896f86c9..000e92c0121 100644 --- a/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs +++ b/Content.Shared/_DV/Psionics/Systems/PsionicPowers/HystericalStrengthPowerSystem.cs @@ -8,22 +8,13 @@ using Content.Shared.Mobs; using Content.Shared.Popups; using Content.Shared.StatusEffectNew; using Content.Shared.StatusEffectNew.Components; -using Content.Shared.Stunnable; -using Robust.Shared.Physics.Collision.Shapes; -using Robust.Shared.Physics.Systems; -using Robust.Shared.Prototypes; namespace Content.Shared._DV.Psionics.Systems.PsionicPowers; public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem { [Dependency] private readonly DamageableSystem _damageable = default!; - [Dependency] private readonly FixtureSystem _fixture = default!; [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; - [Dependency] private readonly SharedStunSystem _stun = default!; - - public static readonly EntProtoId HystericalStrengthEffectProto = "HystericalStrengthStatusEffect"; - private readonly string _fixtureID = "HystericalStrengthFixture"; public override void Initialize() { @@ -40,11 +31,9 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem performer, bool toggleOff = false) + private void TogglePowerAction(EntityUid performer, HystericalStrengthPowerComponent? comp = null) { - _statusEffects.TryRemoveStatusEffect(performer, HystericalStrengthEffectProto); - _fixture.DestroyFixture(performer, _fixtureID); - - if (toggleOff && Resolve(performer, ref performer.Comp)) - Action.SetToggled(performer.Comp.ActionEntity, false); + // In case the power wasn't stopped by pressing the ability, we'll need to un-press it ourselves. + if (Resolve(performer, ref comp, false)) + Action.SetToggled(comp.ActionEntity, false); } private void PunishPsionic(EntityUid victim, EntityUid? dispeller = null) { - StopPower(victim, true); + TogglePowerAction(victim); var message = Loc.GetString("psionic-power-hysterical-strength-being-dispelled", ("dispelled", Identity.Entity(victim, EntityManager))); @@ -80,11 +67,13 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem effect, ref StatusEffectRelayedEvent args) { + PredictedQueueDel(effect); PunishPsionic(args.Args.Target, args.Args.Target); } - private void OnActiveSuppressed(Entity ent, ref StatusEffectRelayedEvent args) + private void OnActiveSuppressed(Entity effect, ref StatusEffectRelayedEvent args) { + PredictedQueueDel(effect); PunishPsionic(args.Args.Victim, args.Args.Victim); } @@ -93,7 +82,8 @@ public sealed class HystericalStrengthPowerSystem : BasePsionicPowerSystem>(OnPowerUseAttempt); diff --git a/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs b/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs index d49c2aeb261..71c317a6abc 100644 --- a/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs +++ b/Content.Shared/_DV/StatusEffectNew/StatusEffectsSystem.Relay.cs @@ -22,6 +22,5 @@ public sealed partial class StatusEffectsSystem // Generic SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RefRelayStatusEffectEvent); - SubscribeLocalEvent(RefRelayStatusEffectEvent); // <- REMOVE THIS IF UPSTREAM ADDS THIS } } diff --git a/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml b/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml index 33639e8778c..78aa6c4d467 100644 --- a/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml +++ b/Resources/Prototypes/_DV/Entities/StatusEffects/psionics.yml @@ -53,6 +53,9 @@ types: Asphyxiation: 2.5 Bloodloss: 1.5 + - type: ChangeDensityStatusEffect + amount: 500 + fixtureId: HystericalStrengthStatusEffectFixture - type: ClothingSlowResistance modifier: 0.75 - type: IgnoreSlowOnDamage From cc47d391d9a8be826790390cf2afa5acfc70c839 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:33:43 +0000 Subject: [PATCH 11/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../Physics/Components/ChangeDensityStatusEffectComponent.cs | 2 +- .../_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs b/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs index 522ddad9e83..48098c4ff67 100644 --- a/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs +++ b/Content.Shared/_DV/Physics/Components/ChangeDensityStatusEffectComponent.cs @@ -1,4 +1,4 @@ -using Robust.Shared.GameStates; +using Robust.Shared.GameStates; namespace Content.Shared._DV.Physics.Components; diff --git a/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs b/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs index be5f029aa96..e00c919db05 100644 --- a/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs +++ b/Content.Shared/_DV/Physics/Systems/ChangeDensityStatusEffectSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared._DV.Physics.Components; +using Content.Shared._DV.Physics.Components; using Content.Shared.StatusEffectNew; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Systems;