From 0917a9d3806fba73f98fce1c8635bd196c688f66 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Wed, 13 Dec 2023 22:35:44 -0500 Subject: [PATCH] Gas Condensers (#22436) Co-authored-by: Kevin Zheng --- .../Unary/Components/GasCondenserComponent.cs | 33 +++++++ .../Unary/EntitySystems/GasCondenserSystem.cs | 73 +++++++++++++++ .../EntitySystems/SolutionContainerSystem.cs | 16 ++++ Resources/Locale/en-US/wires/wire-names.ftl | 1 + .../Circuitboards/Machine/production.yml | 15 +++ .../Entities/Structures/Machines/lathe.yml | 2 + .../Structures/Piping/Atmospherics/unary.yml | 86 ++++++++++++++++++ .../Prototypes/Recipes/Lathes/electronics.yml | 8 ++ .../Atmospherics/condenser.rsi/fill-1.png | Bin 0 -> 149 bytes .../Atmospherics/condenser.rsi/fill-2.png | Bin 0 -> 168 bytes .../Atmospherics/condenser.rsi/fill-3.png | Bin 0 -> 164 bytes .../Atmospherics/condenser.rsi/fill-4.png | Bin 0 -> 180 bytes .../Atmospherics/condenser.rsi/fill-5.png | Bin 0 -> 184 bytes .../Atmospherics/condenser.rsi/fill-6.png | Bin 0 -> 185 bytes .../Atmospherics/condenser.rsi/fill-7.png | Bin 0 -> 187 bytes .../Atmospherics/condenser.rsi/meta.json | 60 ++++++++++++ .../Piping/Atmospherics/condenser.rsi/off.png | Bin 0 -> 687 bytes .../Piping/Atmospherics/condenser.rsi/on.png | Bin 0 -> 1162 bytes .../Atmospherics/condenser.rsi/panel.png | Bin 0 -> 272 bytes .../Atmospherics/condenser.rsi/pipe.png | Bin 0 -> 344 bytes .../Atmospherics/condenser.rsi/trans.png | Bin 0 -> 346 bytes 21 files changed, 294 insertions(+) create mode 100644 Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs create mode 100644 Content.Server/Atmos/Piping/Unary/EntitySystems/GasCondenserSystem.cs create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-1.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-2.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-3.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-4.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-5.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-6.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-7.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/meta.json create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/off.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/on.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/panel.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/pipe.png create mode 100644 Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/trans.png diff --git a/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs b/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs new file mode 100644 index 0000000000..1db0b524bb --- /dev/null +++ b/Content.Server/Atmos/Piping/Unary/Components/GasCondenserComponent.cs @@ -0,0 +1,33 @@ +using Content.Server.Atmos.Piping.Unary.EntitySystems; + +namespace Content.Server.Atmos.Piping.Unary.Components; + +/// +/// Used for an entity that converts moles of gas into units of reagent. +/// +[RegisterComponent] +[Access(typeof(GasCondenserSystem))] +public sealed partial class GasCondenserComponent : Component +{ + /// + /// The ID for the pipe node. + /// + [DataField] + public string Inlet = "pipe"; + + /// + /// The ID for the solution. + /// + [DataField] + public string SolutionId = "tank"; + + /// + /// For a condenser, how many U of reagents are given per each mole of gas. + /// + /// + /// Derived from a standard of 500u per canister: + /// 400u / 1871.71051 moles per canister + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float MolesToReagentMultiplier = 0.2137f; +} diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCondenserSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCondenserSystem.cs new file mode 100644 index 0000000000..1b790b5cf0 --- /dev/null +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCondenserSystem.cs @@ -0,0 +1,73 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Atmos.Piping.Components; +using Content.Server.Atmos.Piping.Unary.Components; +using Content.Server.NodeContainer; +using Content.Server.NodeContainer.EntitySystems; +using Content.Server.NodeContainer.Nodes; +using Content.Server.Power.Components; +using Content.Shared.Atmos; +using JetBrains.Annotations; +using Content.Server.Power.EntitySystems; +using Content.Shared.Chemistry.EntitySystems; + +namespace Content.Server.Atmos.Piping.Unary.EntitySystems; + +[UsedImplicitly] +public sealed class GasCondenserSystem : EntitySystem +{ + [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; + [Dependency] private readonly PowerReceiverSystem _power = default!; + [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; + [Dependency] private readonly SolutionContainerSystem _solution = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCondenserUpdated); + } + + private void OnCondenserUpdated(EntityUid uid, GasCondenserComponent component, AtmosDeviceUpdateEvent args) + { + if (!(_power.IsPowered(uid) && TryComp(uid, out var receiver)) + || !TryComp(uid, out var nodeContainer) + || !_nodeContainer.TryGetNode(nodeContainer, component.Inlet, out PipeNode? inlet) + || !_solution.TryGetSolution(uid, component.SolutionId, out var solution)) + { + return; + } + + if (solution.AvailableVolume == 0 || inlet.Air.TotalMoles == 0) + return; + + var molesToConvert = NumberOfMolesToConvert(receiver, inlet.Air, args.dt); + var removed = inlet.Air.Remove(molesToConvert); + for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) + { + var moles = removed.Moles[i]; + if (moles <= 0) + continue; + + if (_atmosphereSystem.GetGas(i).Reagent is not {} gasReagent) + continue; + + var moleToReagentMultiplier = component.MolesToReagentMultiplier; + var amount = moles * moleToReagentMultiplier; + + if (_solution.TryAddReagent(uid, solution, gasReagent, amount, out var remaining)) + continue; + + // if we have leftover reagent, then convert it back to moles and put it back in the mixture. + inlet.Air.AdjustMoles(i, remaining.Float() / moleToReagentMultiplier); + } + } + + public float NumberOfMolesToConvert(ApcPowerReceiverComponent comp, GasMixture mix, float dt) + { + var hc = _atmosphereSystem.GetHeatCapacity(mix); + var alpha = 0.8f; // tuned to give us 1-ish u/second of reagent conversion + // ignores the energy needed to cool down the solution to the condensation point, but that probably adds too much difficulty and so let's not simulate that + var energy = comp.Load * dt; + return energy / (alpha * hc); + } +} diff --git a/Content.Shared/Chemistry/EntitySystems/SolutionContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SolutionContainerSystem.cs index bb90351483..04ad17869f 100644 --- a/Content.Shared/Chemistry/EntitySystems/SolutionContainerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SolutionContainerSystem.cs @@ -374,6 +374,22 @@ public sealed partial class SolutionContainerSystem : EntitySystem return acceptedQuantity == reagentQuantity.Quantity; } + /// + /// Adds reagent of an Id to the container. + /// + /// + /// Container to which we are adding reagent + /// The Id of the reagent to add. + /// The amount of reagent to add. + /// If all the reagent could be added. + [PublicAPI] + public bool TryAddReagent(EntityUid targetUid, Solution targetSolution, string prototype, FixedPoint2 quantity, + float? temperature = null, ReagentData? data = null) + { + var reagent = new ReagentQuantity(prototype, quantity, data); + return TryAddReagent(targetUid, targetSolution, reagent, out _, temperature); + } + /// /// Adds reagent of an Id to the container. /// diff --git a/Resources/Locale/en-US/wires/wire-names.ftl b/Resources/Locale/en-US/wires/wire-names.ftl index aae87f9c53..4a94dc9ac6 100644 --- a/Resources/Locale/en-US/wires/wire-names.ftl +++ b/Resources/Locale/en-US/wires/wire-names.ftl @@ -3,6 +3,7 @@ wires-board-name-default = Wires wires-board-name-booze = BoozeDispenser wires-board-name-soda = SodaDispenser wires-board-name-thermomachine = Thermomachine +wires-board-name-condenser = Condenser wires-board-name-pa = Mk2 Particle Accelerator wires-board-name-highsec = HighSec Control wires-board-name-vessel = Vessel diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index af4f8cba78..7af85a09f0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -338,6 +338,21 @@ deconstructionTarget: null node: heater +- type: entity + id: CondenserMachineCircuitBoard + parent: BaseMachineCircuitboard + name: condenser machine board + description: A machine printed circuit board for a condenser. + components: + - type: Sprite + state: engineering + - type: MachineBoard + prototype: BaseGasCondenser + requirements: + MatterBin: 1 + materialRequirements: + Glass: 1 + - type: entity id: PortableScrubberMachineCircuitBoard parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 5972a6c976..730ecdf72d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -306,6 +306,8 @@ producingSound: /Audio/Machines/circuitprinter.ogg idleState: icon runningState: building + staticRecipes: + - CondenserMachineCircuitBoard dynamicRecipes: - ThermomachineFreezerMachineCircuitBoard - PortableScrubberMachineCircuitBoard diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 0fdad5d967..05135da0ce 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -351,3 +351,89 @@ enabled: true - type: ApcPowerReceiver powerDisabled: false + +- type: entity + parent: [ BaseMachinePowered, ConstructibleMachine ] + id: BaseGasCondenser + name: condenser + description: Condenses gases into liquids. Now we just need some plumbing. + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Piping/Atmospherics/condenser.rsi + snapCardinals: true + granularLayersRendering: true + layers: + - state: off + map: [ "enum.PowerDeviceVisualLayers.Powered" ] + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] + - state: pipe + map: [ "enum.PipeVisualLayers.Pipe" ] + renderingStrategy: Default + - state: fill-1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - state: trans + - type: GenericVisualizer + visuals: + enum.PowerDeviceVisuals.Powered: + enum.PowerDeviceVisualLayers.Powered: + True: { state: on } + False: { state: off } + - type: SolutionContainerVisuals + maxFillLevels: 7 + fillBaseName: fill- + - type: Appearance + - type: PipeColorVisuals + - type: Rotatable + - type: GasCondenser + - type: AtmosPipeColor + - type: AtmosDevice + - type: ApcPowerReceiver + powerLoad: 10000 + - type: Machine + board: CondenserMachineCircuitBoard + - type: WiresPanel + - type: Wires + boardName: wires-board-name-condenser + layoutId: Condenser + - type: WiresVisuals + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:SpillBehavior + solution: tank + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - type: NodeContainer + nodes: + pipe: + !type:PipeNode + nodeGroupID: Pipe + pipeDirection: South + - type: Transform + noRot: false + - type: SolutionContainerManager + solutions: + tank: + maxVol: 400 + canMix: true + - type: DrainableSolution + solution: tank + - type: ExaminableSolution + solution: tank + - type: PowerSwitch diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 8477e6c9be..9ab48db864 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -104,6 +104,14 @@ Glass: 900 Gold: 50 +- type: latheRecipe + id: CondenserMachineCircuitBoard + result: CondenserMachineCircuitBoard + completetime: 4 + materials: + Steel: 100 + Glass: 900 + - type: latheRecipe id: PortableScrubberMachineCircuitBoard result: PortableScrubberMachineCircuitBoard diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-1.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a030b2d52451902e0a7cf9f46a8ae4628ce83a07 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}{+=$5ArY-_ zFCOFts$y~6_@8N^l+FPSiN7nX<1Kf#08RKYw@2>I-Q|uG6U%lxZ242tnOC{Yp-eBR t+`eLc!_1|JwKsc*nC{658Q<6~yCCYGWRlbY zz4u&&Z%xW~Ty!kme093hGVugTe~DWM4f7|K0u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-3.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..364bd108400d4cf75e1d6907d095e3b52db6d604 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}ah@)YArY-_ zuNVq77;v~;eDIf_WBEa?sY(`!GP3`(4<8DXWM=s1w}`#``{@N9Gh+27$iCMpj0mv3 z7n&5!SzZy(Xsq4-{>(J)Ge;-Au#gk05MuRPne|INB#nV#{sv}wR@t0q+5f)+ZDR0r L^>bP0l+XkK!OS;3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-4.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-4.png new file mode 100644 index 0000000000000000000000000000000000000000..efbfaf5c040d1ffd32eca999f8946c260d2d8298 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}d7dtgArY-_ zCtu_}pupj>@TI{UdtM)B_Kb}yOiVxCTQB!rXd(y025TAF9lOn&&m@*bJy^RZ=#iO1 zbewA8nHKE`{{v?(J)E~Yv+>P?t|FyHpIgTe~DWM4f?kPgz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-5.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-5.png new file mode 100644 index 0000000000000000000000000000000000000000..f87544fa828d0760684c52f6b5898490a6340355 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}MV>B>ArY-_ zr(EPcpupj>@TI{UdtM)B_Kd)uEwjGdTQ676IEABO|KW>`yQ_mw$Yd>N{&Gg!`3_gg z+0{-m#*etZaVMl@emrrvq#@@aSFzHf&$-QVzuz9X-l8lp@!9XNs|)`tB~`KuJeYW< gW_20Rz5_*iSCW+AJY5_^B3j>0 zxyXA!fx~6tOM^G|ygttC8G$`pW_`K0UatHix66a~1tkyO-4iitzx9&A_VX!$?TnG1 zR|y>N+0pcuX+~s}O_8~*g7uC=b2?ts++J|JPS&AeJ*T&Z(plc+tDL2clYVk598jM5 gf9)%vg$++*zHCu`?%t?61IT0WboFyt=akR{0NnLPx&QzG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-7.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/fill-7.png new file mode 100644 index 0000000000000000000000000000000000000000..55e26a4d5ac4764405117016509f52ca541b11a7 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}rJgR1ArY-_ zr(WbepuoYp@TI{UdtM)B_Kd)uEwjGdUH@pehStUV4>Jzj-5YsA=9(Y(mqXgBdE6<7 zSF7~Re8lxl*kE(X#}jw9IFvo?Do|SV`E7&T@2?Cj3Li`#nu<((CcS=@bG_S{Rak}}G#<7fIz1@ag?UHx3vIVCg!02@+CrvLx| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/meta.json b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/meta.json new file mode 100644 index 0000000000..591c223e5c --- /dev/null +++ b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/meta.json @@ -0,0 +1,60 @@ +{ + "version":1, + "size": + { + "x":32, + "y":32 + }, + "copyright":"Created by EmoGarbage404 (github) for Space Station 14.", + "license":"CC0-1.0", + "states": + [ + { + "name":"off" + }, + { + "name":"on", + "delays": + [ + [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.05 + ] + ] + }, + { + "name":"panel" + }, + { + "name":"trans" + }, + { + "name":"pipe", + "directions":4 + }, + { + "name":"fill-1" + }, + { + "name":"fill-2" + }, + { + "name":"fill-3" + }, + { + "name":"fill-4" + }, + { + "name":"fill-5" + }, + { + "name":"fill-6" + }, + { + "name":"fill-7" + } + ] +} diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/off.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/off.png new file mode 100644 index 0000000000000000000000000000000000000000..523adff6c371345d362fc91855f41664b77d5d32 GIT binary patch literal 687 zcmV;g0#N;lP)Px%X-PyuR9J=Wma%WzKorJ*R2dG`(v}RC0Ewm(Vv5uuz|4QZ+QAD_vP7ypWbjyd z@L&cnjl|+9dzVa^18f;H1qNfui`&x3Sn5EB^c);akkXW;e2aDGyZ3$X^YgodEwX9x-OH+1b|YhM7>@|(=;s0T1s$dDLUYJ9zhTg1i{K|J>v(b}Zsi0iNf@fewwsRPs~(G$CR#nZ#DZz4h`r7z|b>lIp-yaBy${ zfa|&ma_J0^5GnEEZ;6EvSe8Y(T&7$u1Igm+^?ID2pA!VZlKt?&fl8$U+}FUFd6r5# z9*@cA^KlITG@DH>FE3*eaOa8~H=9j_5Gab0h?N0QRduc?3Y%&~wr%74K91wu^#Mgu zINHC#w(X4wINHDA%hh{e;S+e3Pkg*Jc=a*|z?-+PpOy6cw;urfybbXxI$V8C3IO=^ z;WJ(oVHgJ4?DL*Wv)K$?*AYU%pSoERAR&LLTrQUyEDXb?xm9adt$$R&a5yBJ&8BXc z&1L}Tx*pFNh5@j0kKEU4wbly|LOkj~7>2Z3Ep~TzQB@VkanN<0i;Ii3jtL>s1^B+t zcr@bO-X1`zQVH3rCAq4qSe8YtR$F_L%APSEjqrURShx|Xs=ATekc8tnnf0qSfZrOo V{7EZ!Hw^#)002ovPDHLkV1mTaHmU#s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/on.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/on.png new file mode 100644 index 0000000000000000000000000000000000000000..268750001a23611bce2f7211f5c12fc0a11c2f1e GIT binary patch literal 1162 zcmV;51a001Be1^@s6m49>f00001b5ch_0Itp) z=>Px(L`g(JRCt{2nz3)N$R!0%D(_p&v$4OQ zpMSsij4>z_3WY+UP$(1%g+ifFC=?2XLZMJ76bgmn|Hf9ladvigw+`v~`T17bdgb3d z|8`t{a&oc`Kfv8|Cn*1B`nRU#?RI;m=HugI02+;ktOVuXT>o}_W4qlZpU*$};MHn1 z(RLgM&+`CqT~|6p5YsH%ACF-j{(iqN&v%-2oqxQ~KZhSkjbWZYk$`b|zuza5$)t*I zZ*M6UivVbv#$+;~TCHMP7C{gY1ObD=003RrDV0i8t5sarU3h~3#ozDuaU6$UuP6PY zZCTdJ{qfHCeII~QsYI*Q!f~9n_;p>!^E??tsZ^5ttix|v7Ohq*HHLZq?U|zkVHgrc z5m6M)4K@rz^7%ZI$%KoG3mnG*Ae+t7?RI4q=(-M&NP>rWieDtW<2W<^LZPs7zhM}3 zyIla8{Nh4P7r`q0mSq7X5NgAnV5aluO^M6)i%OsN_j)}Fg~H1H0$tZJ zO*0XPn1w`QtiqqoX5}%alV9{p8mS|oAWd$+iQwJrcSQmOL6BO3i-K5&UtHugznBsq z%VYc^hNGjSnT!9J1bnK$)9GNE=G^34wZGTv$r%8W_kp^uCq~9NUn~khNX2scGu+<; zxUNf~P>>xRmwTRv@B2hi^hv}2Q~d(dG=cjLF$@FG^W=qDwLhE9%8TCX^>7>q(=_D_ zuu8v3JmD8f7*D=c`U`~uhGEEo2#{?NLz+J^0`Bkc1NTE~CX?ai4=*`5IGEY#=H`Y> zCL`|w0LtYuS65ewYBvl+w#(%*nx>J<<>sF7GW>Cb+xLA=Pfu6w7e53xe<#Md+L1d%RU^pDoY&MmD!~NR; zxm=DH&p*&;G}aQpi{~Hs?frMMt^Awoms4=K{|i5Ttn<~Ey8wLi?bl0{{_*>t0Q~iF zM7Upr_iq#1m47q+iF?4mzyFnRGNE3tv$M0@|E0&{F|}F^P1E4t`-W+hfAjpQk72|w zncdyp)Ps#iqnUN{zB}*xi%|Z}@uwzWx7%fBXD4-s@pueCtyYuk>h(In+J#5>i*=$m))wsO8e6V6PO`98_@^7Yp8(=sba&vvn z!Lw%o3oAwZRU_oKZR5Hwhlhs`zDXgT8Qol8GaL@(dgb3-zkDgtw(YgN4J#1Opp;+v c6^hTsKaaLA=Px#%1J~)R9J=W(4h*#P!z`T|1A?tuDCkxg9x%B7z~2J=mYowD=P-O#j;`)3_gHa zi?Sk^#;Ra289kDg!4=Hp3Aw1^MO)IDW#NBO8t}V9tk5O`8|w`Jl68_$aUrQ zFGZ%T=yf~+u)YOgG~KbTR=Et%bbG>LZitgQ!Qh0yyAmgLtZ!-7Huv{n?9gx305~p> zrE@;As#FTwJSI>kjEsblk>|cw-X_qV9hfv6tZzxP6e!=w>v)nUmS$<8_p1cduiXIL WxJT~q^F4Y10000IW-^Y~3kA%d;vZ4{Xb2_@@70B4bP^qX)l2FN|<-fq)Y8<<(Lf?mzEKzrOoU z{R5L9g>$Y%B}a;VsePZzaZcNCt!dYyhHJl0RpuR^s~`vh7lk|jw);;yQn%0l@{^}_ z4@HuDOpo1ozyFW*{z+#y>rBq!cd%&KmaBT3S%5D=g6-tDPpei5#h>ityI|6rQmq66 bRU6FrJ~i5BxyC9E7*q_Nu6{1-oD!M<#{!F4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/trans.png b/Resources/Textures/Structures/Piping/Atmospherics/condenser.rsi/trans.png new file mode 100644 index 0000000000000000000000000000000000000000..06e34a2e361dc72f71c60c1b5749545cd30fe3b2 GIT binary patch literal 346 zcmV-g0j2(lP)Px$6iGxuR9J=Wma$92Kp4f}sqm4{Es`3V$)&6RM8WN53D`;hDmM!ybN>_95^z#l z&t&{e7U@tr)Lhd_t`+fqkR{(ec-(t;3Gm-h+Xgz-S(|V=ncg1EfKGMR8}xB;6Oj!@2xRkWThp1Yek=^}Q)uNye~{-S0--3O%_u!{s s7p_i$m7Duv>)+76Ydjv0$MYvx0+JAiKZfy6`~Uy|07*qoM6N<$f|J3TB>(^b literal 0 HcmV?d00001