]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Override under-pressure lock-out in air alarm "Fill" mode (#28909)
authorMjrLandWhale <brandonemitch@gmail.com>
Thu, 13 Jun 2024 23:25:02 +0000 (18:25 -0500)
committerGitHub <noreply@github.com>
Thu, 13 Jun 2024 23:25:02 +0000 (15:25 -0800)
Content.Server/Atmos/Piping/Unary/Components/GasVentPumpComponent.cs
Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs
Content.Shared/Atmos/Piping/Unary/Components/SharedVentPumpComponent.cs
Resources/ServerInfo/Guidebook/Engineering/Fires.xml

index 32cf1cac6f850a6e014045dfe2cec41b0703bf73..2ba4603a9bd00cda2c7cf34a1d4dc10e4a3a6754 100644 (file)
@@ -135,6 +135,10 @@ namespace Content.Server.Atmos.Piping.Unary.Components
         [ViewVariables(VVAccess.ReadWrite)]
         [DataField("depressurizePressure")]
         public float DepressurizePressure = 0;
+
+        // When true, ignore under-pressure lockout. Used to re-fill rooms in air alarm "Fill" mode.
+        [DataField]
+        public bool PressureLockoutOverride = false;
         #endregion
 
         public GasVentPumpData ToAirAlarmData()
@@ -146,7 +150,8 @@ namespace Content.Server.Atmos.Piping.Unary.Components
                 PumpDirection = PumpDirection,
                 PressureChecks = PressureChecks,
                 ExternalPressureBound = ExternalPressureBound,
-                InternalPressureBound = InternalPressureBound
+                InternalPressureBound = InternalPressureBound,
+                PressureLockoutOverride = PressureLockoutOverride
             };
         }
 
@@ -158,6 +163,7 @@ namespace Content.Server.Atmos.Piping.Unary.Components
             PressureChecks = data.PressureChecks;
             ExternalPressureBound = data.ExternalPressureBound;
             InternalPressureBound = data.InternalPressureBound;
+            PressureLockoutOverride = data.PressureLockoutOverride;
         }
     }
 }
index 7c12cf3f77f65a5aced29afe1617d1c3a966c99e..8951f8a9474dd538376389e4c4aa989f694e5381 100644 (file)
@@ -108,7 +108,8 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
                 // (ignoring temperature differences because I am lazy)
                 var transferMoles = pressureDelta * environment.Volume / (pipe.Air.Temperature * Atmospherics.R);
 
-                if (vent.UnderPressureLockout)
+                // Only run if the device is under lockout and not being overriden
+                if (vent.UnderPressureLockout & !vent.PressureLockoutOverride)
                 {
                     // Leak only a small amount of gas as a proportion of supply pipe pressure.
                     var pipeDelta = pipe.Air.Pressure - environment.Pressure;
@@ -280,7 +281,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
                 return;
             if (args.IsInDetailsRange)
             {
-                if (pumpComponent.UnderPressureLockout)
+                if (pumpComponent.UnderPressureLockout & !pumpComponent.PressureLockoutOverride)
                 {
                     args.PushMarkup(Loc.GetString("gas-vent-pump-uvlo"));
                 }
index 404c197868217033a55ab86b02455784d2c113a9..15fece204d0747375520403c8eda70e6f407a1a9 100644 (file)
@@ -13,6 +13,7 @@ namespace Content.Shared.Atmos.Piping.Unary.Components
         public VentPressureBound PressureChecks { get; set; } = VentPressureBound.ExternalBound;
         public float ExternalPressureBound { get; set; } = Atmospherics.OneAtmosphere;
         public float InternalPressureBound { get; set; } = 0f;
+        public bool PressureLockoutOverride { get; set; } = false;
 
         // Presets for 'dumb' air alarm modes
 
@@ -22,7 +23,8 @@ namespace Content.Shared.Atmos.Piping.Unary.Components
             PumpDirection = VentPumpDirection.Releasing,
             PressureChecks = VentPressureBound.ExternalBound,
             ExternalPressureBound = Atmospherics.OneAtmosphere,
-            InternalPressureBound = 0f
+            InternalPressureBound = 0f,
+            PressureLockoutOverride = false
         };
 
         public static GasVentPumpData FillModePreset = new GasVentPumpData
@@ -32,7 +34,8 @@ namespace Content.Shared.Atmos.Piping.Unary.Components
             PumpDirection = VentPumpDirection.Releasing,
             PressureChecks = VentPressureBound.ExternalBound,
             ExternalPressureBound = Atmospherics.OneAtmosphere * 50,
-            InternalPressureBound = 0f
+            InternalPressureBound = 0f,
+            PressureLockoutOverride = true
         };
 
         public static GasVentPumpData PanicModePreset = new GasVentPumpData
