From 435e7c7b8de273a2e20754e19e253699ed995c2f Mon Sep 17 00:00:00 2001 From: KurokoTurbo <92106367+melanoTurbo@users.noreply.github.com> Date: Thu, 26 Oct 2023 23:37:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B0=D1=82=D0=BC=D0=BE=D1=81=20=D0=B3=D0=B5?= =?UTF-8?q?=D0=B9=D0=BC=D0=B8=D0=BD=D0=B3=20indeed=20(#513)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix hypernob + plasma and trit fire * add 11 new gas types * actually fix hypernob --------- Co-authored-by: halicopter --- .../EntitySystems/AtmosphereSystem.Hotspot.cs | 10 +- .../Portable/PortableScrubberComponent.cs | 13 +- .../Atmos/Reactions/BZProductionReaction.cs | 50 ++ .../Atmos/Reactions/FrezonCoolantReaction.cs | 5 + .../Reactions/FrezonProductionReaction.cs | 4 + .../HalonOxygenAbsorptionReaction.cs | 38 + .../Reactions/HealiumProductionReaction.cs | 39 + .../Atmos/Reactions/HydrogenFireReaction.cs | 58 ++ .../HyperNobliumProductionReaction.cs | 40 + .../Reactions/NitriumDecompositionReaction.cs | 38 + .../Reactions/NitriumProductionReaction.cs | 40 + .../Atmos/Reactions/PlasmaFireReaction.cs | 4 + .../Reactions/PluoxiumProductionReaction.cs | 40 + .../ProtoNitrateBZaseActionReaction.cs | 40 + .../ProtoNitrateHydrogenConversionReaction.cs | 37 + .../ProtoNitrateProductionReaction.cs | 39 + ...rotoNitrateTritiumDeirradiationReaction.cs | 39 + .../Atmos/Reactions/TritiumFireReaction.cs | 4 + .../Reactions/ZaukerDecompositionReaction.cs | 38 + .../Reactions/ZaukerProductionReaction.cs | 39 + .../Components/GasLeakRuleComponent.cs | 3 + Content.Shared/Atmos/Atmospherics.cs | 60 +- .../Components/SharedVentScrubberComponent.cs | 13 +- Resources/Locale/en-US/gases/gases.ftl | 11 + .../storage/canisters/gas-canisters.ftl | 68 +- .../Locale/en-US/reagents/meta/elements.ftl | 5 +- .../Locale/en-US/reagents/meta/gases.ftl | 33 + .../storage/canisters/gas_canisters.ftl | 138 ++++ Resources/Locale/ru-RU/gases/gases.ftl | 11 + .../storage/canisters/gas-canisters.ftl | 46 +- .../Locale/ru-RU/reagents/meta/elements.ftl | 2 - .../Locale/ru-RU/reagents/meta/gases.ftl | 22 + .../storage/canisters/gas_canisters.ftl | 66 ++ Resources/Prototypes/Atmospherics/gases.yml | 140 +++- .../Prototypes/Atmospherics/reactions.yml | 370 ++++++++++ .../Prototypes/Atmospherics/thresholds.yml | 7 + .../Structures/Piping/Atmospherics/unary.yml | 22 + .../Specific/Atmospherics/sensor.yml | 11 + .../Storage/Canisters/gas_canisters.yml | 693 ++++++++++++++++++ Resources/Prototypes/Reagents/elements.yml | 11 - Resources/Prototypes/Reagents/gases.yml | 286 ++++++++ .../Effects/atmospherics.rsi/anti_noblium.png | Bin 0 -> 749 bytes .../Effects/atmospherics.rsi/halon.png | Bin 0 -> 2659 bytes .../Effects/atmospherics.rsi/healium.png | Bin 0 -> 2382 bytes .../Effects/atmospherics.rsi/meta.json | 2 +- .../Effects/atmospherics.rsi/nitrium.png | Bin 0 -> 2666 bytes .../atmospherics.rsi/proto_nitrate.png | Bin 0 -> 2423 bytes .../Effects/atmospherics.rsi/zauker.png | Bin 0 -> 2337 bytes .../Storage/canister.rsi/antinob-1.png | Bin 0 -> 336 bytes .../Storage/canister.rsi/antinob.png | Bin 0 -> 326 bytes .../Storage/canister.rsi/brown-1.png | Bin 0 -> 466 bytes .../Structures/Storage/canister.rsi/brown.png | Bin 0 -> 306 bytes .../Storage/canister.rsi/darkpurple-1.png | Bin 0 -> 378 bytes .../Storage/canister.rsi/darkpurple.png | Bin 0 -> 285 bytes .../Structures/Storage/canister.rsi/h2-1.png | Bin 0 -> 884 bytes .../Structures/Storage/canister.rsi/h2.png | Bin 0 -> 353 bytes .../Storage/canister.rsi/halon-1.png | Bin 0 -> 387 bytes .../Structures/Storage/canister.rsi/halon.png | Bin 0 -> 319 bytes .../Storage/canister.rsi/healium-1.png | Bin 0 -> 381 bytes .../Storage/canister.rsi/healium.png | Bin 0 -> 363 bytes .../Storage/canister.rsi/helium-1.png | Bin 0 -> 895 bytes .../Storage/canister.rsi/helium.png | Bin 0 -> 348 bytes .../Structures/Storage/canister.rsi/meta.json | 66 ++ .../Structures/Storage/canister.rsi/nob-1.png | Bin 0 -> 330 bytes .../Structures/Storage/canister.rsi/nob.png | Bin 0 -> 319 bytes .../Storage/canister.rsi/proto_nitrate-1.png | Bin 0 -> 381 bytes .../Storage/canister.rsi/proto_nitrate.png | Bin 0 -> 363 bytes .../Storage/canister.rsi/purple-1.png | Bin 0 -> 425 bytes .../Storage/canister.rsi/purple.png | Bin 0 -> 342 bytes .../Storage/canister.rsi/zauker-1.png | Bin 0 -> 374 bytes .../Storage/canister.rsi/zauker.png | Bin 0 -> 363 bytes 71 files changed, 2672 insertions(+), 29 deletions(-) create mode 100644 Content.Server/Atmos/Reactions/BZProductionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/HealiumProductionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/HydrogenFireReaction.cs create mode 100644 Content.Server/Atmos/Reactions/HyperNobliumProductionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/NitriumDecompositionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/NitriumProductionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/PluoxiumProductionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/ProtoNitrateProductionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs create mode 100644 Content.Server/Atmos/Reactions/ZaukerDecompositionReaction.cs create mode 100644 Content.Server/Atmos/Reactions/ZaukerProductionReaction.cs create mode 100644 Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl create mode 100644 Resources/Textures/Effects/atmospherics.rsi/anti_noblium.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/halon.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/healium.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/nitrium.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/proto_nitrate.png create mode 100644 Resources/Textures/Effects/atmospherics.rsi/zauker.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/antinob-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/antinob.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/brown-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/brown.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/darkpurple-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/darkpurple.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/h2-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/h2.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/halon-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/halon.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/healium-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/healium.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/helium-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/helium.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/nob-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/nob.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/proto_nitrate-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/proto_nitrate.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/purple-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/purple.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/zauker-1.png create mode 100644 Resources/Textures/Structures/Storage/canister.rsi/zauker.png diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs index 8966f232e0..752beaec25 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs @@ -43,7 +43,7 @@ namespace Content.Server.Atmos.EntitySystems ExcitedGroupResetCooldowns(tile.ExcitedGroup); if ((tile.Hotspot.Temperature < Atmospherics.FireMinimumTemperatureToExist) || (tile.Hotspot.Volume <= 1f) - || tile.Air == null || tile.Air.GetMoles(Gas.Oxygen) < 0.5f || (tile.Air.GetMoles(Gas.Plasma) < 0.5f && tile.Air.GetMoles(Gas.Tritium) < 0.5f)) + || tile.Air == null || tile.Air.GetMoles(Gas.Oxygen) < 0.5f || (tile.Air.GetMoles(Gas.Plasma) < 0.5f && tile.Air.GetMoles(Gas.Tritium) < 0.5f && tile.Air.GetMoles(Gas.Hydrogen) < 0.5f && tile.Air.GetMoles(Gas.HyperNoblium) > 5f)) { tile.Hotspot = new Hotspot(); InvalidateVisuals(tile.GridIndex, tile.GridIndices); @@ -107,12 +107,14 @@ namespace Content.Server.Atmos.EntitySystems var plasma = tile.Air.GetMoles(Gas.Plasma); var tritium = tile.Air.GetMoles(Gas.Tritium); + var hydrogen = tile.Air.GetMoles(Gas.Hydrogen); + var hypernoblium = tile.Air.GetMoles(Gas.HyperNoblium); if (tile.Hotspot.Valid) { if (soh) { - if (plasma > 0.5f || tritium > 0.5f) + if (plasma > 0.5f && hypernoblium < 5f || tritium > 0.5f && hypernoblium < 5f || hydrogen > 0.5f && hypernoblium < 5f) { if (tile.Hotspot.Temperature < exposedTemperature) tile.Hotspot.Temperature = exposedTemperature; @@ -124,10 +126,10 @@ namespace Content.Server.Atmos.EntitySystems return; } - if ((exposedTemperature > Atmospherics.PlasmaMinimumBurnTemperature) && (plasma > 0.5f || tritium > 0.5f)) + if ((exposedTemperature > Atmospherics.PlasmaMinimumBurnTemperature) && (plasma > 0.5f && hypernoblium < 5f || tritium > 0.5f && hypernoblium < 5f || hydrogen > 0.5f && hypernoblium < 5f)) { if (sparkSourceUid.HasValue) - _adminLog.Add(LogType.Flammable, LogImpact.High, $"Heat/spark of {ToPrettyString(sparkSourceUid.Value)} caused atmos ignition of gas: {tile.Air.Temperature.ToString():temperature}K - {oxygen}mol Oxygen, {plasma}mol Plasma, {tritium}mol Tritium"); + _adminLog.Add(LogType.Flammable, LogImpact.High, $"Heat/spark of {ToPrettyString(sparkSourceUid.Value)} caused atmos ignition of gas: {tile.Air.Temperature.ToString():temperature}K - {oxygen}mol Oxygen, {plasma}mol Plasma, {tritium}mol Tritium, {hydrogen}mol Hydrogen"); tile.Hotspot = new Hotspot { diff --git a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs index 7ded9beb01..85bcf0abd9 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs @@ -30,7 +30,18 @@ namespace Content.Server.Atmos.Portable Gas.WaterVapor, Gas.Ammonia, Gas.NitrousOxide, - Gas.Frezon + Gas.Frezon, + Gas.BZ, + Gas.Pluoxium, + Gas.Hydrogen, + Gas.Nitrium, + Gas.Healium, + Gas.HyperNoblium, + Gas.ProtoNitrate, + Gas.Zauker, + Gas.Halon, + Gas.Helium, + Gas.AntiNoblium }; [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Server/Atmos/Reactions/BZProductionReaction.cs b/Content.Server/Atmos/Reactions/BZProductionReaction.cs new file mode 100644 index 0000000000..06b22015f3 --- /dev/null +++ b/Content.Server/Atmos/Reactions/BZProductionReaction.cs @@ -0,0 +1,50 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class BZProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialNitrousOxide = mixture.GetMoles(Gas.NitrousOxide); + var initialPlasma = mixture.GetMoles(Gas.Plasma); + + var environmentEfficiency = mixture.Volume / mixture.Pressure; + var ratioEfficiency = Math.Min(initialNitrousOxide / initialPlasma, 1); + + var BZFormed = Math.Min(0.01f * ratioEfficiency * environmentEfficiency, Math.Min(initialNitrousOxide * 0.4f, initialPlasma * 0.8f)); + + if (initialNitrousOxide - BZFormed * 0.4f < 0 || initialPlasma - (0.8f - BZFormed) < 0 || BZFormed <= 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + var amountDecomposed = 0.0f; + var nitrousOxideDecomposedFactor = Math.Max(4.0f * (initialPlasma / (initialNitrousOxide + initialPlasma) - 0.75f), 0); + if (nitrousOxideDecomposedFactor > 0) + { + amountDecomposed = 0.4f * BZFormed * nitrousOxideDecomposedFactor; + mixture.AdjustMoles(Gas.Oxygen, amountDecomposed); + mixture.AdjustMoles(Gas.Nitrogen, 0.5f * amountDecomposed); + } + + mixture.AdjustMoles(Gas.BZ, Math.Max(0f, BZFormed * (1.0f - nitrousOxideDecomposedFactor))); + mixture.AdjustMoles(Gas.NitrousOxide, -0.4f * BZFormed); + mixture.AdjustMoles(Gas.Plasma, -0.8f * BZFormed * (1.0f - nitrousOxideDecomposedFactor)); + + var energyReleased = BZFormed * (Atmospherics.BZFormationEnergy + nitrousOxideDecomposedFactor * (Atmospherics.NitrousOxideDecompositionEnergy - Atmospherics.BZFormationEnergy)); + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs b/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs index 051ee8202d..5d08a37952 100644 --- a/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs @@ -13,6 +13,11 @@ public sealed partial class FrezonCoolantReaction : IGasReactionEffect public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); + + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + var temperature = mixture.Temperature; var energyModifier = 1f; diff --git a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs index 4ffd9c2f5b..df93724fa1 100644 --- a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs @@ -13,6 +13,10 @@ public sealed partial class FrezonProductionReaction : IGasReactionEffect { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + var initialN2 = mixture.GetMoles(Gas.Nitrogen); var initialOxy = mixture.GetMoles(Gas.Oxygen); var initialTrit = mixture.GetMoles(Gas.Tritium); diff --git a/Content.Server/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs b/Content.Server/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs new file mode 100644 index 0000000000..e3b717d1c4 --- /dev/null +++ b/Content.Server/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs @@ -0,0 +1,38 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class HalonOxygenAbsorptionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialHalon = mixture.GetMoles(Gas.Halon); + var initialOxygen = mixture.GetMoles(Gas.Oxygen); + + var temperature = mixture.Temperature; + + var heatEfficiency = Math.Min(temperature / (Atmospherics.FireMinimumTemperatureToExist * 10f), Math.Min(initialHalon, initialOxygen*20f)); + if (heatEfficiency <= 0f || initialHalon - heatEfficiency < 0f || initialOxygen - heatEfficiency * 20f < 0f) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.Halon, -heatEfficiency); + mixture.AdjustMoles(Gas.Oxygen, -heatEfficiency*20f); + mixture.AdjustMoles(Gas.CarbonDioxide, heatEfficiency*5f); + + var energyUsed = heatEfficiency * Atmospherics.HalonCombustionEnergy; + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/HealiumProductionReaction.cs b/Content.Server/Atmos/Reactions/HealiumProductionReaction.cs new file mode 100644 index 0000000000..8e2d5c5c08 --- /dev/null +++ b/Content.Server/Atmos/Reactions/HealiumProductionReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class HealiumProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialBZ = mixture.GetMoles(Gas.BZ); + var initialFrezon = mixture.GetMoles(Gas.Frezon); + + var temperature = mixture.Temperature; + var heatEfficiency = Math.Min(temperature*0.3f, Math.Min(initialFrezon*2.75f, initialBZ*0.25f)); + + if (heatEfficiency <= 0 || initialFrezon - heatEfficiency * 2.75f < 0 || initialBZ - heatEfficiency * 0.25f < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.Frezon, -heatEfficiency*2.75f); + mixture.AdjustMoles(Gas.BZ, -heatEfficiency*0.25f); + mixture.AdjustMoles(Gas.Healium, heatEfficiency*3); + + var energyReleased = heatEfficiency * Atmospherics.HealiumFormationEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs b/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs new file mode 100644 index 0000000000..e89c22c142 --- /dev/null +++ b/Content.Server/Atmos/Reactions/HydrogenFireReaction.cs @@ -0,0 +1,58 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions +{ + [UsedImplicitly] + [DataDefinition] + public sealed class HydrogenFireReaction : IGasReactionEffect + { + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var energyReleased = 0f; + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + var temperature = mixture.Temperature; + var location = holder as TileAtmosphere; + mixture.ReactionResults[GasReaction.Fire] = 0; + + var initialOxygen = mixture.GetMoles(Gas.Oxygen); + var initialHydrogen = mixture.GetMoles(Gas.Hydrogen); + + var burnedFuel = Math.Min(initialHydrogen / Atmospherics.FireH2BurnRateDelta, Math.Min(initialOxygen / (Atmospherics.FireH2BurnRateDelta * Atmospherics.H2OxygenFullBurn), Math.Min(initialHydrogen, initialOxygen * 0.5f))); + + if (burnedFuel > 0) + { + energyReleased += Atmospherics.FireH2EnergyReleased * burnedFuel; + + mixture.AdjustMoles(Gas.WaterVapor, burnedFuel); + mixture.AdjustMoles(Gas.Hydrogen, -burnedFuel); + mixture.AdjustMoles(Gas.Oxygen, -burnedFuel * 0.5f); + + mixture.ReactionResults[GasReaction.Fire] += burnedFuel; + } + + if (energyReleased > 0) + { + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = (temperature * oldHeatCapacity + energyReleased) / newHeatCapacity; + } + + if (location != null) + { + temperature = mixture.Temperature; + if (temperature > Atmospherics.FireMinimumTemperatureToExist) + { + atmosphereSystem.HotspotExpose(location.GridIndex, location.GridIndices, temperature, mixture.Volume); + } + } + + return mixture.ReactionResults[GasReaction.Fire] != 0 ? ReactionResult.Reacting : ReactionResult.NoReaction; + } + } +} diff --git a/Content.Server/Atmos/Reactions/HyperNobliumProductionReaction.cs b/Content.Server/Atmos/Reactions/HyperNobliumProductionReaction.cs new file mode 100644 index 0000000000..d72a5b6f17 --- /dev/null +++ b/Content.Server/Atmos/Reactions/HyperNobliumProductionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class HyperNobliumProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialNitrogen = mixture.GetMoles(Gas.Nitrogen); + var initialTritium = mixture.GetMoles(Gas.Tritium); + var initialBZ = mixture.GetMoles(Gas.BZ); + + var nobFormed = Math.Min((initialNitrogen+initialTritium)*0.01f,Math.Min(initialTritium*5f, initialNitrogen*10f)); + if (nobFormed <= 0 || (initialTritium - 5f) * nobFormed < 0 || (initialNitrogen - 10f) * nobFormed < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + var reductionFactor = Math.Clamp(initialTritium/(initialTritium+initialBZ), 0.001f, 1f); + + mixture.AdjustMoles(Gas.Tritium, -5f * nobFormed * reductionFactor); + mixture.AdjustMoles(Gas.Nitrogen, -10f * nobFormed); + mixture.AdjustMoles(Gas.HyperNoblium, nobFormed); + + var energyReleased = nobFormed * (Atmospherics.NobliumFormationEnergy/Math.Max(initialBZ, 1)); + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/NitriumDecompositionReaction.cs b/Content.Server/Atmos/Reactions/NitriumDecompositionReaction.cs new file mode 100644 index 0000000000..6ebda1afca --- /dev/null +++ b/Content.Server/Atmos/Reactions/NitriumDecompositionReaction.cs @@ -0,0 +1,38 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class NitriumDecompositionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialNitrium = mixture.GetMoles(Gas.Nitrium); + + var temperature = mixture.Temperature; + var heatEfficiency = Math.Min(temperature / Atmospherics.NitriumDecompositionTempDivisor, initialNitrium); + + if (heatEfficiency <= 0 || initialNitrium - heatEfficiency < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.Nitrium, -heatEfficiency); + mixture.AdjustMoles(Gas.Hydrogen, heatEfficiency); + mixture.AdjustMoles(Gas.Nitrogen, heatEfficiency); + + var energyReleased = heatEfficiency * Atmospherics.NitriumDecompositionEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/NitriumProductionReaction.cs b/Content.Server/Atmos/Reactions/NitriumProductionReaction.cs new file mode 100644 index 0000000000..a78950f7e0 --- /dev/null +++ b/Content.Server/Atmos/Reactions/NitriumProductionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class NitriumProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialTritium = mixture.GetMoles(Gas.Tritium); + var initialNitrogen = mixture.GetMoles(Gas.Nitrogen); + var initialBZ = mixture.GetMoles(Gas.BZ); + + var temperature = mixture.Temperature; + var heatEfficiency = Math.Min(temperature / Atmospherics.NitriumFormationTempDivisor, Math.Min(initialTritium, Math.Min(initialNitrogen, initialBZ * 0.05f))); + + if (heatEfficiency <= 0 || initialTritium - heatEfficiency < 0 || initialNitrogen - heatEfficiency < 0 || initialBZ - heatEfficiency * 0.05f < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + mixture.AdjustMoles(Gas.Tritium, -heatEfficiency); + mixture.AdjustMoles(Gas.Nitrogen, -heatEfficiency); + mixture.AdjustMoles(Gas.BZ, -heatEfficiency * 0.05f); + mixture.AdjustMoles(Gas.Nitrium, heatEfficiency); + + var energyUsed = heatEfficiency * Atmospherics.NitriumFormationEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity - energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs index 9adda3089c..288f3a39cc 100644 --- a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs @@ -10,6 +10,10 @@ namespace Content.Server.Atmos.Reactions { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + var energyReleased = 0f; var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; diff --git a/Content.Server/Atmos/Reactions/PluoxiumProductionReaction.cs b/Content.Server/Atmos/Reactions/PluoxiumProductionReaction.cs new file mode 100644 index 0000000000..3673c589b2 --- /dev/null +++ b/Content.Server/Atmos/Reactions/PluoxiumProductionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class PluoxiumProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialCarbonDioxide = mixture.GetMoles(Gas.CarbonDioxide); + var initialOxygen = mixture.GetMoles(Gas.Oxygen); + var initialTritium = mixture.GetMoles(Gas.Tritium); + + var producedAmount = Math.Min(Atmospherics.PluoxiumMaxRate, Math.Min(initialCarbonDioxide, Math.Min(initialOxygen * 0.5f, initialTritium * 0.01f))); + + if (producedAmount <= 0 || initialCarbonDioxide - producedAmount < 0 || initialOxygen - producedAmount * 0.5f < 0 || initialTritium - producedAmount * 0.01f <0) + return ReactionResult.NoReaction; + + mixture.AdjustMoles(Gas.CarbonDioxide, -producedAmount); + mixture.AdjustMoles(Gas.Oxygen, -producedAmount * 0.5f); + mixture.AdjustMoles(Gas.Tritium, -producedAmount * 0.01f); + mixture.AdjustMoles(Gas.Pluoxium, producedAmount); + mixture.AdjustMoles(Gas.Hydrogen, producedAmount * 0.01f); + + var energyReleased = producedAmount * Atmospherics.PluoxiumFormationEnergy; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs b/Content.Server/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs new file mode 100644 index 0000000000..7a4b97dd1b --- /dev/null +++ b/Content.Server/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class ProtoNitrateBZaseConversionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialProtoNitrate = mixture.GetMoles(Gas.ProtoNitrate); + var initialBZ = mixture.GetMoles(Gas.BZ); + + var temperature = mixture.Temperature; + var consumedAmount = Math.Min(temperature/2240f * initialBZ * initialProtoNitrate / (initialBZ + initialProtoNitrate), Math.Min(initialBZ, initialProtoNitrate)); + + if (consumedAmount <= 0 || initialBZ - consumedAmount < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.BZ, -consumedAmount); + mixture.AdjustMoles(Gas.Nitrogen, consumedAmount*0.4f); + mixture.AdjustMoles(Gas.Helium, consumedAmount*1.6f); + mixture.AdjustMoles(Gas.Plasma, consumedAmount*0.8f); + + var energyReleased = consumedAmount * Atmospherics.ProtoNitrateBZaseConversionEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs b/Content.Server/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs new file mode 100644 index 0000000000..78021899fe --- /dev/null +++ b/Content.Server/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs @@ -0,0 +1,37 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class ProtoNitrateHydrogenConversionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialProtoNitrate = mixture.GetMoles(Gas.ProtoNitrate); + var initialHydrogen = mixture.GetMoles(Gas.Hydrogen); + + var producedAmount = Math.Min(Atmospherics.ProtoNitrateHydrogenConversionMaxRate, Math.Min(initialHydrogen, initialProtoNitrate)); + + if (producedAmount <= 0 || initialHydrogen-producedAmount < 0f) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.Hydrogen, -producedAmount); + mixture.AdjustMoles(Gas.ProtoNitrate, producedAmount*0.5f); + + var energyUsed = producedAmount * Atmospherics.ProtoNitrateHydrogenConversionEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity - energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/ProtoNitrateProductionReaction.cs b/Content.Server/Atmos/Reactions/ProtoNitrateProductionReaction.cs new file mode 100644 index 0000000000..835c2eedbf --- /dev/null +++ b/Content.Server/Atmos/Reactions/ProtoNitrateProductionReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class ProtoNitrateProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialPluoxium = mixture.GetMoles(Gas.Pluoxium); + var initialHydrogen = mixture.GetMoles(Gas.Hydrogen); + + var temperature = mixture.Temperature; + var heatEfficiency = Math.Min(temperature * 0.005f, Math.Min(initialPluoxium * 0.2f, initialHydrogen * 2.0f)); + + if (heatEfficiency <= 0 || initialPluoxium - heatEfficiency * 0.2f < 0 || initialHydrogen - heatEfficiency * 2f < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.Hydrogen, -heatEfficiency * 2f); + mixture.AdjustMoles(Gas.Pluoxium, -heatEfficiency * 0.2f); + mixture.AdjustMoles(Gas.ProtoNitrate, heatEfficiency * 0.2f); + + var energyReleased = heatEfficiency * Atmospherics.ProtoNitrateFormationEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs b/Content.Server/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs new file mode 100644 index 0000000000..246d719ea6 --- /dev/null +++ b/Content.Server/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class ProtoNitrateTritiumConversionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialProtoNitrate = mixture.GetMoles(Gas.ProtoNitrate); + var initialTritium = mixture.GetMoles(Gas.Tritium); + + var temperature = mixture.Temperature; + var producedAmount = Math.Min(temperature/34f*initialTritium*initialProtoNitrate/(initialTritium+10f*initialProtoNitrate), Math.Min(initialTritium, initialProtoNitrate*0.01f)); + + if (initialTritium - producedAmount < 0 || initialProtoNitrate - producedAmount * 0.01f < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.ProtoNitrate, -producedAmount * 0.01f); + mixture.AdjustMoles(Gas.Tritium, -producedAmount); + mixture.AdjustMoles(Gas.Hydrogen, producedAmount); + + var energyReleased = producedAmount * Atmospherics.ProtoNitrateTritiumConversionEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs index c52b431fd4..72e4f2233f 100644 --- a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs +++ b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs @@ -10,6 +10,10 @@ namespace Content.Server.Atmos.Reactions { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + var energyReleased = 0f; var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; diff --git a/Content.Server/Atmos/Reactions/ZaukerDecompositionReaction.cs b/Content.Server/Atmos/Reactions/ZaukerDecompositionReaction.cs new file mode 100644 index 0000000000..c5243fed78 --- /dev/null +++ b/Content.Server/Atmos/Reactions/ZaukerDecompositionReaction.cs @@ -0,0 +1,38 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class ZaukerDecompositionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialZauker = mixture.GetMoles(Gas.Zauker); + var initialNitrogen = mixture.GetMoles(Gas.Nitrogen); + + var burnedFuel = Math.Min(Atmospherics.ZaukerDecompositionMaxRate, Math.Min(initialNitrogen,initialZauker)); + + if (burnedFuel <= 0 || initialZauker - burnedFuel < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.Zauker, -burnedFuel); + mixture.AdjustMoles(Gas.Oxygen, burnedFuel*0.3f); + mixture.AdjustMoles(Gas.Nitrogen, burnedFuel*0.7f); + + var energyReleased = burnedFuel * Atmospherics.ZaukerDecompositionEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/Atmos/Reactions/ZaukerProductionReaction.cs b/Content.Server/Atmos/Reactions/ZaukerProductionReaction.cs new file mode 100644 index 0000000000..1535e3fde5 --- /dev/null +++ b/Content.Server/Atmos/Reactions/ZaukerProductionReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed class ZaukerProductionReaction : IGasReactionEffect +{ + public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem) + { + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + + var initialHypernoblium = mixture.GetMoles(Gas.HyperNoblium); + var initialNitrium = mixture.GetMoles(Gas.Nitrium); + + var temperature = mixture.Temperature; + var heatEfficiency = Math.Min(temperature * Atmospherics.ZaukerFormationTemperatureScale, Math.Min(initialHypernoblium * 0.01f, initialNitrium * 0.5f)); + + if (heatEfficiency <= 0 || initialHypernoblium - heatEfficiency * 0.01f < 0 || initialNitrium - heatEfficiency * 0.5f < 0) + return ReactionResult.NoReaction; + + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + + mixture.AdjustMoles(Gas.HyperNoblium, -heatEfficiency * 0.01f); + mixture.AdjustMoles(Gas.Nitrium, -heatEfficiency * 0.5f); + mixture.AdjustMoles(Gas.Zauker, heatEfficiency * 0.5f); + + var energyUsed = heatEfficiency * Atmospherics.ZaukerFormationEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity - energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs b/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs index f92da0af19..36164389fb 100644 --- a/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs +++ b/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs @@ -13,6 +13,9 @@ public sealed partial class GasLeakRuleComponent : Component Gas.Plasma, Gas.Tritium, Gas.Frezon, + Gas.BZ, + Gas.Hydrogen, + Gas.Halon }; /// diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index 0f330d9dcf..9a66454ad0 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -177,7 +177,7 @@ namespace Content.Shared.Atmos /// /// Total number of gases. Increase this if you want to add more! /// - public const int TotalNumberOfGases = 9; + public const int TotalNumberOfGases = 20; /// /// This is the actual length of the gases arrays in mixtures. @@ -260,6 +260,51 @@ namespace Content.Shared.Atmos /// public const float HazardHighPressure = 550f; + /// + /// Defines energy released in BZ formation. + /// + public const float BZFormationEnergy = 80000f; + + /// + /// Defines energy released in N2O decomposition reaction. + /// + public const float NitrousOxideDecompositionEnergy = 200000f; + + /// + /// Defines energy released in Pluoxium formation. + /// + public const float PluoxiumFormationEnergy = 250f; + + /// + /// The maximum amount of pluoxium that can form per reaction tick. + /// + public const float PluoxiumMaxRate = 5f; + public const float FireH2EnergyReleased = 2800000f; + public const float H2OxygenFullBurn = 10f; + public const float FireH2BurnRateDelta = 2f; + public const float H2MinimumBurnTemperature = T0C + 100f; + public const float NitriumFormationTempDivisor = (T0C + 100f) * 8f; + public const float NitriumFormationEnergy = 100000f; + public const float NitriumDecompositionTempDivisor = (T0C + 100f) * 8f; + public const float NitriumDecompositionEnergy = 30000f; + public const float NitriumDecompositionMaxTemp = T0C + 70f; + public const float NobliumFormationEnergy = 20000000f; + public const float ReactionOpperssionThreshold = 5f; + public const float HalonFormationEnergy = 300f; + public const float HalonCombustionEnergy = 2500f; + public const float HealiumFormationEnergy = 9000f; + public const float ZaukerFormationEnergy = 5000f; + public const float ZaukerFormationTemperatureScale = 0.000005f; + public const float ZaukerDecompositionMaxRate = 20f; + public const float ZaukerDecompositionEnergy = 460f; + public const float ProtoNitrateTemperatureScale = 0.005f; + public const float ProtoNitrateFormationEnergy = 650f; + public const float ProtoNitrateHydrogenConversionThreshold = 150f; + public const float ProtoNitrateHydrogenConversionMaxRate = 5f; + public const float ProtoNitrateHydrogenConversionEnergy = 2500f; + public const float ProtoNitrateTritiumConversionEnergy = 10000f; + public const float ProtoNitrateBZaseConversionEnergy = 60000f; + /// /// Determines when the orange pressure icon is displayed. /// @@ -340,6 +385,17 @@ namespace Content.Shared.Atmos WaterVapor = 5, Ammonia = 6, NitrousOxide = 7, - Frezon = 8 + Frezon = 8, + BZ = 9, + Pluoxium = 10, + Hydrogen = 11, + Nitrium = 12, + Healium = 13, + HyperNoblium = 14, + ProtoNitrate = 15, + Zauker = 16, + Halon = 17, + Helium = 18, + AntiNoblium = 19 } } diff --git a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs index 2a33306245..94a6161285 100644 --- a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs +++ b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs @@ -22,7 +22,18 @@ namespace Content.Shared.Atmos.Piping.Unary.Components Gas.WaterVapor, Gas.Ammonia, Gas.NitrousOxide, - Gas.Frezon + Gas.Frezon, + Gas.BZ, + Gas.Pluoxium, + Gas.Hydrogen, + Gas.Nitrium, + Gas.Healium, + Gas.HyperNoblium, + Gas.ProtoNitrate, + Gas.Zauker, + Gas.Halon, + Gas.Helium, + Gas.AntiNoblium }; // Presets for 'dumb' air alarm modes diff --git a/Resources/Locale/en-US/gases/gases.ftl b/Resources/Locale/en-US/gases/gases.ftl index e41aa4fc99..3ede84dd15 100644 --- a/Resources/Locale/en-US/gases/gases.ftl +++ b/Resources/Locale/en-US/gases/gases.ftl @@ -7,3 +7,14 @@ gases-water-vapor = Water Vapor gases-ammonia = Ammonia gases-n2o = Nitrous Oxide gases-frezon = Frezon +gases-bz = BZ +gases-pluoxium = Pluoxium +gases-hydrogen = Hydrogen +gases-nitrium = Nitrium +gases-healium = Healium +gases-hyper-noblium = Hyper-Noblium +gases-proto-nitrate = Proto-Nitrate +gases-zauker = Zauker +gases-halon = Halon +gases-helium = Helium +gases-anti-noblium = Anti-Noblium diff --git a/Resources/Locale/en-US/prototypes/entities/structures/storage/canisters/gas-canisters.ftl b/Resources/Locale/en-US/prototypes/entities/structures/storage/canisters/gas-canisters.ftl index a07dda9676..9ace128bdd 100644 --- a/Resources/Locale/en-US/prototypes/entities/structures/storage/canisters/gas-canisters.ftl +++ b/Resources/Locale/en-US/prototypes/entities/structures/storage/canisters/gas-canisters.ftl @@ -41,7 +41,40 @@ ent-NitrousOxideCanister = Nitrous oxide canister .desc = A canister that can contain any type of gas. This one is supposed to contain nitrous oxide. It can be attached to connector ports using a wrench. ent-FrezonCanister = Frezon canister - .desc = A coolant with light hallucinogenic properties. Proceed. + .desc = A canister that can contain any type of gas. This one is supposed to contain frezon. It can be attached to connector ports using a wrench. + +ent-BZCanister = BZ canister + .desc = A canister that can contain any type of gas. This one is supposed to contain BZ. It can be attached to connector ports using a wrench. + +ent-PluoxiumCanister = Pluoxium canister + .desc = A canister that can contain any type of gas. This one is supposed to contain pluoxium. It can be attached to connector ports using a wrench. + +ent-HydrogenCanister = Hydrogen canister + .desc = A canister that can contain any type of gas. This one is supposed to contain hydrogen. It can be attached to connector ports using a wrench. + +ent-NitriumCanister = Nitrium canister + .desc = A canister that can contain any type of gas. This one is supposed to contain nitrium. It can be attached to connector ports using a wrench. + +ent-HealiumCanister = Healium canister + .desc = A canister that can contain any type of gas. This one is supposed to contain healium. It can be attached to connector ports using a wrench. + +ent-HyperNobliumCanister = Hyper-Noblium canister + .desc = A canister that can contain any type of gas. This one is supposed to contain hyper-noblium. It can be attached to connector ports using a wrench. + +ent-ProtoNitrateCanister = Proto-Nitrate canister + .desc = A canister that can contain any type of gas. This one is supposed to contain proto-nitrate. It can be attached to connector ports using a wrench. + +ent-ZaukerCanister = Zauker canister + .desc = A canister that can contain any type of gas. This one is supposed to contain zauker. It can be attached to connector ports using a wrench. + +ent-HalonCanister = Halon canister + .desc = A canister that can contain any type of gas. This one is supposed to contain halon. It can be attached to connector ports using a wrench. + +ent-HeliumCanister = Helium canister + .desc = A canister that can contain any type of gas. This one is supposed to contain helium. It can be attached to connector ports using a wrench. + +ent-AntiNobliumCanister = Anti-Noblium canister + .desc = A canister that can contain any type of gas. This one is supposed to contain anti-noblium. It can be attached to connector ports using a wrench. ent-GasCanisterBrokenBase = Broken gas canister .desc = A broken gas canister. Not useless yet, as it can be salvaged for high quality materials. @@ -78,3 +111,36 @@ ent-NitrousOxideCanisterBroken = { ent-GasCanisterBrokenBase } ent-FrezonCanisterBroken = { ent-GasCanisterBrokenBase } .desc = { ent-GasCanisterBrokenBase.desc } + +ent-BZCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-PluoxiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-HydrogenCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-NitriumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-HealiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-HyperNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-ProtoNitrateCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-ZaukerCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-HalonCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-HeliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + +ent-AntiNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } diff --git a/Resources/Locale/en-US/reagents/meta/elements.ftl b/Resources/Locale/en-US/reagents/meta/elements.ftl index 6d6439565b..bbd20cca4a 100644 --- a/Resources/Locale/en-US/reagents/meta/elements.ftl +++ b/Resources/Locale/en-US/reagents/meta/elements.ftl @@ -22,9 +22,6 @@ reagent-desc-fluorine = A highly toxic pale yellow gas. Extremely reactive. reagent-name-gold = gold reagent-desc-gold = Gold is a dense, soft, shiny metal and the most malleable and ductile metal known. -reagent-name-hydrogen = hydrogen -reagent-desc-hydrogen = A light, flammable gas. - reagent-name-iodine = iodine reagent-desc-iodine = Commonly added to table salt as a nutrient. On its own it tastes far less pleasing. @@ -65,4 +62,4 @@ reagent-name-bananium = bananium reagent-desc-bananium = A yellow radioactive organic solid. reagent-name-zinc = zinc -reagent-desc-zinc = A silvery, brittle metal, often used in batteries to carry charge. \ No newline at end of file +reagent-desc-zinc = A silvery, brittle metal, often used in batteries to carry charge. diff --git a/Resources/Locale/en-US/reagents/meta/gases.ftl b/Resources/Locale/en-US/reagents/meta/gases.ftl index 5460757be7..1c7d67c9ad 100644 --- a/Resources/Locale/en-US/reagents/meta/gases.ftl +++ b/Resources/Locale/en-US/reagents/meta/gases.ftl @@ -18,3 +18,36 @@ reagent-desc-nitrous-oxide = You know how everything seems funnier when you're t reagent-name-frezon = frezon reagent-desc-frezon = A highly effective coolant.. and hallucinogenic. + +reagent-name-bz = bz +reagent-desc-bz = A potent hallucinogenic that also puts slimes into stasis. + +reagent-name-pluoxium = pluoxium +reagent-desc-pluoxium = A gas that could supply even more oxygen to the bloodstream when inhaled, without being an oxidizer. + +reagent-name-hydrogen = hydrogen +reagent-desc-hydrogen = A light, flammable gas. + +reagent-name-nitrium = nitrium +reagent-desc-nitrium = A gaseous stimulant that when inhaled can enhance speed and endurance. + +reagent-name-healium = healium +reagent-desc-healium = Causes deep, regenerative sleep. + +reagent-name-hyper-nob = hyper-noblium +reagent-desc-hyper-nob = The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occuring. + +reagent-name-proto-nitrate = proto-nitrate +reagent-desc-proto-nitrate = A very volatile gas that reacts differently with various gases. + +reagent-name-zauker = zauker +reagent-desc-zauker = A highly toxic gas, it's production is highly regulated on top of being difficult. It also breaks down when in contact with nitrogen. + +reagent-name-halon = halon +reagent-desc-halon = A potent fire supressant. Removes oxygen from high temperature fires and cools down the area. + +reagent-name-helium = helium +reagent-desc-helium = A very inert gas produced by the fusion of hydrogen and it's derivatives. + +reagent-name-anti-nob = anti-noblium +reagent-desc-anti-nob = We still don't know what it does, but it sells for a lot. diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl new file mode 100644 index 0000000000..2a515b96c0 --- /dev/null +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl @@ -0,0 +1,138 @@ +ent-GasCanister = { ent-BaseStructureDynamic } + .desc = { ent-BaseStructureDynamic.desc } + .suffix = { "" } +ent-StorageCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-AirCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-OxygenCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-NitrogenCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-CarbonDioxideCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-PlasmaCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-TritiumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-WaterVaporCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-MiasmaCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-NitrousOxideCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-FrezonCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-BZCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-PluoxiumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HydrogenCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-NitriumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HealiumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HyperNobliumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-ProtoNitrateCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-ZaukerCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HalonCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HeliumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-AntiNobliumCanister = { ent-GasCanister } + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-GasCanisterBrokenBase = { ent-BaseStructureDynamic } + .desc = { ent-BaseStructureDynamic.desc } + .suffix = { "" } +ent-StorageCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-AirCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-OxygenCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-NitrogenCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-CarbonDioxideCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-PlasmaCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-TritiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-WaterVaporCanisterBroken = broken water vapor canister + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-MiasmaCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-NitrousOxideCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-FrezonCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-BZCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-PluoxiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HydrogenCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-NitriumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HealiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HyperNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-ProtoNitrateCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-ZaukerCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HalonCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HeliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-AntiNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } diff --git a/Resources/Locale/ru-RU/gases/gases.ftl b/Resources/Locale/ru-RU/gases/gases.ftl index 6740720ca8..bb25f54665 100644 --- a/Resources/Locale/ru-RU/gases/gases.ftl +++ b/Resources/Locale/ru-RU/gases/gases.ftl @@ -7,3 +7,14 @@ gases-water-vapor = Водяной пар gases-miasma = Миазмы gases-n2o = Оксид азота gases-frezon = Фрезон +gases-bz = БЗ +gases-pluoxium = Плюоксиум +gases-hydrogen = Водород +gases-nitrium = Нитриум +gases-healium = Хилиум +gases-hyper-noblium = Гипер-ноблий +gases-proto-nitrate = Прото-нитрат +gases-zauker = Заукер +gases-halon = Галон +gases-helium = Гелий +gases-anti-noblium = Анти-ноблий diff --git a/Resources/Locale/ru-RU/prototypes/entities/structures/storage/canisters/gas-canisters.ftl b/Resources/Locale/ru-RU/prototypes/entities/structures/storage/canisters/gas-canisters.ftl index 3762d46aa7..cff8a2159b 100644 --- a/Resources/Locale/ru-RU/prototypes/entities/structures/storage/canisters/gas-canisters.ftl +++ b/Resources/Locale/ru-RU/prototypes/entities/structures/storage/canisters/gas-canisters.ftl @@ -21,7 +21,29 @@ ent-MiasmaCanister = канистра миазм ent-NitrousOxideCanister = канистра оксида азота .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится оксид азота. Можно прикрепить к порту коннектора с помощью гаечного ключа. ent-FrezonCanister = канистра фрезона - .desc = Хладагент с лёгкими галлюциногенными свойствами. Развлекайтесь. + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится фрезон. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-BZCanister = канистра бз + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится бз. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-PluoxiumCanister = канистра плюоксиума + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится плюоксиум. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-HydrogenCanister = канистра водорода + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится водород. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-NitriumCanister = канистра нитриума + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится нитриум. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-HealiumCanister = канистра хилиума + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится хилиум. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-HyperNobliumCanister = канистра гипер-ноблия + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится гипер-ноблий. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ProtoNitrateCanister = канистра прото-нитрата + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится прото-нитрат. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ZaukerCanister = канистра заукера + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится заукер. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-HalonCanister = канистра галона + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится галон. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-HeliumCanister = канистра гелия + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится гелий. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-AntiNobliumCanister = канистра анти-ноблия + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится анти-ноблий. Можно прикрепить к порту коннектора с помощью гаечного ключа. ent-GasCanisterBrokenBase = разбитая канистра для газа .desc = Разбитая канистра для газа. Не совсем бесполезна, так как может быть разобрана для получения высококачественных материалов. ent-StorageCanisterBroken = { ent-GasCanisterBrokenBase } @@ -46,3 +68,25 @@ ent-NitrousOxideCanisterBroken = { ent-GasCanisterBrokenBase } .desc = { ent-GasCanisterBrokenBase.desc } ent-FrezonCanisterBroken = { ent-GasCanisterBrokenBase } .desc = { ent-GasCanisterBrokenBase.desc } +ent-BZCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-PluoxiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-HydrogenCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-NitriumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-HealiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-HyperNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ProtoNitrateCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ZaukerCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-HalonCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-HeliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-AntiNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } diff --git a/Resources/Locale/ru-RU/reagents/meta/elements.ftl b/Resources/Locale/ru-RU/reagents/meta/elements.ftl index 3c6c448b7c..3573030044 100644 --- a/Resources/Locale/ru-RU/reagents/meta/elements.ftl +++ b/Resources/Locale/ru-RU/reagents/meta/elements.ftl @@ -14,8 +14,6 @@ reagent-name-fluorine = фтор reagent-desc-fluorine = Высокотоксичный бледно-жёлтый газ. Чрезвычайно реактивный. reagent-name-gold = золото reagent-desc-gold = Плотный, мягкий, блестящий металл, самый ковкий и пластичный из всех известных. -reagent-name-hydrogen = водород -reagent-desc-hydrogen = Легкий, легковоспламеняющийся газ. reagent-name-iodine = йод reagent-desc-iodine = Обычно добавляется в поваренную соль в качестве питательного вещества. Сам по себе он гораздо менее приятен на вкус. reagent-name-iron = железо diff --git a/Resources/Locale/ru-RU/reagents/meta/gases.ftl b/Resources/Locale/ru-RU/reagents/meta/gases.ftl index 43da3c3f9d..cc0aa83a50 100644 --- a/Resources/Locale/ru-RU/reagents/meta/gases.ftl +++ b/Resources/Locale/ru-RU/reagents/meta/gases.ftl @@ -14,3 +14,25 @@ reagent-name-nitrous-oxide = оксид азота reagent-desc-nitrous-oxide = Знаешь, как всё кажется смешнее, когда ты устал? Так вот... reagent-name-frezon = фрезон reagent-desc-frezon = Высокоэффективный хладагент... и галлюциноген. +reagent-name-bz = бз +reagent-desc-bz = Сильнодействующий галлюциноген, который также погружает слизней в стазис. +reagent-name-pluoxium = плюоксиум +reagent-desc-pluoxium = Газ, насыщающий кровь большим количеством кислорода, не будучи окислителем. +reagent-name-hydrogen = водород +reagent-desc-hydrogen = Легкий, легковоспламеняющийся газ. +reagent-name-nitrium = нитриум +reagent-desc-nitrium = Газообразный стимулятор, который при вдыхании может повысить скорость и выносливость. +reagent-name-healium = хилиум +reagent-desc-healium = Вызывает глубокий регенеративный сон. +reagent-name-hyper-nob = гипер-ноблий +reagent-desc-hyper-nob = Самый благородный газ из всех. Большое количество гипер-ноблия активно предотвращает возникновение реакций. +reagent-name-proto-nitrate = прото-нитрат +reagent-desc-proto-nitrate = Нестабильный газ, который по-разному реагирует с различными газами. +reagent-name-zauker = заукер +reagent-desc-zauker = Крайне токсичный газ, его производство строго регулируется, в дополнение к сложности его производства. Быстро распадается при контакте с азотом. +reagent-name-halon = галон +reagent-desc-halon = Мощный подавитель огня. При высоких температурах поглащает кислород и охлаждает помещение. +reagent-name-helium = гелий +reagent-desc-helium = Инертный газ, получаемый при синтезе водорода и его производных. +reagent-name-anti-nob = анти-ноблиум +reagent-desc-anti-nob = Мы до сих пор не знаем, что он делает, но он стоит дорого. diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl index a1a868b16a..27436cc523 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/storage/canisters/gas_canisters.ftl @@ -34,6 +34,39 @@ ent-NitrousOxideCanister = канистра оксида азота ent-FrezonCanister = канистра фрезона .desc = Хладагент с лёгкими галлюциногенными свойствами. Развлекайтесь. .suffix = { "" } +ent-BZCanister = канистра бз + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-PluoxiumCanister = канистра плюоксиума + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HydrogenCanister = канистра водорода + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-NitriumCanister = канистра нитриума + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HealiumCanister = канистра хилиума + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HyperNobliumCanister = канистра гипер-ноблия + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-ProtoNitrateCanister = канистра прото-нитрата + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-ZaukerCanister = канистра заукера + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HalonCanister = канистра галона + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-HeliumCanister = канистра гелия + .desc = { ent-GasCanister.desc } + .suffix = { "" } +ent-AntiNobliumCanister = канистра анти-ноблия + .desc = { ent-GasCanister.desc } + .suffix = { "" } ent-GasCanisterBrokenBase = разбитая канистра для газа .desc = Разбитая канистра для газа. Не совсем бесполезна, так как может быть разобрана для получения высококачественных материалов. .suffix = { "" } @@ -70,3 +103,36 @@ ent-NitrousOxideCanisterBroken = разбитая канистра оксида ent-FrezonCanisterBroken = разбитая канистра фрезона .desc = { ent-GasCanisterBrokenBase.desc } .suffix = { "" } +ent-BZCanisterBroken = разбитая канистра бз + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-PluoxiumCanisterBroken = разбитая канистра плюоксиума + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HydrogenCanisterBroken = разбитая канистра водорода + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-NitriumCanisterBroken = разбитая канистра нитриума + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HealiumCanisterBroken = разбитая канистра хилиума + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HyperNobliumCanisterBroken = разбитая канистра гипер-ноблия + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-ProtoNitrateCanisterBroken = разбитая канистра прото-нитрата + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-ZaukerCanisterBroken = разбитая канистра заукера + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HalonCanisterBroken = разбитая канистра галона + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-HeliumCanisterBroken = разбитая канистра гелия + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } +ent-AntiNobliumCanisterBroken = разбитая канистра анти-ноблия + .desc = { ent-GasCanisterBrokenBase.desc } + .suffix = { "" } diff --git a/Resources/Prototypes/Atmospherics/gases.yml b/Resources/Prototypes/Atmospherics/gases.yml index c2b14c5177..61833ae356 100644 --- a/Resources/Prototypes/Atmospherics/gases.yml +++ b/Resources/Prototypes/Atmospherics/gases.yml @@ -1,4 +1,4 @@ -- type: gas +- type: gas id: 0 name: gases-oxygen specificHeat: 20 @@ -100,3 +100,141 @@ color: 3a758c reagent: Frezon pricePerMole: 0.3 + +- type: gas + id: 9 + name: gases-bz + specificHeat: 20 + heatCapacityRatio: 1.3 + molarMass: 100 + color: e69edd + reagent: BZ + pricePerMole: 3 + +- type: gas + id: 10 + name: gases-pluoxium + specificHeat: 80 + heatCapacityRatio: 1.3 + molarMass: 40 + color: 0054AA + reagent: Pluoxium + pricePerMole: 5 + +- type: gas + id: 11 + name: gases-hydrogen + specificHeat: 15 + heatCapacityRatio: 1.4 + molarMass: 2 + color: FFFFFF + reagent: Hydrogen + pricePerMole: 5 + +- type: gas + id: 12 + name: gases-nitrium + specificHeat: 10 + heatCapacityRatio: 1.3 + molarMass: 60 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: nitrium + gasMolesVisible: 0.1 + gasVisbilityFactor: 500 + color: 7E4732 + reagent: Nitrium + pricePerMole: 12 + +- type: gas + id: 13 + name: gases-healium + specificHeat: 10 + heatCapacityRatio: 1.3 + molarMass: 40 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: healium + gasMolesVisible: 0.1 + gasVisbilityFactor: 500 + color: d97e7e + reagent: Healium + pricePerMole: 12 + +- type: gas + id: 14 + name: gases-hyper-noblium + specificHeat: 2000 + heatCapacityRatio: 1.3 + molarMass: 150 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: frezon + gasMolesVisible: 0.1 + gasVisbilityFactor: 1000 + color: 33cccc + reagent: Hyper-Noblium + pricePerMole: 15 + +- type: gas + id: 15 + name: gases-proto-nitrate + specificHeat: 30 + heatCapacityRatio: 1.3 + molarMass: 120 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: proto_nitrate + gasMolesVisible: 0.1 + gasVisbilityFactor: 1000 + color: 009933 + reagent: Proto-Nitrate + pricePerMole: 5 + +- type: gas + id: 16 + name: gases-zauker + specificHeat: 350 + heatCapacityRatio: 1.3 + molarMass: 110 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: zauker + gasMolesVisible: 0.1 + gasVisbilityFactor: 250 + color: 1c1a1a + reagent: Zauker + pricePerMole: 15 + +- type: gas + id: 17 + name: gases-halon + specificHeat: 1.4 + heatCapacityRatio: 1.3 + molarMass: 150 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: halon + gasMolesVisible: 0.1 + gasVisbilityFactor: 500 + color: e3574d + reagent: Halon + pricePerMole: 8 + +- type: gas + id: 18 + name: gases-helium + specificHeat: 15 + heatCapacityRatio: 20 + molarMass: 4 + color: 005959 + reagent: Helium + pricePerMole: 7 + +- type: gas + id: 19 + name: gases-anti-noblium + specificHeat: 1 + heatCapacityRatio: 1 + molarMass: 200 + gasOverlaySprite: /Textures/Effects/atmospherics.rsi + gasOverlayState: anti_noblium + gasMolesVisible: 0.1 + gasVisbilityFactor: 100 + color: 525151 + reagent: Anti-Noblium + pricePerMole: 20 diff --git a/Resources/Prototypes/Atmospherics/reactions.yml b/Resources/Prototypes/Atmospherics/reactions.yml index d226c81f6c..54b0f82d2e 100644 --- a/Resources/Prototypes/Atmospherics/reactions.yml +++ b/Resources/Prototypes/Atmospherics/reactions.yml @@ -106,3 +106,373 @@ # - !type:WaterVaporReaction # gas: 5 # reagent: Water + +- type: gasReaction + id: BZProductionReaction + priority: 3 + maximumTemperature: 313.149 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 10 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 10 # n2o + - 0 # frezon + - 0 # bz + effects: + - !type:BZProductionReaction {} + +- type: gasReaction + id: PluoxiumProductionReaction + priority: 4 + minimumTemperature: 50 + maximumTemperature: 273.15 + minimumRequirements: + - 0.01 # oxygen + - 0 # nitrogen + - 0.01 # carbon dioxide + - 0 # plasma + - 0.01 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + effects: + - !type:PluoxiumProductionReaction {} + +- type: gasReaction + id: HydrogenFireReaction + priority: -3 + minimumTemperature: 373.149 # Same as Atmospherics.FireMinimumTemperatureToExist + minimumRequirements: + - 0.01 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0.01 # hydrogen + effects: + - !type:HydrogenFireReaction {} + +- type: gasReaction + id: NitriumProduction + priority: 5 + minimumTemperature: 1500 + minimumRequirements: + - 0 # oxygen + - 10 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 20 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 5 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:NitriumProductionReaction {} + +- type: gasReaction + id: NitriumDecomposition + priority: 6 + maximumTemperature: 343.15 + minimumRequirements: + - 0.01 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0.01 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:NitriumDecompositionReaction {} + +- type: gasReaction + id: HyperNobliumProduction + priority: 7 + minimumTemperature: 2.7 + maximumTemperature: 15 + minimumRequirements: + - 0 # oxygen + - 10 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 5 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:HyperNobliumProductionReaction {} + +- type: gasReaction + id: HalonOxygenAbsorption + priority: -4 + minimumTemperature: 373.149 + minimumRequirements: + - 0.01 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0.01 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:HalonOxygenAbsorptionReaction {} + +- type: gasReaction + id: HealiumProduction + priority: 8 + minimumTemperature: 25 + maximumTemperature: 300 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0.01 # frezon + - 0.01 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:HealiumProductionReaction {} + +- type: gasReaction + id: ZaukerProduction + priority: 9 + minimumTemperature: 50000 + maximumTemperature: 75000 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0.01 # nitrium + - 0 # healium + - 0.01 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:ZaukerProductionReaction {} + +- type: gasReaction + id: ZaukerDecomposition + priority: 10 + minimumRequirements: + - 0 # oxygen + - 0.01 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0.01 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:ZaukerDecompositionReaction {} + +- type: gasReaction + id: ProtoNitrateProduction + priority: 11 + minimumTemperature: 5000 + maximumTemperature: 10000 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0.01 # pluoxium + - 0.01 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:ProtoNitrateProductionReaction {} + +- type: gasReaction + id: ProtoNitrateHydrogenConversion + priority: 12 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 150 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0.01 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:ProtoNitrateHydrogenConversionReaction {} + +- type: gasReaction + id: ProtoNitrateTritiumDeirradiation + priority: 13 + minimumTemperature: 150 + maximumTemperature: 340 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0.01 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0.01 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:ProtoNitrateTritiumConversionReaction {} + +- type: gasReaction + id: ProtoNitrateBZaseAction + priority: 14 + minimumTemperature: 260 + maximumTemperature: 280 + minimumRequirements: + - 0 # oxygen + - 0 # nitrogen + - 0 # carbon dioxide + - 0 # plasma + - 0 # tritium + - 0 # vapor + - 0 # miasma + - 0 # n2o + - 0 # frezon + - 0.01 # bz + - 0 # pluoxium + - 0 # hydrogen + - 0 # nitrium + - 0 # healium + - 0 # hyper-noblium + - 0.01 # proto-nitrate + - 0 # zauker + - 0 # halon + - 0 # helium + - 0 # anti-noblium + effects: + - !type:ProtoNitrateBZaseConversionReaction {} diff --git a/Resources/Prototypes/Atmospherics/thresholds.yml b/Resources/Prototypes/Atmospherics/thresholds.yml index 9b09d64a10..ab8a2f1854 100644 --- a/Resources/Prototypes/Atmospherics/thresholds.yml +++ b/Resources/Prototypes/Atmospherics/thresholds.yml @@ -67,6 +67,13 @@ upperWarnAround: !type:AlarmThresholdSetting threshold: 0.5 +- type: alarmThreshold + id: unwanted + upperBound: !type:AlarmThresholdSetting + threshold: 0.0025 + upperWarnAround: !type:AlarmThresholdSetting + threshold: 0.5 + - type: alarmThreshold id: ignore # just ignore nitrogen??? ??? ??? ignore: true diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 12514f03fe..d78d591c5f 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -53,6 +53,17 @@ Ammonia: stationAmmonia NitrousOxide: stationNO Frezon: danger + BZ: danger + Pluoxium: unwanted + Hydrogen: danger + Nitrium: unwanted + Healium: danger + HyperNoblium: unwanted + ProtoNitrate: danger + Zauker: danger + Halon: danger + Helium: unwanted + AntiNoblium: danger - type: Tag tags: - GasVent @@ -144,6 +155,17 @@ Ammonia: stationAmmonia NitrousOxide: stationNO Frezon: danger + BZ: danger + Pluoxium: unwanted + Hydrogen: danger + Nitrium: unwanted + Healium: danger + HyperNoblium: unwanted + ProtoNitrate: danger + Zauker: danger + Halon: danger + Helium: unwanted + AntiNoblium: danger - type: Tag tags: - GasScrubber diff --git a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml index 2df48a584c..8dd154af4b 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml @@ -58,6 +58,17 @@ Ammonia: stationAmmonia NitrousOxide: stationNO Frezon: danger + BZ: danger + Pluoxium: unwanted + Hydrogen: danger + Nitrium: unwanted + Healium: danger + HyperNoblium: unwanted + ProtoNitrate: danger + Zauker: danger + Halon: danger + Helium: unwanted + AntiNoblium: danger - type: Tag tags: - AirSensor diff --git a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml index b10945bca1..a7ba07630a 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -123,6 +123,7 @@ - 0 # Ammonia - 0 # N2O - 0 # Frezon + - 0 # BZ temperature: 293.15 - type: Destructible thresholds: @@ -609,6 +610,610 @@ - type: Lock locked: true +- type: entity + parent: GasCanister + id: BZCanister + components: + - type: Sprite + layers: + - state: purple + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 1871.71051 # BZ + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + BZCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: PluoxiumCanister + components: + - type: Sprite + layers: + - state: darkblue + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 1871.71051 # Pluoxium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + PluoxiumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: HydrogenCanister + components: + - type: Sprite + layers: + - state: h2 + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 1871.71051 # Hydrogen + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + HydrogenCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: NitriumCanister + components: + - type: Sprite + layers: + - state: brown + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 1871.71051 # Nitrium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + NitriumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: HealiumCanister + components: + - type: Sprite + layers: + - state: healium + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 1871.71051 # Healium + - 0 # Hyper-Noblium + - 0 # Proto-Nitrate + - 0 # Zauker + - 0 # Halon + - 0 # Helium + - 0 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + HealiumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: HyperNobliumCanister + components: + - type: Sprite + layers: + - state: nob + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 0 # Healium + - 1871.71051 # Hyper-Noblium + - 0 # Proto-Nitrate + - 0 # Zauker + - 0 # Halon + - 0 # Helium + - 0 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + HyperNobliumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ProtoNitrateCanister + components: + - type: Sprite + layers: + - state: proto_nitrate + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 0 # Healium + - 0 # Hyper-Noblium + - 1871.71051 # Proto-Nitrate + - 0 # Zauker + - 0 # Halon + - 0 # Helium + - 0 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + ProtoNitrateCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ZaukerCanister + components: + - type: Sprite + layers: + - state: zauker + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 0 # Healium + - 0 # Hyper-Noblium + - 0 # Proto-Nitrate + - 1871.71051 # Zauker + - 0 # Halon + - 0 # Helium + - 0 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + ZaukerCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: HalonCanister + components: + - type: Sprite + layers: + - state: halon + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 0 # Healium + - 0 # Hyper-Noblium + - 0 # Proto-Nitrate + - 0 # Zauker + - 1871.71051 # Halon + - 0 # Helium + - 0 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + HalonCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: HeliumCanister + components: + - type: Sprite + layers: + - state: helium + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 0 # Healium + - 0 # Hyper-Noblium + - 0 # Proto-Nitrate + - 0 # Zauker + - 0 # Halon + - 1871.71051 # Helium + - 0 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + HeliumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: AntiNobliumCanister + components: + - type: Sprite + layers: + - state: antinob + - type: GasCanister + gasMixture: + volume: 1000 + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 0 # Plasma + - 0 # Tritium + - 0 # Water vapor + - 0 # Miasma + - 0 # N2O + - 0 # Frezon + - 0 # BZ + - 0 # Pluoxium + - 0 # Hydrogen + - 0 # Nitrium + - 0 # Healium + - 0 # Hyper-Noblium + - 0 # Proto-Nitrate + - 0 # Zauker + - 0 # Halon + - 0 # Helium + - 1871.71051 # Anti-Noblium + temperature: 293.15 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:SpawnEntitiesBehavior + spawn: + AntiNobliumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + # Broke Entities - type: entity @@ -751,3 +1356,91 @@ components: - type: Sprite state: frezon-1 + +- type: entity + parent: GasCanisterBrokenBase + id: BZCanisterBroken + noSpawn: true + components: + - type: Sprite + state: purple-1 + +- type: entity + parent: GasCanisterBrokenBase + id: PluoxiumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: darkblue-1 + +- type: entity + parent: GasCanisterBrokenBase + id: HydrogenCanisterBroken + noSpawn: true + components: + - type: Sprite + state: h2-1 + +- type: entity + parent: GasCanisterBrokenBase + id: NitriumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: brown-1 + +- type: entity + parent: GasCanisterBrokenBase + id: HealiumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: healium-1 + +- type: entity + parent: GasCanisterBrokenBase + id: HyperNobliumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: nob-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ProtoNitrateCanisterBroken + noSpawn: true + components: + - type: Sprite + state: proto_nitrate-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ZaukerCanisterBroken + noSpawn: true + components: + - type: Sprite + state: zauker-1 + +- type: entity + parent: GasCanisterBrokenBase + id: HalonCanisterBroken + noSpawn: true + components: + - type: Sprite + state: halon-1 + +- type: entity + parent: GasCanisterBrokenBase + id: HeliumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: helium-1 + +- type: entity + parent: GasCanisterBrokenBase + id: AntiNobliumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: antinob-1 diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index 5c6528a43f..1e278ffa8a 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -116,17 +116,6 @@ boilingPoint: 2700.0 meltingPoint: 1064.76 -- type: reagent - id: Hydrogen - name: reagent-name-hydrogen - group: Elements - desc: reagent-desc-hydrogen - physicalDesc: reagent-physical-desc-gaseous - flavor: bitter - color: "#808080" - boilingPoint: -253.0 - meltingPoint: -259.2 - - type: reagent id: Iodine name: reagent-name-iodine diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 54bdbf3a40..0be1007952 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -324,3 +324,289 @@ - !type:ReagentThreshold reagent: Frezon min: 1 + +- type: reagent + id: BZ + name: reagent-name-bz + desc: reagent-desc-bz + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#e69edd" + metabolisms: + Gas: + effects: + - !type:GenericStatusEffect + key: SeeingRainbows + component: SeeingRainbows + type: Add + time: 8 + refresh: false + - !type:HealthChange + conditions: + - !type:ReagentThreshold + reagent: BZ + min: 0.5 + scaleByQuantity: true + ignoreResistances: true + damage: + types: + Cellular: 0.005 + - !type:PopupMessage + conditions: + - !type:ReagentThreshold + reagent: BZ + min: 1 + - !type:OrganType + type: Slime + type: Local + visualType: Medium + messages: [ "effect-sleepy" ] + probability: 0.1 + - !type:MovespeedModifier + conditions: + - !type:ReagentThreshold + reagent: BZ + min: 1 + - !type:OrganType + type: Slime + walkSpeedModifier: 0.65 + sprintSpeedModifier: 0.65 + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + reagent: BZ + min: 1 + - !type:OrganType + type: Slime + key: ForcedSleep + component: ForcedSleeping + time: 3 + type: Add + +- type: reagent + id: Pluoxium + name: reagent-name-pluoxium + desc: reagent-desc-pluoxium + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#0054AA" + boilingPoint: -183.0 + meltingPoint: -218.4 + metabolisms: + Gas: + effects: + - !type:Oxygenate + factor: 8 + conditions: + - !type:OrganType + type: Human + - !type:Oxygenate + factor: 8 + conditions: + - !type:OrganType + type: Animal + - !type:Oxygenate + factor: 8 + conditions: + - !type:OrganType + type: Rat + - !type:Oxygenate + factor: 8 + conditions: + - !type:OrganType + type: Plant + - !type:ModifyLungGas + conditions: + - !type:OrganType + type: Vox + shouldHave: false + ratios: + CarbonDioxide: 1.0 + Pluoxium: -1.0 + +- type: reagent + id: Hydrogen + name: reagent-name-hydrogen + desc: reagent-desc-hydrogen + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#808080" + boilingPoint: -253.0 + meltingPoint: -259.2 + +- type: reagent + id: Nitrium + name: reagent-name-nitrium + desc: reagent-desc-nitrium + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#7E4732" + boilingPoint: -253.0 + meltingPoint: -259.2 + metabolisms: + Gas: + effects: + - !type:MovespeedModifier + conditions: + - !type:ReagentThreshold + reagent: Nitrium + min: 3 + statusLifetime: 0.25 + walkSpeedModifier: 1.5 + sprintSpeedModifier: 1.5 + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + min: 6 + key: Stun + time: 1 + type: Remove + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + min: 6 + key: KnockedDown + time: 5 + type: Remove + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + min: 6 + key: ForcedSleep + component: ForcedSleeping + time: 15 + type: Remove + - !type:HealthChange + conditions: + - !type:ReagentThreshold + reagent: Nitrium + min: 9 + scaleByQuantity: true + ignoreResistances: true + damage: + types: + Poison: 0.05 + +- type: reagent + id: Healium + name: reagent-name-healium + desc: reagent-desc-healium + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#d97e7e" + boilingPoint: -253.0 + meltingPoint: -259.2 + metabolisms: + Gas: + effects: + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + reagent: Healium + min: 2 + key: ForcedSleep + component: ForcedSleeping + time: 3 + type: Add + - !type:HealthChange + conditions: + - !type:ReagentThreshold + reagent: Healium + min: 2 + scaleByQuantity: true + ignoreResistances: true + damage: + groups: + Brute: -0.5 + Burn: -0.5 + Toxin: -1.25 + +- type: reagent + id: Hyper-Noblium + name: reagent-name-hyper-nob + desc: reagent-desc-hyper-nob + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#33cccc" + boilingPoint: -253.0 + meltingPoint: -259.2 + +- type: reagent + id: Proto-Nitrate + name: reagent-name-proto-nitrate + desc: reagent-desc-proto-nitrate + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#009933" + boilingPoint: -253.0 + meltingPoint: -259.2 + +- type: reagent + id: Zauker + name: reagent-name-zauker + desc: reagent-desc-zauker + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#1c1a1a" + boilingPoint: -253.0 + meltingPoint: -259.2 + metabolisms: + Gas: + effects: + - !type:HealthChange + conditions: + - !type:ReagentThreshold + reagent: Zauker + min: 0.25 + max: 8 + scaleByQuantity: true + ignoreResistances: true + damage: + types: + Slash: 0.75 + Heat: 0.25 + Poison: 0.25 + Bloodloss: 0.25 + - !type:HealthChange + conditions: + - !type:ReagentThreshold + reagent: Zauker + min: 8 + scaleByQuantity: true + ignoreResistances: true + damage: + types: + Slash: 0.015 + Heat: 0.005 + Poison: 0.005 + Bloodloss: 0.005 + +- type: reagent + id: Halon + name: reagent-name-halon + desc: reagent-desc-halon + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#e3574d" + boilingPoint: -253.0 + meltingPoint: -259.2 + +- type: reagent + id: Helium + name: reagent-name-helium + desc: reagent-desc-helium + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#005959" + boilingPoint: -253.0 + meltingPoint: -259.2 + +- type: reagent + id: Anti-Noblium + name: reagent-name-anti-nob + desc: reagent-desc-anti-nob + physicalDesc: reagent-physical-desc-gaseous + flavor: bitter + color: "#525151" + boilingPoint: -253.0 + meltingPoint: -259.2 diff --git a/Resources/Textures/Effects/atmospherics.rsi/anti_noblium.png b/Resources/Textures/Effects/atmospherics.rsi/anti_noblium.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9b61f82fc07be2b60c2f929004146010b97b47 GIT binary patch literal 749 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/meta.json b/Resources/Textures/Effects/atmospherics.rsi/meta.json index bb9798c1e9..c7ddddb375 100644 --- a/Resources/Textures/Effects/atmospherics.rsi/meta.json +++ b/Resources/Textures/Effects/atmospherics.rsi/meta.json @@ -1 +1 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/tgstation/tgstation at 04e43d8c1d5097fdb697addd4395fb849dd341bd", "states": [{"name": "chem_gas_old", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "frezon", "delays": [[0.2, 0.2, 0.2, 0.3, 0.3, 0.2, 0.2, 0.2]]}, {"name": "frezon_old", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "fusion_gas", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "miasma", "delays": [[0.2, 0.2, 0.2, 0.3, 0.3, 0.2, 0.2, 0.2]]}, {"name": "miasma_old", "delays": [[0.22999999999999998, 0.22999999999999998, 0.22999999999999998, 0.22999999999999998, 0.22999999999999998, 0.22999999999999998]]}, {"name": "nitrous_oxide", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "nitrous_oxide_old", "delays": [[0.2, 0.2, 0.2]]}, {"name": "nitryl", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "nitryl_old", "delays": [[0.1, 0.1, 0.1, 0.1]]}, {"name": "plasma", "delays": [[0.1, 0.1, 0.1]]}, {"name": "plasma_old", "delays": [[0.2, 0.2, 0.2]]}, {"name": "tritium", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "tritium_old", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "water_vapor", "delays": [[0.2, 0.2, 0.2, 0.3, 0.3, 0.2, 0.2, 0.2]]}, {"name": "water_vapor_old", "delays": [[0.2, 0.2, 0.2, 0.2, 0.2, 0.2]]}]} +{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/tgstation/tgstation at 2daed544a9e64997833ff2cbe74b216dc982427f", "states": [{"name": "chem_gas_old", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "frezon", "delays": [[0.2, 0.2, 0.2, 0.3, 0.3, 0.2, 0.2, 0.2]]}, {"name": "frezon_old", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "fusion_gas", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "miasma", "delays": [[0.2, 0.2, 0.2, 0.3, 0.3, 0.2, 0.2, 0.2]]}, {"name": "miasma_old", "delays": [[0.22999999999999998, 0.22999999999999998, 0.22999999999999998, 0.22999999999999998, 0.22999999999999998, 0.22999999999999998]]}, {"name": "nitrous_oxide", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "nitrous_oxide_old", "delays": [[0.2, 0.2, 0.2]]}, {"name": "nitryl", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "nitryl_old", "delays": [[0.1, 0.1, 0.1, 0.1]]}, {"name": "plasma", "delays": [[0.1, 0.1, 0.1]]}, {"name": "plasma_old", "delays": [[0.2, 0.2, 0.2]]}, {"name": "tritium", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "tritium_old", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "water_vapor", "delays": [[0.2, 0.2, 0.2, 0.3, 0.3, 0.2, 0.2, 0.2]]},{"name": "nitrium", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]} ,{"name": "proto_nitrate", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]},{"name": "zauker", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]},{"name": "anti_noblium", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]},{"name": "healium", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]},{"name": "halon", "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "water_vapor_old", "delays": [[0.2, 0.2, 0.2, 0.2, 0.2, 0.2]]}]} diff --git a/Resources/Textures/Effects/atmospherics.rsi/nitrium.png b/Resources/Textures/Effects/atmospherics.rsi/nitrium.png new file mode 100644 index 0000000000000000000000000000000000000000..28387ab2b705987fb231d9c488dfd6b6f58737c9 GIT binary patch literal 2666 zcmV-w3YGPVP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3I9n%K~#8N?Vagy zBu5T~r8Q)nkR!5Uf65=ZCrdQw;OlrqT_nj$qVE_CkY=ROQ|kEH}R8;P>Jus`S1Fkfa$R84NVgXhuB}{OU9Xk*0C-ONJa|InY%OkwM(*l4>bFKS|-2@y1F(+et zzVz8h%sVYWlZrv%#F(u^yI@lJFvvbwF_ zu?_A$KVI)GA1`15cHscsLGReE;5OqYQ}LskqWFT9gV=cITTCs0;3YYUS8x_LYE&oZ zO8o9nc6!#0rTHS@4x1dvL60Vi$neh`*Z$`-<3&!{{HxY)=2k0(gl| zCT8Kqoucah4tYSQqT3~01o;}c`>%&*TV^p)q!qW~SKF=Ta&>%*XciI&_s^IszXw<; z@)Rr0>kc5RWhIA6to+J3bv^`kxVkA3k{e4#NB7IoS%7X6xN(u4)`M8^xu^4AquK{~ zrFeO@s4l=nv&9EXhNn}t|4LvuEEdrnqjmThJ|4o~0^Z%&N<7Xh(|rfk9MIqjo}P7% z_!IsgSg!zgX!JXY1`svRTS~Tp5B6o9dFXpj-^(NOAO0eU<-21w3U%v7Mm@?AYG(!#Yg0cGz3;z*+z}&H_}Eh^X3Yz1_H)XG4CX z8^vM~-C5||JGR2EJ$U3T3m^_zGOBuC4R4UudSPz~qn{%X+lybxE2Q#I13BUCfSc&% zb@S;oUts@T+bW$JBnPdZC~ z)>P!$$#)eij^qc~Mf=~W>ETNjz;co$j5{P`38S9@&JmA=$)4{9_ra?jRCFv>Y+i`I z1_B)j_t_9oSe9sam|1=vVrNMeD^AtE(uax;sOqI;Ujwt}U8enc?8b>2-tk=-GIX?F zW~Y(7(%d@V0<^PgLP*4tyJHOkaQ@v|BEJmuD!Po$&CRc~08BNZZeu*6c$FBDz13jr zEMukCZj2qw{8ks>omj(JAsZ_0tNtxLY4X(4pWr3GYyqqys|^x5x*D`(da;`!+= z0R|HZW1TVO8lwf!4py6%C1b^@#H#2-RO4u(#-GHBs~17*r1e?93EXXLMmx#FSdFcq z^IoY-Y(#H02LW;5!-~uPKi%^yfLvI{(;&`DEGYzXH97~bt6SSjFFdT?xOvF}m={B2 zgOa!ys3#uLT}H+KX>{z)9LDB#@>>83+-)@MEgw66CpZxwi{OdHavs$M=mzlg<@`j` zx^N@Crk*AmXvApl-G4p28t|P%UTp$$jO;6QY!6`*E5~w9dI7|+>d3d$(i*`o4YK4g(M6SyrF759kT%+ z=vY%&{=EFUOW>h(qq@xh+c+4obm-bv2V24NQ_TZ(bOBNsEtTT&>4iovU<}7Hv$d==Iv7@{)syRPn$cI4r4@GjosuKWPv6H{A+OLAR z9^HI8bnETbYWZd#tF=9S;1xg|K|1Jyw7uN3SgaPo?D&Xs%jm{k>93Yic0L5^WU^<$ zD?%Cr>EihmEPtMEbRNa%vQneRN=~0_^a50itptt+8pT;@5Mr@y8Zyk_^j6WD02z0V3!#oNKH*OV_gpmY-9Y zgGs35=J{mX$A2pJYAVC9i0tHU)vpB)$!qKcRvZYUpR2V%@9FbSZviWGhG@}kT!bEq z1seYxz)!?Ci-)$0&^qk<)7|s}RFV_2VmrW><*yP0P1VBa=WgznPr*9#YFQ=l_1lks Y0i{MnF1U&?RsaA107*qoM6N<$f@#?dcK`qY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/proto_nitrate.png b/Resources/Textures/Effects/atmospherics.rsi/proto_nitrate.png new file mode 100644 index 0000000000000000000000000000000000000000..7a43f2bff33eccab663d62a123a8282d22b67996 GIT binary patch literal 2423 zcmV--35fQIP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2@FX@K~#8N?VL+; zTR99x?QEpSJxo^7`=9i3+yynEf*||>KFXg{^(rzSfqMbMmaHgw|MT(ZpSMkXynXz; z9zOB@_Wt*JsG`Mtv0YsxqHk$QaD9x=_>!PLGz|%L03yXpm}0>qtsGgZjh*y>NM2A! z^BFmZtXCTQFaSG>MxqBX?>cPGiNlwAf0d74>(2)~@v9FXfcto@r7r{RXSK%anf%fOcQ=~q zX0F~Ai~J*^MyIEV58ASa7Qzysdj<>$0Mu;Uy?2HuU&_aL_O{BVg4Ejf>lwBrPsO@rV`_^BWIP=cj_kJ>HxfQ^PzF{TFYU; zN5@N7pVE!*qCN#^4dRBYjoewd=V^D-cj)t+Q|AzR4Upk<^MClC=sAoJzz?5`_TL5k z@VWUJfN##X9{_l+tiFKy3VfOYz=N7PFrLTCIi*S2k+Z_ni@=Df?kjoJfIRdu{3&61 zs(O)fO1XAu1ChEZ+5J&|Sp{l9OeK!v<(SfufJX9Wa;=EJ^)QT8Q)C_E@mkAejywhM z=1Wr@EiTgt+)J-@>jCRthe%Go$BXIuynQSj4xp1rIzWz4>>>Sm z010adqqR^z?UJk}W9DNLbay;`Ct9Z+!wkM+vSo#(i z2YWT2884O(@g5xjDx{g|Amx_|m)1BPuNZ52K&Xy~l!I$=P}}lgLH%XpA@)81G!alS zL*e-(B#ll%5v2UER?+Hs-Cd^#>fZ){ngODQcw82)Q}v+{@prQMl$}1P9_rxQ(*Q(` zM4IbCwRpZ$KBkHK^E^m-to~U*9PabAiO;j}ziHS6}+kk95){EC#ZqvzC@j_$nKLM^VVePBxN3}T^ zBgIC)tE<|SZah-;^6);uB(#YcW7RmsJG@9v%#qcP4h~YOFN)=b>Xrup1a=irJpc}E zLNpg|T*ZUcd?1r^q8C;lN&_&_q*p~cyj{)rnD!!({!pm4AJ((E5R9$HPa-wA;|=oR zwU$~;_elJ&VlAc(fG*EjZC1vcr=jJVI>-oKJriE;zXePmY!pfN3NN5RbzZ4{1P(ZJ z$XJtgt*tk1YxEOAQ8Auq2i58BdgHo0U&L3{1LlT!&j%3MBSCfU9}B!x}20C3RA`tlMY2eZ5R>){R5x^e&j z&>Q=QAyuwEd;m1@T1%Hgb@6dzD5nAK;{$M-lS6Pyn-UrTn9dUu`on(Q0iXwugFpv@ zui^SMJ9EDR(Vqs>eK21Hc7(KoAZPYRpXCE`N%y-NQatX-=8odkG1UiJhd2P1PzEke z^Ge1fI$ksl$fETjic}r`e_I`2Yo(9H5 z_aTw`0KRXc2bvD7TfVwlUM;}=MIgT^ZH6^zy+Sq**T%1T9%)UYx+j{y0?jQQ9=+D` z6A*{jT2g^M?q>omF@VOJ0Gw<-CF6tco$&bzJ&-(f^dTR{n*#uxY(AoSh%n*fR1YF` zw>7E*5MgKYyJWnb>OoXj(x9=H2X_FF9S7kxhihv4v)(d?a-wczN_%7gG&&}y1^|fq zm^gf%Bh!PZey6Vzn(os(fgp_6S~7venWiF@7>h{0sAi^qAlifJnlotim~RDFnlM!) z*X}lW%9p2s*IFtw<=5lkDL^{#2_u!mti()U4gFOfkgONFAMbm8ykr0>c*b|3HT_f{ zc9Z(sz^gcQ_!?jJ@PU^cfLG!xA3pFi0N%BfbV#Et>rJv(;GpN=U?12 z(ICi0^Js?}*#p2n>AqHnw!R+T(6pu4&xZS30H8I11N)@=ktPFLJmTH=kbD3;aso83 zwGV;)bRYMn-HYVbc>0GSw^ae}zK3K|DzKvwf%=%z;Ql0$k`vB}ThoGS=v`!GIOX|Unepor_y`NtL55fmwibzh> p{*nU#&vX1*x3;kBAouh3_8&UCR8qYML@)pV002ovPDHLkV1jrbiz5I4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/atmospherics.rsi/zauker.png b/Resources/Textures/Effects/atmospherics.rsi/zauker.png new file mode 100644 index 0000000000000000000000000000000000000000..c50e8ae33fff9871c9fc82b1b2fe9dbcfbb657df GIT binary patch literal 2337 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 Hu0mjf9@B3* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/antinob-1.png b/Resources/Textures/Structures/Storage/canister.rsi/antinob-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c61426fe4d46c8d83b3cfbbe56634ab999856bfd GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyP60k4t_KbrU@-pAkj7w~1|C~a1Y4_oO{Z$oK{!6=xA0A3{ zOvqEqU6}drm#*TLP|^LljxBGZV?XZRYW!!e*@9xlPrM)455M6}mT$P~{$t`7rX1F7 zZTr|=7KzO{B9z^5{cr)xiOa_Y7lgfP_}ZU-zEkjW2vfk)DMCj(m;{tURW@liRO&T! zGq2N9cqF`T;)ZuGI1KWtzH^v0h{xUI)8YuL-Ef+7|Jyz*_ZtEV%twzG9b&wlqh|Nl epnY5ZOU_LuY@ftd$ovKRgTd3)&t;ucLK6TO%y%^a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/antinob.png b/Resources/Textures/Structures/Storage/canister.rsi/antinob.png new file mode 100644 index 0000000000000000000000000000000000000000..3449434d715f8ec4f53cc2fc31037137dccfa88d GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvtpJ}8*8>L*Fr@uYJM-T-?LR{r z1H(*XEe3|Png5F!7~(>Jm_Y)l(wISrlkJLZY73CfSQ6wH%;50s22e4>DNh&25RHk+ z2?w}X4l*1}4`E_vY+-O=oz$S%A>t;+py?ncz{$$wp3-Qd;2>7Ok}2pYWWbnN=p8ffeCKTsJF6p8myv;LPdZ;yj-V~G_y$X1;i_k6W;z!zCeOaG zc%h-A7YAeV<4?DCbNn~vlAhijzrW5?P%j`OLa*-oJJmuF#sypKqJ2JHBsdTz c^uFN=zQlI094z1RW-iH5p+T> zS5;MeMlmuX97;q&Q!5)aE-Pn5H$6K$Eg2Cb6Acs;6buXuwZ3pe00001bW%=J06^y0 zW&i*H@JU2LR5*?8l3P;(F${&9v!X~=iGp+yq2dkjg8%>DnI?r{m*LF^A3U?uCOu!f z=_Q1J{Uy;(A)xeazpC_8orTb|0A0T#I=>+52V9zepaQrCTwfXB%OFSB=7Tb<4G%3V zl#Ur7B(59gTSx^GKQGtFI7qlMVsX8)=|5Xb2n7)(>h&tf&Mr zHcnu@-UIovHhK!qH0{gEgcna**8>L*=!)|%jCBsymKNt> z7vf}76XB_IH!5aehzkK?2397= zpjCUyx~s}16S;k&uK#<$sI@RUQ{g7}thj^P6^#84zRvM9tnB&{E%NE3+UHA)ew@~t zbiUha)0rf%h6|tWHfP8bGbJ)F4v=7T)mCQam?RkE{rK-knL1XLZG|ZwcfD)xoVfK> zJ!q1h!EP(=M@N>r30_wV6x>;0s*of6XZ8D_@2{@0<@-F}JVWSTPt*G!VtZ2Ec9?NZ zXE9wkJt?xlP^5M4s?}fYwY2+#H5INK70i3e+qA|t`=CwI4WK_5JYD@<);T3K0RTV! Ba%lhn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/darkpurple-1.png b/Resources/Textures/Structures/Storage/canister.rsi/darkpurple-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b39dcf2f0cacb0bc28bdd8d676050fa33e31607b GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy2?0JKt_Kbra5Zq%QCH9KN}Zk1 zeZ1;;q)nu)rmcvGh!z7wF$068r6nf|BT%`qv2k1ogSxu93_{gR-*n+NBEv z0|TX{rL(iM1qB7=<>gaSQY07{Bqb%IqN0+MlZ8(e?E-3MED7=pW^j0RBMrzo;pyTS zV$u6{(s7}~3Op{#dyICd^ga6W>wmqZi)4CCp5>DXM-Ov+*}`nJ`fB`s)u5R&XPi(oTVDH`uiW*8>L*xEi<~uR5OLm8!+S zFgu~Un1LZK1c(`IHEknpB6sRHwF4D1mIV0)GdMiEkp|?f@^oh0ahg9Fh2t8U9`<==3;1S^pR{aN@J<~r-;d4IpN9u6A$wSsOwyZPvC%9ZU^Wx*m zWp`K=-yUGDu;Yv;hqn4(xtR<_4-;;onD0I=EW{@vYTGi$q~f- zFxZT#LicF3{amX%&mQf35v_QVueG-^`-g17bjAxh4pzsN8k#TW1wFp?f>CZ~oZbuO et?}%y6Zg$Kpv4hsvECf$Y6eeNKbLh*2~7ZQFKP<_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/h2-1.png b/Resources/Textures/Structures/Storage/canister.rsi/h2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..098a77352e67de33d660ac0c45641714397d5f73 GIT binary patch literal 884 zcmV-)1B?8LP)Xd?^BaI5 z2;W6fl)YZ>=WI6n`8@!Fbr>ZQ33Fj#0f1C0MJ|_Xa^Bh5LDMw0wzgPVSrKBfm^nK; zOMidA?X#9lvXRXS@5+Ev+%m&3P*oL4k_ZF>0BD*9z|+%{?H3FN?fXn71HhNLIg>VQ zBbyaOw~4nfZWfEhTt&VvE;fy=C6f(vYsn<1KYub7iJ0P-xjEArluD%-9UbNT{Jdci zYs`Y%-Q5+O5SdH{UDsX3ox*R;&cNW{AckSsdp|ur-Q=83rx_X=;{N`gXf$d{p%4QD z1C&ao-^Kv!?d`F=ybQdi-MK}gCEl)8t5rOn*SEJ;uOrK{Da*25bd!^l0H~@;I-PF0 zUPBG!aybmcaCJ0Ile@b+dU|>Q=P}g-NNwU*kE|*ahg?K#f>aQpYpW>fd3bzGdi33zB zm4+wZ+}vz}&@_!=v55Rb=IZLIEdbX(;AXX24MkCa*ZrTGnsW6k6bc+29ksRp@GAr1 zaJVh!U@%BNpXc%Mk$gT+C=|jOUnmrqnVA8wudPh{!{_@C@U{bSdwa|9@Gt=Jc%0+o z(UW;28MR8nl2^Rb_m9oIoJJ!NGwIQZAR7pPy%GX{kwYEE4(cLpWRU zSR}$mHY+q7$0sKzHh^0{SYKb~?CcDH?(S|bFE3pI-g6ua&OfKt2T8SBMGyqMUM~PX zpO1RIPNhgwvo#>Uy%*;-m!IyySi($Zyh^?G`G|NsAwiHXtF)b#N1P*G7) zR#tBE+T95>kg+7lFPOpM*^M+H=ai?5V~9oX+>1AbniY6h1C&>CyJ%ed_TPT%j;10> z>%IPSPi6`^hyIoGVtQRFq|%WWH9_gaXP&+Uhpz2cDp*z?pT^|j_F#QLp^Ko2@9i?# z@8t|-3sPM8x2Y`MYFT!{>b2lM`4e&OK*A9%hfBA%5+X`$5(Mke7`XO1vO^Bqb# zAeow$@b>bpTNVs8ZypFr?6q*e*Dkw9{_bn8idzRJbrvgVHAVfXWmS4T>9wqj-2*-$ xM}?!#q7JIhgVVn%sMt+w_~rENz^DB`nf4fR9xe>D1A2;q!PC{xWt~$(698x|g|q+w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/halon-1.png b/Resources/Textures/Structures/Storage/canister.rsi/halon-1.png new file mode 100644 index 0000000000000000000000000000000000000000..790b29df3e68111e6df05f5a56ab4c307fe72afd GIT binary patch literal 387 zcmV-}0et?6P)T3T9TV`H}-CTaix z00DGTPE!Ct=GbNc007HLL_t(IjqQ@l7J@JgL`eyyR6sG}Th#ymNs~a22z2Mdg~Nih zxt)^^B*|aDB@mfVE%ehA5Ct$<#`Qu!8%`SOj}(AR1c~VlWWgBkSO^BW;~9)o1E+m; z3P8aVAcFU1RrGZVD;^~P!>02-?}4(M0?2k%U4z3IfLPV*4ZjprIkjz;?F#2ucY{bhjcQSmUS_fCrItJuv%Nn&p%4 hi31V&VW!8vr56>$38Ta8QIP-u002ovPDHLkV1gxPiNOE> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/halon.png b/Resources/Textures/Structures/Storage/canister.rsi/halon.png new file mode 100644 index 0000000000000000000000000000000000000000..2672597f1f0e5e3165fba289509c6cb2a376539b GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvtpJ}8*8>L*xEi<~uR5OLmC9gz zMvH-Ac0zYC14CR05HmFw291I{xAWki?JlgFPOpM*^M+H=dh=XV~EDY z=1DiW6*RE6DVY4a!+XtP;d|{V96A86f$7UEOZhw z@LT_4&Nhx%hLed+$1)u@aJ(yXbI+X6u!zTpb20Y~v6;pNjKb566$&`?5^|WHX)Chy zykDlurS#|gj+6!2i-VmK?{Ea>5VSY085SFEAk zXz^y<2nY6u;>nH+o|inROB87Q@l+v5;djH24u&QdSs{6S1_sp=HkvPs^yGlvVeoYI Kb6Mw<&;$S#4q-k3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/healium-1.png b/Resources/Textures/Structures/Storage/canister.rsi/healium-1.png new file mode 100644 index 0000000000000000000000000000000000000000..915ec5a080982863f6bcb61383127d732c9059c5 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy2?0JKt_KbrFg7;UQCB}>%)l^1 zg&|++zcGW{Dtl#RWi2f&5fKqB1_nz@%VGuwP8LR>rnnFWb#-+aAR{uIA&z0~(uIM6 zfzr~_+1c5Gf`an$@+m1P5)2HIl9EwTQOU{4GL5}VKy8dAL4Lsu4$p3+0Xe5VT^vI! zdf#4h7iu=(VGT%m;>I25k^g;vs){6A+osb>-8EunkJEc~Pi(5M(^fD%oReyMo-wdt zxdI#ruoXTNd#H?V?wJVR2>0+SuW>!C!=Nk`w zn)R<}>Frpn!w2mD9B$lZ!zeoM#YFVdQ&MBb@0IAS~Z~y=R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/healium.png b/Resources/Textures/Structures/Storage/canister.rsi/healium.png new file mode 100644 index 0000000000000000000000000000000000000000..89494c9ea9aab246c89296d167b9c2564f2d6ea7 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy9sxcft_KbrP*+irTV=0Qq{EOe zb%ufAzcGWevopgCm0|{lxDX&_P*+zsHa6DM($dk1ykxOx(| z)L9%cNoSL@ED#E0?2|C&cqrA>ozwV=h5JsLLHUl4v5hMm_Gp+(I%FyQxxqYfXA0w| zJIsfEu{?KW)apK^pj*r@wXnZ_;WJMUQ?qCJn~uo*pDq6L8F!So)${W}&oOwq`njxg HN@xNAJrIMZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/helium-1.png b/Resources/Textures/Structures/Storage/canister.rsi/helium-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2325f89aceb7e931ea41b23073b4ff906d17a10 GIT binary patch literal 895 zcmV-_1AzRAP)^4+U@3!nwi0%!rW007bXBb`oLb~_XbA&MfQP>73*3ry3bt*wpg>ubv8GCrU0 z7t6BV00@HchbW5Oe!u^rrfCoF0wCCjQ97NrGMOR(nM^NhYeiRZF84blBgABGU~R2PD%I;5XjvAYJ_YIM=l~!Zjk2-vw`c6HU%v2C*U9IDcLT5? z8WoRQbai#r%niff!w2u3rt3NY!^6X5v$y)+UJ2uI3rUh{X*Uc5S(cfZdE^-{%QC^= zZh!Ko0Bm!BQmIt;xnkqFND`FxNkPkscbU2l{4AQ1Qu@HYcd zC=}@L?+3mzGxLbu-9p`XEC&1ge*xdG0PE}TYVF1{?ORz{35<_>Z#}0ZNkWn&PESu! zRh3*WS2zCl?Fo~U1Fm`1lG{UKtXdHpOSSzD>;dC;rwybi2@;6};c%F(t*sh}VHl)R zDV{xZgC@q@<<^$76eq^2r)J%8yth}Z0eIDerKO)aI5+^Hy}h0H?{!aryBx=Y^UtaM zL1LOFf*|1c`vC|90#qs$N~IE&N`;%78vr7a$UlH$&zB^Lg@uKt&0PTZp?m)({06GV VFFVck$y@*c002ovPDHLkV1ik-pf&&i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/helium.png b/Resources/Textures/Structures/Storage/canister.rsi/helium.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd8589083ded926c9df58bac809babf14fc0024 GIT binary patch literal 348 zcmV-i0i*tjP)^0EG!!v8~^|RE-o%yTwEzB zDM(02BqSswBO|5E$6EjZ00DGTPE!Ct=GbNc0078IL_t(Ijh)fi5`r)c1yIsPSsEG@ z{r_JztS$61INm3i9GZ|;)$gG!u<4numuD1yu{%aO~dUKfG1Gaq6Jfu@4B$f&~?Qb_Pvoc;5J6E_JG$#sXhw`M6BA!9)e(XX5yYB zn+OHa;KK-Fe8lL20-)&xMc}ETN~$)4+RN(*cv!%cflDAh0Vn)E0+D&hc@H8Vum?%N u$mya^KqdQC7j+YoE=xdtB5Ppz-+TdniwThn(05M&0000p($a#0g7Wh65)2HIl9Ebuw3Y&; z7)yfuf*Bm1-ADs+c6z!vhFJ8zopf5P$$-a2(yK$^Ap5`n+h=(mY~J!NW=BDUz>L|R z(HXP$*Lic~h91q2UefZWI`-r4t;T=mnk`r?@RRSuLBo3G8|(>R1?yDyGQ>BoU-+K! z>IzZyuScW~R7vzXB>l2rT6xv#!QaO-Ee(@qc`>B*cp5HZFi|xw|I3vykNbgB!z!j# za|(J}O5NQZ3N~9aA7PA4skC09aO91m2r_qoakLQ@v}h*079k!JkyWxM5;T5tbN XdTd;`)G}89J;C7V>gTe~DWM4f8kKim literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/nob.png b/Resources/Textures/Structures/Storage/canister.rsi/nob.png new file mode 100644 index 0000000000000000000000000000000000000000..6e4d11066d08ae2c18c4efe01868faedaa739cdd GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`*8>L*Fr@uYJM-T-?SFT7 z_r{GIwHO%EX8tc`V2BF=Vg?BYhP=Ey*|bG3fLa(!g8YIR9G=}s19Faex;TbtOsu_V z&DU(e!}j1An`uC5B4a1BLV3!UY;MqcU2FcP)EU|=Q~pVNe_$07Dq5*JCsyT3owriL`|UC;51v--=HIWN$CeS( zR#0x*)UNY)nuhhS{cmy_PL-vstz|jTb??gDA~u)H%-`21nMA$T;Jz^3joGD&aa|JU zyB<}E&1?qFGd5K{VqyK>v~PEl)BlyZvy=l*GkeARMafrnnFWb#-+aAR{uIA&z0~(uIM6 zfzr~_+1c5Gf`an$@+m1P5)2HIl9EwTQOU{4rs-SG0JSle1o;IsI6S+N2IQRfba4!^ z=zV+1U8vcBhczJOi5qvINB;NysVb6eZJSOjb=QcQJx=e{J+Z02PFun7a89c2dB(to zjnkfMzutB~b4{_qNrp8nMw7Wtc=OpbgfpJIDUf8Mwv1`lIRUo=>JB}wiKpu3IiGZ& z*%%-a%2aC0e&Xq>Wt|Pt3>&k`g4`W%>m8iuaVm#-5wn6l*RDK9ri+2rn_2x_o^L$# zY1Y4@rMF|P4j-`pbGUJv4WsD17cW(nQf6$4V%*cgAQVxf^Y-cN_nmuh{78Iud*4+4 Y8T_1rlkPv+2J{w#r>mdKI;Vst00=9D`Tzg` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/proto_nitrate.png b/Resources/Textures/Structures/Storage/canister.rsi/proto_nitrate.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd683443432d271fb95be95acfcc73039e3f8bc GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy9sxcft_KbrP*+irTV=0Qq{EOe z#W2&D;f%4fvopgCm0|{lxDX&_P*+zsHa6DM($dk|N!C&e9Zi{5*;AvUpI zO=)}X^{=+^eGNM`PApKFyMX0_!I}fS&8s+{2uD8J%l6`Ac%W_&^O|G3(%3X6arGo_ zsk1m@lFlY)Ss)b1*e7Ak@ldL%JE!p#3-_HggYq38V;fgC?9ninbjVWpbAx%}&J@N^ zcbE_TVtMY$sMUQ+LARJ+YGHrbP0 Hl+XkKVmX7` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/purple-1.png b/Resources/Textures/Structures/Storage/canister.rsi/purple-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1c313501f13defed08b90cc5c7021c40894ede GIT binary patch literal 425 zcmV;a0apHrP) zT3T9TV`CZqaT)*s00DGTPE!Ct=GbNc008AlL_t(IjqQ@nR>L3=g>%UOg#_B5b*z8Y zYTy4AJ4219Hn?-)!kfk1ocXv12DIvJ(y4fLhTEPFCfYeh%gLhOsRT@(V?4xcm~2Stj3hZuh-WAN!(_d z5Ga;5K(v`|Zlx3jw%a9e$E-0_VhhMb%=aMqDzMuvfCuKsI+-R=GCeUr*M!_UW=Z~K z&#!MfnH1p<{_t&3LKN?r-@Pg(Xt^A91@OTff&zJYSxVq2=OiV>|L|b0m;IJbdM^vP TJ^H$r00000NkvXXu0mjfO>(C* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/purple.png b/Resources/Textures/Structures/Storage/canister.rsi/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..f47b8b0936137aaed4816b34008121c864c93e45 GIT binary patch literal 342 zcmV-c0jd6pP)?0GnWoa{vHdQ~&^802lxOJt;lN%A(NMpUTIPu(_96JXvSI zJM0ZezIt2XxpIsSjvT>V>XH1NJ zX^&pGT>ck2(Yoox2;iUvEXe0O@Dc|gu1WX^$hGMUAo~d69`+IZnAZAfn&)Nlw94y=nYuc{PDo&~VmrUrBZ3mie~ zTCI;UVE}xv;QH$B1vZzylW)V7I2m{iNSph?`Py%RS={iZA;&M?+ oDUy0|;VPkd@VnRDEm}USJL&2OaA%D?RR91007*qoM6N<$f@F1x9{>OV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/zauker-1.png b/Resources/Textures/Structures/Storage/canister.rsi/zauker-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca53ae0fa68967f48887ae2bb590b6035cff96a GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyu>n3It_KbrU@$h;QCDYRFlLyc z!jLZ|x5{2wSy@Xr^k+qy>$<5hspIJ>L_4YB|%SbOEsjYlkn2E3AG?W#y%^?hu&8 zvgNImL!9sR%EB&&q|0v?O*sE(C}f)Ya9Ejg7Umv~+ZIq@|^^v$OT|^kQOSG&MCnJUmoX zRFsvKi|p?H1e(cM666=m;PC858jy3*)5S5wqId4ahhj|%Jgf=s(!OUor+)pHFQuZj zv-C|#{Vx9<=a&7n4LCYyx7IWU3kxQ{*TD|L55Dc=ZJ1W^n`=SwNpXkUqW9iyh)t|l zQ`(+;{i|(!U&Bs~6AM)4E?~J}u;u`7^D53K!jX^mvb{JN9;h3{yyn=hG&YS%Ts?_f z>MV|!q_fFc76=70_DL9XJd|qc&S`wb!hI*rpnS*2*v6F&do;`?9kLYu++d!#GllWf z9p*#7Sf0BwYIUDd&@JYdTG(H|@R_HFsoAsqO-E$@&ldmrj62HP>iKz~=NLR){an^L HB{Ts5I;Dc} literal 0 HcmV?d00001