diff --git a/Content.Server/Atmos/Commands/FixGridAtmos.cs b/Content.Server/Atmos/Commands/FixGridAtmos.cs index c60d9ec0c3..4dd76ba00c 100644 --- a/Content.Server/Atmos/Commands/FixGridAtmos.cs +++ b/Content.Server/Atmos/Commands/FixGridAtmos.cs @@ -29,9 +29,24 @@ namespace Content.Server.Atmos.Commands var entityManager = IoCManager.Resolve(); var atmosphereSystem = EntitySystem.Get(); - var mixture = new GasMixture(Atmospherics.CellVolume) { Temperature = Atmospherics.T20C }; - mixture.AdjustMoles(Gas.Oxygen, Atmospherics.OxygenMolesStandard); - mixture.AdjustMoles(Gas.Nitrogen, Atmospherics.NitrogenMolesStandard); + var mixtures = new GasMixture[5]; + for (var i = 0; i < mixtures.Length; i++) + mixtures[i] = new GasMixture(Atmospherics.CellVolume) { Temperature = Atmospherics.T20C }; + + // 0: Air + mixtures[0].AdjustMoles(Gas.Oxygen, Atmospherics.OxygenMolesStandard); + mixtures[0].AdjustMoles(Gas.Nitrogen, Atmospherics.NitrogenMolesStandard); + + // 1: Vaccum + + // 2: Oxygen (GM) + mixtures[2].AdjustMoles(Gas.Oxygen, Atmospherics.MolesCellGasMiner); + + // 3: Nitrogen (GM) + mixtures[3].AdjustMoles(Gas.Nitrogen, Atmospherics.MolesCellGasMiner); + + // 4: Plasma (GM) + mixtures[4].AdjustMoles(Gas.Plasma, Atmospherics.MolesCellGasMiner); foreach (var gid in args) { @@ -63,19 +78,16 @@ namespace Content.Server.Atmos.Commands continue; tile.Clear(); - var blocker = false; + var mixtureId = 0; foreach (var entUid in mapGrid.GetAnchoredEntities(indices)) { - if (!entityManager.TryGetComponent(entUid, out TagComponent? tags)) + if (!entityManager.TryGetComponent(entUid, out AtmosFixMarkerComponent? afm)) continue; - if (tags.HasTag("AtmosFixBlocking")) - { - blocker = true; - break; - } + mixtureId = afm.Mode; + break; } - if (!blocker) - atmosphereSystem.Merge(tile, mixture); + var mixture = mixtures[mixtureId]; + atmosphereSystem.Merge(tile, mixture); tile.Temperature = mixture.Temperature; atmosphereSystem.InvalidateTile(gridAtmosphere, indices); diff --git a/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs b/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs new file mode 100644 index 0000000000..36b28497fd --- /dev/null +++ b/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs @@ -0,0 +1,21 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Temperature.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Atmos.Components +{ + /// + /// Used by FixGridAtmos. Entities with this may get magically auto-deleted on map initialization in future. + /// + [RegisterComponent] + public class AtmosFixMarkerComponent : Component + { + public override string Name => "AtmosFixMarker"; + + // See FixGridAtmos for more details + [DataField("mode")] + public int Mode { get; set; } = 0; + } +} diff --git a/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs b/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs index 9c7ffc5905..ac7fc7a617 100644 --- a/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs +++ b/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs @@ -20,7 +20,7 @@ namespace Content.Server.Atmos.Piping.Other.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("maxExternalPressure")] - public float MaxExternalPressure { get; set; } = 6500f; + public float MaxExternalPressure { get; set; } = Atmospherics.GasMinerDefaultMaxExternalPressure; [ViewVariables(VVAccess.ReadWrite)] [DataField("spawnGas")] diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index 53d34fa40c..e045aeb567 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -26,6 +26,12 @@ namespace Content.Shared.Atmos /// public const float OneAtmosphere = 101.325f; + /// + /// Maximum external pressure (in kPA) a gas miner will, by default, output to. + /// This is used to initialize roundstart atmos rooms. + /// + public const float GasMinerDefaultMaxExternalPressure = 6500f; + /// /// -270.3ºC in K. CMB stands for Cosmic Microwave Background. /// @@ -57,6 +63,11 @@ namespace Content.Shared.Atmos /// public const float MolesCellStandard = (OneAtmosphere * CellVolume / (T20C * R)); + /// + /// Moles in a 2.5 m^3 cell at GasMinerDefaultMaxExternalPressure kPa and 20ºC + /// + public const float MolesCellGasMiner = (GasMinerDefaultMaxExternalPressure * CellVolume / (T20C * R)); + /// /// Compared against for superconduction. /// diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 9bb730bffe..8f54be39da 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -69368,109 +69368,109 @@ entities: parent: 853 type: Transform - uid: 6651 - type: AtmosFixBlockerMarker + type: AtmosFixOxygenMarker components: - pos: 37.5,22.5 parent: 853 type: Transform - uid: 6652 - type: AtmosFixBlockerMarker + type: AtmosFixOxygenMarker components: - pos: 37.5,21.5 parent: 853 type: Transform - uid: 6653 - type: AtmosFixBlockerMarker + type: AtmosFixOxygenMarker components: - pos: 38.5,22.5 parent: 853 type: Transform - uid: 6654 - type: AtmosFixBlockerMarker + type: AtmosFixOxygenMarker components: - pos: 38.5,21.5 parent: 853 type: Transform - uid: 6655 - type: AtmosFixBlockerMarker + type: AtmosFixOxygenMarker components: - pos: 39.5,22.5 parent: 853 type: Transform - uid: 6656 - type: AtmosFixBlockerMarker + type: AtmosFixOxygenMarker components: - pos: 39.5,21.5 parent: 853 type: Transform - uid: 6657 - type: AtmosFixBlockerMarker + type: AtmosFixNitrogenMarker components: - pos: 41.5,22.5 parent: 853 type: Transform - uid: 6658 - type: AtmosFixBlockerMarker + type: AtmosFixNitrogenMarker components: - pos: 41.5,21.5 parent: 853 type: Transform - uid: 6659 - type: AtmosFixBlockerMarker + type: AtmosFixNitrogenMarker components: - pos: 42.5,22.5 parent: 853 type: Transform - uid: 6660 - type: AtmosFixBlockerMarker + type: AtmosFixNitrogenMarker components: - pos: 42.5,21.5 parent: 853 type: Transform - uid: 6661 - type: AtmosFixBlockerMarker + type: AtmosFixNitrogenMarker components: - pos: 43.5,22.5 parent: 853 type: Transform - uid: 6662 - type: AtmosFixBlockerMarker + type: AtmosFixNitrogenMarker components: - pos: 43.5,21.5 parent: 853 type: Transform - uid: 6663 - type: AtmosFixBlockerMarker + type: AtmosFixPlasmaMarker components: - pos: 45.5,22.5 parent: 853 type: Transform - uid: 6664 - type: AtmosFixBlockerMarker + type: AtmosFixPlasmaMarker components: - pos: 45.5,21.5 parent: 853 type: Transform - uid: 6665 - type: AtmosFixBlockerMarker + type: AtmosFixPlasmaMarker components: - pos: 46.5,22.5 parent: 853 type: Transform - uid: 6666 - type: AtmosFixBlockerMarker + type: AtmosFixPlasmaMarker components: - pos: 46.5,21.5 parent: 853 type: Transform - uid: 6667 - type: AtmosFixBlockerMarker + type: AtmosFixPlasmaMarker components: - pos: 47.5,22.5 parent: 853 type: Transform - uid: 6668 - type: AtmosFixBlockerMarker + type: AtmosFixPlasmaMarker components: - pos: 47.5,21.5 parent: 853 diff --git a/Resources/Prototypes/Entities/Markers/atmos_blocker.yml b/Resources/Prototypes/Entities/Markers/atmos_blocker.yml index 35ce1c7632..18973d03c8 100644 --- a/Resources/Prototypes/Entities/Markers/atmos_blocker.yml +++ b/Resources/Prototypes/Entities/Markers/atmos_blocker.yml @@ -1,13 +1,68 @@ - type: entity - name: Atmos Fix Blocker Marker + name: Atmos Fix Vacuum Marker id: AtmosFixBlockerMarker + description: "Vacuum, T20C" parent: MarkerBase components: - type: Sprite layers: - - state: red - - texture: Objects/Specific/Atmos/gasanalyzer.rsi/icon.png - - type: Tag - tags: - - AtmosFixBlocking + - sprite: Markers/atmos.rsi # { + state: base + shader: unshaded + - sprite: Markers/atmos.rsi + shader: unshaded # } + state: vacuum + - type: AtmosFixMarker + mode: 1 + +- type: entity + name: Atmos Fix Oxygen Marker + id: AtmosFixOxygenMarker + description: "Oxygen @ gas miner pressure, T20C" + parent: MarkerBase + components: + - type: Sprite + layers: + - sprite: Markers/atmos.rsi # { + state: base + shader: unshaded + - sprite: Markers/atmos.rsi + shader: unshaded # } + state: oxygen + - type: AtmosFixMarker + mode: 2 + +- type: entity + name: Atmos Fix Nitrogen Marker + id: AtmosFixNitrogenMarker + description: "Nitrogen @ gas miner pressure, T20C" + parent: MarkerBase + components: + - type: Sprite + layers: + - sprite: Markers/atmos.rsi # { + state: base + shader: unshaded + - sprite: Markers/atmos.rsi + shader: unshaded # } + state: nitrogen + - type: AtmosFixMarker + mode: 3 + +- type: entity + name: Atmos Fix Plasma Marker + id: AtmosFixPlasmaMarker + description: "Plasma @ gas miner pressure, T20C" + parent: MarkerBase + components: + - type: Sprite + layers: + - sprite: Markers/atmos.rsi # { + state: base + shader: unshaded + - sprite: Markers/atmos.rsi + shader: unshaded # } + state: plasma + - type: AtmosFixMarker + mode: 4 diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index af17b818da..c4f82499ac 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -214,6 +214,3 @@ - type: Tag id: HideContextMenu -- type: Tag - id: AtmosFixBlocking - diff --git a/Resources/Textures/Markers/atmos.rsi/base.png b/Resources/Textures/Markers/atmos.rsi/base.png new file mode 100644 index 0000000000..ee77bb448a Binary files /dev/null and b/Resources/Textures/Markers/atmos.rsi/base.png differ diff --git a/Resources/Textures/Markers/atmos.rsi/meta.json b/Resources/Textures/Markers/atmos.rsi/meta.json new file mode 100644 index 0000000000..769fac3d2b --- /dev/null +++ b/Resources/Textures/Markers/atmos.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Space Wizards Federation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "vacuum" + }, + { + "name": "oxygen" + }, + { + "name": "nitrogen" + }, + { + "name": "plasma" + }, + { + "name": "watervapour" + } + ] +} diff --git a/Resources/Textures/Markers/atmos.rsi/nitrogen.png b/Resources/Textures/Markers/atmos.rsi/nitrogen.png new file mode 100644 index 0000000000..46ab16bb6d Binary files /dev/null and b/Resources/Textures/Markers/atmos.rsi/nitrogen.png differ diff --git a/Resources/Textures/Markers/atmos.rsi/oxygen.png b/Resources/Textures/Markers/atmos.rsi/oxygen.png new file mode 100644 index 0000000000..f04e03cce5 Binary files /dev/null and b/Resources/Textures/Markers/atmos.rsi/oxygen.png differ diff --git a/Resources/Textures/Markers/atmos.rsi/plasma.png b/Resources/Textures/Markers/atmos.rsi/plasma.png new file mode 100644 index 0000000000..6ab5257d50 Binary files /dev/null and b/Resources/Textures/Markers/atmos.rsi/plasma.png differ diff --git a/Resources/Textures/Markers/atmos.rsi/vacuum.png b/Resources/Textures/Markers/atmos.rsi/vacuum.png new file mode 100644 index 0000000000..e52184c3be Binary files /dev/null and b/Resources/Textures/Markers/atmos.rsi/vacuum.png differ diff --git a/Resources/Textures/Markers/atmos.rsi/watervapour.png b/Resources/Textures/Markers/atmos.rsi/watervapour.png new file mode 100644 index 0000000000..8c07c112b1 Binary files /dev/null and b/Resources/Textures/Markers/atmos.rsi/watervapour.png differ