Add nitrous oxide synthesis reaction (#22774)

Co-authored-by: whateverusername0 <whateveremail>
Co-authored-by: Kevin Zheng <kevinz5000@gmail.com>
This commit is contained in:
username
2023-12-21 10:14:59 +10:00
committed by GitHub
parent 77cf08c334
commit 5a4e04ea14
3 changed files with 55 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
using Content.Server.Atmos.EntitySystems;
using Content.Shared.Atmos;
using JetBrains.Annotations;
namespace Content.Server.Atmos.Reactions;
[UsedImplicitly]
public sealed partial class MiasmaOxygenReaction : IGasReactionEffect
{
public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale)
{
var nMiasma = mixture.GetMoles(Gas.Miasma);
var nOxygen = mixture.GetMoles(Gas.Oxygen);
var nTotal = mixture.TotalMoles;
// Concentration-dependent reaction rate
var fMiasma = nMiasma/nTotal;
var fOxygen = nOxygen/nTotal;
var rate = MathF.Pow(fMiasma, 2) * MathF.Pow(fOxygen, 2);
var deltaMoles = nMiasma / Atmospherics.MiasmaOxygenReactionRate * 2 * rate;
if (deltaMoles <= 0 || nMiasma - deltaMoles < 0)
return ReactionResult.NoReaction;
mixture.AdjustMoles(Gas.Miasma, -deltaMoles);
mixture.AdjustMoles(Gas.Oxygen, -deltaMoles);
mixture.AdjustMoles(Gas.NitrousOxide, deltaMoles / 2);
mixture.AdjustMoles(Gas.WaterVapor, deltaMoles * 1.5f);
return ReactionResult.Reacting;
}
}

View File

@@ -241,6 +241,11 @@ namespace Content.Shared.Atmos
/// </summary>
public const float MiasmicSubsumationMaxConversionRate = 5f;
/// <summary>
/// Divisor for Miasma Oxygen reaction so that it doesn't happen instantaneously.
/// </summary>
public const float MiasmaOxygenReactionRate = 10f;
/// <summary>
/// Determines at what pressure the ultra-high pressure red icon is displayed.
/// </summary>

View File

@@ -74,6 +74,23 @@
effects:
- !type:MiasmicSubsumationReaction {}
- type: gasReaction
id: MiasmaOxygenReaction
priority: 2
minimumTemperature: 323.149
minimumRequirements:
- 0.01 # oxygen
- 0 # nitrogen
- 0 # carbon dioxide
- 0 # plasma
- 0 # tritium
- 0 # vapor
- 0.01 # miasma
- 0 # n2o
- 0 # frezon
effects:
- !type:MiasmaOxygenReaction {}
#- type: gasReaction
# id: WaterVaporPuddle
# priority: 1