var initialPlasmaMoles = mixture.GetMoles(Gas.Plasma);
// Supersaturation makes tritium.
- var supersaturation = initialOxygenMoles / initialPlasmaMoles > Atmospherics.SuperSaturationThreshold;
+ var oxyRatio = initialOxygenMoles / initialPlasmaMoles;
+ // Efficiency of reaction decreases from 1% Plasma to 3% plasma:
+ var supersaturation = Math.Clamp((oxyRatio - Atmospherics.SuperSaturationEnds) /
+ (Atmospherics.SuperSaturationThreshold -
+ Atmospherics.SuperSaturationEnds), 0.0f, 1.0f);
if (initialOxygenMoles > initialPlasmaMoles * Atmospherics.PlasmaOxygenFullburn)
plasmaBurnRate = initialPlasmaMoles * temperatureScale / Atmospherics.PlasmaBurnRateDelta;
plasmaBurnRate = MathF.Min(plasmaBurnRate, MathF.Min(initialPlasmaMoles, initialOxygenMoles / oxygenBurnRate));
mixture.SetMoles(Gas.Plasma, initialPlasmaMoles - plasmaBurnRate);
mixture.SetMoles(Gas.Oxygen, initialOxygenMoles - plasmaBurnRate * oxygenBurnRate);
- mixture.AdjustMoles(supersaturation ? Gas.Tritium : Gas.CarbonDioxide, plasmaBurnRate);
+
+ // supersaturation adjusts the ratio of produced tritium to unwanted CO2
+ mixture.AdjustMoles(Gas.Tritium, plasmaBurnRate * supersaturation);
+ mixture.AdjustMoles(Gas.CarbonDioxide, plasmaBurnRate * (1.0f - supersaturation));
energyReleased += Atmospherics.FirePlasmaEnergyReleased * plasmaBurnRate;
mixture.ReactionResults[GasReaction.Fire] += plasmaBurnRate * (1 + oxygenBurnRate);
public const float FireGrowthRate = 40000f;
public const float SuperSaturationThreshold = 96f;
+ public const float SuperSaturationEnds = SuperSaturationThreshold / 3;
public const float OxygenBurnRateBase = 1.4f;
public const float PlasmaMinimumBurnTemperature = (100f+T0C);