@@ -42,7 +45,8 @@ namespace Content.Shared.Atmos.Piping.Unary.Components
             PumpDirection = VentPumpDirection.Releasing,
             PressureChecks = VentPressureBound.ExternalBound,
             ExternalPressureBound = Atmospherics.OneAtmosphere,
-            InternalPressureBound = 0f
+            InternalPressureBound = 0f,
+            PressureLockoutOverride = false
         };
 
         public static GasVentPumpData ReplaceModePreset = new GasVentPumpData
@@ -53,7 +57,8 @@ namespace Content.Shared.Atmos.Piping.Unary.Components
             PumpDirection = VentPumpDirection.Releasing,
             PressureChecks = VentPressureBound.ExternalBound,
             ExternalPressureBound = Atmospherics.OneAtmosphere,
-            InternalPressureBound = 0f
+            InternalPressureBound = 0f,
+            PressureLockoutOverride = false
         };
     }
 
index e2c83956cc6b7d4eae793139ec5d16fdf798fc96..916a89444fd45bb92a45041fb07ad1d1ee09c53e 100644 (file)
@@ -4,9 +4,23 @@
   Fires and spacings are an inevitability due to the highly flammable plasma gas and the endless vacuum of space present in and around the station, so it's important to know how to manage them.
 
   ## Spacing
-  Space is arguably the easier of the two to handle.
-  While it does render an area uninhabitable, it can be trivially solved by simply sealing the hole that resulted in the vacuum. After that, assuming distro vents and pipes have not been destroyed in some unfortunate accident, the room will slowly begin to repressurize.
-  Be aware; active spacings will slowly siphon the air out of the station's air reserves. If you find it impossible to fix structural damage due to some other hazard, make sure to limit the airflow to that room. (Currently only half-valid due to the Gas Miners infinitely replenishing most of the useful gases)
+  Space is arguably the easier of the two to handle. Be aware; active spacings will slowly siphon the air out of the station's air reserves. If you find it impossible to fix structural damage due to some other hazard, make sure to limit the airflow to that room. (Currently only half-valid due to the Gas Miners infinitely replenishing most of the useful gases)
+
+  While it does render an area uninhabitable, it can be trivially solved by simply following a two step process. Step one is to seal the hole that caused the vacuum.
+
+  Step two is to repressurize the affected area. Note that the affected area will NOT fill from the station's distro network by default. Some atmospheric devices, specifically air vents, have built-in safeguards that cause the device to be disabled if pressure in a room drops too low. This features prevents spacings from venting the distro network unintentionally.
+
+  As a result, there are three main options to repressurize the affected area:
+
+  1. Assuming distro vents and pipes have not been destroyed in some unfortunate accident, you may set surrounding air alarms to the "Fill" setting. This will cause connected air vents to override their safeguards and begin repressurizing the area.
+    - Be aware this setting also allows vents to OVERpressure a room, so this process must be monitored at all times.
+
+  2. Another option is to open any firelocks that were engaged in response to the original spacing. This will cause the pressure to equalize between both areas.
+    - This option generally causes more firelocks to engage in the surrounding area, potentially causing disruptions or making the second area unsafe for station crew.
+
+  3. The final option is to bring a canister into the spaced area and open its release valve. An air canister at 4500kpa can fully repressurize around 20-30 tiles before running out of gas.
+    - This option requires the canister be brought in from outisde (generally atmos) which can be slow and time consuming depending on the situation.
+
 
   ## Fires
   Fires can be dealt with through a multitude of ways, but some of the most effective methods include: