--- /dev/null
+using Content.Server.Atmos.EntitySystems;
+using Content.Shared.Atmos;
+using JetBrains.Annotations;
+
+namespace Content.Server.Atmos.Reactions;
+
+/// <summary>
+/// Decomposes Nitrous Oxide into Nitrogen and Oxygen.
+/// </summary>
+[UsedImplicitly]
+public sealed partial class N2ODecompositionReaction : IGasReactionEffect
+{
+ public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale)
+ {
+ var cacheN2O = mixture.GetMoles(Gas.NitrousOxide);
+
+ var burnedFuel = cacheN2O / Atmospherics.N2ODecompositionRate;
+
+ if (burnedFuel <= 0 || cacheN2O - burnedFuel < 0)
+ return ReactionResult.NoReaction;
+
+ mixture.AdjustMoles(Gas.NitrousOxide, -burnedFuel);
+ mixture.AdjustMoles(Gas.Nitrogen, burnedFuel);
+ mixture.AdjustMoles(Gas.Oxygen, burnedFuel / 2);
+
+ return ReactionResult.Reacting;
+ }
+}
/// </summary>
public const float FrezonProductionConversionRate = 50f;
+ /// <summary>
+ /// The maximum portion of the N2O that can decompose each reaction tick. (50%)
+ /// </summary>
+ public const float N2ODecompositionRate = 2f;
+
/// <summary>
/// How many mol of frezon can be converted into miasma in one cycle.
/// </summary>
-- type: gasReaction
+- type: gasReaction
id: PlasmaFire
priority: -2
minimumTemperature: 373.149 # Same as Atmospherics.FireMinimumTemperatureToExist
effects:
- !type:MiasmaOxygenReaction {}
+- type: gasReaction
+ id: N2ODecomposition
+ priority: 0
+ minimumTemperature: 850
+ minimumRequirements:
+ - 0 # oxygen
+ - 0 # nitrogen
+ - 0 # carbon dioxide
+ - 0 # plasma
+ - 0 # tritium
+ - 0 # vapor
+ - 0 # miasma
+ - 0.01 # n2o
+ - 0 # frezon
+ effects:
+ - !type:N2ODecompositionReaction {}
+
#- type: gasReaction
# id: WaterVaporPuddle
# priority: 1