From d24e4a6631696bc3ed3ae2a16a588e8f8c23293d Mon Sep 17 00:00:00 2001 From: Tom Leys Date: Wed, 10 May 2023 15:27:23 +1200 Subject: [PATCH] Frezon reaction requires 50:1 Oxy:Trit ratio (#16295) --- .../Atmos/Reactions/FrezonProductionReaction.cs | 14 +++++++++----- Content.Shared/Atmos/Atmospherics.cs | 8 ++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) 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; ///