diff --git a/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs b/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs index 6d969ed937..e73c25a510 100644 --- a/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs +++ b/Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs @@ -51,7 +51,16 @@ public sealed partial class AirAlarmWindow : DefaultWindow foreach (var mode in Enum.GetValues()) { - _modes.AddItem($"{mode}", (int) mode); + var text = mode switch + { + AirAlarmMode.Filtering => "air-alarm-ui-mode-filtering", + AirAlarmMode.WideFiltering => "air-alarm-ui-mode-wide-filtering", + AirAlarmMode.Fill => "air-alarm-ui-mode-fill", + AirAlarmMode.Panic => "air-alarm-ui-mode-panic", + AirAlarmMode.None => "air-alarm-ui-mode-none", + _ => "error" + }; + _modes.AddItem(Loc.GetString(text)); } _modes.OnItemSelected += args => diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs index dbc5bebbca..d794be0d56 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs @@ -56,6 +56,7 @@ public interface IAirAlarmModeUpdate public sealed class AirAlarmModeFactory { private static IAirAlarmMode _filterMode = new AirAlarmFilterMode(); + private static IAirAlarmMode _wideFilterMode = new AirAlarmWideFilterMode(); private static IAirAlarmMode _fillMode = new AirAlarmFillMode(); private static IAirAlarmMode _panicMode = new AirAlarmPanicMode(); private static IAirAlarmMode _noneMode = new AirAlarmNoneMode(); @@ -67,6 +68,7 @@ public sealed class AirAlarmModeFactory return mode switch { AirAlarmMode.Filtering => _filterMode, + AirAlarmMode.WideFiltering => _wideFilterMode, AirAlarmMode.Fill => _fillMode, AirAlarmMode.Panic => _panicMode, AirAlarmMode.None => _noneMode, @@ -133,6 +135,25 @@ public sealed class AirAlarmFilterMode : AirAlarmModeExecutor } } +public sealed class AirAlarmWideFilterMode : AirAlarmModeExecutor +{ + public override void Execute(EntityUid uid) + { + if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm)) + return; + + foreach (var (addr, device) in alarm.VentData) + { + AirAlarmSystem.SetData(uid, addr, GasVentPumpData.FilterModePreset); + } + + foreach (var (addr, device) in alarm.ScrubberData) + { + AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.WideFilterModePreset); + } + } +} + public sealed class AirAlarmPanicMode : AirAlarmModeExecutor { public override void Execute(EntityUid uid) diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index 3cb6bc1eb7..a8bacefd73 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -299,7 +299,7 @@ public sealed class AirAlarmSystem : EntitySystem if (args.AlarmType == AtmosAlarmType.Danger) { - SetMode(uid, addr, AirAlarmMode.Panic, true, false); + SetMode(uid, addr, AirAlarmMode.WideFiltering, true, false); } else if (args.AlarmType == AtmosAlarmType.Normal || args.AlarmType == AtmosAlarmType.Warning) { diff --git a/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs b/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs index 371d051fbc..5c50f85c17 100644 --- a/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs +++ b/Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs @@ -13,6 +13,7 @@ public enum AirAlarmMode { None, Filtering, + WideFiltering, Fill, Panic, } diff --git a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs index c84d1f1ee0..2ef5cebba5 100644 --- a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs +++ b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs @@ -36,6 +36,15 @@ namespace Content.Shared.Atmos.Piping.Unary.Components WideNet = false }; + public static GasVentScrubberData WideFilterModePreset = new GasVentScrubberData + { + Enabled = true, + FilterGases = new(GasVentScrubberData.DefaultFilterGases), + PumpDirection = ScrubberPumpDirection.Scrubbing, + VolumeRate = 200f, + WideNet = true + }; + public static GasVentScrubberData FillModePreset = new GasVentScrubberData { Enabled = false, diff --git a/Resources/Locale/en-US/atmos/air-alarm-ui.ftl b/Resources/Locale/en-US/atmos/air-alarm-ui.ftl index 871a16eace..05b5ae64c0 100644 --- a/Resources/Locale/en-US/atmos/air-alarm-ui.ftl +++ b/Resources/Locale/en-US/atmos/air-alarm-ui.ftl @@ -24,6 +24,12 @@ air-alarm-ui-window-tab-sensors = Sensors air-alarm-ui-gases = {$gas}: {$amount} mol ({$percentage}%) +air-alarm-ui-mode-filtering = Filtering +air-alarm-ui-mode-wide-filtering = Filtering (wide) +air-alarm-ui-mode-fill = Fill +air-alarm-ui-mode-panic = Panic +air-alarm-ui-mode-none = None + ## Widgets ### General diff --git a/Resources/Prototypes/Atmospherics/thresholds.yml b/Resources/Prototypes/Atmospherics/thresholds.yml index a68e5021ae..2d02b7b3fc 100644 --- a/Resources/Prototypes/Atmospherics/thresholds.yml +++ b/Resources/Prototypes/Atmospherics/thresholds.yml @@ -2,7 +2,7 @@ id: stationTemperature upperBound: 393.15 # T20C + 200 lowerBound: 193.15 # T20C - 100 - upperWarnAround: 0.7 + upperWarnAround: 0.8 lowerWarnAround: 1.1 - type: alarmThreshold @@ -12,6 +12,11 @@ upperWarnAround: 0.7 lowerWarnAround: 2.5 +# a reminder that all of these are percentages (where 1 is 100%), +# so 0.01 is 1%, +# 0.0001 is 0.01% +# etc. + - type: alarmThreshold id: stationOxygen lowerBound: 0.10 @@ -24,12 +29,12 @@ - type: alarmThreshold id: stationNO - upperBound: 0.0025 + upperBound: 0.01 upperWarnAround: 0.5 - type: alarmThreshold id: stationMiasma - upperBound: 0.0025 + upperBound: 0.05 upperWarnAround: 0.5 - type: alarmThreshold