From a78e9a854ebb744ca82fcdbca4968f0197d05a84 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Sun, 7 Jan 2024 08:55:22 -0500 Subject: [PATCH] Hellfire Thermomachines (#23543) * hellfire thermomachines * slight nerf? idk * ilya review * Improve clarity * Update Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs Co-authored-by: Kevin Zheng --------- Co-authored-by: Kevin Zheng --- .../Atmos/UI/GasThermomachineWindow.xaml.cs | 2 +- .../Components/GasThermoMachineComponent.cs | 86 ++++-------------- .../EntitySystems/GasThermoMachineSystem.cs | 54 +++-------- .../Circuitboards/Machine/production.yml | 40 ++++++++ .../Entities/Structures/Machines/lathe.yml | 1 + .../Structures/Piping/Atmospherics/unary.yml | 30 ++++++ .../Graphs/utilities/thermomachine-board.yml | 14 +++ .../Prototypes/Recipes/Lathes/electronics.yml | 9 ++ Resources/Prototypes/Research/industrial.yml | 5 +- .../hellfirethermomachine.rsi/freezerOff.png | Bin 0 -> 1421 bytes .../hellfirethermomachine.rsi/freezerOn.png | Bin 0 -> 2449 bytes .../freezerPanelOpen.png | Bin 0 -> 249 bytes .../hellfirethermomachine.rsi/heaterOff.png | Bin 0 -> 1400 bytes .../hellfirethermomachine.rsi/heaterOn.png | Bin 0 -> 2520 bytes .../heaterPanelOpen.png | Bin 0 -> 228 bytes .../hellfirethermomachine.rsi/meta.json | 38 ++++++++ .../hellfirethermomachine.rsi/pipe.png | Bin 0 -> 321 bytes 17 files changed, 168 insertions(+), 111 deletions(-) create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerOff.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerOn.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerPanelOpen.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/heaterOff.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/heaterOn.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/heaterPanelOpen.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/meta.json create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/pipe.png diff --git a/Content.Client/Atmos/UI/GasThermomachineWindow.xaml.cs b/Content.Client/Atmos/UI/GasThermomachineWindow.xaml.cs index 12e0617a55..bc8cb14336 100644 --- a/Content.Client/Atmos/UI/GasThermomachineWindow.xaml.cs +++ b/Content.Client/Atmos/UI/GasThermomachineWindow.xaml.cs @@ -17,7 +17,7 @@ public sealed partial class GasThermomachineWindow : DefaultWindow RobustXamlLoader.Load(this); SpinboxHBox.AddChild( - TemperatureSpinbox = new FloatSpinBox(.1f, 2) { MaxWidth = 150, HorizontalExpand = true } + TemperatureSpinbox = new FloatSpinBox(.1f, 2) { MinWidth = 150, HorizontalExpand = true } ); } diff --git a/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs b/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs index e8d0f0f30f..93d973d123 100644 --- a/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs +++ b/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs @@ -1,7 +1,4 @@ using Content.Shared.Atmos; -using Content.Shared.Atmos.Piping.Unary.Components; -using Content.Shared.Construction.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Atmos.Piping.Unary.Components { @@ -15,24 +12,16 @@ namespace Content.Server.Atmos.Piping.Unary.Components /// Current electrical power consumption, in watts. Increasing power increases the ability of the /// thermomachine to heat or cool air. /// - [ViewVariables(VVAccess.ReadWrite)] - public float HeatCapacity = 10000; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float HeatCapacity = 5000; - /// - /// Base heat capacity of the device. Actual heat capacity is calculated by taking this number and doubling - /// it for every matter bin quality tier above one. - /// - [DataField("baseHeatCapacity")] - public float BaseHeatCapacity = 5000; - - [DataField("targetTemperature")] - [ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public float TargetTemperature = Atmospherics.T20C; /// /// Tolerance for temperature setpoint hysteresis. /// - [ViewVariables(VVAccess.ReadOnly)] + [DataField, ViewVariables(VVAccess.ReadOnly)] public float TemperatureTolerance = 2f; /// @@ -40,7 +29,7 @@ namespace Content.Server.Atmos.Piping.Unary.Components /// If true, add Sign(Cp)*TemperatureTolerance to the temperature setpoint. /// [ViewVariables(VVAccess.ReadOnly)] - public bool HysteresisState = false; + public bool HysteresisState; /// /// Coefficient of performance. Output power / input power. @@ -51,68 +40,29 @@ namespace Content.Server.Atmos.Piping.Unary.Components public float Cp = 0.9f; // output power / input power, positive is heat /// - /// Current minimum temperature, calculated from and . + /// Current minimum temperature /// Ignored if heater. /// - [ViewVariables(VVAccess.ReadWrite)] - public float MinTemperature; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MinTemperature = 73.15f; /// - /// Current maximum temperature, calculated from and . + /// Current maximum temperature /// Ignored if freezer. /// - [ViewVariables(VVAccess.ReadWrite)] - public float MaxTemperature; - - /// - /// Minimum temperature the device can reach with a 0 total capacitor quality. Usually the quality will be at - /// least 1. - /// - [DataField("baseMinTemperature")] - [ViewVariables(VVAccess.ReadWrite)] - public float BaseMinTemperature = 96.625f; // Selected so that tier-1 parts can reach 73.15k - - /// - /// Maximum temperature the device can reach with a 0 total capacitor quality. Usually the quality will be at - /// least 1. - /// - [DataField("baseMaxTemperature")] - [ViewVariables(VVAccess.ReadWrite)] - public float BaseMaxTemperature = Atmospherics.T20C; - - /// - /// Decrease in minimum temperature, per unit machine part quality. - /// - [DataField("minTemperatureDelta")] - [ViewVariables(VVAccess.ReadWrite)] - public float MinTemperatureDelta = 23.475f; // selected so that tier-4 parts can reach TCMB - - /// - /// Change in maximum temperature, per unit machine part quality. - /// - [DataField("maxTemperatureDelta")] - [ViewVariables(VVAccess.ReadWrite)] - public float MaxTemperatureDelta = 300; - - /// - /// The machine part that affects the heat capacity. - /// - [DataField("machinePartHeatCapacity", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string MachinePartHeatCapacity = "MatterBin"; - - /// - /// The machine part that affects the temperature range. - /// - [DataField("machinePartTemperature", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string MachinePartTemperature = "Capacitor"; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MaxTemperature = 593.15f; /// /// Last amount of energy added/removed from the attached pipe network /// - [DataField("lastEnergyDelta")] - [ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public float LastEnergyDelta; + + /// + /// An percentage of the energy change that is leaked into the surrounding environment rather than the inlet pipe. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float EnergyLeakPercentage; } } diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs index 46e3b3c172..eec610ffa6 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Monitor.Systems; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.Construction; using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; @@ -15,6 +14,7 @@ using Content.Shared.Atmos.Piping.Unary.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; using Content.Server.Power.EntitySystems; +using Content.Server.UserInterface; using Content.Shared.Examine; namespace Content.Server.Atmos.Piping.Unary.EntitySystems @@ -28,17 +28,15 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; - public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnThermoMachineUpdated); - SubscribeLocalEvent(OnGasThermoRefreshParts); - SubscribeLocalEvent(OnGasThermoUpgradeExamine); SubscribeLocalEvent(OnExamined); // UI events + SubscribeLocalEvent(OnBeforeOpened); SubscribeLocalEvent(OnToggleMessage); SubscribeLocalEvent(OnChangeTemperature); @@ -46,6 +44,11 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems SubscribeLocalEvent(OnPacketRecv); } + private void OnBeforeOpened(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + DirtyUI(ent, ent.Comp); + } + private void OnThermoMachineUpdated(EntityUid uid, GasThermoMachineComponent thermoMachine, ref AtmosDeviceUpdateEvent args) { if (!(_power.IsPowered(uid) && TryComp(uid, out var receiver)) @@ -90,7 +93,13 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems thermoMachine.HysteresisState = false; // turn off } float dQActual = dQ * scale; - _atmosphereSystem.AddHeat(inlet.Air, dQActual); + float dQLeak = dQActual * thermoMachine.EnergyLeakPercentage; + float dQPipe = dQActual - dQLeak; + _atmosphereSystem.AddHeat(inlet.Air, dQPipe); + + if (_atmosphereSystem.GetContainingMixture(uid) is { } containingMixture) + _atmosphereSystem.AddHeat(containingMixture, dQLeak); + receiver.Load = thermoMachine.HeatCapacity;// * scale; // we're not ready for dynamic load yet, see note above } @@ -99,41 +108,6 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems return comp.Cp >= 0; } - private void OnGasThermoRefreshParts(EntityUid uid, GasThermoMachineComponent thermoMachine, RefreshPartsEvent args) - { - var heatCapacityPartRating = args.PartRatings[thermoMachine.MachinePartHeatCapacity]; - thermoMachine.HeatCapacity = thermoMachine.BaseHeatCapacity * MathF.Pow(heatCapacityPartRating, 2); - - var temperatureRangePartRating = args.PartRatings[thermoMachine.MachinePartTemperature]; - if (IsHeater(thermoMachine)) - { - // 593.15K with stock parts. - thermoMachine.MaxTemperature = thermoMachine.BaseMaxTemperature + thermoMachine.MaxTemperatureDelta * temperatureRangePartRating; - thermoMachine.MinTemperature = Atmospherics.T20C; - } - else { - // 73.15K with stock parts. - thermoMachine.MinTemperature = MathF.Max( - thermoMachine.BaseMinTemperature - thermoMachine.MinTemperatureDelta * temperatureRangePartRating, Atmospherics.TCMB); - thermoMachine.MaxTemperature = Atmospherics.T20C; - } - - DirtyUI(uid, thermoMachine); - } - - private void OnGasThermoUpgradeExamine(EntityUid uid, GasThermoMachineComponent thermoMachine, UpgradeExamineEvent args) - { - if (IsHeater(thermoMachine)) - { - args.AddPercentageUpgrade("gas-thermo-component-upgrade-heating", thermoMachine.MaxTemperature / (thermoMachine.BaseMaxTemperature + thermoMachine.MaxTemperatureDelta)); - } - else - { - args.AddPercentageUpgrade("gas-thermo-component-upgrade-cooling", thermoMachine.MinTemperature / (thermoMachine.BaseMinTemperature - thermoMachine.MinTemperatureDelta)); - } - args.AddPercentageUpgrade("gas-thermo-component-upgrade-heat-capacity", thermoMachine.HeatCapacity / thermoMachine.BaseHeatCapacity); - } - private void OnToggleMessage(EntityUid uid, GasThermoMachineComponent thermoMachine, GasThermomachineToggleMessage args) { _power.TogglePower(uid); diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index d683195f2f..a16a69ee21 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -394,6 +394,46 @@ deconstructionTarget: null node: heater +- type: entity + parent: BaseMachineCircuitboard + id: HellfireFreezerMachineCircuitBoard + name: hellfire freezer machine board + description: Looks like you could use a screwdriver to change the board type. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: GasThermoMachineHellfireFreezer + requirements: + MatterBin: 2 + Capacitor: 2 + materialRequirements: + Plasma: 1 + - type: Construction + deconstructionTarget: null + graph: ThermomachineBoard + node: hellfirefreezer + +- type: entity + parent: BaseMachineCircuitboard + id: HellfireHeaterMachineCircuitBoard + name: hellfire heater machine board + description: Looks like you could use a screwdriver to change the board type. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: GasThermoMachineHellfireHeater + requirements: + MatterBin: 2 + Capacitor: 2 + materialRequirements: + Plasma: 1 + - type: Construction + graph: ThermomachineBoard + deconstructionTarget: null + node: hellfireheater + - type: entity id: CondenserMachineCircuitBoard parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 07d5f3f854..80ed1f1136 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -366,6 +366,7 @@ - FloorBlueCircuit dynamicRecipes: - ThermomachineFreezerMachineCircuitBoard + - HellfireFreezerMachineCircuitBoard - PortableScrubberMachineCircuitBoard - CloningPodMachineCircuitboard - MedicalScannerMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 12514f03fe..45030bd28b 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -356,6 +356,36 @@ - type: ApcPowerReceiver powerDisabled: false +- type: entity + parent: GasThermoMachineFreezer + id: GasThermoMachineHellfireFreezer + name: hellfire freezer + description: An advanced machine that cools gas in connected pipes. Has the side effect of chilling the surrounding area. Cold as Hell! + components: + - type: Sprite + sprite: Structures/Piping/Atmospherics/hellfirethermomachine.rsi + - type: GasThermoMachine + minTemperature: 23.15 + heatCapacity: 40000 + energyLeakPercentage: 0.15 + - type: Machine + board: HellfireFreezerMachineCircuitBoard + +- type: entity + parent: GasThermoMachineHeater + id: GasThermoMachineHellfireHeater + name: hellfire heater + description: An advanced machine that heats gas in connected pipes. Has the side effect of leaking heat into the surrounding area. Hot as Hell! + components: + - type: Sprite + sprite: Structures/Piping/Atmospherics/hellfirethermomachine.rsi + - type: GasThermoMachine + maxTemperature: 1193.15 + heatCapacity: 40000 + energyLeakPercentage: 0.15 + - type: Machine + board: HellfireHeaterMachineCircuitBoard + - type: entity parent: [ BaseMachinePowered, ConstructibleMachine ] id: BaseGasCondenser diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/thermomachine-board.yml b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/thermomachine-board.yml index 8818e5d1ba..e9c7a3c9a3 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/thermomachine-board.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/thermomachine-board.yml @@ -16,3 +16,17 @@ steps: - tool: Screwing doAfter: 2 + - node: hellfirefreezer + entity: HellfireFreezerMachineCircuitBoard + edges: + - to: hellfireheater + steps: + - tool: Screwing + doAfter: 2 + - node: hellfireheater + entity: HellfireHeaterMachineCircuitBoard + edges: + - to: hellfirefreezer + steps: + - tool: Screwing + doAfter: 2 diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 3b5c04f4fe..55337702b5 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -104,6 +104,15 @@ Glass: 900 Gold: 50 +- type: latheRecipe + id: HellfireFreezerMachineCircuitBoard + result: HellfireFreezerMachineCircuitBoard + completetime: 4 + materials: + Steel: 150 + Glass: 900 + Gold: 50 + - type: latheRecipe id: CondenserMachineCircuitBoard result: CondenserMachineCircuitBoard diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index d991645be0..f47d5a6398 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -157,10 +157,11 @@ state: icon discipline: Industrial tier: 2 - cost: 5000 + cost: 7500 recipeUnlocks: - - HolofanProjector + - HellfireFreezerMachineCircuitBoard - PortableScrubberMachineCircuitBoard + - HolofanProjector - type: technology id: AdvancedToolsTechnology diff --git a/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerOff.png b/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerOff.png new file mode 100644 index 0000000000000000000000000000000000000000..03271358f3b05b8bc8c9d1f47fd6dca224fec8c6 GIT binary patch literal 1421 zcmV;81#Px)M@d9MR9J=Wms@BYRT#&AbI$C}WUtvMbn@qCQ!C zP@|wliv>{x!51%4P!y&3DEgv43!(*mP~WW0g%;Z8R-4W4CfUvI&gJ;9yVFcIN!thM ziysWkobUFZ|Mx$$XW@VQ-)^vJ>lgO#zghiP&CZe9LG_U zlM_A=9)Ln&uj=pbr_pGjXMjc>p>V2 zQSSNn>(=^UVbjJP?qZQxD|VByc>t7B*tXqD)-;4+5RCT%iblEYB}gf`^v|UY3$7hm z#~+XPdcLbNVB0pDrnL&0CL)~%rO;|MFS$}F^WC3+@VjYpJiC*8eqd7;lv0#RizE`s zO@+N7fN(g1W|%Y<+hWsoddwaGqLC=i9eNmm!WO$lQwr6N-)dKR05na*bzP5v2ii05 zyh*ivFLj-!ZFkYR=^F+DD5X4qCoiANtMeDmYd!`#PAMgpW%&vP4a1AsOwmG!E+9e( zPuu{G<1jljgJGIXJZ-2o3<$45hl!1>C02)Ob(!Mj1pqSJ`Ur<3J_gsucWMR#K^(_H zmy$-k4jB*t#bS|UGQsrpMGV6r7z`q%?z@DLSe8w**<^lxj@g+R(tR1yeHmt^r&(TJ z!f{#vgpgjIt_KJP4GhEJ%$d{VayeYf!nG{8yhZ~;NR(1cPEJ6ZUey*7uEJ5S$CA}- z(4WmRH#>`An(XNBXJ&eu-b4b+vT$AZ%7{9(Tm?!Ygrp}LWp#O(+kP-^@&JTFA#B?w z91f#g7dkX5g{u^f;~=G^T5ZWO7K(7XR03cin`5RO8wdp2Bh{`nZ$FnxB|@PP02k+G zwZXx{HlGMJO(PnOQm?Hdbm^PDZ952|(Wuuk41|^h3383`SR|p}P z82RA(04%=nB|ulh^!6}Q?X`tR-eS)WuX?`m5r6FX$QY?lj#3;wi6(TUluRD}@ah1B z&`5szEK`rYPo_WSp`SQB#==~c^!5--hmHeKdHyr6Stc9f{G;yzP#it!)w?{sL?#D~+dy~9#A%#Mr6buh0c_p>VH;zNCR@)eW>$aSy?uxUr zQekCfg*WpFj-|pxB0A-AnYRnQ+`3yMpJ^Rj9xS9eaZ>|;c>^vgxc&At0IzMUW11%Q zdYxmb)(5HCY~s4k#sC0vxf}-$+|qLB0d!q@ThX#C9LK?N9LB~z#xz4blS(o_-^yKH zUSf3g1y)yAfh&8za}sJa8su`ht`T@YTZO{jYd&k&>vg1*NGS;hg8)b&Xtc+1HCzAR b;D*}2cwR^VpGPcM00000NkvXXu0mjfW(=W< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerOn.png b/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerOn.png new file mode 100644 index 0000000000000000000000000000000000000000..17e68ca2db22272f8244c0c571dc023ee38594b4 GIT binary patch literal 2449 zcmaJ@XH=8v68<8KL0t?WtSBW?R1gK-ARr*US1AG_(u)X4Gc<``P|6|#iYOu*V5ut@ z1VOq4WHC|$Qi1^t2%(oi2#|y%o4xnXz2}~Df6P1Q%zK`Bp7%X-W+wHTjj7<_lZOES z5HvS4vgdg;&pZVV^3Kt?ICGwZMB1Ag096B$O8{`l(%eYjG3NKR-){y>j!LEAauF@H z-_zFUB#3wInL>>c`%$Q#YKd`4$%O`y7$swrLWPmcvZ3A0%l0Y;*pVD}gX`x?oJ6H> zUKgX(B$$boYS&$lRgjN5d~RAo2v7VF9j#mrt3|B7#jjX<-!~j!l)PBO^hOUbSHB@z zSlk4Y;-TBBC(})?JQ>s4+2AHlhHW@%G9HwFf3~{4q)ucge*sf(bK`KM`}j5#i;}Ls zZmT_hTy`(8>uATlsp;~C5E4M3&HeS)UNX!;i|bU#USSV`k-@IS!Zs63|SoNKbTJpB`lh2-JpDzB~L$Pxsz6iy!$C{ykU~poJD*NU|?Cu9g zrrQ%H<|Zd48Sx1gey5|J)}1f$^4!z8tCphlQ}2g6)gN8E{;cv=R)In_Y{G(ya5w>U z;A^{1m}H}M+YX6bY*I&S;Hh?L|8UX) zOUtxY#-Q^XVvwXJ<7*kLJ!&tl3j)|oAvem_#%(~emZ;$QOhJIWo8VcuztIch>-d7O ze*UBK-KmHhabML~p9#Pzx8pOKE*X4Fs%3%RuR1J^HKOj*KI#PwJJo_aP}|S-g4(no zV2g2}Kr2>OBOvaP@zO7Qog7n64)-KuEqV7^v6OtBj}{Bg>_nXTQ0xGz0wvjv=>ee{ zQ@%SHkZY`sZ=MSl{OD4c|1*&%qc6s{$@{CYBovB0bY86=0rR4*3X>+cOMzTLlgubI^e@@IRym7aOfbdIfOQOp}~7@E5Y*- z|1^UZDVoNYryT6c#wMnFxVcRyf$Zm?@2}b@YHeOV&70lNRzH{$HA(J?VjP3&Rc+d0 z`w6BKaYofaG9i(xJ6gaO@q+@w`!tE1RGH*#v%;q;_eL1(dC9j^_@#wR>67{teELgM ziq=M(k1CwJikr0sT^681FO8>=4O0apT+H@{Be#DZ)A^!E=m0*vC~u{?Bt(mZ-(@4! z2{aK8A1g#zJ59T+ysR2=;xoM72YQ=3z{>Ln5NF138}X-!Wm@>r#6?A3KpA36MY_Jn#31#Dw~jG-9ZpvHt$d zA8cJt;55kDJx(FFM6Xs*D5X_&ZWjCIAa~ra&`VtOFn>j5&?~3?_XEhQR>Or(Snmn7 z%LEE_Mg^#@ukTqz-gj|xD=aTh8Hw0|6_9iA01Xbp}Uo4BT6El<~BpZIGbe1+ha%FpU(!*wngr;f0J1Qcq*e=FolW zAr6LS+WTpA^tv07vhRcIigwFbi%JktfkeBL@ikM*?%2OPzV~e{4at&~j<{bXroDxd z54EBQfMxDf>oY}a4~B1lZc0QXH9IV310bKnZkiH&kjTq5G94m@YSN z`1<)J!83k|Ey|WFXmD|HneMK6po9F_v3QO8jeE=Ikz|Wz%-Nu^FY zo>PKKA^ri6d~$MfG~%|y$HvCcnN?RiLyJc4T<)PncrSdw-RCU&6xYyc%Q*l+SEb$3?F3h`fK@SkZ|5$44Ja=uVp;P0Aov+-!`bi~_C=P9zC zj-HaUJ*st?V@-p&g1E2Cv)6Y+^I`4t^d%W{oLnVE0#g})j5&Q1TOL&9K<;Ml zIUU7l3-1jth4e$mZMZgcTyZ>FsY#~|Ht1R)o#j~G zc8tEcMhcgCAlCF}JbH||{d8WFj(M9IN*TJp-uYC7b%1@Yhz1cg{qNL;GtOc>!PLsf t|4Da`r+1O}$|0Wk;{OHd72D-<`DS!LPOOWfJa5MW%#Ce~sti0I{tXOl`<(y) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerPanelOpen.png b/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/freezerPanelOpen.png new file mode 100644 index 0000000000000000000000000000000000000000..9955f7d2dd5e53b39a051a4c482c9b3cc1f94dd0 GIT binary patch literal 249 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 bX_ESWL;c0oZ^Rw}UCQ9;>gTe~DWM4ftt?t* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/meta.json b/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/meta.json new file mode 100644 index 0000000000..979d804fb4 --- /dev/null +++ b/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/meta.json @@ -0,0 +1,38 @@ +{ + "version":1, + "size":{"x":32,"y":32}, + "copyright":"Base sprites taken from tgstation, split to display on two layers (machinebody/panel) by Menshin, and recolored and edited by EmoGarbage404 (github)", + "license":"CC-BY-SA-3.0", + "states":[ + { + "name":"freezerOff", + "directions":1 + }, + { + "name":"freezerPanelOpen", + "directions":1 + }, + { + "name":"freezerOn", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] ] + }, + { + "name":"heaterOff", + "directions":1 + }, + { + "name":"heaterPanelOpen", + "directions":1 + }, + { + "name":"heaterOn", + "directions":1, + "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] ] + }, + { + "name":"pipe", + "directions":4 + } + ] +} diff --git a/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/pipe.png b/Resources/Textures/Structures/Piping/Atmospherics/hellfirethermomachine.rsi/pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..620ba905bea43a0cb2a7ae8d2c2647e6ff9ec5f9 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVC3+0aSW-L^Y*6Vx@HG~V;^7M z78f$J;A=S8=&0QAx`5H|i0B0ko%9C`5iCqvQfI0|FO=+h`G2{YcA8qe!J9ir91|tp zrAB(qdv4UXxFlBnv(5c;SAJD~EqMRn_r8jG>V-1ivz7_59DEt&$5vo)?8L5h)3YpO z5A1uN)Uz|>@JWVkxxy2Vix-#z9RvaUPOPk*bt2ime9rlIPwft_JlOwq$=0xGsT23T zpUeC3OWKJj?Z|1JTfa^Hyl3v@)rKHV2VAxOe+U$LTmODpX3)&1;fph4um68HYgyn7 z7tID0Pm^1AONAV6Z