From edb5f88a36e9c6beb3f42d4fe22bcf4cafba8e5e Mon Sep 17 00:00:00 2001 From: KashRas2 <140270505+KashRas2@users.noreply.github.com> Date: Mon, 19 Aug 2024 12:14:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=B3=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B,=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=8D=D0=BA=D0=BE=D0=BD=D0=BE=D0=BC=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B8=20=D0=A0=D0=A2=20(#295)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR Тут настолько много всего, что мне не описать словами прям-таки **Медиа** Когда-то я научусь делать скрины, честно-честно **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [x] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: KashRas2 - add: Атмос апдейт vol.1 - добавлено 11 новых газов прямиком из ТГ стейшн. - add: Атмос апдейт vol.2 - добавлен универсальный раздатчик труб, который позволяет дешево печатать трубы. - add: Разработчикам была добавлена возможность делать вендоматы бесплатными. - tweak: Цены в алкомате теперь чуть дороже. - tweak: РРТ теперь можно найти в шкафах СИ. - tweak: Утилизационные трубы теперь можно носить в двух руках. - tweak: Респрайт алкомата, портативного скруббера, воздушной сигнализации, а также раздатчика баллонов. - fix: Новакиды вновь дышат в плазме - fix: Центральное командование наконец-то выплачивает зарплату АВД и пилоту. --------- Co-authored-by: KashRas2 --- .../UI/VendingMachineMenu.xaml.cs | 18 +- .../VendingMachineBoundUserInterface.cs | 6 +- .../Atmos/Reactions/BZProductionReaction.cs | 51 ++ .../HalonOxygenAbsorptionReaction.cs | 39 + .../Reactions/HealiumProductionReaction.cs | 40 + .../Atmos/Reactions/HydrogenFireReaction.cs | 59 ++ .../HyperNobliumProductionReaction.cs | 41 ++ .../Reactions/NitriumDecompositionReaction.cs | 39 + .../Reactions/NitriumProductionReaction.cs | 41 ++ .../Reactions/PluoxiumProductionReaction.cs | 41 ++ .../ProtoNitrateBZaseActionReaction.cs | 41 ++ .../ProtoNitrateHydrogenConversionReaction.cs | 38 + .../ProtoNitrateProductionReaction.cs | 40 + ...rotoNitrateTritiumDeirradiationReaction.cs | 40 + .../Reactions/ZaukerDecompositionReaction.cs | 39 + .../Reactions/ZaukerProductionReaction.cs | 40 + Content.Server/ADT/Economy/BankCardSystem.cs | 2 +- .../EntitySystems/AtmosphereSystem.Hotspot.cs | 24 +- .../Portable/PortableScrubberComponent.cs | 15 +- .../Atmos/Reactions/FrezonCoolantReaction.cs | 6 + .../Reactions/FrezonProductionReaction.cs | 6 + .../Atmos/Reactions/PlasmaFireReaction.cs | 6 + .../Atmos/Reactions/TritiumFireReaction.cs | 6 + .../Components/GasLeakRuleComponent.cs | 5 + .../VendingMachines/VendingMachineSystem.cs | 6 +- Content.Shared/Atmos/Atmospherics.cs | 64 +- .../Components/SharedVentScrubberComponent.cs | 15 +- .../VendingMachineComponent.cs | 3 + .../VendingMachineInterfaceState.cs | 3 +- Resources/Locale/ru-RU/ADT/gases/gases.ftl | 11 + .../ru-RU/ADT/lathe/lathe-categories.ftl | 2 + .../Circuitboards/Machine/production.ftl | 4 +- .../Entities/Structures/Machines/lathe.ftl | 2 + .../Storage/canisters/gas-canisters.ftl | 45 ++ .../Structures/piping/atmospherics/pipes.ftl | 15 + .../Structures/piping/disposal/pipes.ftl | 25 + .../Locale/ru-RU/ADT/reagents/meta/gases.ftl | 20 + .../Prototypes/ADT/Atmospherics/gases.yml | 137 ++++ .../Prototypes/ADT/Atmospherics/reactions.yml | 369 ++++++++++ .../ADT/Atmospherics/thresholds.yml | 6 + Resources/Prototypes/ADT/Economy/salary.yml | 2 + .../Circuitboards/Machine/production.yml | 18 + .../Entities/Structures/Machines/lathe.yml | 39 + .../Structures/Piping/Atmospherics/pipes.yml | 64 ++ .../Structures/Piping/Disposal/pipes.yml | 131 ++++ .../Storage/Canisters/gas_canisters.yml | 693 ++++++++++++++++++ Resources/Prototypes/ADT/Reagents/gases.yml | 285 +++++++ .../ADT/Recipes/Lathes/categories.yml | 7 + .../Prototypes/ADT/Recipes/Lathes/pipes.yml | 147 ++++ Resources/Prototypes/ADT/tags.yml | 2 + .../Catalog/Fills/Lockers/heads.yml | 10 + .../Objects/Materials/Sheets/metal.yml | 5 + .../Structures/Machines/vending_machines.yml | 14 + .../Structures/Piping/Disposal/pipes.yml | 8 + .../Specific/Atmospherics/sensor.yml | 13 + .../Storage/Canisters/gas_canisters.yml | 1 + Resources/Prototypes/Reagents/elements.yml | 22 +- Resources/Prototypes/Reagents/gases.yml | 4 + .../Machines/pipedispenser.rsi/icon.png | Bin 0 -> 413 bytes .../Machines/pipedispenser.rsi/meta.json | 39 + .../Machines/pipedispenser.rsi/panel.png | Bin 0 -> 292 bytes .../Machines/pipedispenser.rsi/printing.png | Bin 0 -> 1232 bytes .../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 | 24 + .../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 .../VendingMachines/boozeomat.rsi/broken.png | Bin 1086 -> 1274 bytes .../boozeomat.rsi/deny-unshaded.png | Bin 1616 -> 313 bytes .../VendingMachines/boozeomat.rsi/meta.json | 2 +- .../boozeomat.rsi/normal-unshaded.png | Bin 1641 -> 412 bytes .../VendingMachines/boozeomat.rsi/off.png | Bin 769 -> 1308 bytes .../VendingMachines/boozeomat.rsi/panel.png | Bin 247 -> 207 bytes .../tankdispenser.rsi/dispenser.png | Bin 597 -> 437 bytes .../tankdispenser.rsi/dispensereng.png | Bin 233 -> 189 bytes .../tankdispenser.rsi/meta.json | 2 +- .../portable_scrubber.rsi/draining.png | Bin 114 -> 193 bytes .../portable_scrubber.rsi/icon-running.png | Bin 1136 -> 695 bytes .../Portable/portable_scrubber.rsi/icon.png | Bin 804 -> 500 bytes .../Portable/portable_scrubber.rsi/meta.json | 2 +- .../portable_scrubber.rsi/unlit-full.png | Bin 111 -> 185 bytes .../Portable/portable_scrubber.rsi/unlit.png | Bin 154 -> 284 bytes .../Storage/canister.rsi/antinob-1.png | Bin 0 -> 861 bytes .../Storage/canister.rsi/antinob.png | Bin 0 -> 858 bytes .../Storage/canister.rsi/brown-1.png | Bin 0 -> 997 bytes .../Structures/Storage/canister.rsi/brown.png | Bin 0 -> 981 bytes .../Storage/canister.rsi/darkpurple-1.png | Bin 0 -> 1020 bytes .../Storage/canister.rsi/darkpurple.png | Bin 0 -> 1019 bytes .../Structures/Storage/canister.rsi/h2-1.png | Bin 0 -> 1006 bytes .../Structures/Storage/canister.rsi/h2.png | Bin 0 -> 1028 bytes .../Storage/canister.rsi/halon-1.png | Bin 0 -> 999 bytes .../Structures/Storage/canister.rsi/halon.png | Bin 0 -> 1021 bytes .../Storage/canister.rsi/healium-1.png | Bin 0 -> 963 bytes .../Storage/canister.rsi/healium.png | Bin 0 -> 961 bytes .../Storage/canister.rsi/helium-1.png | Bin 0 -> 1022 bytes .../Storage/canister.rsi/helium.png | Bin 0 -> 1084 bytes .../Structures/Storage/canister.rsi/meta.json | 68 +- .../Structures/Storage/canister.rsi/nob-1.png | Bin 0 -> 987 bytes .../Structures/Storage/canister.rsi/nob.png | Bin 0 -> 1044 bytes .../Storage/canister.rsi/proto_nitrate-1.png | Bin 0 -> 917 bytes .../Storage/canister.rsi/proto_nitrate.png | Bin 0 -> 870 bytes .../Storage/canister.rsi/purple-1.png | Bin 0 -> 1001 bytes .../Storage/canister.rsi/purple.png | Bin 0 -> 1075 bytes .../Storage/canister.rsi/zauker-1.png | Bin 0 -> 935 bytes .../Storage/canister.rsi/zauker.png | Bin 0 -> 934 bytes .../Wallmounts/air_monitors.rsi/alarm0.png | Bin 1460 -> 1812 bytes .../Wallmounts/air_monitors.rsi/alarm1.png | Bin 2201 -> 8531 bytes .../Wallmounts/air_monitors.rsi/alarm2.png | Bin 2188 -> 4623 bytes .../Wallmounts/air_monitors.rsi/alarm_b1.png | Bin 1154 -> 933 bytes .../Wallmounts/air_monitors.rsi/alarm_b2.png | Bin 1780 -> 1076 bytes .../air_monitors.rsi/alarm_bitem.png | Bin 421 -> 370 bytes .../Wallmounts/air_monitors.rsi/alarmp.png | Bin 1460 -> 915 bytes .../Wallmounts/air_monitors.rsi/alarmx.png | Bin 1271 -> 1137 bytes .../Wallmounts/air_monitors.rsi/meta.json | 158 +++- 116 files changed, 3123 insertions(+), 47 deletions(-) create mode 100644 Content.Server/ADT/Atmos/Reactions/BZProductionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/HealiumProductionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/HydrogenFireReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/HyperNobliumProductionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/NitriumDecompositionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/NitriumProductionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/PluoxiumProductionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/ProtoNitrateProductionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/ZaukerDecompositionReaction.cs create mode 100644 Content.Server/ADT/Atmos/Reactions/ZaukerProductionReaction.cs create mode 100644 Resources/Locale/ru-RU/ADT/gases/gases.ftl create mode 100644 Resources/Locale/ru-RU/ADT/lathe/lathe-categories.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Machines/lathe.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Storage/canisters/gas-canisters.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/atmospherics/pipes.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/disposal/pipes.ftl create mode 100644 Resources/Locale/ru-RU/ADT/reagents/meta/gases.ftl create mode 100644 Resources/Prototypes/ADT/Atmospherics/gases.yml create mode 100644 Resources/Prototypes/ADT/Atmospherics/reactions.yml create mode 100644 Resources/Prototypes/ADT/Atmospherics/thresholds.yml create mode 100644 Resources/Prototypes/ADT/Entities/Structures/Machines/lathe.yml create mode 100644 Resources/Prototypes/ADT/Entities/Structures/Piping/Atmospherics/pipes.yml create mode 100644 Resources/Prototypes/ADT/Entities/Structures/Piping/Disposal/pipes.yml create mode 100644 Resources/Prototypes/ADT/Entities/Structures/Storage/Canisters/gas_canisters.yml create mode 100644 Resources/Prototypes/ADT/Reagents/gases.yml create mode 100644 Resources/Prototypes/ADT/Recipes/Lathes/categories.yml create mode 100644 Resources/Prototypes/ADT/Recipes/Lathes/pipes.yml create mode 100644 Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/icon.png create mode 100644 Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/meta.json create mode 100644 Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/panel.png create mode 100644 Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/printing.png 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.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index 9d66b25b794..315cb3e0748 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -61,7 +61,7 @@ protected override void Dispose(bool disposing) /// Populates the list of available items on the vending machine interface /// and sets icons based on their prototypes /// - public void Populate(List inventory, out List filteredInventory, double priceMultiplier, int credits, string? filter = null) //ADT-Economy + public void Populate(EntityUid entityUid, List inventory, out List filteredInventory, double priceMultiplier, int credits, string? filter = null) //ADT-Economy { //ADT-Economy-Start CreditsLabel.Text = Loc.GetString("vending-ui-credits-amount", ("credits", credits)); @@ -72,6 +72,7 @@ public void Populate(List inventory, out List return; OnWithdraw?.Invoke(new VendingMachineWithdrawMessage()); }; + var vendComp = _entityManager.GetComponent(entityUid); //ADT-Economy //ADT-Economy-End filteredInventory = new(); @@ -99,7 +100,6 @@ public void Populate(List inventory, out List for (var i = 0; i < inventory.Count; i++) { var entry = inventory[i]; - var price = (int)(entry.Price * priceMultiplier); //ADT-Economy var vendingItem = VendingContents[i - filterCount]; vendingItem.Text = string.Empty; vendingItem.Icon = null; @@ -110,6 +110,18 @@ public void Populate(List inventory, out List _dummies.Add(entry.ID, dummy); } + //ADT-Economy-Start + var price = 0; + if (!vendComp.AllForFree) + { + price = (int)(entry.Price * priceMultiplier); + } + else + { + price = 0; // Это работает только если заспавненный вендомат уже был с этим значением. Спасибо визардам и их bounduserinterface емае. + } + //ADT-Economy-Start + var itemName = Identity.Name(dummy, _entityManager); Texture? icon = null; if (_prototypeManager.TryIndex(entry.ID, out var prototype)) @@ -129,7 +141,7 @@ public void Populate(List inventory, out List if (itemName.Length > longestEntry.Length) longestEntry = itemName; - vendingItem.Text = $" [{price}$] {itemName} [{entry.Amount}]"; //ADT-Economy + vendingItem.Text = $"[{price}$] {itemName} [{entry.Amount}]"; //ADT-Economy vendingItem.Icon = icon; filteredInventory.Add(i); } diff --git a/Content.Client/VendingMachines/VendingMachineBoundUserInterface.cs b/Content.Client/VendingMachines/VendingMachineBoundUserInterface.cs index a9903174d28..7ae2dae91ad 100644 --- a/Content.Client/VendingMachines/VendingMachineBoundUserInterface.cs +++ b/Content.Client/VendingMachines/VendingMachineBoundUserInterface.cs @@ -39,7 +39,7 @@ protected override void Open() _menu.OnSearchChanged += OnSearchChanged; _menu.OnWithdraw += SendMessage; //ADT-Economy - _menu.Populate(_cachedInventory, out _cachedFilteredIndex, component.PriceMultiplier, component.Credits); //ADT-Economy + _menu.Populate(Owner, _cachedInventory, out _cachedFilteredIndex, component.PriceMultiplier, component.Credits); //ADT-Economy } protected override void UpdateState(BoundUserInterfaceState state) @@ -51,7 +51,7 @@ protected override void UpdateState(BoundUserInterfaceState state) _cachedInventory = newState.Inventory; - _menu?.Populate(_cachedInventory, out _cachedFilteredIndex, newState.PriceMultiplier, newState.Credits); //ADT-Economy + _menu?.Populate(Owner, _cachedInventory, out _cachedFilteredIndex, newState.PriceMultiplier, newState.Credits, _menu.SearchBar.Text); //ADT-Economy } private void OnItemSelected(ItemList.ItemListSelectedEventArgs args) @@ -85,7 +85,7 @@ private void OnSearchChanged(string? filter) { //ADT-Economy-Start var component = EntMan.GetComponent(Owner); - _menu?.Populate(_cachedInventory, out _cachedFilteredIndex, component.PriceMultiplier, component.Credits, filter); + _menu?.Populate(Owner, _cachedInventory, out _cachedFilteredIndex, component.PriceMultiplier, component.Credits, filter); //ADT-Economy-End } } diff --git a/Content.Server/ADT/Atmos/Reactions/BZProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/BZProductionReaction.cs new file mode 100644 index 00000000000..eafb4dfb881 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/BZProductionReaction.cs @@ -0,0 +1,51 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class BZProductionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs b/Content.Server/ADT/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs new file mode 100644 index 00000000000..624cf1963b9 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/HalonOxygenAbsorptionReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class HalonOxygenAbsorptionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/HealiumProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/HealiumProductionReaction.cs new file mode 100644 index 00000000000..64be7a35333 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/HealiumProductionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class HealiumProductionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/HydrogenFireReaction.cs b/Content.Server/ADT/Atmos/Reactions/HydrogenFireReaction.cs new file mode 100644 index 00000000000..0f7777dc57f --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/HydrogenFireReaction.cs @@ -0,0 +1,59 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions +{ + [UsedImplicitly] + [DataDefinition] + public sealed partial class HydrogenFireReaction : 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 energyReleased = 0f; + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); + 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, true); + 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/ADT/Atmos/Reactions/HyperNobliumProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/HyperNobliumProductionReaction.cs new file mode 100644 index 00000000000..441bb8453bf --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/HyperNobliumProductionReaction.cs @@ -0,0 +1,41 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class HyperNobliumProductionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/NitriumDecompositionReaction.cs b/Content.Server/ADT/Atmos/Reactions/NitriumDecompositionReaction.cs new file mode 100644 index 00000000000..540bb2671c0 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/NitriumDecompositionReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class NitriumDecompositionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/NitriumProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/NitriumProductionReaction.cs new file mode 100644 index 00000000000..96519be6660 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/NitriumProductionReaction.cs @@ -0,0 +1,41 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class NitriumProductionReaction : 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 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, true); + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity - energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/PluoxiumProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/PluoxiumProductionReaction.cs new file mode 100644 index 00000000000..4c02418a208 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/PluoxiumProductionReaction.cs @@ -0,0 +1,41 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class PluoxiumProductionReaction : 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 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, true); + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs new file mode 100644 index 00000000000..8d89f1965f9 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateBZaseActionReaction.cs @@ -0,0 +1,41 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class ProtoNitrateBZaseConversionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs new file mode 100644 index 00000000000..c5166b0bf9b --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateHydrogenConversionReaction.cs @@ -0,0 +1,38 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class ProtoNitrateHydrogenConversionReaction : 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 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, true); + + mixture.AdjustMoles(Gas.Hydrogen, -producedAmount); + mixture.AdjustMoles(Gas.ProtoNitrate, producedAmount * 0.5f); + + var energyUsed = producedAmount * Atmospherics.ProtoNitrateHydrogenConversionEnergy; + + var newHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity - energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/ProtoNitrateProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateProductionReaction.cs new file mode 100644 index 00000000000..43c9b49eca4 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateProductionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class ProtoNitrateProductionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs new file mode 100644 index 00000000000..2093ccb3215 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/ProtoNitrateTritiumDeirradiationReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class ProtoNitrateTritiumConversionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/ZaukerDecompositionReaction.cs b/Content.Server/ADT/Atmos/Reactions/ZaukerDecompositionReaction.cs new file mode 100644 index 00000000000..5f93393419d --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/ZaukerDecompositionReaction.cs @@ -0,0 +1,39 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class ZaukerDecompositionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity + energyReleased) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Atmos/Reactions/ZaukerProductionReaction.cs b/Content.Server/ADT/Atmos/Reactions/ZaukerProductionReaction.cs new file mode 100644 index 00000000000..c1e101bcb15 --- /dev/null +++ b/Content.Server/ADT/Atmos/Reactions/ZaukerProductionReaction.cs @@ -0,0 +1,40 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos; +using Content.Shared.Atmos.Reactions; +using JetBrains.Annotations; + +namespace Content.Server.Atmos.Reactions; + +[UsedImplicitly] +public sealed partial class ZaukerProductionReaction : 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 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, true); + + 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, true); + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + mixture.Temperature = Math.Max((mixture.Temperature * oldHeatCapacity - energyUsed) / newHeatCapacity, Atmospherics.TCMB); + + return ReactionResult.Reacting; + } +} diff --git a/Content.Server/ADT/Economy/BankCardSystem.cs b/Content.Server/ADT/Economy/BankCardSystem.cs index 8cd3ef2202a..088bdee6800 100644 --- a/Content.Server/ADT/Economy/BankCardSystem.cs +++ b/Content.Server/ADT/Economy/BankCardSystem.cs @@ -36,7 +36,7 @@ public sealed class BankCardSystem : EntitySystem [Dependency] private readonly GameTicker _gameTicker = default!; [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoader = default!; - private const int SalaryDelay = 1200; + private const int SalaryDelay = 2700; private SalaryPrototype _salaries = default!; private readonly List _accounts = new(); diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs index db952237338..a4088566033 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Hotspot.cs @@ -40,11 +40,11 @@ private void ProcessHotspot( return; } - if(tile.ExcitedGroup != null) + if (tile.ExcitedGroup != null) //ADT-Gas 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)) //ADT-Gas { tile.Hotspot = new Hotspot(); InvalidateVisuals(ent, tile); @@ -67,14 +67,14 @@ private void ProcessHotspot( if (otherTile == null) continue; - if(!otherTile.Hotspot.Valid) - HotspotExpose(gridAtmosphere, otherTile, radiatedTemperature, Atmospherics.CellVolume/4); + if (!otherTile.Hotspot.Valid) //ADT-Gas + HotspotExpose(gridAtmosphere, otherTile, radiatedTemperature, Atmospherics.CellVolume / 4); //ADT-Gas } } } else { - tile.Hotspot.State = (byte) (tile.Hotspot.Volume > Atmospherics.CellVolume * 0.4f ? 2 : 1); + tile.Hotspot.State = (byte)(tile.Hotspot.Volume > Atmospherics.CellVolume * 0.4f ? 2 : 1); //ADT-Gas } if (tile.Hotspot.Temperature > tile.MaxFireTemperatureSustained) @@ -87,7 +87,7 @@ private void ProcessHotspot( // A few details on the audio parameters for fire. // The greater the fire state, the lesser the pitch variation. // The greater the fire state, the greater the volume. - _audio.PlayPvs(HotspotSound, coordinates, AudioParams.Default.WithVariation(0.15f/tile.Hotspot.State).WithVolume(-5f + 5f * tile.Hotspot.State)); + _audio.PlayPvs(HotspotSound, coordinates, AudioParams.Default.WithVariation(0.15f / tile.Hotspot.State).WithVolume(-5f + 5f * tile.Hotspot.State)); //ADT-Gas } if (_hotspotSoundCooldown > HotspotSoundCooldownCycles) @@ -109,12 +109,16 @@ private void HotspotExpose(GridAtmosphereComponent gridAtmosphere, TileAtmospher var plasma = tile.Air.GetMoles(Gas.Plasma); var tritium = tile.Air.GetMoles(Gas.Tritium); + //ADT-Gas-Start + var hydrogen = tile.Air.GetMoles(Gas.Hydrogen); + var hypernoblium = tile.Air.GetMoles(Gas.HyperNoblium); + //ADT-Gas-End 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) //ADT-Gas { if (tile.Hotspot.Temperature < exposedTemperature) tile.Hotspot.Temperature = exposedTemperature; @@ -126,10 +130,10 @@ private void HotspotExpose(GridAtmosphereComponent gridAtmosphere, TileAtmospher 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)) //ADT-Gas { 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"); //ADT-Gas tile.Hotspot = new Hotspot { @@ -149,7 +153,7 @@ private void PerformHotspotExposure(TileAtmosphere tile) { if (tile.Air == null || !tile.Hotspot.Valid) return; - tile.Hotspot.Bypassing = tile.Hotspot.SkippedFirstProcess && tile.Hotspot.Volume > tile.Air.Volume*0.95f; + tile.Hotspot.Bypassing = tile.Hotspot.SkippedFirstProcess && tile.Hotspot.Volume > tile.Air.Volume * 0.95f; //ADT-Gas if (tile.Hotspot.Bypassing) { diff --git a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs index ae9a5da9639..b4ea4fa7d68 100644 --- a/Content.Server/Atmos/Portable/PortableScrubberComponent.cs +++ b/Content.Server/Atmos/Portable/PortableScrubberComponent.cs @@ -28,7 +28,20 @@ public sealed partial class PortableScrubberComponent : Component Gas.WaterVapor, Gas.Ammonia, Gas.NitrousOxide, - Gas.Frezon + Gas.Frezon, + //ADT-Gas-Start + Gas.BZ, + Gas.Pluoxium, + Gas.Hydrogen, + Gas.Nitrium, + Gas.Healium, + Gas.HyperNoblium, + Gas.ProtoNitrate, + Gas.Zauker, + Gas.Halon, + Gas.Helium, + Gas.AntiNoblium + //ADT-Gas-End }; [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs b/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs index 475c149cf37..14101889cf7 100644 --- a/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonCoolantReaction.cs @@ -13,6 +13,12 @@ public sealed partial class FrezonCoolantReaction : IGasReactionEffect { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + //ADT-Gas-Start + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + //ADT-Gas-End + var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; diff --git a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs index e3d3ece6b6a..042cf3c98d5 100644 --- a/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs +++ b/Content.Server/Atmos/Reactions/FrezonProductionReaction.cs @@ -14,6 +14,12 @@ public sealed partial class FrezonProductionReaction : IGasReactionEffect { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + //ADT-Gas-Start + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + //ADT-Gas-End + 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/PlasmaFireReaction.cs b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs index 98d567d4ed5..b3ec470699b 100644 --- a/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PlasmaFireReaction.cs @@ -11,6 +11,12 @@ public sealed partial class PlasmaFireReaction : IGasReactionEffect { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + //ADT-Gas-Start + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + //ADT-Gas-End + var energyReleased = 0f; var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; diff --git a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs index 3ad0a4b04de..aabd9158f8c 100644 --- a/Content.Server/Atmos/Reactions/TritiumFireReaction.cs +++ b/Content.Server/Atmos/Reactions/TritiumFireReaction.cs @@ -11,6 +11,12 @@ public sealed partial class TritiumFireReaction : IGasReactionEffect { public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { + //ADT-Gas-Start + var initialHyperNoblium = mixture.GetMoles(Gas.HyperNoblium); + if (initialHyperNoblium >= 5.0f && mixture.Temperature > 20f) + return ReactionResult.NoReaction; + //ADT-Gas-End + var energyReleased = 0f; var oldHeatCapacity = atmosphereSystem.GetHeatCapacity(mixture, true); var temperature = mixture.Temperature; diff --git a/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs b/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs index 171aca12c27..8388277f8ea 100644 --- a/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs +++ b/Content.Server/StationEvents/Components/GasLeakRuleComponent.cs @@ -14,6 +14,11 @@ public sealed partial class GasLeakRuleComponent : Component Gas.Tritium, Gas.Frezon, Gas.WaterVapor, // the fog + //ADT-Gas-Start + Gas.BZ, + Gas.Hydrogen, + Gas.Halon + //ADT-Gas-End }; /// diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index af05789afff..301065f37bf 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -240,13 +240,13 @@ private void OnInteractUsing(EntityUid uid, VendingMachineComponent component, I protected override int GetEntryPrice(EntityPrototype proto) { - var price = (int) _pricing.GetEstimatedPrice(proto); + var price = (int)_pricing.GetEstimatedPrice(proto); return price > 0 ? price : 25; } private int GetPrice(VendingMachineInventoryEntry entry, VendingMachineComponent comp) { - return (int) (entry.Price * GetPriceMultiplier(comp)); + return (int)(entry.Price * GetPriceMultiplier(comp)); } private double GetPriceMultiplier(VendingMachineComponent comp) @@ -359,7 +359,7 @@ public void TryEjectVendorItem(EntityUid uid, InventoryType type, string itemId, //ADT-Economy-Start var price = GetPrice(entry, vendComponent); - if (price > 0 && sender.HasValue && !_tag.HasTag(sender.Value, "IgnoreBalanceChecks")) + if (price > 0 && !vendComponent.AllForFree && sender.HasValue && !_tag.HasTag(sender.Value, "IgnoreBalanceChecks")) { var success = false; if (vendComponent.Credits >= price) diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index fccc71f1606..fe65bc2bc61 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -172,7 +172,7 @@ public static class Atmospherics /// /// Total number of gases. Increase this if you want to add more! /// - public const int TotalNumberOfGases = 9; + public const int TotalNumberOfGases = 20; //ADT-Gas /// /// This is the actual length of the gases arrays in mixtures. @@ -320,6 +320,53 @@ public static class Atmospherics public const float MaxTransferRate = 200; #endregion + + #region ADT-Gas + /// + /// 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; + #endregion } /// @@ -336,6 +383,19 @@ public enum Gas : sbyte WaterVapor = 5, Ammonia = 6, NitrousOxide = 7, - Frezon = 8 + Frezon = 8, + //ADT-Gas-Start + BZ = 9, + Pluoxium = 10, + Hydrogen = 11, + Nitrium = 12, + Healium = 13, + HyperNoblium = 14, + ProtoNitrate = 15, + Zauker = 16, + Halon = 17, + Helium = 18, + AntiNoblium = 19 + //ADT-Gas-End } } diff --git a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs index 2a333062450..18fab25ee8d 100644 --- a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs +++ b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs @@ -22,7 +22,20 @@ public sealed class GasVentScrubberData : IAtmosDeviceData Gas.WaterVapor, Gas.Ammonia, Gas.NitrousOxide, - Gas.Frezon + Gas.Frezon, + //ADT-Gas-Start + Gas.BZ, + Gas.Pluoxium, + Gas.Hydrogen, + Gas.Nitrium, + Gas.Healium, + Gas.HyperNoblium, + Gas.ProtoNitrate, + Gas.Zauker, + Gas.Halon, + Gas.Helium, + Gas.AntiNoblium + //ADT-Gas-End }; // Presets for 'dumb' air alarm modes diff --git a/Content.Shared/VendingMachines/VendingMachineComponent.cs b/Content.Shared/VendingMachines/VendingMachineComponent.cs index 1f4ffcc42aa..130eaec3869 100644 --- a/Content.Shared/VendingMachines/VendingMachineComponent.cs +++ b/Content.Shared/VendingMachines/VendingMachineComponent.cs @@ -193,6 +193,9 @@ public sealed partial class VendingMachineComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public double PriceMultiplier = 0.25; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool AllForFree = false; + public ProtoId CreditStackPrototype = "Credit"; [DataField] diff --git a/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs b/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs index 121047205be..d1d4ae35e8a 100644 --- a/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs +++ b/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs @@ -9,8 +9,7 @@ public sealed class VendingMachineInterfaceState : BoundUserInterfaceState //ADT-Economy-Start public double PriceMultiplier; public int Credits; - public VendingMachineInterfaceState(List inventory, double priceMultiplier, - int credits) + public VendingMachineInterfaceState(List inventory, double priceMultiplier, int credits) //ADT-Economy-End { Inventory = inventory; diff --git a/Resources/Locale/ru-RU/ADT/gases/gases.ftl b/Resources/Locale/ru-RU/ADT/gases/gases.ftl new file mode 100644 index 00000000000..802f85d3883 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/gases/gases.ftl @@ -0,0 +1,11 @@ +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/ADT/lathe/lathe-categories.ftl b/Resources/Locale/ru-RU/ADT/lathe/lathe-categories.ftl new file mode 100644 index 00000000000..29bb98b59d7 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/lathe/lathe-categories.ftl @@ -0,0 +1,2 @@ +lathe-category-atmos = Атмосфера +lathe-category-disposals = Утилизация diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl index 36053d64cbc..7dde1877a34 100644 --- a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl @@ -1,2 +1,4 @@ -ent-ADTIndustrialSMESMachineCircuitboard = Плата индустриального СМЭСа +ent-ADTIndustrialSMESMachineCircuitboard = плата индустриального СМЭСа .desc = Плата Сверхпроводящей Магнитной Энергонакопительной Станции (СМЭС) повышенной ёмкости емкости. Передовое иследование НТ в передачи и хранении энергии. +ent-ADTUniversalPipeDispenserCircuitboard = плата универсального раздатчика труб + .desc = Машинная плата, используемая для создания универсального раздатчика труб. Существует в единственном экземпляре. diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Machines/lathe.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Machines/lathe.ftl new file mode 100644 index 00000000000..3cbb1214497 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Machines/lathe.ftl @@ -0,0 +1,2 @@ +ent-ADTUniversalPipeDispenser = универсальный раздатчик труб + .desc = Печатает трубы для всевозможных ситуаций. Тем не менее, в комплект не входят продвинутые атмосферные технологии. diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Storage/canisters/gas-canisters.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Storage/canisters/gas-canisters.ftl new file mode 100644 index 00000000000..272b8cc0f5e --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Storage/canisters/gas-canisters.ftl @@ -0,0 +1,45 @@ +ent-ADTBZCanister = канистра бз + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится бз. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTPluoxiumCanister = канистра плюоксиума + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится плюоксиум. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTHydrogenCanister = канистра водорода + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится водород. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTNitriumCanister = канистра нитриума + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится нитриум. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTHealiumCanister = канистра хилиума + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится хилиум. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTHyperNobliumCanister = канистра гипер-ноблия + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится гипер-ноблий. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTProtoNitrateCanister = канистра прото-нитрата + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится прото-нитрат. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTZaukerCanister = канистра заукера + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится заукер. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTHalonCanister = канистра галона + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится галон. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTHeliumCanister = канистра гелия + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится гелий. Можно прикрепить к порту коннектора с помощью гаечного ключа. +ent-ADTAntiNobliumCanister = канистра анти-ноблия + .desc = Канистра, в которой может содержаться газ любого вида. В этой, предположительно, содержится анти-ноблий. Можно прикрепить к порту коннектора с помощью гаечного ключа. +# Сломанные +ent-ADTBZCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTPluoxiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTHydrogenCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTNitriumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTHealiumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTHyperNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTProtoNitrateCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTZaukerCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTHalonCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTHeliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } +ent-ADTAntiNobliumCanisterBroken = { ent-GasCanisterBrokenBase } + .desc = { ent-GasCanisterBrokenBase.desc } diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/atmospherics/pipes.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/atmospherics/pipes.ftl new file mode 100644 index 00000000000..999e73def44 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/atmospherics/pipes.ftl @@ -0,0 +1,15 @@ +ent-ADTGasPipeHalf = { ent-GasPipeBase } + .suffix = Половинная + .desc = { ent-GasPipeBase.desc } +ent-ADTGasPipeStraight = { ent-GasPipeBase } + .suffix = Прямая + .desc = { ent-GasPipeBase.desc } +ent-ADTGasPipeBend = { ent-GasPipeBase } + .suffix = Угловая + .desc = { ent-GasPipeBase.desc } +ent-ADTGasPipeTJunction = { ent-GasPipeBase } + .suffix = Т-образная + .desc = { ent-GasPipeBase.desc } +ent-ADTGasPipeFourway = { ent-GasPipeBase } + .suffix = Четверная + .desc = { ent-GasPipeBase.desc } diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/disposal/pipes.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/disposal/pipes.ftl new file mode 100644 index 00000000000..c7eea5f8915 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/piping/disposal/pipes.ftl @@ -0,0 +1,25 @@ +ent-ADTDisposalPipe = участок утилизационной трубы + .desc = Большой сегмент трубы, используемый при создании системы утилизации. +ent-ADTDisposalTagger = маркировщик утилизационной трубы + .desc = Труба, маркирующая объекты для отправки определённому адресату. +ent-ADTDisposalTrunk = ствол утилизационной трубы + .desc = Труба, используемая в качестве точки входа в систему утилизации. +ent-ADTDisposalRouter = маршрутизатор утилизационной трубы + .desc = Трёхсторонний маршрутизатор. Объекты с совпадающими маркерами уходят в сторону с помощью настраиваемых фильтров. +ent-ADTDisposalRouterFlipped = { ent-ADTDisposalRouter } + .suffix = Перевёрнутый + .desc = { ent-ADTDisposalRouter.desc } +ent-ADTDisposalJunction = развязка утилизационной трубы + .desc = Трёхсторонняя развязка. Стрелка указывает на место выхода объектов. +ent-ADTDisposalJunctionFlipped = { ent-ADTDisposalJunction } + .desc = { ent-ADTDisposalJunction.desc } + .suffix = Перевёрнутый +ent-ADTDisposalYJunction = Y-развязка утилизационной трубы + .desc = Трёхсторонняя развязка с альтернативным местом выхода. +ent-ADTDisposalBend = изгиб утилизационной трубы + .desc = Труба, согнутая под прямым углом. +ent-ADTDisposalSignalRouter = сигнальный утилизационный маршрутизатор + .desc = Трёхсторонний маршрутизатор, управляемый сигналами. +ent-ADTDisposalSignalRouterFlipped = { ent-ADTDisposalSignalRouter } + .suffix = Перевёрнутый + .desc = { ent-ADTDisposalSignalRouter.desc } diff --git a/Resources/Locale/ru-RU/ADT/reagents/meta/gases.ftl b/Resources/Locale/ru-RU/ADT/reagents/meta/gases.ftl new file mode 100644 index 00000000000..0b257f45d2b --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/reagents/meta/gases.ftl @@ -0,0 +1,20 @@ +reagent-name-bz = бз +reagent-desc-bz = Сильнодействующий галлюциноген, который также погружает слизней в стазис. +reagent-name-pluoxium = плюоксиум +reagent-desc-pluoxium = Газ, насыщающий кровь большим количеством кислорода, не будучи окислителем. +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/Prototypes/ADT/Atmospherics/gases.yml b/Resources/Prototypes/ADT/Atmospherics/gases.yml new file mode 100644 index 00000000000..836fe83bd6a --- /dev/null +++ b/Resources/Prototypes/ADT/Atmospherics/gases.yml @@ -0,0 +1,137 @@ +- 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: 30 + +- 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/ADT/Atmospherics/reactions.yml b/Resources/Prototypes/ADT/Atmospherics/reactions.yml new file mode 100644 index 00000000000..0fc040143c6 --- /dev/null +++ b/Resources/Prototypes/ADT/Atmospherics/reactions.yml @@ -0,0 +1,369 @@ +- 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/ADT/Atmospherics/thresholds.yml b/Resources/Prototypes/ADT/Atmospherics/thresholds.yml new file mode 100644 index 00000000000..4493938abc2 --- /dev/null +++ b/Resources/Prototypes/ADT/Atmospherics/thresholds.yml @@ -0,0 +1,6 @@ +- type: alarmThreshold + id: unwanted + upperBound: !type:AlarmThresholdSetting + threshold: 0.0025 + upperWarnAround: !type:AlarmThresholdSetting + threshold: 0.5 diff --git a/Resources/Prototypes/ADT/Economy/salary.yml b/Resources/Prototypes/ADT/Economy/salary.yml index b91d5d0807b..98e107820be 100644 --- a/Resources/Prototypes/ADT/Economy/salary.yml +++ b/Resources/Prototypes/ADT/Economy/salary.yml @@ -5,6 +5,7 @@ Captain: 800 Magistrat: 800 CentralCommandOfficial: 800 + IAA: 600 ChiefEngineer: 600 ChiefMedicalOfficer: 600 HeadOfPersonnel: 600 @@ -39,6 +40,7 @@ SecurityCadet: 200 SecurityOfficer: 300 Detective: 400 + Pilot: 400 Warden: 500 ADTPathologist: 400 ADTRoboticist: 400 diff --git a/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml b/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml index 1d8d929077d..9b09499f0c4 100644 --- a/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml @@ -13,3 +13,21 @@ PowerCell: amount: 16 defaultPrototype: PowerCellSmall + +- type: entity + id: ADTUniversalPipeDispenserCircuitboard + parent: BaseMachineCircuitboard + name: universal pipe dispenser board + description: A machine circuit board for a universal pipe dispenser. Exists in a single copy. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: ADTUniversalPipeDispenser + stackRequirements: + MatterBin: 2 + Manipulator: 2 + tagRequirements: + GlassBeaker: + amount: 2 + defaultPrototype: Beaker diff --git a/Resources/Prototypes/ADT/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/ADT/Entities/Structures/Machines/lathe.yml new file mode 100644 index 00000000000..fada7f1894b --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Structures/Machines/lathe.yml @@ -0,0 +1,39 @@ +- type: entity + id: ADTUniversalPipeDispenser + parent: BaseLatheLube + name: universal pipe dispenser + description: Prints pipes for all kinds of situations. However, the kit does not include advanced atmospheric technologies. + components: + - type: Sprite + sprite: ADT/Structures/Machines/pipedispenser.rsi + layers: + - state: icon + map: ["enum.LatheVisualLayers.IsRunning"] + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - type: Machine + board: ADTUniversalPipeDispenserCircuitboard + - type: Lathe + idleState: icon + runningState: printing + staticRecipes: + - DisposalPipe + - DisposalTagger + - DisposalTrunk + - DisposalRouter + - DisposalRouterFlipped + - DisposalJunction + - DisposalJunctionFlipped + - DisposalYJunction + - DisposalBend + - DisposalSignalRouter + - DisposalSignalRouterFlipped + - GasPipeHalf + - GasPipeStraight + - GasPipeBend + - GasPipeTJunction + - GasPipeFourway + - type: MaterialStorage + whitelist: + tags: + - ADTSteelSheet diff --git a/Resources/Prototypes/ADT/Entities/Structures/Piping/Atmospherics/pipes.yml b/Resources/Prototypes/ADT/Entities/Structures/Piping/Atmospherics/pipes.yml new file mode 100644 index 00000000000..6268266c4e3 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Structures/Piping/Atmospherics/pipes.yml @@ -0,0 +1,64 @@ +- type: entity + parent: GasPipeHalf + id: ADTGasPipeHalf + suffix: Half + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: GasPipeStraight + id: ADTGasPipeStraight + suffix: Straight + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: GasPipeBend + id: ADTGasPipeBend + suffix: Bend + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: GasPipeTJunction + id: ADTGasPipeTJunction + suffix: TJunction + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: GasPipeFourway + id: ADTGasPipeFourway + suffix: Fourway + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null diff --git a/Resources/Prototypes/ADT/Entities/Structures/Piping/Disposal/pipes.yml b/Resources/Prototypes/ADT/Entities/Structures/Piping/Disposal/pipes.yml new file mode 100644 index 00000000000..772808d8bd0 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Structures/Piping/Disposal/pipes.yml @@ -0,0 +1,131 @@ +- type: entity + parent: DisposalPipe + id: ADTDisposalPipe + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalTagger + id: ADTDisposalTagger + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalTrunk + id: ADTDisposalTrunk + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalRouter + id: ADTDisposalRouter + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalRouterFlipped + id: ADTDisposalRouterFlipped + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalJunction + id: ADTDisposalJunction + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalJunctionFlipped + id: ADTDisposalJunctionFlipped + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalYJunction + id: ADTDisposalYJunction + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalBend + id: ADTDisposalBend + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalSignalRouter + id: ADTDisposalSignalRouter + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null + +- type: entity + parent: DisposalSignalRouterFlipped + id: ADTDisposalSignalRouterFlipped + components: + - type: Transform + anchored: false + - type: Physics + bodyType: Dynamic + canCollide: True + - type: Construction + deconstructionTarget: null diff --git a/Resources/Prototypes/ADT/Entities/Structures/Storage/Canisters/gas_canisters.yml b/Resources/Prototypes/ADT/Entities/Structures/Storage/Canisters/gas_canisters.yml new file mode 100644 index 00000000000..835502835ad --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -0,0 +1,693 @@ +- type: entity + parent: GasCanister + id: ADTBZCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTBZCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTPluoxiumCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTPluoxiumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTHydrogenCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTHydrogenCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTNitriumCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTNitriumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTHealiumCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTHealiumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTHyperNobliumCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTHyperNobliumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTProtoNitrateCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTProtoNitrateCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTZaukerCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTZaukerCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTHalonCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTHalonCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTHeliumCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTHeliumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +- type: entity + parent: GasCanister + id: ADTAntiNobliumCanister + 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: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ADTAntiNobliumCanisterBroken: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:DumpCanisterBehavior + - type: Lock + locked: true + +# А дальше сломанные + +- type: entity + parent: GasCanisterBrokenBase + id: ADTBZCanisterBroken + noSpawn: true + components: + - type: Sprite + state: purple-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTPluoxiumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: darkblue-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTHydrogenCanisterBroken + noSpawn: true + components: + - type: Sprite + state: h2-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTNitriumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: brown-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTHealiumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: healium-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTHyperNobliumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: nob-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTProtoNitrateCanisterBroken + noSpawn: true + components: + - type: Sprite + state: proto_nitrate-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTZaukerCanisterBroken + noSpawn: true + components: + - type: Sprite + state: zauker-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTHalonCanisterBroken + noSpawn: true + components: + - type: Sprite + state: halon-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTHeliumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: helium-1 + +- type: entity + parent: GasCanisterBrokenBase + id: ADTAntiNobliumCanisterBroken + noSpawn: true + components: + - type: Sprite + state: antinob-1 diff --git a/Resources/Prototypes/ADT/Reagents/gases.yml b/Resources/Prototypes/ADT/Reagents/gases.yml new file mode 100644 index 00000000000..428b27c2f05 --- /dev/null +++ b/Resources/Prototypes/ADT/Reagents/gases.yml @@ -0,0 +1,285 @@ +- 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/Prototypes/ADT/Recipes/Lathes/categories.yml b/Resources/Prototypes/ADT/Recipes/Lathes/categories.yml new file mode 100644 index 00000000000..69cbaef329d --- /dev/null +++ b/Resources/Prototypes/ADT/Recipes/Lathes/categories.yml @@ -0,0 +1,7 @@ +- type: latheCategory + id: Atmos + name: lathe-category-atmos + +- type: latheCategory + id: Disposals + name: lathe-category-disposals diff --git a/Resources/Prototypes/ADT/Recipes/Lathes/pipes.yml b/Resources/Prototypes/ADT/Recipes/Lathes/pipes.yml new file mode 100644 index 00000000000..b6b32b8aa22 --- /dev/null +++ b/Resources/Prototypes/ADT/Recipes/Lathes/pipes.yml @@ -0,0 +1,147 @@ +# Disposal + +- type: latheRecipe + id: DisposalPipe + result: ADTDisposalPipe + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalTagger + result: ADTDisposalTagger + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalTrunk + result: ADTDisposalTrunk + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalRouter + result: ADTDisposalRouter + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalRouterFlipped + result: ADTDisposalRouterFlipped + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalJunction + result: ADTDisposalJunction + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalJunctionFlipped + result: ADTDisposalJunctionFlipped + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalYJunction + result: ADTDisposalYJunction + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalBend + result: ADTDisposalBend + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalSignalRouter + result: ADTDisposalSignalRouter + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +- type: latheRecipe + id: DisposalSignalRouterFlipped + result: ADTDisposalSignalRouterFlipped + category: Disposals + completetime: 2 + applyMaterialDiscount: false + materials: + Steel: 50 + +# Atmos + +- type: latheRecipe + id: GasPipeHalf + result: ADTGasPipeHalf + category: Atmos + completetime: 1 + applyMaterialDiscount: false + materials: + Steel: 25 + +- type: latheRecipe + id: GasPipeStraight + result: ADTGasPipeStraight + category: Atmos + completetime: 1 + applyMaterialDiscount: false + materials: + Steel: 25 + +- type: latheRecipe + id: GasPipeBend + result: ADTGasPipeBend + category: Atmos + completetime: 1 + applyMaterialDiscount: false + materials: + Steel: 25 + +- type: latheRecipe + id: GasPipeTJunction + result: ADTGasPipeTJunction + category: Atmos + completetime: 1 + applyMaterialDiscount: false + materials: + Steel: 25 + +- type: latheRecipe + id: GasPipeFourway + result: ADTGasPipeFourway + category: Atmos + completetime: 1 + applyMaterialDiscount: false + materials: + Steel: 25 diff --git a/Resources/Prototypes/ADT/tags.yml b/Resources/Prototypes/ADT/tags.yml index 63f10c53ff9..63c3b15c74b 100644 --- a/Resources/Prototypes/ADT/tags.yml +++ b/Resources/Prototypes/ADT/tags.yml @@ -31,3 +31,5 @@ - type: Tag id: PlushieSharkBlack +- type: Tag + id: ADTSteelSheet diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 5f48ba4c8f2..35625a3ee7f 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -194,6 +194,11 @@ - id: ClothingNeckCloakCe - id: ADTClothingMaskGasCE # End-ADT Tweak + # ADT-UPD-Start + - id: ADTUniversalPipeDispenserCircuitboard + - id: ADTRPD + - id: ADTRPDAmmo + # ADT-UPD-End # ADT-WikiBooks-Start - id: ADTBookSRPcmd - id: ADTBookSRPeng @@ -220,6 +225,11 @@ - id: AccessConfigurator - id: RCD - id: RCDAmmo + # ADT-UPD-Start + - id: ADTUniversalPipeDispenserCircuitboard + - id: ADTRPD + - id: ADTRPDAmmo + # ADT-UPD-End # ADT-WikiBooks-Start - id: ADTBookSRPcmd - id: ADTBookSRPeng diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 82b9f62837a..d60b8346794 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -69,6 +69,11 @@ Quantity: 9 - ReagentId: Carbon Quantity: 1 + # ADT-UPD-Start + - type: Tag + tags: + - ADTSteelSheet + # ADT-UPD-End - type: entity parent: SheetSteel diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index db0068efcfb..1e0a967f8e4 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -175,6 +175,7 @@ normalState: normal-unshaded denyState: deny-unshaded loopDeny: false + priceMultiplier: 0.57 # ADT-Economy - type: Advertise pack: BoozeOMatAds - type: SpeakOnUIClosed @@ -792,6 +793,7 @@ ejectState: eject-unshaded denyState: deny-unshaded ejectDelay: 0.6 + allForFree: true # ADT-Economy - type: Advertise pack: NanoMedAds - type: SpeakOnUIClosed @@ -901,6 +903,7 @@ normalState: normal-unshaded ejectState: eject-unshaded denyState: deny-unshaded + allForFree: true # ADT-Economy - type: Advertise pack: MegaSeedAds - type: SpeakOnUIClosed @@ -927,6 +930,10 @@ components: - type: AccessReader access: [["Hydroponics"]] + # ADT-Economy-Start + - type: VendingMachine + allForFree: false + # ADT-Economy-End - type: entity parent: VendingMachine @@ -979,6 +986,7 @@ normalState: normal-unshaded ejectState: eject-unshaded denyState: deny-unshaded + allForFree: true # ADT-Economy - type: Sprite sprite: Structures/Machines/VendingMachines/sustenance.rsi layers: @@ -1411,6 +1419,7 @@ brokenState: broken normalState: normal-unshaded denyState: deny-unshaded + allForFree: true # ADT-Economy - type: Sprite sprite: Structures/Machines/VendingMachines/wallmed.rsi layers: @@ -1888,6 +1897,7 @@ offState: off brokenState: broken normalState: normal-unshaded + allForFree: true # ADT-Economy - type: Advertise pack: SyndieDrobeAds - type: SpeakOnUIClosed @@ -2070,6 +2080,7 @@ components: - type: VendingMachine pack: TankDispenserEVAInventory + allForFree: true # ADT-Economy - type: Sprite sprite: Structures/Machines/VendingMachines/tankdispenser.rsi #TODO add visualiser for remaining tanks as layers state: dispenser @@ -2083,6 +2094,7 @@ components: - type: VendingMachine pack: TankDispenserEngineeringInventory + allForFree: true # ADT-Economy - type: Sprite sprite: Structures/Machines/VendingMachines/tankdispenser.rsi #TODO add visualiser for remaining tanks as layers layers: @@ -2102,6 +2114,7 @@ normalState: normal denyState: deny ejectDelay: 2 + allForFree: true # ADT-Economy - type: Sprite sprite: Structures/Machines/VendingMachines/chemvend.rsi layers: @@ -2130,6 +2143,7 @@ normalState: normal denyState: deny ejectDelay: 2 + allForFree: true # ADT-Economy - type: AccessReader access: [["SyndicateAgent"]] diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml index 8a3e83c5196..acba0e2e220 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/pipes.yml @@ -64,6 +64,14 @@ delay: 2 fx: EffectRCDDeconstruct2 # ADT-RPD-End + # ADT-UPD-Start + - type: Item + size: Ginormous + - type: HeldSpeedModifier + walkModifier: 0.5 + sprintModifier: 0.5 + - type: MultiHandedItem + # ADT-UPD-End - type: entity id: DisposalHolder diff --git a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml index ea3427e2903..8f7a3920368 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml @@ -25,6 +25,19 @@ Ammonia: stationAmmonia NitrousOxide: stationNO Frezon: danger + # ADT-Gas-Start + BZ: danger + Pluoxium: unwanted + Hydrogen: danger + Nitrium: unwanted + Healium: danger + HyperNoblium: unwanted + ProtoNitrate: danger + Zauker: danger + Halon: danger + Helium: unwanted + AntiNoblium: danger + # ADT-Gas-End - 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 147e9e5b371..6528480a200 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Canisters/gas_canisters.yml @@ -611,6 +611,7 @@ - 0 # Ammonia - 0 # N2O - 1871.71051 # Frezon + - 0 # BZ + ADT-Gas temperature: 293.15 - type: Destructible thresholds: diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index 8d317102c1b..2a8594adfec 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -116,16 +116,18 @@ 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: "#cccccc" - boilingPoint: -253.0 - meltingPoint: -259.2 +# ADT-Gas-Start +# - type: reagent +# id: Hydrogen +# name: reagent-name-hydrogen +# group: Elements +# desc: reagent-desc-hydrogen +# physicalDesc: reagent-physical-desc-gaseous +# flavor: bitter +# color: "#cccccc" +# boilingPoint: -253.0 +# meltingPoint: -259.2 +# ADT-Gas-End - type: reagent id: Iodine diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 7705a20acdc..1880c40589c 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -97,6 +97,10 @@ Gas: # Start ADT tweak: Novakid effects: + - !type:Oxygenate + conditions: + - !type:OrganType + type: Novakid - !type:HealthChange conditions: - !type:OrganType diff --git a/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/icon.png b/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2acec63635d0c7c8439a4c44b8f439ee6c71bf0c GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikV0(?ST6Ov1h9=|eW`f6KS+k%3Epr9ZF1A{qp=3Kr0z}+j_+{%06#EHs^ zI!;bbX=fN@WMmYT4MZhWfVzQT&6h_YTSZEO{DS{u0tSEo=Yl|a&H|6fVg?4jLmhu|xMHyXwSBni@~_ZJN2^0w;6p@;24EHLYCLJWQ>IA(E~KuD<)cwjsDzdPbK+ hoVLo+f+Hq-88xRUcWrh$_YUYQ22WQ%mvv4FO#u9ApcDWA literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/meta.json b/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/meta.json new file mode 100644 index 00000000000..d35a4e9f6c3 --- /dev/null +++ b/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/1da0b5547e02db0db48d0bc93926c26bd8888347", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "printing", + "delays": [ + [ + 0.05, + 0.1, + 0.3, + 0.1, + 0.05, + 0.1, + 0.3, + 0.1, + 0.05, + 0.1, + 0.3, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon" + }, + { + "name": "panel" + } + ] +} diff --git a/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/panel.png b/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/panel.png new file mode 100644 index 0000000000000000000000000000000000000000..56c46d2744e0e86cdcc3c1d0c737288b6b0e561c GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;7(5$$B+p3WC_;A2_ijBfd*V|2Q?%?Z^sS`iRaIsC$Ct_me6#mpy1aRQMSmHk9p>u+by9NbK`Kq ziwl`-VPRn_biOjSFx_b#Tif)N%dDk{PWKia=WorxG#B;v-sH9G*jKr0%Arcb*{xqKI ggE(*lGY=2L{~bD&s?!#R13kgu>FVdQ&MBb@03!-+>i_@% literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/printing.png b/Resources/Textures/ADT/Structures/Machines/pipedispenser.rsi/printing.png new file mode 100644 index 0000000000000000000000000000000000000000..ee30eb4392080bc565dac7b1c01aeac2881e4beb GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl`f3GfMVO-L?1di=_i>8ovRZ3_wtf`Wn!3=HPXnWJJCXd2(rv*E(k>koAN zvfaI+&8@sAPMoN$sN>}1bcTW9{}~1u85u=o15pVTpkY@Zz5DU&Pa05yfkEt2;SnGu zQxfDC{2w=95a0CZI#3;Ffk$L90|Vb-5N14{zaoW!f%&edi(^Pd+}l~Vr`@_Fu+;*6yZz8cFY04t z_R3l2c><>+8}>{6^r)S)FwRpo)IVP@%vjwoal{zH4n~PM1}4+_dUBZ zHeuz#`%`27H!fv3yEe1#JB!Zuc@v(_YdEafV8uS$eeV6Ug58%UNjol8HE;6r&SUxW zGnQXql@0eV5cs3 z*1t6hsW}2Cy45e7XD|Bov%xLR8swqP4E3hJCbCsMUcy+@cD(dncL1Vn0fvF+2Cmn^cT?b^_)v;fh1Q>z1;?r zdHR3t6wXiE{HLzbtqJ6_@bmxY9nih=uYs|Y&#eFHpSY*qpZ5y}L=`DNIR8HKf!#dT z^z-~449vS(Zi~cx`P^u--@TY)f>5jF*}MyLdagIdu#}V~pSzq4^yo~V?Sg+k$r{+0 zay&UI{Ng#Y<=+|y<;`>NS!5nSk0~SF+Y7qb7S3T6ki8weq>HU%TJVxx^ClnI_L6BS z!+wckFGiW|D~dA?`$VTPNH6_cb6|-q&>uf-XI*Exw9j@{IO{fh`5i_3_RoHue_h_E z;n_8l{nfltMcSaaIbKw^zUVWfSN>zS1M}~1K2U4J{lkVkAz^yL?56HIJ5Y@CF$OI% zSbmdt*5r>?6S^DD<(;Xl>ammmQLeb4?Qs)OjgcAoewbES|DS)aAQ$JiTcrxX+|S_Y L>gTe~DWM4f5f?5L literal 0 HcmV?d00001 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 9c5eb2e1fe3..df795db8fc8 100644 --- a/Resources/Textures/Effects/atmospherics.rsi/meta.json +++ b/Resources/Textures/Effects/atmospherics.rsi/meta.json @@ -69,6 +69,30 @@ { "name": "water_vapor_old", "delays": [[0.2, 0.2, 0.2, 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]] } ] } 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/Machines/VendingMachines/boozeomat.rsi/broken.png b/Resources/Textures/Structures/Machines/VendingMachines/boozeomat.rsi/broken.png index dfef5536d45916c776c355ca568f25aead831105..637a95900c4fc7923e5119b6acb55e94e4354368 100644 GIT binary patch delta 1254 zcmVJ<-B!2;OQb$4nuFf3k000EENklL46izAso>H|P zB#8y{X2(XUiL)bjd1mrNCf%Eqk~|a&Sp}HM_ctDjMGv_pE4k8k1ORirXik^NmgaPE z!gmb�-8u^$Rm3C8YpGQLF;YkwY|kK#<2Ho;)5sJ%2q($=z-@V7dpYTm8amjvk^J zcv3VpG$6~eXnA>g7JnK8or}|F@BsWzkSc)R#^y9*LBFkElRKs=fo zn*dlGBWrGKqO_u1*v%r^j<+K}&?P!4@vz1;eSYktJeqc)@`#C;qBYEldj3m&IV#Na4!;J ztbIJP>|(-%$)ex5eIsA(KFs(BcGlHZCHQ68#k#sG&YV0=b^Ur|*_Ch;27^ILmMj)6 z7z`$6pgYh*x+8iCMZ#eK-m6^23Ewd>9y4Z)#UBZWdEK*=U7PljpFfQ~4ST6+sDI++ zC9kr6)hB{LmSw)!chE96U(ccljg1W<@h}J$6^A+9{yl(2V7kM>3Ewe(SFRsF&{$e1~Ff}T;QOamA zCT@#HlkMYNHbVAw{P@zvVcV5Jf85@?bIxtAt+&MsCUqb7B!BmwbKZN-d7ksW?>Xo4 zHk(bt3j|MJX0sU0W<;cys{NJJJu$tx-qj#D7IS4mfv15+!_d=N>Xad;G^Q%J{iWB6J(%X-~C%ginUgqGM|d`tOfI ziVCOhrPE)7VHv=)sFAMFhpb&2b#>Jd6%^GcJydt++axSM9GiF>=iw2*u=e z3E&Wk>z;HGMDh~Zq+fhB2=}gfgvn955MRJj!r1w6Nv;~*-#3zX+2&xl`z}iSQ&-L^9qoZ%UL3^7IAKJ0`Ko_z)0YG7?xuw zC0`ofdJ}fL4bQ^SH(JpX@Zz+mi+MwnfDHEU*^b^@0UAg|{)u2|odoN$gx03r*tp4# zb3<1O5`Q0ZIAOI~(K9i~+LZj*o`dKa9?&MB^PP8*6lhIi0_b(^-ckpf$&4Grek92k zgTmWx;4x0ojQ+lS~2F1QwgBt$NMg`x*=`Tr^ru>(S+V_NiOi|9kH0m zE5K;XFRTz$0!|KIhrwXTu?>w);)vU+vS$!amw$G<9jk>(0M9?!^Ma6KS>LkF0mtUo zz;PVxHamJxoWT2hLZ_uRPh z-G6Q9$KnASww94*w-*)`RKx`ZL>Cux+T(YBLi^i05DF*IH|&FZXFa+Oc<}j! zODKf8x;mCG$z&3X>G@n~5BQ$tf$T)1@po=_FdHT98@mnv&krH~_y8Sk&G3!}Sid;d z4wZlslN@`A9Q~~gJHVIl=o_8HQBMntIe)zibb0|^zn|<+?L?^pcJ)y#%H^TPRs>cFc$0x$&mVf6I5YG$i9bi;PderKiE_DIWGC@VC>2bf{{DXLIq>M=Z>;<>U1o6d z_g@RHF8lBi$^8+F#T0KT!nEeVYEQDK;q`j++I?C)u$Gf78#OgGs~*DyOixeac_J}4 jH@B+(8BYFbL$UEMn*mv85)~7x00000NkvXXu0mjfvy*9paytzrEzX%4K=u%d40e7#b$^1jW^Cjk#k#H(I{W zb923F{iIzTKTE!qy(!wgtncs4KOYmOvShth>;ALOsw?BbyFKUYmG-ahQ<9os%nP&~ z3ih3-b12yNx8cDb$F}0%&mMc9mtVqI`}yP2=ls7|Tryv)ZD~ud3+Fw#pE37tOWukn z)9zpM-D;V8_!T3}goZ6|*jYBq3#{pwU+(^%{fp)z#*4ohYbWh*D*90M{Q0$({rL?) fYe1?c7!+@i>X9wgxD>gTe~DWM4fG3$PO delta 1600 zcmV-G2EX~a0?-VQBYy@LNklZ)h839LImxT$9BlZDVV#W&JZmXlH3RtE0tX z=h(pE3lYU4zH^Eo2*a{hf@sAzqA;mQeKC=}kyb$vMCisqr)wv+YAt9Hw>Eu|+R`;y zyZ)icojjLZdbuafU7kzsN$-9i2>0)~`#yKSyLCWxX4H*QQA z?+GKt(*I!~!c>7$=;x~o6@U{@rUY+B+d%M$@b4ejprPS`%yM!GKKp0kV|-$pBM<*;Gs9 z72)p(6Hu2(LQ_J5+dtka(cyQWK6M31=`$eH$an+*uLoc!sYEN0J_GjRySr6+PY%C7 ze}$Z`53rmyMFrsc&+1>oNvP8;yLNAIcjEWOoSXL>?V$l~)29MZS9c#(h%`I|ZDW*+ z#>U2i#D8<)bbZqQ&_V^Es=7)U3Lro{9#_Oqo@fT2SAg%w=HaO`XQ2MeZ(ywL5Vi5u z)m6g^5Sp9!{$K0{eJxY~0)c=sT)T58Gf$RekmS^@jfgM3_$(ZX#UYVMP#c_^n}c(& zznq!A@agB!+S&@wi>XWV>%?Z>3OQZ>eO-Af0Ds;}uQHUR-KK_&Riv91BEG!53{{~j z@E!0`73l8nRz$VaD=RC8JMLC}Dgcv{zh)N@MfmA@G&6qX@@2z=*w@zwm6esSv$F&1 z>#44MfBFmz}8>C7*>K6x9L*>XgHcW zLw^$6GA!!;Y02cC=kb82Iu25@Fd?(W-KI|kfCv+2uErt!SiLeHK3WfpzeS<>AsO!e za|HtANnsE`@X#CV@9$SGRnn1>Wm)+R4Go!Y1Kg%h1>n+4Z|(NvE@m&Ay7)oPjc7X` zk|e>_)|MiyePnC44fyc%tErVv>lVDAj(;4c*7=bUe}S9{2x3^d69O-+BW>M?Rs&AD-^k-*hv!gsB!sj0C=mw&f@ zG#bsCrUKB^)MQIV2;(hB84LhtFaVsP8sTs_Y+H@y=jW9n zX#nliEf;;r6#(-0%nlY77BWe>WV}?lrhCC#Uxf<5^z<~-hB`YtO|MJJ>KPdsVbWD0 zkAYeB)y!yC+S}U;+J7xn05&!@n13r`W!+-HOJCJx(We4%_RUwA^5fO@&E)6js}M_m z{`pf!xaw=4sTukMbkE;P<_|ENAMbYklKBJ7=EoO9|NN;VT=jFo-5)@r&SH{a(a(kU ztSh7*#oT`_d)1*N{s7j4?__;4@2i1%s%%O80jvk#$@-?R0Q3ixR^O5SfPXiheHHWv z*bMpubm-H??FRh;oI!s8XMZp`mopdu&R_sIg8|?S`U5yqHvWLo(NX4Yk;fQT^m$S? z{s1cwU7q?@aD+d=N`5|X9N`ZrBtPFs-)>y-{Q%Z)3D|)vz8_#ES-8|V_WJ>5^YeM* z$nOUflAq5TM}9w`koe&^aH#8T1E~TL9ed y53n2jegJ3CAHW&(2XF@c0SJO12!gl}0Qetr`XK;nczP`W0000Px$R!KxbRCt{2-LWf0Q5*;Gud-TYP%r3|uK)iXTwcplR^@4EN%nQq;B-+Nxa-4mwRZ0%RiANlS*e}A&{H>@6PojH~*SW^_O@z8wGn0000000000 z>MA}Py1c!XBzwa%`VE=SFP%SlJ|XG<57%cGpZSJ!3+EfoZTN6*CpzHA6DnQofTaEr zr6zR1Z#zJzIv{D@5hVZs000000001Jmv-MD@DH^9{(z=y_i*k%(E9rWnob9dS?iA| g0RR91004~J8(qK`5ig~y_W%F@07*qoM6N<$g2Pw09smFU delta 1625 zcmV-f2B!I(1L+KqBYy@kNklTWB0r7{~v!yU7}Nb5BDIP0}Jl(2!80C17Y; zeX*z%K?vfT^~opk)h7$S_*95UUg|?Bh#>e-L7KJ-X)URkw8n@=F_#TxLqcv%%%$0# zku#gw%+A@&?#|_$P4@f2GMAm1|2f~cJ7-Vw{TUDhK@bE%5Pt+g5ClPpL$NA-dij#Z zmPr)|1%MSbs_&0Pp2pl(6!Y_Oywcl?aCsPtk~;m1ix-rho*s;hj39QVPJ8RzYw7EK z|Hoat`9iP0e*LH0XdPbGkB!A*n3$N*_jh!3ptZGCKmX##AGp?68pBxws4eUW(Kq^U z^qnmYeO!B(5r6ZLwUITI75ef?5=f{({gVwWC8Cy|AT6E^L(rUreDOlxNVqis`QUZ` zb7^x47@D^3s!T1Gw*YJ*6bj+~{Sn)Xx(R?6`h^6*4}GK0);L^WxXm5QCE)D2l;Bjn z9ZE2Se}B7!rlx1o@3XJq8!sKtIOq4Pnb&X=059|l34eee`bMAgi367acJE_oS`yF# zSUp{jRqUWW7DoM4498R7Kz{J>C;(pQ7ZL!!`k${ZmjEr@0N_Dn5>Ns_K*3+nCUD{J zBsp)eG zXlOXb9mED6hIuf`Msss>LE_ms>iTT{VTMaURdtoVRG?sOZA}+{^=vD`^zPw`X!?(S|~)V#g4w3M^srK-;*V084?%mYFp+`Si1uiv_PGiMO{ z`hWURR#t}H-Cb;KZ0P&?_dWsN$hH?!HU zt}e&ty45}``jeBB8QWX}oMN3~=fe1RAS~;pqHnPhhfUuMmw?U9O~;LJb8e}g&n3WVeY|mg zKK1!_4e~;t)#qoeP2KY+_^of(e_V_C?+htXaAfo?v@!)2{tbaaUe`&xN ztB+?RQF%zOk8emM(UMTHJUngN3D#lbW!}yQFZ5Z5jhA^_l)km^cKG5Cu-4~~U@G+< z z;75JFn-7HF`2PHWLIdD+eZG@6h{U(&2RIFYY=44ie0_d^6TEzWfKt_`b|?~X6zlV0 zevW|4f4X}O`2!?F{s764KR`0%4=A<-l)67aG~^GE4EX~jL;e8CkUxMR2!bGp5(L2i Xa02GyEZw1300000NkvXXu0mjfQr;%# diff --git a/Resources/Textures/Structures/Machines/VendingMachines/boozeomat.rsi/off.png b/Resources/Textures/Structures/Machines/VendingMachines/boozeomat.rsi/off.png index 75c8d114d9ba8e6ffbbcc487bfff791dcfbeb5c2..6a1a028a96b04149b74761ea3a6ecb476a33cbfc 100644 GIT binary patch delta 1289 zcmV+k1@`)Z2Am3zB!2;OQb$4nuFf3k000EmNkl3aV{ ziSJ&{xbx@FD-?pG`(ll~u4*$4m@8}hD`$pt#zi6#iq?{LyS?9JGWKs&>}1FO{$pmt zhU3>F!+<~FXF(J*0?(d1n^olIxSQLtWTE;f0qSjyQt_9eAOPF8nvf_&v;Z9FP%&^P4uG>c0>BQl8Kp|a#N}_$A2}g? zJvV;%4S%b`m(zgH=SzJBtFY)3ID1YaiX!6=ewX+b+dQ+g&|-t($7K>9`2I3LO8n{- z=#syNyUC~PinkS6fGq1kA~eC0_qKHHY>uGTXr!@v_W)%_KL%jo>J|J}TUH@OsWM}v zLw04``yoq!wze8u?YibA%r7jUKXQV(V33_^b${-JEKmYGeE4@k$(w;9fZ6Hi9PI6; zana2uCy!Av=axot%FV&vZY(APnqn{-DzKWj;b>~aVlq%vwhwbdC+3Dunp<7WPCw7z zKx?aG!wH=(7kk^c$_6;cygOa?3_15ZL8o`gJvRC7EDdGg{cCPPLOde5Z(j8;X{#U%r4 z8|R~VDF__9M<^6pSG>Hu97t|DDWVP;N;ew&3dt6hrw_1aS@&*^kzHlf$c@qfby zq~Y~?W%EjazQcWtkEb4IEE)xneoCId6tP&e==EA&EX9b&m(d8X<1~UG%QIUV@Qt}8 z0jJZ+mtTJ?yAB3}as%lFRtuKKf=q?gM3)7klTo74BE-oky7(*Vt5gh6X3xupuC6Xr zDi!f~oNzdt`2;)@&k(~Ro{49?cz-dAQl&r)i)=5|G8LSm%xHLhOq*XXFCC{&og$e` zva+&*LZJZQ(xpq%ykhG+r&ols(skVzg6O=+Zo!|k34J~v%980JTyMEH)c^+Y`@!K@ ze`l07BT*DLv}qKATy;fJM4{8^R{j_D4dOpusU2R(*}Xvk0000(5QoT}6coA~2m95Wx`_ zT-WVIzbG&;Gv7Dod~;A#DwQxiBM?0l3I$LU<*dZB*$n3Mxql~sl20*?Bv7Y5Rj&6FdmOV5QMXmQ%=eqNkOmIJ9@%;y`FeH?Ylulz;d~S$KaUp zoC%fM8+NAknI^@?5^IZ+1S?kp%d%MIq$%4ZZTjPDFn;vf1tGuR+gP)q`b#`4K$1K{ zj6D&^bpjFFnSb!fJi`f4O<{i*+a(8=5if{&P6a*%inm(B$}uuSpF<{-37*pwyvS!G zWA0BW00%E;F9$Zsr%hI#TZteWCS=(Yk^*?56l|3MXvhF&Me_*Ag>wh(?n4-vU#b&d~NW<;PWWo{03ea>t(x$~|zOaJpBw=o~TFgsSsP50#_9Jln zPz1szr1?jA8EkFM3@GOE?7q8iK1huB>y7Y75l1jyJFoYI|(tNR51N^I-TSmxcl}!b`^0y zH^RlobzLw`Gl*6oEU5?5R8J@XUxsEC00000NkvXXu0mjfER|ik diff --git a/Resources/Textures/Structures/Machines/VendingMachines/boozeomat.rsi/panel.png b/Resources/Textures/Structures/Machines/VendingMachines/boozeomat.rsi/panel.png index 60dbf76b85e3f9f18a80a5d810366360f199f9ba..65478ea3c3da72efd98f4952f4353fe91bbbae0e 100644 GIT binary patch delta 179 zcmey)c%E^BNGZx^prw85kHkJzX3_B3hFZBv=ZrN;me*t~-cQ*Ym7wf0VQ+;Ez4P0%c3pRMd4RD@=BFxnn)`QX2O|IhsN#OE_AI20Nf zn83st2F;~*&u!+-E$%QBOJmTDUvHIDZal}IKjwCLNZv1&sCApye80i6k^RM4(L!q( z_7=?p)&14F8mA4`-51%AAr+#;>S9-9+%PTP=>_`{kp}Ze*1zZXcQ7#3iG5&UGSGT7 Tl{r%o=xPQ}S3j3^P6GZx^prw85kH?(j9#r85lP9bN@+X1@hGcd_r7Pvx=1s^Lk|X zT|9z}^A=8?J?~JovYMu`kcj+=v*-QR-@G^99jI1EcJ_84#aj~O7yKUyFxb9OY6D7e z7I;J!GcfQS24TkI`72U@g8%A0T^vI!{I^cLU3OT3hh^%CZ3o`{ug_0sRpeA%Ui8H*eam`?;(;a&OPG;`=PR!M^dYenYCa-X`@lrb8mpENv`lY~Oko zCwL^N9gu$TMEJubRe6TfW(Q8FH>`Yqv*GnB?E{QiTnEA%B3~NGWwCAun% zhBGV`XQ#_Zg_m@eAk>4hwh(U?DQg7|7p7>j}pUV&LyuC zcjPg2d|LJ9Pj})KCxhcsAMEsn)1R__xFRLtG5f9hft8Fi7BOZ{sW)W0puQk?;=|=) zu?#ky*8(q`-Lfpnuc7?1h|N^3iD!1k`>r}-E@H?kSz@q^?;|iU7(8A5T-G@yGywn% CHnPe9 delta 572 zcmV-C0>k~a1JwkOB!5CsOjJdbl$54b1~W4=>WwjLYioXfe$jIpO-)U&uC9ba0vsG1 z*xD7x$H%&23=aIHSTYU0003#f9WXI zfSf_(C|^OHK}akha#4T>$>|}c0;LL|*>KDx#}wrRihlwQZA90SxCrS&H_ zppSKgtnUG6lwuXaT_GYM-MiYg&>9WknBbmLeP}_4$&`vN9a=~W%79#T>Ci&>1d^HT zTIimKZVK!rRNEA!rur$8S%~)(ggi1yS>aywMMZ8r$0PJxCKqiJ5>UWN1?zV!Gpclra-j~XBj6(OPk0000< KMNUMnLSTZ07XK9h diff --git a/Resources/Textures/Structures/Machines/VendingMachines/tankdispenser.rsi/dispensereng.png b/Resources/Textures/Structures/Machines/VendingMachines/tankdispenser.rsi/dispensereng.png index 7001663a4870fee81ea476a69183f3d957274dcd..6d8b0abb209527a37db0c1e428d5afd3eae94600 100644 GIT binary patch delta 148 zcmaFKxR-H)VLeN_qpu?a!^VE@KZ&di3=BL0J|V7E89ZyID4bZQ3l!j8^DziWv6KY) z1^@s5pTR+EysgVSQkLPl)T3DN~k(vKbp2zv?y2&d#o@tGie%-8pSiHJQA1Z#9a5BGM&6 ze!&d?ae^b6mPMvOb@HArjv*Gk$q5pyiyP7$yu5;#4o;phWzwSkO@R)K3=G#wm^G7B RR-XY`;_2$=vd$@?2>{Q;Qr-Xn diff --git a/Resources/Textures/Structures/Machines/VendingMachines/tankdispenser.rsi/meta.json b/Resources/Textures/Structures/Machines/VendingMachines/tankdispenser.rsi/meta.json index 163474fb805..30375905761 100644 --- a/Resources/Textures/Structures/Machines/VendingMachines/tankdispenser.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/VendingMachines/tankdispenser.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from baystation at https://github.com/Baystation12/Baystation12/commit/f200ae08d71ecbc91412ee650a334981892f5177, eng layer by peptide", + "copyright": "Taken from MOLOT-BlueMoon-Station/icons/obj/objects.dmi, eng layer by peptide (edited by github:KashRas2)", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/Portable/portable_scrubber.rsi/draining.png b/Resources/Textures/Structures/Piping/Atmospherics/Portable/portable_scrubber.rsi/draining.png index 87ce5806aa809f1d0870bc71d3c129107ff7a1df..719f68f107f74223a9b841b5c819512dcdfcf346 100644 GIT binary patch delta 175 zcmXRq$T&f=o|%Dx!DUI;F(AcQ9OUlAu?M z5DWk01T_XXQHKL7m^dU_xFjSbFS=?jFcC2@GBk9W8Q`#rb4G%TMnW1J!_tl1&s8rU RSOe6`;OXk;vd$@?2>|NYGSC13 delta 95 zcmX@eSTsR0l8u3Zp}4B*3y@+g4sv&5Sa(k5C6J@z>Eaj?(fanBAtQqV5A%kogDiOy xntj*guNS%LiI0G|-o zr7O3w#M+-edr@(z-n)12N(!3<1O!f;I8jhgprD{2Dk{2T#|~LpS!ZYG{QUgf+}xa; z92pszZQHh~scI@Is!p9cRar?*Q9-5owsvuG@w92v?CNdpZLIBzii+~`@+2fAfEInJ z4EqSA6ib5qg8vf$4D%0OPy{OGEbxddW? z?cOh6%vR9yOXd3gZ~mp-ufK*Vy!QFPUoZUIyLfW-tKf9;Fw=W8)iRjQtmh0l)y3Az z*gkvvob_JI*JK9h@qD(4onj`N>dKt#<=h$^8YQ`PCx?leb8m8^d|^|mv_7j;Qo=i( z1u-q^jt%F}9ec6VK{?~=0j4L0QO}ohusg2s6R_LdAjQ0%q4xb!AEt*3z6EhLKI5E{ zIlta@!-2^R+cZ;so0)tCLn?$a4*R?RTyWq-6PG{JheWI1evTM}9lntP53@oFnr#?& zG5&k5dHd})=YvekV;dx|ymsJDiaPjK?)z_b0iA-X2|cH@PuT8CKf`^2wXdo9p|94q zmsj8ZviqX4qDW}Z#eE6)G9^A2mi#qHaqOM^z&PfAeP{gfI*vpR&w$4o9PI^jFLP$R zn7rVWXMvw^_XCw3?*D+|Gdy?v+D5R&Z7ynpY_n>TN=*$+@qP*CV# z?C?AAsD7+2y8hC9;oD{q{2{N#dBaEbWA*1x9s>YOs|YB&RapKfzW=PadFpNDSgw2HWM^Bx;8cIiAK;TV=y3b;0N z9RRTR<6!{6!GDE*ygN|F!G(V8f87n^$XNhDBpgE`85i1;O*{zx5Rn_kD2DYRT%MX_ zjfrGj=q!VxUhui+ z4FJF#DMIgw!W=0g6UuI-;P&Hh@%zdEA{T**(01Z)@_(}o$e3B&y?-B(+!%YRQRN&L>0_R8Arg+!O-fU=!cUoJ7^AM#_R8OM3lJjV82ikV@q52os@U3S z%+gAMtyC*$#7}&HxE6TjcWr^e!9#UTOWBSb1HUUX6(T@fU=qo=t%^G%FRSo>!cXsh z_FusW)lvYUl;%~;4B=Ja@A7Bwfas}OBG?&b zvG(!(@!I+Z&P2OV_)y2}*ls+W|Af`mWq;JxH<;1xz1{3pTi-x!eS`H8jV)Kp(?7m{ zX_&w5{CE)anFeW53ka zu6h|8G{1s^f`WoV2SDiqyc$>f0HqI5`Tz!{57-7MeLz4^`hY(n7eVO*ls=#X^ve@&*z;onU2s0q{k#n>NkP*51b2uBfOe&nz!bLP7#){*`6>Oo5bKNswRg ze|&)9jf70xL`Cs>hM%4;jv*HQZzuMK9Wvl?^L{yLr=rFRpThV5XVv|jR4V)Y$7hB( zuWL)UFXhbq*IIw@=jI7>WZ5Id9!;EU%N`kK^X$?@+4jIg2|kunRiq~r9A;WpaXl_1 z+u;zecuw<_E7`o$PP}Yv+R@OT!P~1)*yPoJdHMwoOO{RF615ljq}QK!oDkC*v&cGk zvB4^a`!6g-APtF&hCt%2NKpDHp_X!`S{_-3Y(b?`drH|+)1o4 znip#^U1O8xXCt`_{Jam3ax<@&S-L0IeeN=?J*WTr*Tj?x%{;iQNkl z6a*E4*nGD+*Yob2`^M=93H;!B-@Esm?|kRnd+r#a9mcMJT>-x>;8f!5rZ)c~|9^bX z9}CdPB{9~YJ$_`~^Giiabj8hB$S-1Q)3pubsu3W`CC*>CXo<9SMlyNXhzPR<7mKh0 zq*7!vGjZQKq^=LpkweGn-TM_98^3Ml_J2BN#>4Y5TJ0#CF}mDB$?mIW9`+|rcBxzv z5e^RJXA-CB#^{J$1c3$)t|9m80e@*b>*KPP2!5@@g@w7mdQZG+c@|QM7N!l1m^sZbk^fx-6>;u8_u~3SiaQ;s&Mrf^%G6H*ky_S0~MM{oQx!G zbp{_qfXmHbKiNgqpJxlV!@L#HT2WR3fwW&ZKAf=i@zfQ-1a8^*q+@j3%LQz-bHl(ZCk+@#bls0`*Dz*uIAj97%P0zMm_#~fdJ-f;?)*UOoTVFvH$ z1l$Kxsb(6SSqoe^Zi%tRkIxs}p%suKVr?;F41yl delta 68 zcmdnVm_NbLPSexHF(jh(?KwwA1_ch54Xd3ZvZGkJf3%&SmcYrt!0Z=#f5~=vh7VsE XY=W4VM8Ao9#Q+4Ju6{1-oD!Mk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E1o(uwsx8oyU9I9g&%B9|0JI?w>mc6z44Ph%9Dc;5!7ujG`J|4M4$6PZ!6K2=}+=9JvlC@VEq; zW-Yq+f1j#>_SB{;p)>bOIm)+vG-P720U>UIq#D)99*0~mf1Oc$4z*o>n?G|1 ze1IYyhtRb%Za3Zhl4O;Y-L>;dV9WIY=L1H-D!!h1l9u{g-xiDBJ2nU_FLh^LEVNX4ADHw{G_3R^iM`CEBkZk zP~;_cpD4404qjp??ofyD5NJVpu+_m#q%Lh0p@$Beigd`Ln7G<(^2;LE;oaV!Kevg7 z;bmWV`SHBZ^FHtQectDJ-XG+ULk>CQki!N;msL|w0-zzkk-@>I(#~#gNQ`{V6GG{e z^mQ**@RC_x&}_R$j!ZBJ>IZh=pAlc#}10Morg71*K1A> z;zUio^fl~dSKuB#-%Dw%158#Av!7>CCX;twV!>rGLic$wY|hNrkp(gd4Q2z%mH;>w zptumTxdMReH`=7}_$zUjhHVCvSO=8X;j$RjFk5Sd9M%LD0B=|?A_ED60eQvJvcOm% zPXu7GRHZp-Z*S91lvub_@mrN`POZEQnRMx8SX`LZ!J0ALrB*<-FQZ9%tdj8i#{ifZ zf5+p2hioenNm4m>dUczRzZFSotrdwl+_g3Wk#7+I%=?dUD0qNdckffSvw+yd`_&Nu zh|H-Kl?9SOs;Q(FURk(6|Dy-!7XLtGj5t$0amUHV*}Gg&%_3WNuqEMD1mkdW^ZD}LO)cmj9^8*} z&-vf;&c}s+j0tVYy>zQHURbx6sT8{7=Ls#{dIa{;Ey_hL(GG%PEfTl2l$DFHorLu2 zM2CoENtjp%udPL(hA0-9OhBx1__jlKzw+8^8mhlka4X&?>plT_ZZlqMKuD!a9>H)9M3p*!RFOfJPfRW0Lj)B@Kl#6(FPVoA?SXh5Ypo6u%fJryxd)Grq~cWy9U`MpFDE4nmR2CM zD~k>ua3-K09_6Amm)=wyihsV+Gs8;XgJYZI786h^Z$4~Fe;55pda zW<_?|nYa5dxJvXJ9c)4hgB~ay%2^lay$2S7i?qZ*G~0ds^g?++k(f@vH(cKXdIWrc zzde5!k%y{cG`oh; kGd>=HK_a7|Y52dvA8!UCN50bK!TEdl2+V2To_-20r*Yh73VLLHke#B5uR|d2m8)-HNVRn@L&dvd%TucoRcN zO>=!n?rCnCu=YXpA>Wt7?|07q{l4e-JNJ7Iw9rBeEws?We+*Z%iP2ug0r>c!=Hq--bmCZ`!c zdJs(sF)|Rt&{O~-0Uwcok1?au8Z$brtrBps9qm=D?vO;g-_Pyeey988W1K(#t(b35 z-(>vgK|Z-UgQ2O!Qx5=0rB@pUx2sb>uPGr>DM6qK z#*w8U88eGnD3Z9JMpHugJ#O-)vKafiqX2w2Jqy6dKui$0ID1Qw@YFJsr67No)~k#+ zdi$sO7XYsu8Ro-}k0VP#0P>|WdWVAK^CCT_05E@NiRXv*6Ijau;I1Yv@9;8zXNk%9 zJ=cNoqoPIb+T8;vlexSa&TTBT?9sgA{ZHU&9(@`S^dd|o2j*te^n~T60k(^; zZ!CyEK<`i*uGypmHm+T}4#2|vG+#}A!A_|ifU~Q+wv>EvCBxytJ!nb@y+a{iDsPX# z>K|3+`<`Rr^xJ&!(PsqJP6D~)mIwe`{^d5Q^lH=O4gxEwB?tTU3ul=4@^f6}brx4L zWX`_9OFNRh*0rHsW}(P(>aMW!rLx0*ao=vC5db%?|J0m7#>^s1!AdeS%i>CgiQ}&l zkar5(Mj}2Z1Sb)n zjYb3sI}t!}ZH?DQo)shjQ6YfkTmjhnyWpV@lC+uQ=_fQ1ymmMBkCE*p{@>sq<4>93 TMgaZ)00000NkvXXu0mjf9`@t- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/canister.rsi/brown.png b/Resources/Textures/Structures/Storage/canister.rsi/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..c484db50647fbc4412ba73e1fc7009c9bea7122a GIT binary patch literal 981 zcmV;`11kK9P)0bZGk#Jap?`z*~k29Wn(-{1Oi_9T9ZC3)5s@WUjoE>BpNK_AaynPn{{4>myHso`Qq`Cp2)iXi^`UDi zDG@Q5V8U)uDXs8b?PbIhG>YdX{I*ga)DDlOgh~nU;3Zxz%u)VgEns_juum063j5at zEEnbgs9y-`7Xk=Ach640CmnNiH;q8;@R(@7N3`E#KBqCC(>VFV#?Z3>7r)WZ=@Z6kFvb7Vm3pm6y=96bqRok2XrO zVdVsj8^Nve5~s~J^Er*vW}B_@(nO!B1$dqR`n-;NPr<#X1nk2V@$9e9>jB>|NKZi` z7Uk*lJ@QJNMPrq`{#n3oi3?85BP_Q&c2iC*plZwx@=6?G-;CRGVU8bu%Tj&5M+4O`+jeAg{!!8nc72jW|^WJnTf);r%T_WHfgYCNeFz3*4O0d26%1Ii9<{ z3C>&FUrwHH7$#Q0TQtIMk%(!Wm`7}Hj_(1d+e6qbbS;IUXYcHXsRRhS zrsH;T_770aqX5_G_WYB3Tp3KPfGHXndX~0xi8_?1GorkSSQIt>2>|ozjK3v6O2FfX z>-_X|&#wervSF-_&lnZ_HSnVgOJfM zMT5K&r?R%nkF{smj?0VYpJVfc3h*|W*Hn2W?%OJB!79}DKlFscIc!@HQ~EX zhhi>GF_)%xc`hVk69ZDorxI{m$T-L*{@>s)%{-n(Gu&Z!00000NkvXXu0mjf DMkUvc 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..6f3c8ca92876a5d6841387f07e33da0681d379af GIT binary patch literal 1020 zcmV}UwkU_y&K_+zV9{MsI_~e*UXdWC2)rVTJENe{O%wDpkQ`WUzjV;1bZ*7-! zm~d&-#fLPfO_K|)AbZLG>`5E|buI2kR&fgkGm_M5LUJ^qJ`mZ1>5&w$j+ z`0+6@FPqEq@>0&w?(lV>qvQ4zYe4;Hv&H~=PDg5x$Y>e#oK8l|aCb1y0c(@6OPUBy zV9uM#u4b9~e2NF>t^)A!UpE4u`p@<=IyOp>pb5Zv(76o| zBxp)(?YZ=ngxn~TN~Dk*W!`<@5jGUBQ`g}xVp+B=8^GaWxPL q376YdjC8B}?T&D#_WMKf#Pu(q{+62m%Oj!y0000%3V=2%WN6m`bey4R#^OOf)S z{J`p3GE@g@NR<-tv5YaRYmrDLxLCS41CS*<7{@D6m;rd0dN?pjhLlh#0V9kY=hkxk z^Yy20LqC{shq1!mn}FO}4uJAz88*v+yBb2&`0st~=8G>ri^(kS6bS8}&Qb}jh zC}D-58YHupku@tPVA2s>IKM#WMF-`yLgz(?h4Twj*Br#ub2{n)N?75_?JEEn8{>1F zSQ*yCjob}HM@aPo=~ECm8E_1*|FX`Xvwqk7=|+$BFV|7R3W1XWL`O*3^;DM+N_n&-0z#njN?ViomchC6!^KU3VDk3_9L@GgjtL_ASV3Rbhh6iy0`?yzHKbxShW~fJy?dwze(l-L&ef309(&XFHeCQf z@llcVa+>WwwgC_|fxT;EV;|z4*gJtTrvR{cW^ov~u6Hd=6_8v_QoJ`50kF+BE7_H? z+>OEpi)R)c;mOq`53WD(wC{NgFLQaIgcXvjNh(h(h?+pZpnDoDZ#>=>d~)Fanyc(cWp(r+<6_0MWBin$Md@ zjzD{-?L_a`0tysnjIzOed>*S|d0sFFBM@7PVU!K$sXhr(x1o3|n2*mx9IBOJPJ?RD z#R;lG_%BPbr5NJvdw36wkR?0N5*j|g4}gAed|vm@?-)B%cP}kqBm!V0B=uFwHDCI< p-c|ze*yDinI@*>-=qKl002ovPDHLkV1m6>(jNc- 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..f8a09e823abd619eceb236f3af6a0f9e7da27316 GIT binary patch literal 1006 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 Vc0OPo$ISo$002ovPDHLkV1jC5=D7d> 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..25a31eda76c89c9d3c06b4473f6631da2f27c68e GIT binary patch literal 1021 zcmV#xA*B`Ld70(M>f@pEwdN74SH_1$Ss8#?EKk#uuvzK5t1 z;z@vJP!#qS0SAjE z-;=+cD;oj-&D@T|PXSwn=2kMhE7ciui&ATD5IRSoKTPiYo4j-3bJU7TY%s>HWR_4Y zh#t7SgI^hu`A4+e-HY@2Oyw@naoKBuiU|^TBs3~zIvZ$e7Umhu6!nQQr2wn zHJoCqnHvkk>l0AFD>~O!(68L_<)_~|x)t`&0DS)iQ&(%`$nF0S{_r3{d3uiYN2j(N zWnc0quhxWPK%br?t|cf?2(;f(K%r0|HJ(DBo)gZu3E6=|11?WXYRrB)+sS94JQO{NEeWKUHZT#7A+g8w(08}p!cs{YWHfywYcYT+6jRIN(&{Ce(`3)?)y8ZH6Cja zelF}r0K_@y^fn9>kQ>>+C>o^3QvmLs`oW2SmejDS7OC+RM$r%zalZmU+-1lpr=3 zqrukIb0YAv`T!<}VQodqwA`t|4{yeAn{Qk4l>g5GEA^^0vg`-2>V#MF; rLYVQD_?B?KHv#QJc7vqj{|){HTIXhoaD09N00000NkvXXu0mjfcsuam 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..9fdcda24bdf443b7994e40fc40c00e44bf5d3270 GIT binary patch literal 963 zcmV;!13dhRP)t3f#@DX#I4;hc*5>f;un8FoXP@s38vqJ& z1y>zaw9PtCclSkk?}zHPjNs8%so)M9?xy`2GVst&z;BSjovZ5Pk5CwzZAlo@f+bU- zF9yUlqM^I;JpM8P!1t?bIryV)?`^iB6e`$D%jtO#z*$*EOJ^$qzkx`&AAn=M!uDIE zk)Ka?h}JZSHpvQjAUQkL&qkNX=$HAYQ2!{!=hG`-0DSElg9(v6fW5SwMU^!K_ZbQ9 zGvYfwrraNZY(bGpWUnq>ic+ZHaFheEd(SRue6Q;YARb*h`$d&Cw5-1kfah)pGrx1m z>__8Tdk32vUGkBWNMsTy{zAxTd;owsb7o{Y*}HdFhQ93UCDfETrT$GBOs}4wGuugJ z***)#9w>zh=E<{Z_hg!okzCK{dnu zp^qdG8;Swoa4u&}?^ceS_?41rQ@9;_Ga&*1gQCq7tH6ub`e8Iaz}BGyoc{e3hPQ8s z#s}EYyN-b^lQ{bCEopc4W;cOIQ0iR~czUN->P4wes%9boi#*CrU@!r5t)LBSsFo76 zVU6{D+bJoUEcG-LBY1X((S|j89t3coo(F)p%EiNT9hBMZR9KLcGWrTOH@fsW0AMod z1iWBK_vmDE7;CW=p2x5jTe-13Bz1uLwF*ThJ*)m_Ps9*9G=lTc2=&`+l4ylR*rjd9 zL&hZRelD^Lc3nbsRAtH0(-A}!ybTZ>)^OKtq@}YJcil#6XeHpc3&JzSOmMCkffaQ) zAsPIqQ~G%CGE(d|v|D#Ff_~~{l(jO)u4AU^FYREztQWsDuP8_m@XX( zaX|v@X+rSQO&&6J2%R)YTNh(YG8P0j)I$d^!O)}uwM9`OGH!Hnaus$^xaz5fx`xZ} z?oNJ|bb7Lf^bd#Lz3=~h-~YY)-ghT>!x+ZA&Y*o`8bsQn$3I z0g|Sch;gl8b&J$j3skckV*q(@`_W3?f>LV>ZuQ3vt6pVJbM zGzXgOw)(5%a~#@_pt6%-H`3^tzY>9$9k?_BPaSz**-4O2_N~)X3aDE^qHpr2jvNaw zx#}|tw$%xwUYemHHj6xS>^=2X{UW*)M>kN$UL>s^5;2udOp5SGileP@2h*`tFG8 zb`9zlYn$GDNS={);L&ykkcmns2{S5JcL#>nfL~-Q8~0@JA3hu`(zE$o-!}|Hcfc5z z4QMH6(YRoEiPEIwDTPjnc5uZ-W`#)O!c^`PK;o+WMa%};=2!N{>WxJg^uiE$jm2KMppP-X` jBmpOd41#Xr{|#OPBlkX3%5fc^^7O^c_*#Vn4_}+c+`BtSp5L^JD@>D4%O7TufWqRapZ;ppuJ5h3q78h8*ar0T66T&^3^ zt^=9+aLvQca}F1hbGVS#UQsr#M-0deD2g7pM@3QeWSAdkemMhx#^c8%dE)1Op3D&3 z+d~>9#d>V{X>5NX7l4-Hi=^y`L>~=Xei|?hXrW+0lu2d)kSP>I$jQlCcZkDrY|T7% zrvWXoM$XGh6}BrCF{8~p&=NZXTLEXQm*0OA&)?w`MzoC;86F5!6f5SKoiB6^R0rBlvbT`GU6 z7v$WQpN7d4`4mTfal{s&sv1^{!sJwdg~b)-{mbln?0a^b5}BD>WO6D%G&eg7dU`eP z3{NxO(FcH|_eK2kcL^-)psqF(XRDXlS$MBWrLtTv`v8cBB?X*1i|+PNB&rqv=Zuam zVKgN2!HH+F=GEisQe~7@i$Y3@;P>Csn3-E-yrYltjy}$vkEFY)F_UJeLbEe=Z&>pc zg!_Q2OQoV}8>3@O?Aas6y;jkp_gW+T>@3lWgS{F_MoqTjkJ<-iD?ZaHUcPj*SZk>x z6n!_WyNv7wqS5r<(x`W|aIrfQ(Y4E`x9&2E76DLFEJVCsbAr*aCAsbovUS(-MnZxC ss4UlGe&Pr|-zxrKg!6y=kUVny3))JFBk3S@3IG5A07*qoM6N<$f}4HjsQ>@~ 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..01defc4af3291d1b93d1e66f9183be884799b89c GIT binary patch literal 1084 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 tIp$Mytmruasl^)-uwF2E70P 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..e536677d530b1cc5e8a6aac8dff548b6475d8679 GIT binary patch literal 935 zcmV;Y16cftP)?c1MNn3)FNWN|<9IwT`$_~JoI))a}K19$zM~IoU z79AV#Bd}l()qPHyn(m72ryHjsRd~_6y0H&7GNz6JpsA&##k`-5wf~LTUpNEy)=Opq zA0@}-1mM3_)ht=E27oQQ4)Xg?&#-r$O5WPC!bs$DLU=%|0bdmWbqyzs_{&m6-o0;} z*;_B=qzaSWa#C@4z<7X&q7qS5Hf-_=A0&isSOX<4ti>*@s~3yp4bcz{(U6gNSt$X} zO5<$#Z>Fl}m~Ia+)sIx+<$Ru>8Gk(B#*O=eECKexMuuJwq4g%-xoja&w3Jxo9b%Pt zpv0B_b!33}2xYg7=KB@2D3*L1Zucwz4%ZwK)5^!a&pgep67F(^PF>T;6IikZ8<$|yY0N;ZPTsS+TW$6e9Hk$kK1Io zrA%F&9gu=(lX8|Xz}J`H@-4*$@{$v9{wJHYjFf9R07uopiP#lJPJdL_wfH(mY8r2_ zlLAP@t^hFeF2~H@IpN^hPE&ts>(Rdeu$Cd!_-uBGay$lx33`;&)Q=F4A)9`HQ&Lvl zAGYo@OxS!bzGcT8l5_?VW7nB^m#ceLZVwT_A-+dTFd(?2OdXeF3nu3J?5a$QPj= z6^{FKrUt*_Q}uLR_Y3Pa$*n(O*8n{#odJJt>VDa1E17}7ZK!^riiTlQE|?_dCR*Ai<|Zf?Om|DV zV|^5ufv^?^GFVwe9pu)TTE5x32CNEXw^6kWVJ(b>^?m@ZDyv`&0Fbo)0JUMLRjD0D zl~o{k_7JoUZ;aY(EYSI7CkLei5ogDOk#TSP#WZTa2prbJ6dxAh{3zUBc#k4X{z`Fo zk4}CU0B0=J++9yo>x{ExQ0)2!l0C4p?(04nU}YU8K1^{x3Wn)|cqy!fMPNOO($#@I zyBz4=AE0`n*t5%`tw$;9-vgj@b<~;K`)_JL3=?}TBXuG9Z^J`-pM1eBGNr47wun~u z3H9m%s(Lkh`ZzMcVO2BW1aDO3Z3%n-4a&K}=BxSG06*V?z8=xmqrQ&YBAQtD$6K{o z_w@)L#|DT1yL%|{VP7+7&VUjhhTT2kA-RR01r?o0Z-B* z{rN&m)214Dl79SB91!Qob#zcVs0BtY_|X6wL0U;N@c%~t01$6CWo7>kr2qf`07*qo IM6N<$f>V06G5`Po literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm0.png b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm0.png index ae4282b5fa9b8cefd3ddb097939cbf039a2eb847..fdc9376d67ff6b16e90840edde311ca4294504b2 100644 GIT binary patch literal 1812 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 O0000s&Y+P5PNZ(QNpC%g{?0&(eH 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 b{J8uFDSAv+fn=7%00000NkvXXu0mjf95533 diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm2.png b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarm2.png index d557b63d627704ed91ce775aabfd8552829fefd2..9d8640f85b0fb94c17194147eec35a363bd80fae 100644 GIT binary patch literal 4623 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 literal 2188 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 delta 1133 zcmV-z1d{uu2Z9NZB!2;OQb$4nuFf3k000C$Nklodi3G2F_l< zMMsB_T zPK9%b@3>swyS#UK$sO@N5MFY3egE$F`@P?v0y#N3IsY*l>wn_j-X2b!w|v!u{ruWy zjyFw~mzRfr&+#7o(o;Y9Y4u%>4R-@5k8WQY`n|FB0qqu%9>}Vi(tk4zj)^=}Gz=6C zBlvAqP3cckY`f;GXn8Poa_#YZpHBMjm2)sl6#xKn9lUt=EwKc&TLdfCp|BmW?V7I_ zba;IaUt( zCMpBj>7d>y3#q{R>L=yLaJ^C1gpa}2tNW_Q$Nce|LVwS#uYU4Bdry^*zrMQWBl6N? zkHMm0;Cr___P|N|p~hDQVH*}^q#qDI{-%ju(5KR$&?zv>a3#R&drIHF*Y_}=;H9ck zK_0Oxz|)&)p@PU65hARQ}Mp?7%ns1gWAg+UP zTk49+pno!e;<@i!BS>Axg@v=w3;I}XxIYoh8%qesBH<5fLD9vr?pak6Ea#4!5CJ9= zjEJz?o|{-O_VnRpaYv}x+}3Qn=BsFBCc9!CYCixU7(T!0_oS+^VjXHx|1wqr(&Wd9 zK}t?#Lgw_JwsAZhOuL*a?L&G6|2Yz}$dS=Pf^69=EE)_oFof zukQgE~z{9#ayO%Mjh zL4P+jTr`QMx@j7X21_)g1_rSO%e@x10nreYmuNIg6p zrD+us&}?pNUf)CKBauqeQwbSGVin*)Tz?0hk7Obept4p-5#9h%708MN5Z4hZtSAqL z(y#$hc>mPFVrFdsRoPLhJCim*CTl#CHbBM~m`NKTgK`zff&`?h0$H#DGAa{XX14NlA8vqPKP1z_cZ3&Pe)&|7I(Pq3* zleiAx4!);l116>d;f}v|yTK>?W}3}y?Rn*-lEu^hyuOFmZ{KhwAo?<7R6wXQl!dHt zlAK@|niGsxhEh*sCn>{?lNC<87MYWilP&%Nj#@MHyF>YA0xjeeQ_k*$Be|6-&?kXpd0p0nDGceJp26j7AdfZFOBGV}JL3vV!Wy=F2T#v5bEIn$143Wp?h_Vb@6%^VShM5ScGTma~ENB9*ZxYn2LUo3LtbMeL9`8pI+tR3J2NomMsbUr2}>i8Oj!5 zxy6B)wO@N)Q^XM6fMW&ULOfpQ2=IJ7 zV|QNG2=a6QSsKpQ73(e#k|qoUC=@sFa-}`j0Jk87_@j+Y>uIro$jB1&005Qj5BlLI zf`6+3UJ)3vF{Ge4UuTU#+OnR$uq}b({cQf6G15V67eE?ZOhfS>(oJCah1VW2QOaq1 zzi0`dn}!Mtq{xsi(;*NGhyutJ>Y!}_#q4~cn;~v@7i5@|piU*Mx}xH|C|QRL<%>)~ z!uJDo&=SC2amVz2Fbw#9fDYPIz-a}=gnut->7XTmbHy#RD20i5{s(+XO9w3hoFni2 zLt%jvCN4pW&X7vZP|FwaN=S;Iir{A9!fWQ{N?xwpkYH7-%eLh~#jDxH!M)O0f^L5ev>0E#(A02qon Z{{av%otu?i>2&}A002ovPDHLkV1iQ{>@olV delta 1764 zcmV`3gKRhhO)uWYzpCdF>hf6)s7u$(9X z5I2T1*T=c>g4&WLbNJ)7mMxeL&7shqi|Dy{|7Rb4t%%U}ribj~NH+lBkv9iJ0W-Ec z7c{q9ee>_vZDt|*(-Yc&byh2;Lvx%Fv``d2cYFa0MG3qD`OP0EbEZRcSZB2=Vq6Tm z+yUw<7k>cY8^>k<;O^D*)8!7?cPwiJ`HVKVwcthZD>S#Y2n0h~{`^zA9bu3K-=xp@=Uz8lLE-0!;e27PVIlnB76W`KY30}pA=*T5Q#)q7)TxH*d3yYtcZq7=js*D}I32D(Po}^O~5S2!~;*UNpkd zNPh&;NL-My&?@dZ!sHBZ+-6@i!V`DKAqUxLFja0y$#d;Z4^!rb?~i^bpg~pxI(jNh zZnuY}%N<~XBS^L-M^QD<5>=po06O1UqjX-wFg0b$l9e>KU000aOTr#=c9#)T54Y4)Om}v@N0Z6(t zty`nU88dZ@`Vwk@k(l}r*T}d0uf6bY(rF|<_ z0O`sgFB=Q|-;oi3(F7O`!z(rEcDah&V7iDB6JrEE_$`nTfYAgP4Mhi`8-Z*VSbr>- z$U$ksBUvn$tRZ2qk}{m6019kQmR}xsx`gATW2+5FD_4op3bH1@ zW+2Y=y6SxI>5azNUcei zI|MWks11}9+W>wDYB^DY$Cs%tqx zKl0{auy>7s22#NS;#s8gOdU@5@5gzjF5&u$1;CdqKRz$C=i;jO9)<#D0P#%n@B>D5 z7Dx^Q1D8yZXavI#7%;&R0KibdjH}*z3Fk@G4WyvS3y6yz7rYy=-MIiDu73ffG_9uw zRBod=4cP8nzy}(dF+2037t~OuGgg^z8%?FUJ*IHwxw)%OAw4`fE5&U&N{UYYEra zd=Q!pKjUg~M%e&TC!7pFTYoZ7?7`%qNdN`4CCIBU;)*JX1 zpIQ-K;K=&JnC+iR%{d^^hmPbNV6+BEodeV$p#VrQak_uMpfn9Eo__-X7#a&modZ&0 z1NbPYEkTT4g)VVlw)*Bl|M3dNFkN#rOxzg<-se8Z*C0xu$_DTkod}1yi>M|c_y@sqUgA6iQG58OJgdmC~o%Wjm0000@0VR1w|D_~Ez-$>wQKBt=^87Vif6t^oypA9k0_8Pb4CDeoS9=CE zP2+}J*UvVP?En~%l8_|Y;%6_O6Rnmg2dJv(FpvUNRfHLC-+#G6JqOSdj5>fQ2YmhV zcHkV)*-}PQ82|&Ivf${!lax8&{>^&~it5S?6Q?XDDQkhUY-orlSU*J$pa;O~fVDd} zFgp3Ul3f>Ee)PDJA_suLzD>IsgxOdaLUWRcwiu)bgoyzJ9RTx1jD$%2l3B}9e5ETV zTaT_jCM}XEpHLI+07?M9N{DC&AQ@6$QJ)8<@u>%8KVmE<+5s>Ctd@xmR#E`b4j{!> pG;si}z^DU89Wd&EQ3njT0{}Z;U&~l8a{mAT002ovPDHLkV1h2oi5>s| delta 395 zcmV;60d)TI0;L0xB!2;OQb$4nuFf3k0004BNkl7)#_#k_1a@9@Cxd^Nm=(?@#z_+0U=Q+Cu+S0RXVtY5@QS!=W-*6@&u%#AaUSdrUJr5^WS)cw_t1ioVB+%w3eF0DbnkE+&&+buRxVj&x%w)e08Wj*~0uz z!8fN`kRQIfsDI*2J%qYM$WT_`H;@X*@4PN#@sus#@BdFAeGQKf9<{%QLFg7W)U{F6vjCuU p3jiRBdRD%;u2tnR7!3cLFZtHVY85}-HUIzs07*qoL%1uwoHr17A}gG4+DUOj0Kf-kfIV=48m zpkf8_rsuf-#aXt=?#%2=CYjC5?~+ZjGrRNOXJ($4-A0b%1%DvN5eiT)mm8{`mrA7q zSq@i#^JnK81ARNf<6Zqbr91t;`73IFsmtK?YaDN5ZSpPzUBm1a&_i^-F{p+{rcx=z^)V9Z`r^5ESz>iREE8~AiO@YCY zy`d1GzW5;Y39#2=kV$N;er$|~t1B|tZ$In4R^yq}$&k!~9oEe-2ELCpCqkthRJ5=;T%dDaVH8ZQ7jju(J( z02VY;DSx?K2mnmw8Lb!KVfDUp+e)P>^kJ+P;NG2^g~0JqF3h04=p3sB07oW@Mhh#} z3t$>A06C5qfE>pQK#t=DAje4*K&2Yf&AefA_LxVrd)y*Gmd<1f4<=v_2x)ItFab!O z#_I;nAh1Gg5qGb*2=HpT77kw239HBi7oSJw6@Nl>>s_FD<`)7a#`L>GST16;hH&6+o1MiCi~(sU=$xep})uc%UQz>h5FXqv703 zdv#GMFDP4p4GW;GORf|PhzgQ6#seVh)Z|(~T4%CBh$#?tBKkxWirt94ONe{ny%vL7 zAvYg@I2ri>Q6~(U+FK`(%}XSO>n#>w%b-NGEBBCVSGXN`0myN@0OUB%3-Axz4M7MW SHG4t;00002B!2;OQb$4nuFf3k000GUNklE}?j< zAOvbU5b&^fVfHY-lQ(bPcjlcqW(4O0!;^VuCiBkoKJTyRd4GVAkdTm&kUL96RCsuJ z2msiv4Vhc(Gnil60WY)ZOX0J(olGXvb^eX)#@*VG`Qu9+`gjT=xmz1D`TN}tua(W^ z=1f1O2w^KO|MHKyx~${u0(kNC5#GH2*dxb=foFQje&#Qd$JqsN+5!@>UO6@l6pBRI za&oyjQ;TXa+J6T8lGW;VMA-rWtMW$M5K4+ZJK6P2?SKenKTJNLd^A$eQJ z{u3QjNuc?q37}U3R;vR5maP|z4FjuJzj?WTV*PJ6J)x|CR_iN_w&9DEAvDKtlfRj- zUgwo7s>;Sf32UVZ*DkP<|JU<)p~6~eqNfW8Er4ZlI)4r=s@dm8+rZ{t(>~u=D1j<# zW1%x9yn3Ct&-+m(-?jW;C0{qeHM*+;oS+|1CHtEqDpMi-#OgYUSnoA<4DtebTkk1z z90XNhTU~bjI^F5gW&&nwxOQ z@Oyz@rlRw}t5Go+(3It84fS@Z75-@>IgPBZb;8Sim4RVAE2)Y76qvRE)aXmLD zNq;{MkDzf?z;12Gw4*x?Tg%!3!Aibvem07BnU@`)Dk?z}y6;!nFezEU*@Y#klLF|C z3D_?mPazh&hx!pgE;ncTp#(O%dtY0IK0E2S&!?WGLXntmN>CaDPFp~^(s63YJ{|x_ z#Mm8+PUVt1x!BF(Q19g ze@5pT8?$8D+-uryGs|)>rT?$g1rjmKoG5G{f)7gQ<0(5X@06LL3U#T~kI0p0*?*nI zX)B!e^G`W!t6X5NHJ&&5G6v;&6^623YcHo zu~&d>W|nLT3Jlf)0P%vXTp_MeVM<>X;KZO;f}#Z(Z8Vki9>-Z=erX54{(oM@oA)1G zQ&lKI%mV!Ha)l`8682>QvLz@G+&Td0DB;E}U~{k8b#!Hq2eb}g@y!CV>B~sDLd?}= z9b?1tL?af`I0hP>%BxjFj>;^+uLHbTfa^l&DqTg%D-8JW2&J>YAAi0B0O2}-{rLS8 wZ`oymyRrKTjk$S-oxH+)Xd5gfB;;=MKP&>x?shLIkN^Mx07*qoM6N<$f?-FZWdHyG diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarmx.png b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/alarmx.png index 2248c85765230a71df6e51bb58da05317f69f441..61ecb87ff480d20aff2e5504fea61afcf3e00a57 100644 GIT binary patch delta 1116 zcmV-i1f%=+3GoP!B!3BTNLh0L01m_e01m_fl`9S#000CdNklkE{8%7tXhhX)!+e2Uvl`mp9%7_TML1q#} zVvAi6D-tR+kRA-}v1z`+vz?utIp@ro8E2N69}K(fo^y83|9^bv@_pYaf{+sl03nAf zKzDbyD%*G}l~N$!FarD=+iEmkT?(JSe1JkA+65rwL;{Eunw$Lv zeuKM-XjwbE4u4mG>pkZ{mfN=;f?M?VT}z9Wt*=dVik4*xFfslW-ekt$&fQ1));3WG zuzEPR%vM!_Aw`9f@?9`9{aF7Dx6GF2-FkhekdYsLn}K(kk1#m!qKkajuzg#eC>s;& zvUNl(L23=a4wAk8*fIr17cYh4EjvLScnQB}{yw5b%8sVStS>-D-+0i$ zPRHh7Y2JVP-USY!M;S*~d$?19)S<1#3a$k_fA9=SmlQ$EkprgR4{Fa*{hfC3nJ`D;1_(Gqx8;ORNQD<_Dag1zdT)@c=#S5KwZAFcpYC(@_W9r`P) zJi5YecD!zLLVsAaXWupFe2%*Y4`B4J>AF2VeSh5DE6@U5y?jAwYfDNeX0Sf5OrQlo z>T468CRPG3fY(FgS?;3>ustw6^LeGB?{og={Ok&NDXUL%;NLoiE2@^yaQ1;V5W0R=FN8?any z=6@Ps6@;LFG+wh7777#@v&3Wo5RvQ;ok%faDF7=1LpO#gD3Y(!Mj)+OPnXx0K;r$x z{4rxBi}WtAyrejri6MW8m%wlfvi1<+jVXIONC|+6NX*4yIw}aTOq_?50GNgSpNLF> z-#CdEN(q1|>DHM=(5w1$3)bvrh%8b9V1GV-2xbAa{%-<*(Fa3`=~-eKTsaDpMM*nk zxHdAP;9%hW08Ej$gMFk0aI)~YiPHsHT7b!bT!_wHkek6SQUZ{J2ibq!T$Dth&;N*% zn`u%47!MxCKjam7!o*9Ev@;}p4iQ!W0000d3pJnVp&4l~%<2ftdB~YBc-rn}0Vm?~Q?!l$4Z|luL^x zI(c|_2mm-}W!$};RouS+1bn$tJ{Nv>(pgwo@ck_n;Ot7-U7CsShkyGUc<0}iv1pab zn%ijXTTx3^pOyf%Z~t`5izU;xDrq%sBg?5&)?AV$pbkaUl8L|z@P?`p>&w&l`t$b( zpY`Qw-}Q%g>VLjt_VNB5hL;cSx&SbLqXd#AkxFlUJVF8NACI&e`S4C18@tuPLvHL= zeI+|)*LCX!fOo(A!2*C@?**tsBbDCzcrw~8lAwCSOe9k_t0!)O)bNS|1#&ZTxmi7N zx9W34B19Iz`-Z)x*BVSk*sPwoPw95lrU~k;x#0YsQh$Ko|2iEy_pH}1d6VZKQg&XK z(rhu*_e9v8w(z`EfL7D)m$5a$43Z^dsZT0E^YJ}Q<@2#M;CZ);t8ad$egEREN3s1j z02Cm0!cqaKLt_vq4epz)_wdN=jS8rm|Yju8@L=E#bQKX|%%P2d#_?s1qBbTJw(*r4u~6QkJgcTTL6y$M--T3IHgO8n)_l*2@QX zU0Eh34mPVNfw2X)?iVeXcqgc|fTfxKQW6-B!2!TjK98wr=LV3h4-g%z z2($q2Btm!7Qj()Um|dyb7NAR#Gr^7Bs&QA)wg6ow!3V_V1ow7U@lEX%fPAXSlk_OS z&=o=30{E$>Y^$2xX#<`9@whEOv|L+EMW7E@DW6*`946y=x9jVhjmEz9UGc409-h@l z9g3fR`B^y%gxQy@l^L3ZsBoB=ATa!2Dq1^4#z~koT%1wil$4aq&3}_};KRK)`KSN@ N002ovPDHLkV1hQ{UCRIf diff --git a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json index 6cbb17a9813..13fcf9db1ef 100644 --- a/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/air_monitors.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/tgstation/tgstation, fire_emagged.png edited by github:Morb0", + "copyright": "Taken from TauCetiClassic at commit https://github.com/TauCetiStation/TauCetiClassic/commit/b7ac5798ae0d411b0cdeaf7efbc4ac86d24b4634, fire_emagged.png edited by github:Morb0", "size": { "x": 32, "y": 32 @@ -9,22 +9,116 @@ "states": [ { "name": "alarm0", - "directions": 4 + "directions": 4, + "delays": [ + [ + 2.8, + 2.8 + ], + [ + 2.8, + 2.8 + ], + [ + 2.8, + 2.8 + ], + [ + 2.8, + 2.8 + ] + ] }, { "name": "alarm1", "directions": 4, "delays": [ [ + 0.6, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.6, + 0.6, 0.6 ], [ + 0.6, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.6, + 0.6, 0.6 ], [ + 0.6, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.6, + 0.6, 0.6 ], [ + 0.6, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.6, + 0.6, 0.6 ] ] @@ -34,16 +128,68 @@ "directions": 4, "delays": [ [ - 0.6 + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4 ], [ - 0.6 + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4 ], [ - 0.6 + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4 ], [ - 0.6 + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4, + 0.4 ] ] },