diff --git a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs index 1bb48d76a0..8abba18f55 100644 --- a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs @@ -20,14 +20,18 @@ public sealed class FrezonProductionReaction : IGasReactionEffect var efficiency = mixture.Temperature / Atmospherics.FrezonProductionMaxEfficiencyTemperature; var loss = 1 - efficiency; + // How much the catalyst (N2) will allow us to produce // Less N2 is required the more efficient it is. - var minimumN2 = (initialOxy + initialTrit) / (Atmospherics.FrezonProductionNitrogenRatio * efficiency); + var catalystLimit = initialN2 * (Atmospherics.FrezonProductionNitrogenRatio / efficiency); + var oxyLimit = Math.Min(initialOxy, catalystLimit) / Atmospherics.FrezonProductionTritRatio; - if (initialN2 < minimumN2) - return ReactionResult.NoReaction; + // Amount of tritium & oxygen that are reacting + var tritBurned = Math.Min(oxyLimit, initialTrit); + var oxyBurned = tritBurned * Atmospherics.FrezonProductionTritRatio; + var burnRatio = tritBurned / initialTrit; - var oxyConversion = initialOxy / Atmospherics.FrezonProductionConversionRate; - var tritConversion = initialTrit / Atmospherics.FrezonProductionConversionRate; + var oxyConversion = oxyBurned / Atmospherics.FrezonProductionConversionRate; + var tritConversion = tritBurned / Atmospherics.FrezonProductionConversionRate; var total = oxyConversion + tritConversion; mixture.AdjustMoles(Gas.Oxygen, -oxyConversion); diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index 3c3fbdeef0..e2be8d73ff 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -225,6 +225,14 @@ namespace Content.Shared.Atmos /// public const float FrezonProductionNitrogenRatio = 10f; + /// + /// 1 mol of Tritium is required per X mol of oxygen. + /// + public const float FrezonProductionTritRatio = 50.0f; + + /// + /// 1 / X of the tritium is converted into Frezon each tick + /// public const float FrezonProductionConversionRate = 50f; ///