Skip to content

Commit 5148a44

Browse files
authored
PressureImmunity StatusEffects (#43667)
* PressureImmunityStatusEffects * System * fix * fix 2 * oops * review * review * fix * Update PressureImmunityStatusEffectSystem.cs * PermanentStatusEffectsSystem * fix * oops
1 parent a86b131 commit 5148a44

13 files changed

Lines changed: 88 additions & 35 deletions

File tree

Content.Server/Atmos/Components/PressureImmunityComponent.cs

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Content.Server.Atmos.Components;
2+
3+
/// <summary>
4+
/// Grants immunity to barotrauma while present either as a direct component or as a status effect.
5+
/// </summary>
6+
[RegisterComponent]
7+
public sealed partial class PressureImmunityStatusEffectComponent : Component;

Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public sealed partial class BarotraumaSystem : EntitySystem
1818
[Dependency] private AtmosphereSystem _atmosphereSystem = default!;
1919
[Dependency] private DamageableSystem _damageableSystem = default!;
2020
[Dependency] private AlertsSystem _alertsSystem = default!;
21-
[Dependency] private IAdminLogManager _adminLogger= default!;
21+
[Dependency] private IAdminLogManager _adminLogger = default!;
2222
[Dependency] private InventorySystem _inventorySystem = default!;
2323

2424
private const float UpdateTimer = 1f;
@@ -28,27 +28,14 @@ public override void Initialize()
2828
{
2929
SubscribeLocalEvent<PressureProtectionComponent, GotEquippedEvent>(OnPressureProtectionEquipped);
3030
SubscribeLocalEvent<PressureProtectionComponent, GotUnequippedEvent>(OnPressureProtectionUnequipped);
31-
SubscribeLocalEvent<PressureProtectionComponent, ComponentInit>(OnUpdateResistance);
31+
SubscribeLocalEvent<PressureProtectionComponent, ComponentStartup>(OnUpdateResistance);
3232
SubscribeLocalEvent<PressureProtectionComponent, ComponentRemove>(OnUpdateResistance);
33-
34-
SubscribeLocalEvent<PressureImmunityComponent, ComponentInit>(OnPressureImmuneInit);
35-
SubscribeLocalEvent<PressureImmunityComponent, ComponentRemove>(OnPressureImmuneRemove);
3633
}
3734

38-
private void OnPressureImmuneInit(EntityUid uid, PressureImmunityComponent pressureImmunity, ComponentInit args)
35+
[SubscribeLocalEvent]
36+
private void OnBarotraumaInit(Entity<BarotraumaComponent> ent, ref MapInitEvent args)
3937
{
40-
if (TryComp<BarotraumaComponent>(uid, out var barotrauma))
41-
{
42-
barotrauma.HasImmunity = true;
43-
}
44-
}
45-
46-
private void OnPressureImmuneRemove(EntityUid uid, PressureImmunityComponent pressureImmunity, ComponentRemove args)
47-
{
48-
if (TryComp<BarotraumaComponent>(uid, out var barotrauma))
49-
{
50-
barotrauma.HasImmunity = false;
51-
}
38+
RefreshPressureImmunity(ent, ent.Comp);
5239
}
5340

5441
/// <summary>
@@ -168,6 +155,19 @@ public float GetFeltHighPressure(EntityUid uid, BarotraumaComponent barotrauma,
168155
return Math.Max(modified, Atmospherics.OneAtmosphere);
169156
}
170157

158+
/// <summary>
159+
/// Refreshes whether the entity is immune to pressure damage.
160+
/// </summary>
161+
public void RefreshPressureImmunity(EntityUid uid, BarotraumaComponent? barotrauma = null)
162+
{
163+
if (!Resolve(uid, ref barotrauma, false))
164+
return;
165+
166+
var ev = new RefreshPressureImmunityEvent();
167+
RaiseLocalEvent(uid, ref ev);
168+
barotrauma.HasImmunity = ev.IsImmune;
169+
}
170+
171171
public bool TryGetPressureProtectionValues(
172172
Entity<PressureProtectionComponent?> ent,
173173
[NotNullWhen(true)] out float? highMultiplier,
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Content.Server.Atmos.Components;
2+
using Content.Shared.Atmos;
3+
using Content.Shared.StatusEffectNew;
4+
using Robust.Shared.Prototypes;
5+
6+
namespace Content.Server.Atmos.EntitySystems;
7+
8+
/// <summary>
9+
/// Responds to pressure immunity refreshes for the active status effect.
10+
/// </summary>
11+
public sealed partial class PressureImmunityStatusEffectSystem : EntitySystem
12+
{
13+
public static readonly EntProtoId PressureImmunityEffect = "StatusEffectPressureImmunity";
14+
15+
[Dependency] private BarotraumaSystem _barotrauma = default!;
16+
17+
[SubscribeLocalEvent]
18+
private void OnPressureImmunityStatusApplied(Entity<PressureImmunityStatusEffectComponent> ent, ref StatusEffectAppliedEvent args)
19+
{
20+
_barotrauma.RefreshPressureImmunity(args.Target);
21+
}
22+
23+
[SubscribeLocalEvent]
24+
private void OnPressureImmunityStatusRemoved(Entity<PressureImmunityStatusEffectComponent> ent, ref StatusEffectRemovedEvent args)
25+
{
26+
_barotrauma.RefreshPressureImmunity(args.Target);
27+
}
28+
29+
[SubscribeLocalEvent]
30+
private void OnRefreshPressureImmunity(Entity<PressureImmunityStatusEffectComponent> ent, ref StatusEffectRelayedEvent<RefreshPressureImmunityEvent> args)
31+
{
32+
args.Args = args.Args with { IsImmune = true };
33+
}
34+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace Content.Shared.Atmos;
2+
3+
/// <summary>
4+
/// Raised on an entity to refresh whether it is currently immune to pressure damage.
5+
/// </summary>
6+
[ByRefEvent]
7+
public record struct RefreshPressureImmunityEvent
8+
{
9+
public bool IsImmune;
10+
}

Content.Shared/StatusEffectNew/Components/PermanentStatusEffectsComponent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ public sealed partial class PermanentStatusEffectsComponent : Component
1313
/// The status effects to apply.
1414
/// </summary>
1515
[DataField(required: true)]
16-
public HashSet<EntProtoId> StatusEffects = new();
16+
public HashSet<EntProtoId> StatusEffects = [];
1717
}

Content.Shared/StatusEffectNew/StatusEffectSystem.Relay.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Content.Shared.Body.Events;
2+
using Content.Shared.Atmos;
23
using Content.Shared.Chat;
34
using Content.Shared.Damage.Events;
45
using Content.Shared.Damage.Systems;
@@ -51,6 +52,7 @@ private void InitializeRelay()
5152

5253
SubscribeLocalEvent<StatusEffectContainerComponent, BleedModifierEvent>(RefRelayStatusEffectEvent);
5354
SubscribeLocalEvent<StatusEffectContainerComponent, DamageModifyEvent>(RelayStatusEffectEvent);
55+
SubscribeLocalEvent<StatusEffectContainerComponent, RefreshPressureImmunityEvent>(RefRelayStatusEffectEvent);
5456
}
5557

5658
private void RefRelayStatusEffectEvent<T>(EntityUid uid, StatusEffectContainerComponent component, ref T args) where T : struct

Resources/Locale/en-US/guidebook/entity-effects/statuseffects.ftl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ entity-effect-status-effect-SeeingRainbows = hallucinations
55
entity-effect-status-effect-Stutter = stuttering
66
entity-effect-status-effect-ForcedSleep = unconsciousness
77
entity-effect-status-effect-Drunk = drunkenness
8-
entity-effect-status-effect-PressureImmunity = pressure immunity
98
entity-effect-status-effect-Pacified = combat pacification
109
entity-effect-status-effect-StaminaModifier = modified stamina
1110
entity-effect-status-effect-RadiationProtection = radiation protection

Resources/Prototypes/Body/species_base.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@
7272
- type: StatusEffects
7373
allowed:
7474
- Electrocution
75-
- PressureImmunity
7675
- Pacified
7776
- Flashed
7877
- Adrenaline

Resources/Prototypes/Entities/Mobs/NPCs/animals.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3450,7 +3450,9 @@
34503450
tags:
34513451
- DoorBumpOpener
34523452
- type: MovementAlwaysTouching
3453-
- type: PressureImmunity
3453+
- type: PermanentStatusEffects
3454+
statusEffects:
3455+
- StatusEffectPressureImmunity
34543456
- type: ProtectedFromStepTriggers
34553457
- type: Insulated
34563458
- type: InteractionPopup

0 commit comments

Comments
 (0)