From db81438d30f83a542abe6c81c2ce4a5040aa3ddb Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Mon, 18 Mar 2024 17:46:31 +0100 Subject: [PATCH] Fix barotrauma pressure protection (#26236) Oops In #26217 I re-organized the logic for the calculation. Part of that was moving the logic for GetFeltLowPressure and GetFeltHighPressure to be done before we actually check the hazard thresholds. What I didn't realize is that, with how our pressure protection is set up, these functions can return values so extreme they rebound into the other category. For example, according to the math, when you're wearing a hardsuit in a low-pressure environment you have "felt" pressure of 1000 kPa. Yeah that's not right. Now these functions clamp their result to OneAtmosphere, in the appropriate direction (101.3 kPa). Fixes #26234 --- Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs index 2b1d6b526b..98a5ffa70a 100644 --- a/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs +++ b/Content.Server/Atmos/EntitySystems/BarotraumaSystem.cs @@ -149,7 +149,8 @@ namespace Content.Server.Atmos.EntitySystems return Atmospherics.OneAtmosphere; } - return (environmentPressure + barotrauma.LowPressureModifier) * (barotrauma.LowPressureMultiplier); + var modified = (environmentPressure + barotrauma.LowPressureModifier) * (barotrauma.LowPressureMultiplier); + return Math.Min(modified, Atmospherics.OneAtmosphere); } /// @@ -162,7 +163,8 @@ namespace Content.Server.Atmos.EntitySystems return Atmospherics.OneAtmosphere; } - return (environmentPressure + barotrauma.HighPressureModifier) * (barotrauma.HighPressureMultiplier); + var modified = (environmentPressure + barotrauma.HighPressureModifier) * (barotrauma.HighPressureMultiplier); + return Math.Max(modified, Atmospherics.OneAtmosphere); } public bool TryGetPressureProtectionValues(