diff --git a/Content.Shared/Eye/Blinding/Components/TemporaryBlindnessComponent.cs b/Content.Shared/Eye/Blinding/Components/BlindnessStatusEffectComponent.cs similarity index 55% rename from Content.Shared/Eye/Blinding/Components/TemporaryBlindnessComponent.cs rename to Content.Shared/Eye/Blinding/Components/BlindnessStatusEffectComponent.cs index 1f89c3df86..7e8016d8d7 100644 --- a/Content.Shared/Eye/Blinding/Components/TemporaryBlindnessComponent.cs +++ b/Content.Shared/Eye/Blinding/Components/BlindnessStatusEffectComponent.cs @@ -3,9 +3,7 @@ using Robust.Shared.GameStates; namespace Content.Shared.Eye.Blinding.Components; /// -/// Component used for the blind status effect. +/// Prevents the target from seeing while active. /// [NetworkedComponent, RegisterComponent] -public sealed partial class TemporaryBlindnessComponent : Component -{ -} +public sealed partial class BlindnessStatusEffectComponent : Component; diff --git a/Content.Shared/Eye/Blinding/Systems/BlindnessSystem.cs b/Content.Shared/Eye/Blinding/Systems/BlindnessSystem.cs new file mode 100644 index 0000000000..79822485d0 --- /dev/null +++ b/Content.Shared/Eye/Blinding/Systems/BlindnessSystem.cs @@ -0,0 +1,47 @@ +using Content.Shared.Eye.Blinding.Components; +using Content.Shared.Flash; +using Content.Shared.StatusEffectNew; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Eye.Blinding.Systems; + +public sealed class BlindnessSystem : EntitySystem +{ + public static readonly EntProtoId BlindingStatusEffect = "StatusEffectBlindness"; + + [Dependency] private readonly BlindableSystem _blindableSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnApplied); + SubscribeLocalEvent(OnRemoved); + SubscribeLocalEvent>(OnBlindTrySee); + SubscribeLocalEvent>(OnFlashAttempt); + } + + private void OnApplied(Entity ent, ref StatusEffectAppliedEvent args) + { + _blindableSystem.UpdateIsBlind(args.Target); + } + + private void OnRemoved(Entity ent, ref StatusEffectRemovedEvent args) + { + _blindableSystem.UpdateIsBlind(args.Target); + } + + private void OnBlindTrySee(Entity ent, ref StatusEffectRelayedEvent args) + { + var ev = args.Args; + ev.Cancel(); + args.Args = ev; + } + + private void OnFlashAttempt(Entity ent, ref StatusEffectRelayedEvent args) + { + var ev = args.Args; + ev.Cancelled = true; + args.Args = ev; + } +} diff --git a/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs b/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs index 0b4353eeda..cf1dc2f15d 100644 --- a/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs +++ b/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.StatusEffect; +using Content.Shared.StatusEffectNew; using Content.Shared.Inventory; using Content.Shared.Eye.Blinding.Components; using Content.Shared.Tools.Components; @@ -55,9 +55,9 @@ namespace Content.Shared.Eye.Blinding.Systems // how much damage they already accumulated. _blindingSystem.AdjustEyeDamage((args.User, blindable), 1); var statusTimeSpan = TimeSpan.FromSeconds(time * MathF.Sqrt(blindable.EyeDamage)); - _statusEffectsSystem.TryAddStatusEffect(args.User, TemporaryBlindnessSystem.BlindingStatusEffect, - statusTimeSpan, false, TemporaryBlindnessSystem.BlindingStatusEffect); + _statusEffectsSystem.TryAddStatusEffectDuration(args.User, BlindnessSystem.BlindingStatusEffect, statusTimeSpan); } + private void OnWelderToggled(EntityUid uid, RequiresEyeProtectionComponent component, ItemToggledEvent args) { component.Toggled = args.Activated; diff --git a/Content.Shared/Eye/Blinding/Systems/TemporaryBlindnessSystem.cs b/Content.Shared/Eye/Blinding/Systems/TemporaryBlindnessSystem.cs deleted file mode 100644 index 34680b12ef..0000000000 --- a/Content.Shared/Eye/Blinding/Systems/TemporaryBlindnessSystem.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Shared.Eye.Blinding.Components; -using Content.Shared.StatusEffect; -using Robust.Shared.Prototypes; - -namespace Content.Shared.Eye.Blinding.Systems; - -public sealed class TemporaryBlindnessSystem : EntitySystem -{ - public static readonly ProtoId BlindingStatusEffect = "TemporaryBlindness"; - - [Dependency] private readonly BlindableSystem _blindableSystem = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnBlindTrySee); - } - - private void OnStartup(EntityUid uid, TemporaryBlindnessComponent component, ComponentStartup args) - { - _blindableSystem.UpdateIsBlind(uid); - } - - private void OnShutdown(EntityUid uid, TemporaryBlindnessComponent component, ComponentShutdown args) - { - _blindableSystem.UpdateIsBlind(uid); - } - - private void OnBlindTrySee(EntityUid uid, TemporaryBlindnessComponent component, CanSeeAttemptEvent args) - { - if (component.LifeStage <= ComponentLifeStage.Running) - args.Cancel(); - } -} diff --git a/Content.Shared/Flash/SharedFlashSystem.cs b/Content.Shared/Flash/SharedFlashSystem.cs index 30f11efdeb..ada70e49b8 100644 --- a/Content.Shared/Flash/SharedFlashSystem.cs +++ b/Content.Shared/Flash/SharedFlashSystem.cs @@ -61,7 +61,6 @@ public abstract class SharedFlashSystem : EntitySystem SubscribeLocalEvent(OnRangedInteract); SubscribeLocalEvent(OnLightToggle); SubscribeLocalEvent(OnPermanentBlindnessFlashAttempt); - SubscribeLocalEvent(OnTemporaryBlindnessFlashAttempt); Subs.SubscribeWithRelay(OnFlashImmunityFlashAttempt, held: false); SubscribeLocalEvent(OnExamine); } @@ -273,11 +272,6 @@ public abstract class SharedFlashSystem : EntitySystem args.Cancelled = true; } - private void OnTemporaryBlindnessFlashAttempt(Entity ent, ref FlashAttemptEvent args) - { - args.Cancelled = true; - } - private void OnFlashImmunityFlashAttempt(Entity ent, ref FlashAttemptEvent args) { if (TryComp(ent, out var mask) && mask.IsToggled) diff --git a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs index cf81f66d9f..77fe0cb612 100644 --- a/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs +++ b/Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs @@ -1,6 +1,8 @@ using Content.Shared.Body.Events; using Content.Shared.Damage.Events; using Content.Shared.Damage.Systems; +using Content.Shared.Eye.Blinding.Systems; +using Content.Shared.Flash; using Content.Shared.Mobs.Events; using Content.Shared.Movement.Events; using Content.Shared.Movement.Systems; @@ -29,6 +31,8 @@ public sealed partial class StatusEffectsSystem SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RefRelayStatusEffectEvent); + SubscribeLocalEvent(RelayStatusEffectEvent); + SubscribeLocalEvent(RefRelayStatusEffectEvent); SubscribeLocalEvent(RelayStatusEffectEvent); SubscribeLocalEvent(RelayStatusEffectEvent); diff --git a/Resources/Locale/en-US/guidebook/entity-effects/statuseffects.ftl b/Resources/Locale/en-US/guidebook/entity-effects/statuseffects.ftl index 435041dc68..98c97ed138 100644 --- a/Resources/Locale/en-US/guidebook/entity-effects/statuseffects.ftl +++ b/Resources/Locale/en-US/guidebook/entity-effects/statuseffects.ftl @@ -1,7 +1,6 @@ entity-effect-status-effect-Stun = stunning entity-effect-status-effect-KnockedDown = knockdown entity-effect-status-effect-Jitter = jittering -entity-effect-status-effect-TemporaryBlindness = blindness entity-effect-status-effect-SeeingRainbows = hallucinations entity-effect-status-effect-Muted = inability to speak entity-effect-status-effect-Stutter = stuttering diff --git a/Resources/Prototypes/Body/species_base.yml b/Resources/Prototypes/Body/species_base.yml index 4716e3ca7f..d03b2f3e2c 100644 --- a/Resources/Prototypes/Body/species_base.yml +++ b/Resources/Prototypes/Body/species_base.yml @@ -75,7 +75,6 @@ - RatvarianLanguage - PressureImmunity - Muted - - TemporaryBlindness - Pacified - Flashed - Adrenaline diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml index f790b4abf9..61eb23c929 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml @@ -19,7 +19,6 @@ - type: StatusEffects allowed: - Electrocution - - TemporaryBlindness - Adrenaline - type: StandingState - type: Tag diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml index 0bdfcdfa27..1fda20dbf3 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml @@ -19,7 +19,6 @@ - type: StatusEffects allowed: - Electrocution - - TemporaryBlindness - Pacified - Flashed - Adrenaline @@ -91,7 +90,6 @@ - type: StatusEffects allowed: - Electrocution - - TemporaryBlindness - Pacified - Flashed - Adrenaline diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 7a1dbd7144..6f8b225ed7 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -104,7 +104,6 @@ - type: StatusEffects # Overwriting basesimplemob to remove flash, getting flashed as dragon just feelsbad allowed: - Electrocution - - TemporaryBlindness - Pacified - Adrenaline - type: Temperature diff --git a/Resources/Prototypes/Entities/StatusEffects/misc.yml b/Resources/Prototypes/Entities/StatusEffects/misc.yml index 14c6b5b649..430003fe8f 100644 --- a/Resources/Prototypes/Entities/StatusEffects/misc.yml +++ b/Resources/Prototypes/Entities/StatusEffects/misc.yml @@ -92,3 +92,16 @@ parent: [ StatusEffectWoozy, StatusEffectSlurred ] id: StatusEffectDrunk name: drunk + +# Prevents the target from seeing +- type: entity + parent: MobStatusEffectDebuff + id: StatusEffectBlindness + name: temporary blindness + components: + - type: StatusEffect + whitelist: + components: + - MobState + - Blindable + - type: BlindnessStatusEffect diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index 65674bb5a2..87828bc000 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -388,9 +388,9 @@ min: 20 probability: 0.03 #If anyone wants to add a light dimming or grayscale effect when under 20u, be my guest - - !type:GenericStatusEffect - key: TemporaryBlindness - component: TemporaryBlindness + - !type:ModifyStatusEffect + effectProto: StatusEffectBlindness + type: Add conditions: - !type:ReagentCondition reagent: NorepinephricAcid @@ -441,9 +441,9 @@ - !type:Emote emote: Cough probability: 0.08 - - !type:GenericStatusEffect - key: TemporaryBlindness - component: TemporaryBlindness + - !type:ModifyStatusEffect + effectProto: StatusEffectBlindness + type: Add conditions: - !type:ReagentCondition reagent: TearGas diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index c40b26fe85..201e1e2aa1 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -41,9 +41,6 @@ id: Corporeal alert: Corporeal -- type: statusEffect - id: TemporaryBlindness - - type: statusEffect id: Pacified #cannot attack