<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://legacy.stationeers-wiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RA2lover</id>
		<title>Unofficial Stationeers Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://legacy.stationeers-wiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RA2lover"/>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/Special:Contributions/RA2lover"/>
		<updated>2026-04-28T00:37:36Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Grow_light_automation&amp;diff=25872</id>
		<title>User:RA2lover/Sandbox/Grow light automation</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Grow_light_automation&amp;diff=25872"/>
				<updated>2026-03-12T03:05:01Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: nuked rest of old guide for now, removed equals signs from iccode because escaping them still doesn't fix rendering.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorials]]&lt;br /&gt;
== Disclaimer ==&lt;br /&gt;
Due to the frequency of game updates, all solutions are subject to change and may or may not be functional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The designs on this page are valid as of v0.2.3771.18264 (2023-01-12)&lt;br /&gt;
&lt;br /&gt;
==Plant mechanics==&lt;br /&gt;
Plant growth rate is multiplied by its growth efficiency. Thus, maximizing growth efficiency results in a more effective farm.&lt;br /&gt;
&amp;lt;br&amp;gt;Factors which affect it are Breathing, Hydration, Temperature, Pressure, and '''Light''' efficiencies, the plant's Growth speed gene, and a small random variance assigned when planting each plant. &amp;lt;!--default: ±2%, Objects.Items.Plant._growthEfficiencyRngRange--&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Proper grow light use can maximize light efficiency.&lt;br /&gt;
&lt;br /&gt;
===Light Efficiency=== &amp;lt;!--Objects.Items.PlantRecord::UpdateRecord--&amp;gt;&lt;br /&gt;
Factors which affect light efficiency include a multiplicative debuff of 1/1+Light Stress, and a multiplicative buff which is only applied if the plant has exceeded its light per day requirements and is not darkness deficient.&lt;br /&gt;
&lt;br /&gt;
====Light Stress====&lt;br /&gt;
Light Stress increases by 1% every time a plant transitions from light to darkness or vice-versa. The amount of times this happens should be minimized if possible.&lt;br /&gt;
&lt;br /&gt;
If a plant is deficient in light or darkness, Light stress increases at a rate of 200%/day. Otherwise, it decreases to 0% exponentially at a half-life of 1.38625 days for values of light stress below 50%. &amp;lt;!-- experimental calculation assuming plant simulation runs every tick which may not be guaranteed. function uses lerp smoothing and that's broken, see https://www.youtube.com/watch?v=LSNQuFEDOyQ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Light/Darkness Deficiency====&lt;br /&gt;
Light per day and Darkness per day requirements are tracked by TimeLitRatio and TimeDarknessRatio variables which are initialized at 50% for each plant. For non-deficient plants (ratios above 0%), these values decrease by 100%/day. Plants with a deficiency decrease the corresponding value at a slower date (S-curve from -100%/day at 0% to 0%/day at -500%). Plants exceeding their light/darkness per day requirements decrease their corresponding value at a faster rate (S-curve from -100%/day at 100% to -500%/day at 1000%).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- WANTED FOR GUIDE: Images plotting the AnimationCurves for light/darkness usage and light/darkness gain.&lt;br /&gt;
Curves are an EaseInOut curve on Objects.Items.PlantRecord::_darknessLightUsageMultiplier:&lt;br /&gt;
	Keyframe(-5, 0),&lt;br /&gt;
	Keyframe(0, 1),&lt;br /&gt;
	Keyframe(1, 1),&lt;br /&gt;
	Keyframe(10, 5)&lt;br /&gt;
and an EaseInOut curve on Objects.Items.PlantRecord::_darknessLightGainMultiplier:&lt;br /&gt;
	Keyframe(-5, 5),&lt;br /&gt;
	Keyframe(-0.01, 2), (even this is still an S-curve instead of a step function)&lt;br /&gt;
	Keyframe(0, 1),&lt;br /&gt;
	Keyframe(1, 1),&lt;br /&gt;
	Keyframe(5, 0)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TimeDarknessRatio is supplied when the plant is in darkness (not under sunlight or growlight illumination). Supplying darkness increases the value (on an S-curve) by 200%/darkness per day period at -1% to 500%/period at -500%, 100%/period on 0-100%, and 100%/period at 100% to 0%/period at 500% (on an S-curve).&lt;br /&gt;
&lt;br /&gt;
TimeLitRatio supply is similar (though using light per day instead), but the increase in values is multiplied by how much light the plant is exposed to, which can be viewed as the Light Intensity parameter on the Plant Analyser [[Cartridge]]. A plant counts as being in light if it is exposed to at least 1% of earth's average solar irradiance (1367 W/m²). Grow lights within distance of a plant count as an additional 80% solar irradiance regardless of how close they are to it. Multiple grow lights illuminating the same plant don't stack, but sun exposure on top of a grow light does.&lt;br /&gt;
&lt;br /&gt;
===Maximizing Light Efficiency===&lt;br /&gt;
&lt;br /&gt;
Plants with TimeLitRatio above 100% and not under darkness deficiency receive a multiplicative buff for excess TimeLitRatio, multiplying light efficiency by up to 2x at 400% TimeLitRatio. &amp;lt;!-- LightEfficiency *= Lerp(1, 2, (TimeLitRatio - 1) / 3) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Light Efficiency also receives a multiplicative debuff based on how much light stress the plant is under. LightEfficiency = 1 / (1 + LightStress)&lt;br /&gt;
&amp;lt;br&amp;gt;Because light stress has a very slow decay period, we want to avoid any circumstances placing the plant into a deficiency.&lt;br /&gt;
&lt;br /&gt;
Maximizing TimeLitRatio while avoiding a darkness deficiency requires exposing plants to as much strong light for as long as possible while still meeting the plant's darkness per day requirements throughout its entire lifetime.&lt;br /&gt;
&amp;lt;br&amp;gt;Because TimeDarknessRatio is only initialized at 50%, plants under this farming regime need to be exposed to its first darkness period within half a day of being planted, and it needs to be long enough to last until the next darkness period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Farm designs==&lt;br /&gt;
&lt;br /&gt;
Farms benefitting from grow lights can be generally separated into two types: Indoor farms that can be placed in locations without regular sunlight exposure, and greenhouses where grow lights are used to augment the sun and provide faster growth rates.&lt;br /&gt;
&lt;br /&gt;
===Indoor farms===&lt;br /&gt;
&lt;br /&gt;
Farms using exclusively grow lights can use cheaper walls, are simpler to automate and can use horizontal space more efficiently. However, they need a reliable supply of power.&lt;br /&gt;
&lt;br /&gt;
Their grow light timing can be completely decoupled from the day-night cycle, affording more choices in how they're used.&lt;br /&gt;
&lt;br /&gt;
===Outdoor greenhouses===&lt;br /&gt;
Farms using the sun have higher build costs and can tolerate intermittent power, but have increased cooling demands and automation systems that need to take sunlight status into account as turning grow lights off isn't guaranteed to ensure darkness.&lt;br /&gt;
&lt;br /&gt;
==Clock sources==&lt;br /&gt;
Turning the light on/off for a period of time needs a means of detecting time. Some of which include:&lt;br /&gt;
&lt;br /&gt;
===Stopwatch===&lt;br /&gt;
Accessible from [[Kit (Music Machines)]]. Provides a continuously increasing timer when activated which can be reset by turning it off and on again, looped with a modulo [[Kit_(Logic_Processor)#Math_Unit|Math Unit]] or paused by disabling its Activate signal. Needs continuous power to avoid a timer reset.&lt;br /&gt;
&lt;br /&gt;
===Memory-based Timer===&lt;br /&gt;
A [[Logic Memory]] unit which continuously updates a value through logic. Preserves its current value during a power loss, but requires additional power for logic elements needed to update its value.&lt;br /&gt;
&lt;br /&gt;
===IC10 Stack Timer===&lt;br /&gt;
A timer preserving its time on power losses by storing its current time on an IC10 stack memory location. Comes virtually free when automating grow lights with a programmable chip, but requires using a programmable chip for automation.&lt;br /&gt;
&lt;br /&gt;
===Daylight Sensor===&lt;br /&gt;
Provides celestial tracking information for the sun and the ability to check if sunlight is currently hitting its location (by reading the Activate logic parameter). While tracking maximums and minimums of its vertical angle can be used to identify noon and midnight, the angles cannot be directly relied on as a timing source because they change depending on seasons. Additionally, sunlight cannot distinguish between an eclipse and a sunset on its own.&lt;br /&gt;
&lt;br /&gt;
==Timing Circuits==&lt;br /&gt;
&lt;br /&gt;
Circuits which provide adjustable duty cycle grow light operation. No effort is provided for synchronization with daylight, so greenhouses operating off them should use [[Composite window shutter]]s to prevent sunlight from denying darkness periods if the timers happen to get out of sync.&lt;br /&gt;
&lt;br /&gt;
=== Stopwatch timer ===&lt;br /&gt;
&lt;br /&gt;
A stopwatch is used as a clock source, with day duration being provided by the memory unit and darkness duration being provided by the dial (accessible through [[Kit (Logic Switch)]]). Using separate devices for these roles removes ambiguity without the need for a [[Labeller]], even in arrangements where the memory unit and dial are on the same logic network.&lt;br /&gt;
&lt;br /&gt;
[[File:Stopwatch Grow Light Timer.png|An example indoor grow light pulse width modulation circuit.]]&lt;br /&gt;
&lt;br /&gt;
With the provided settings, the timer will start with the light turned off for the darkness duration, then turn the light on for the rest of the day length (stored in the memory unit as 1200 seconds or 20 minutes).&lt;br /&gt;
&amp;lt;br&amp;gt;Starting with the grow light off is safer for occasional blackouts as the circuit has no awareness of how long it's been turned off for during a blackout and short blackouts risk stressing plants with excess light.&lt;br /&gt;
====IC10 Equivalent====&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define SecondsPerDay 1200&lt;br /&gt;
define SecondsPerTick 0.5&lt;br /&gt;
define DarknessTimeSeconds 300 #how much time per day to keep grow lights off&lt;br /&gt;
alias TimeSinceStartUp r0&lt;br /&gt;
alias CurrentCycleTime r1&lt;br /&gt;
alias GrowLightStatus r2&lt;br /&gt;
start:&lt;br /&gt;
yield #wait until the next tick&lt;br /&gt;
add TimeSinceStartUp TimeSinceStartUp SecondsPerTick #increment time since startup&lt;br /&gt;
mod CurrentCycleTime TimeSinceStartUp SecondsPerDay #T_CurCycle -&amp;gt; TotalRuntime % DayLength&lt;br /&gt;
sgt GrowLightStatus CurrentCycleTime DarknessTimeSeconds # 1 if CycleTime &amp;gt; DarknessTime&lt;br /&gt;
sb HASH(&amp;quot;StructureGrowLight&amp;quot;) On GrowLightStatus #batch write to all grow lights&lt;br /&gt;
    #optional debug code that lets you see CurrentCycleTime if running on an IC housing&lt;br /&gt;
    bdnvl db LineNumber start #if we can't see our own line number we're not on one&lt;br /&gt;
    s db Setting CurrentCycleTime #writes its value to the housing's current state&lt;br /&gt;
j start&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Memory Unit Timer ===&lt;br /&gt;
The stopwatch clock source from the previous timer is replaced with an incrementing memory. This preserves light status during power losses at an additional 10W of power consumed, and potentially adds confusion requiring a labeller as multiple components of the same type are now present in the same logic network.&lt;br /&gt;
&lt;br /&gt;
[[File:Memory Grow Light Timer.png|Adaptation of the previous circuit replacing the stopwatch timer with a persistent memory unit timer.]]&lt;br /&gt;
&lt;br /&gt;
In order to reduce component count, this timer uses ticks instead of seconds as a unit of time measurement.&lt;br /&gt;
&lt;br /&gt;
===IC10 Equivalent===&lt;br /&gt;
Includes generic stack clearing code that takes up more space than the changes required to implement timer persistence do.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define ProgramHash HASH(&amp;quot;Persistent Timer Grow Light Script 0.1&amp;quot;) #check for stack setup&lt;br /&gt;
move sp $200 #we do this by checking for the presence of a guard variable at its end.&lt;br /&gt;
peek r0 #if it's there we can assume it's been initialized and we can run as usual.&lt;br /&gt;
beq r0 ProgramHash start #if it's not, we clear and initialize the stack first.&lt;br /&gt;
#fast version of nuking the stack, but crashes if we're not running on an IC housing.&lt;br /&gt;
bdnvl db LineNumber SlowClearStack#Only IC housings have this property&lt;br /&gt;
clr db #clears the entire stack off the device (in this case, the housing this is on)&lt;br /&gt;
poke $1FF ProgramHash #writes guard variable&lt;br /&gt;
j start&lt;br /&gt;
SlowClearStack: #routine that traverses the entire stack to clear it.&lt;br /&gt;
move sp $000&lt;br /&gt;
push 0 #partially unrolled loop, 8*64 iterations&lt;br /&gt;
push 0&lt;br /&gt;
push 0&lt;br /&gt;
push 0&lt;br /&gt;
push 0&lt;br /&gt;
push 0&lt;br /&gt;
push 0&lt;br /&gt;
push 0&lt;br /&gt;
brne sp $200 -8 #leave once we've reached the end off the stack, otherwise loop again&lt;br /&gt;
poke $1FF ProgramHash #write guard variable at the end of stack&lt;br /&gt;
#now the stack has been cleared, we can get to the actual program itself.&lt;br /&gt;
define SecondsPerDay 1200&lt;br /&gt;
define SecondsPerTick 0.5&lt;br /&gt;
define DarknessTimeSeconds 300 #how much time per day to keep grow lights off&lt;br /&gt;
start:&lt;br /&gt;
alias TimeSinceStartUp r0#aliases are processed at runtime.&lt;br /&gt;
alias CurrentCycleTime r1#you can do some interesting pass-by-name stuff with it.&lt;br /&gt;
alias GrowLightStatus r2 #That'll be outside this program's scope, though.&lt;br /&gt;
#https://stationeers-wiki.com/Advanced_IC10_Programming#Redefining_Aliases&lt;br /&gt;
yield #wait until the next tick&lt;br /&gt;
move sp $001 #In order to make TimeSinceStartUp persistent, we're preserving it on stack.&lt;br /&gt;
pop TimeSinceStartUp #this consists of loading its existing value (0 on initialization)&lt;br /&gt;
add TimeSinceStartUp TimeSinceStartUp SecondsPerTick #incrementing it&lt;br /&gt;
push TimeSinceStartUp #and saving it back to its address (in this case, $000).&lt;br /&gt;
mod CurrentCycleTime TimeSinceStartUp SecondsPerDay #T_CurCycle -&amp;gt; TotalRuntime % DayLength&lt;br /&gt;
sgt GrowLightStatus CurrentCycleTime DarknessTimeSeconds # 1 if CycleTime &amp;gt; DarknessTime&lt;br /&gt;
sb HASH(&amp;quot;StructureGrowLight&amp;quot;) On GrowLightStatus #batch write to all grow lights&lt;br /&gt;
    #optional debug code that lets you see CurrentCycleTime if running on an IC housing&lt;br /&gt;
    bdnvl db LineNumber start #if we can't see our current line number we're not on one&lt;br /&gt;
    s db Setting CurrentCycleTime #writes its value to the housing's state&lt;br /&gt;
j start&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Synchronized Timing Circuits==&lt;br /&gt;
&lt;br /&gt;
===Sunset-triggered timer===&lt;br /&gt;
&amp;lt;!-- WANTED: LOGIC-BASED TRIGGER CIRCUIT THAT ISN'T DEPENDENT ON COMPONENT PLACEMENT/LOADING ORDER --&amp;gt;&lt;br /&gt;
This shows a pitfall of logic circuits in that circuits relying on recursive logic are senstive to not just they order in which logic components were placed, but also the order in which they were loaded into the world. A design may function when first built, but stop working when the world is reloaded because logic components are run on a different execution order.&lt;br /&gt;
&lt;br /&gt;
'''This design is not recommended for use because it is sensitive to logic component execution order, which may not persist across world loads.'''&lt;br /&gt;
[[File:Sunset Triggered Timer.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;The circuit uses a [[Logic Pulse Former]] assembly to create a single-tick pulse when a sunset is detected, which is then used to reset a counter to the darkness timer memory setting.&lt;br /&gt;
&amp;lt;br&amp;gt;The darkness timer memory setting is a negative value, exploiting the fact writing any value equal or greater than 1 to a device's &amp;quot;On&amp;quot; setting turns it on. This removes the need for an additional logic compare component.&lt;br /&gt;
&lt;br /&gt;
===IC10 equivalent===&lt;br /&gt;
Because instructions within a single IC10 run at a well-defined execution order, this design isn't sensitive to component placement order.&lt;br /&gt;
A [[Daylight Sensor]] with cells exposed towards zenith needs to be present in d0. &lt;br /&gt;
{{ICCode|&lt;br /&gt;
define ProgramHash HASH(&amp;quot;Sunset Sensing Grow Light Timer 0.1&amp;quot;)&lt;br /&gt;
define DarknessTimeSeconds 300&lt;br /&gt;
define SecondsPerTick 0.5&lt;br /&gt;
define SunsetAngle 100&lt;br /&gt;
alias CurrentSunsetStatus r1&lt;br /&gt;
move sp $200#check for guard variable&lt;br /&gt;
pop r0&lt;br /&gt;
beq r0 ProgramHash start&lt;br /&gt;
#As an alternative to clearing the entire stack, we can just clear the values we'll use&lt;br /&gt;
poke $0 0 #Sunset status on last check&lt;br /&gt;
poke $1 DarknessTimeSeconds #Time since last sunset was detected&lt;br /&gt;
poke $1FF ProgramHash&lt;br /&gt;
start:&lt;br /&gt;
alias DaylightSensor d0 #Aliasing a device also labels its corresponding screw.&lt;br /&gt;
bdnvl DaylightSensor Vertical CrashWithoutSensor&lt;br /&gt;
l r0 DaylightSensor Vertical&lt;br /&gt;
yield&lt;br /&gt;
sge CurrentSunsetStatus r0 SunsetAngle #r1: are we in sunset right now?&lt;br /&gt;
move sp $1&lt;br /&gt;
pop r0 #get last sunset status, store into r0&lt;br /&gt;
push CurrentSunsetStatus #and store current sunset status&lt;br /&gt;
brle CurrentSunsetStatus r0 2 #Are we in a sunset while we weren't in one before?&lt;br /&gt;
    poke $1 0 #If so, We're found one and restart the time since last sunset.&lt;br /&gt;
move sp $2&lt;br /&gt;
pop r0 #load the saved time,&lt;br /&gt;
add r0 r0 SecondsPerTick #increment it,&lt;br /&gt;
push r0 #and save it into non-volatile memory.&lt;br /&gt;
sgt r1 r0 DarknessTimeSeconds&lt;br /&gt;
sb HASH(&amp;quot;StructureGrowLight&amp;quot;) On r1 #Turn grow lights on if the timer has expired.&lt;br /&gt;
    bdnvl db LineNumber start&lt;br /&gt;
    s db Setting r0&lt;br /&gt;
j start&lt;br /&gt;
&lt;br /&gt;
CrashWithoutSensor:&lt;br /&gt;
alias NoDaylightSensorConfigured d0&lt;br /&gt;
sb HASH(&amp;quot;StructureGrowLight&amp;quot;) On 0 #turn grow lights off as a safety precaution&lt;br /&gt;
l r0 d0 None #throw a LogicTypeIsNone exception&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25871</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25871"/>
				<updated>2026-03-12T02:58:01Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: add escape for &amp;quot;=&amp;quot; so it doesn't parse into wikitext&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- List of IC10 opcodes (all strings)&lt;br /&gt;
local opcodes = {&lt;br /&gt;
    &amp;quot;alias&amp;quot;,&amp;quot;define&amp;quot;,&amp;quot;hcf&amp;quot;,&amp;quot;yield&amp;quot;,&lt;br /&gt;
    &amp;quot;abs&amp;quot;,&amp;quot;add&amp;quot;,&amp;quot;ceil&amp;quot;,&amp;quot;div&amp;quot;,&amp;quot;pow&amp;quot;,&amp;quot;exp&amp;quot;,&amp;quot;floor&amp;quot;,&amp;quot;log&amp;quot;,&amp;quot;max&amp;quot;,&amp;quot;min&amp;quot;,&amp;quot;mod&amp;quot;,&amp;quot;move&amp;quot;,&amp;quot;mul&amp;quot;,&amp;quot;rand&amp;quot;,&amp;quot;round&amp;quot;,&amp;quot;sqrt&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;trunc&amp;quot;,&amp;quot;lerp&amp;quot;,&lt;br /&gt;
    &amp;quot;acos&amp;quot;,&amp;quot;asin&amp;quot;,&amp;quot;atan&amp;quot;,&amp;quot;atan2&amp;quot;,&amp;quot;cos&amp;quot;,&amp;quot;sin&amp;quot;,&amp;quot;tan&amp;quot;,&lt;br /&gt;
    &amp;quot;clr&amp;quot;,&amp;quot;clrd&amp;quot;,&amp;quot;get&amp;quot;,&amp;quot;getd&amp;quot;,&amp;quot;peek&amp;quot;,&amp;quot;poke&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;put&amp;quot;,&amp;quot;putd&amp;quot;,&lt;br /&gt;
    &amp;quot;l&amp;quot;,&amp;quot;lr&amp;quot;,&amp;quot;ls&amp;quot;,&amp;quot;s&amp;quot;,&amp;quot;ss&amp;quot;,&amp;quot;rmap&amp;quot;,&lt;br /&gt;
    &amp;quot;lb&amp;quot;,&amp;quot;lbn&amp;quot;,&amp;quot;lbns&amp;quot;,&amp;quot;lbs&amp;quot;,&amp;quot;sb&amp;quot;,&amp;quot;sbn&amp;quot;,&amp;quot;sbs&amp;quot;,&lt;br /&gt;
    &amp;quot;and&amp;quot;,&amp;quot;nor&amp;quot;,&amp;quot;not&amp;quot;,&amp;quot;or&amp;quot;,&amp;quot;sla&amp;quot;,&amp;quot;sll&amp;quot;,&amp;quot;sra&amp;quot;,&amp;quot;srl&amp;quot;,&amp;quot;xor&amp;quot;,&amp;quot;ext&amp;quot;,&amp;quot;ins&amp;quot;,&lt;br /&gt;
    &amp;quot;select&amp;quot;,&amp;quot;sdns&amp;quot;,&amp;quot;sdse&amp;quot;,&amp;quot;sap&amp;quot;,&amp;quot;sapz&amp;quot;,&amp;quot;seq&amp;quot;,&amp;quot;seqz&amp;quot;,&amp;quot;sge&amp;quot;,&amp;quot;sgez&amp;quot;,&amp;quot;sgt&amp;quot;,&amp;quot;sgtz&amp;quot;,&amp;quot;sle&amp;quot;,&amp;quot;slez&amp;quot;,&amp;quot;slt&amp;quot;,&amp;quot;sltz&amp;quot;,&amp;quot;sna&amp;quot;,&amp;quot;snan&amp;quot;,&amp;quot;snanz&amp;quot;,&amp;quot;snaz&amp;quot;,&amp;quot;sne&amp;quot;,&amp;quot;snez&amp;quot;,&lt;br /&gt;
    &amp;quot;j&amp;quot;,&amp;quot;jal&amp;quot;,&amp;quot;jr&amp;quot;,&lt;br /&gt;
    &amp;quot;bdnvl&amp;quot;,&amp;quot;bdnvs&amp;quot;,&amp;quot;bdns&amp;quot;,&amp;quot;bdnsal&amp;quot;,&amp;quot;bdse&amp;quot;,&amp;quot;bdseal&amp;quot;,&amp;quot;brdns&amp;quot;,&amp;quot;brdse&amp;quot;,&lt;br /&gt;
    &amp;quot;bap&amp;quot;,&amp;quot;brap&amp;quot;,&amp;quot;bapal&amp;quot;,&amp;quot;bapz&amp;quot;,&amp;quot;brapz&amp;quot;,&amp;quot;bapzal&amp;quot;,&lt;br /&gt;
    &amp;quot;beq&amp;quot;,&amp;quot;breq&amp;quot;,&amp;quot;beqal&amp;quot;,&amp;quot;beqz&amp;quot;,&amp;quot;breqz&amp;quot;,&amp;quot;beqzal&amp;quot;,&lt;br /&gt;
    &amp;quot;bge&amp;quot;,&amp;quot;brge&amp;quot;,&amp;quot;bgeal&amp;quot;,&amp;quot;bgez&amp;quot;,&amp;quot;brgez&amp;quot;,&amp;quot;bgezal&amp;quot;,&lt;br /&gt;
    &amp;quot;bgt&amp;quot;,&amp;quot;brgt&amp;quot;,&amp;quot;bgtal&amp;quot;,&amp;quot;bgtz&amp;quot;,&amp;quot;brgtz&amp;quot;,&amp;quot;bgtzal&amp;quot;,&lt;br /&gt;
    &amp;quot;ble&amp;quot;,&amp;quot;brle&amp;quot;,&amp;quot;bleal&amp;quot;,&amp;quot;blez&amp;quot;,&amp;quot;brlez&amp;quot;,&amp;quot;blezal&amp;quot;,&lt;br /&gt;
    &amp;quot;blt&amp;quot;,&amp;quot;brlt&amp;quot;,&amp;quot;bltal&amp;quot;,&amp;quot;bltz&amp;quot;,&amp;quot;brltz&amp;quot;,&amp;quot;bltzal&amp;quot;,&lt;br /&gt;
    &amp;quot;bna&amp;quot;,&amp;quot;brna&amp;quot;,&amp;quot;bnaal&amp;quot;,&amp;quot;bnan&amp;quot;,&amp;quot;brnan&amp;quot;,&amp;quot;bnaz&amp;quot;,&amp;quot;brnaz&amp;quot;,&amp;quot;bnazal&amp;quot;,&lt;br /&gt;
    &amp;quot;bne&amp;quot;,&amp;quot;brne&amp;quot;,&amp;quot;bneal&amp;quot;,&amp;quot;bnez&amp;quot;,&amp;quot;brnez&amp;quot;,&amp;quot;bnezal&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table for opcodes&lt;br /&gt;
local opcode_lookup = {}&lt;br /&gt;
for _, op in ipairs(opcodes) do&lt;br /&gt;
    opcode_lookup[op] = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- list of parameters&lt;br /&gt;
local parameters = { --taken from Assets.Scripts.Objects.Motherboards:LogicType&lt;br /&gt;
		&amp;quot;None&amp;quot;,&amp;quot;Power&amp;quot;,&amp;quot;Open&amp;quot;,&amp;quot;Mode&amp;quot;,&amp;quot;Error&amp;quot;,&lt;br /&gt;
		&amp;quot;Pressure&amp;quot;,&amp;quot;Temperature&amp;quot;,&amp;quot;PressureExternal&amp;quot;,&amp;quot;PressureInternal&amp;quot;,&lt;br /&gt;
		&amp;quot;Activate&amp;quot;,&amp;quot;Lock&amp;quot;,&amp;quot;Charge&amp;quot;,&amp;quot;Setting&amp;quot;,&lt;br /&gt;
		&amp;quot;Reagents&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioOxygen&amp;quot;,&amp;quot;RatioCarbonDioxide&amp;quot;,&amp;quot;RatioNitrogen&amp;quot;,&amp;quot;RatioPollutant&amp;quot;,&amp;quot;RatioVolatiles&amp;quot;,&amp;quot;RatioWater&amp;quot;,&lt;br /&gt;
		&amp;quot;Horizontal&amp;quot;,&amp;quot;Vertical&amp;quot;,&amp;quot;SolarAngle&amp;quot;,&amp;quot;Maximum&amp;quot;,&lt;br /&gt;
		&amp;quot;Ratio&amp;quot;,&lt;br /&gt;
		&amp;quot;PowerPotential&amp;quot;,&amp;quot;PowerActual&amp;quot;,&lt;br /&gt;
		&amp;quot;Quantity&amp;quot;,&lt;br /&gt;
		&amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;ImportQuantity&amp;quot;,&amp;quot;ImportSlotOccupant&amp;quot;,&amp;quot;ExportQuantity&amp;quot;,&amp;quot;ExportSlotOccupant&amp;quot;,&lt;br /&gt;
		&amp;quot;RequiredPower&amp;quot;,&lt;br /&gt;
		&amp;quot;HorizontalRatio&amp;quot;,&amp;quot;VerticalRatio&amp;quot;,&lt;br /&gt;
		&amp;quot;PowerRequired&amp;quot;,&amp;quot;Idle&amp;quot;,&lt;br /&gt;
		&amp;quot;Color&amp;quot;,&lt;br /&gt;
		&amp;quot;ElevatorSpeed&amp;quot;,&amp;quot;ElevatorLevel&amp;quot;,&lt;br /&gt;
		&amp;quot;RecipeHash&amp;quot;,&lt;br /&gt;
		&amp;quot;ExportSlotHash&amp;quot;,&amp;quot;ImportSlotHash&amp;quot;,&lt;br /&gt;
		&amp;quot;PlantHealth1&amp;quot;,&amp;quot;PlantHealth2&amp;quot;,&amp;quot;PlantHealth3&amp;quot;,&amp;quot;PlantHealth4&amp;quot;, --i think these are deprecated.&lt;br /&gt;
		&amp;quot;PlantGrowth1&amp;quot;,&amp;quot;PlantGrowth2&amp;quot;,&amp;quot;PlantGrowth3&amp;quot;,&amp;quot;PlantGrowth4&amp;quot;,&lt;br /&gt;
		&amp;quot;PlantEfficiency1&amp;quot;,&amp;quot;PlantEfficiency2&amp;quot;,&amp;quot;PlantEfficiency3&amp;quot;,&amp;quot;PlantEfficiency4&amp;quot;,&lt;br /&gt;
		&amp;quot;PlantHash1&amp;quot;,&amp;quot;PlantHash2&amp;quot;,&amp;quot;PlantHash3&amp;quot;,&amp;quot;PlantHash4&amp;quot;,&lt;br /&gt;
		&amp;quot;RequestHash&amp;quot;,&amp;quot;CompletionRatio&amp;quot;,&amp;quot;ClearMemory&amp;quot;,&amp;quot;ExportCount&amp;quot;,&amp;quot;ImportCount&amp;quot;,&lt;br /&gt;
		&amp;quot;PowerGeneration&amp;quot;,&lt;br /&gt;
		&amp;quot;TotalMoles&amp;quot;,&amp;quot;Volume&amp;quot;,&lt;br /&gt;
		&amp;quot;Plant&amp;quot;,&amp;quot;Harvest&amp;quot;,&amp;quot;Output&amp;quot;,&lt;br /&gt;
		&amp;quot;PressureSetting&amp;quot;,&amp;quot;TemperatureSetting&amp;quot;,&amp;quot;TemperatureExternal&amp;quot;,&amp;quot;Filtration&amp;quot;,&amp;quot;AirRelease&amp;quot;,&lt;br /&gt;
		&amp;quot;PositionX&amp;quot;,&amp;quot;PositionY&amp;quot;,&amp;quot;PositionZ&amp;quot;,&lt;br /&gt;
		&amp;quot;VelocityMagnitude&amp;quot;,&amp;quot;VelocityRelativeX&amp;quot;,&amp;quot;VelocityRelativeY&amp;quot;,&amp;quot;VelocityRelativeZ&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioNitrousOxide&amp;quot;,&lt;br /&gt;
		&amp;quot;PrefabHash&amp;quot;,&lt;br /&gt;
		&amp;quot;ForceWrite&amp;quot;,&lt;br /&gt;
		&amp;quot;SignalStrength&amp;quot;,&amp;quot;SignalID&amp;quot;,&amp;quot;TargetX&amp;quot;,&amp;quot;TargetY&amp;quot;,&amp;quot;TargetZ&amp;quot;,&amp;quot;SettingInput&amp;quot;,&amp;quot;SettingOutput&amp;quot;,&lt;br /&gt;
		&amp;quot;CurrentResearchPodType&amp;quot;,&amp;quot;ManualResearchRequiredPod&amp;quot;,&lt;br /&gt;
		&amp;quot;MineablesInVicinity&amp;quot;,&amp;quot;MineablesInQueue&amp;quot;,&lt;br /&gt;
		&amp;quot;NextWeatherEventTime&amp;quot;,&lt;br /&gt;
		&amp;quot;Combustion&amp;quot;,&lt;br /&gt;
		&amp;quot;Fuel&amp;quot;,&amp;quot;ReturnFuelCost&amp;quot;,&amp;quot;CollectableGoods&amp;quot;,&lt;br /&gt;
		&amp;quot;Time&amp;quot;,&amp;quot;Bpm&amp;quot;,&lt;br /&gt;
		&amp;quot;EnvironmentEfficiency&amp;quot;,&amp;quot;WorkingGasEfficiency&amp;quot;,&lt;br /&gt;
		&amp;quot;PressureInput&amp;quot;,&amp;quot;TemperatureInput&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioOxygenInput&amp;quot;,&amp;quot;RatioCarbonDioxideInput&amp;quot;,&amp;quot;RatioNitrogenInput&amp;quot;,&amp;quot;RatioPollutantInput&amp;quot;,&amp;quot;RatioVolatilesInput&amp;quot;,&amp;quot;RatioWaterInput&amp;quot;,&amp;quot;RatioNitrousOxideInput&amp;quot;,&lt;br /&gt;
		&amp;quot;TotalMolesInput&amp;quot;,&lt;br /&gt;
		&amp;quot;PressureInput2&amp;quot;,&amp;quot;TemperatureInput2&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioOxygenInput2&amp;quot;,&amp;quot;RatioCarbonDioxideInput2&amp;quot;,&amp;quot;RatioNitrogenInput2&amp;quot;,&amp;quot;RatioPollutantInput2&amp;quot;,&amp;quot;RatioVolatilesInput2&amp;quot;,&amp;quot;RatioWaterInput2&amp;quot;,&amp;quot;RatioNitrousOxideInput2&amp;quot;,&lt;br /&gt;
		&amp;quot;TotalMolesInput2&amp;quot;,&lt;br /&gt;
		&amp;quot;PressureOutput&amp;quot;,&amp;quot;TemperatureOutput&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioOxygenOutput&amp;quot;,&amp;quot;RatioCarbonDioxideOutput&amp;quot;,&amp;quot;RatioNitrogenOutput&amp;quot;,&amp;quot;RatioPollutantOutput&amp;quot;,&amp;quot;RatioVolatilesOutput&amp;quot;,&amp;quot;RatioWaterOutput&amp;quot;,&amp;quot;RatioNitrousOxideOutput&amp;quot;,&lt;br /&gt;
		&amp;quot;TotalMolesOutput&amp;quot;,&lt;br /&gt;
		&amp;quot;PressureOutput2&amp;quot;,&amp;quot;TemperatureOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioOxygenOutput2&amp;quot;,&amp;quot;RatioCarbonDioxideOutput2&amp;quot;,&amp;quot;RatioNitrogenOutput2&amp;quot;,&amp;quot;RatioPollutantOutput2&amp;quot;,&amp;quot;RatioVolatilesOutput2&amp;quot;,&amp;quot;RatioWaterOutput2&amp;quot;,&amp;quot;RatioNitrousOxideOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;TotalMolesOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;CombustionInput&amp;quot;,&amp;quot;CombustionInput2&amp;quot;,&amp;quot;CombustionOutput&amp;quot;,&amp;quot;CombustionOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;OperationalTemperatureEfficiency&amp;quot;,&amp;quot;TemperatureDifferentialEfficiency&amp;quot;,&amp;quot;PressureEfficiency&amp;quot;,&lt;br /&gt;
		&amp;quot;CombustionLimiter&amp;quot;,&amp;quot;Throttle&amp;quot;,&amp;quot;Rpm&amp;quot;,&amp;quot;Stress&amp;quot;,&lt;br /&gt;
		&amp;quot;InterrogationProgress&amp;quot;,&amp;quot;TargetPadIndex&amp;quot;,&amp;quot;SizeX&amp;quot;,&amp;quot;SizeY&amp;quot;,&amp;quot;SizeZ&amp;quot;,&amp;quot;MinimumWattsToContact&amp;quot;,&amp;quot;WattsReachingContact&amp;quot;,&lt;br /&gt;
		&amp;quot;Channel0&amp;quot;,&amp;quot;Channel1&amp;quot;,&amp;quot;Channel2&amp;quot;,&amp;quot;Channel3&amp;quot;,&amp;quot;Channel4&amp;quot;,&amp;quot;Channel5&amp;quot;,&amp;quot;Channel6&amp;quot;,&amp;quot;Channel7&amp;quot;,&lt;br /&gt;
		&amp;quot;LineNumber&amp;quot;,&lt;br /&gt;
		&amp;quot;Flush&amp;quot;,&amp;quot;SoundAlert&amp;quot;,&lt;br /&gt;
		&amp;quot;SolarIrradiance&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioLiquidNitrogen&amp;quot;,&amp;quot;RatioLiquidNitrogenInput&amp;quot;,&amp;quot;RatioLiquidNitrogenInput2&amp;quot;,&amp;quot;RatioLiquidNitrogenOutput&amp;quot;,&amp;quot;RatioLiquidNitrogenOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;VolumeOfLiquid&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioLiquidOxygen&amp;quot;,&amp;quot;RatioLiquidOxygenInput&amp;quot;,&amp;quot;RatioLiquidOxygenInput2&amp;quot;,&amp;quot;RatioLiquidOxygenOutput&amp;quot;,&amp;quot;RatioLiquidOxygenOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioLiquidVolatiles&amp;quot;,&amp;quot;RatioLiquidVolatilesInput&amp;quot;,&amp;quot;RatioLiquidVolatilesInput2&amp;quot;,&amp;quot;RatioLiquidVolatilesOutput&amp;quot;,&amp;quot;RatioLiquidVolatilesOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioSteam&amp;quot;,&amp;quot;RatioSteamInput&amp;quot;,&amp;quot;RatioSteamInput2&amp;quot;,&amp;quot;RatioSteamOutput&amp;quot;,&amp;quot;RatioSteamOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;ContactTypeId&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioLiquidCarbonDioxide&amp;quot;,&amp;quot;RatioLiquidCarbonDioxideInput&amp;quot;,&amp;quot;RatioLiquidCarbonDioxideInput2&amp;quot;,&amp;quot;RatioLiquidCarbonDioxideOutput&amp;quot;,&amp;quot;RatioLiquidCarbonDioxideOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioLiquidPollutant&amp;quot;,&amp;quot;RatioLiquidPollutantInput&amp;quot;,&amp;quot;RatioLiquidPollutantInput2&amp;quot;,&amp;quot;RatioLiquidPollutantOutput&amp;quot;,&amp;quot;RatioLiquidPollutantOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioLiquidNitrousOxide&amp;quot;,&amp;quot;RatioLiquidNitrousOxideInput&amp;quot;,&amp;quot;RatioLiquidNitrousOxideInput2&amp;quot;,&amp;quot;RatioLiquidNitrousOxideOutput&amp;quot;,&amp;quot;RatioLiquidNitrousOxideOutput2&amp;quot;,&lt;br /&gt;
		&amp;quot;Progress&amp;quot;,&amp;quot;DestinationCode&amp;quot;,&amp;quot;Acceleration&amp;quot;,&amp;quot;ReferenceId&amp;quot;,&amp;quot;AutoShutOff&amp;quot;,&amp;quot;Mass&amp;quot;,&amp;quot;DryMass&amp;quot;,&amp;quot;Thrust&amp;quot;,&amp;quot;Weight&amp;quot;,&amp;quot;ThrustToWeight&amp;quot;,&amp;quot;TimeToDestination&amp;quot;,&amp;quot;BurnTimeRemaining&amp;quot;,&lt;br /&gt;
		&amp;quot;AutoLand&amp;quot;,&amp;quot;ForwardX&amp;quot;,&amp;quot;ForwardY&amp;quot;,&amp;quot;ForwardZ&amp;quot;,&amp;quot;Orientation&amp;quot;,&amp;quot;VelocityX&amp;quot;,&amp;quot;VelocityY&amp;quot;,&amp;quot;VelocityZ&amp;quot;,&lt;br /&gt;
		&amp;quot;PassedMoles&amp;quot;,&amp;quot;ExhaustVelocity&amp;quot;,&lt;br /&gt;
		&amp;quot;FlightControlRule&amp;quot;,&amp;quot;ReEntryAltitude&amp;quot;,&amp;quot;Apex&amp;quot;,&lt;br /&gt;
		&amp;quot;EntityState&amp;quot;,&amp;quot;DrillCondition&amp;quot;,&lt;br /&gt;
		&amp;quot;Index&amp;quot;,&amp;quot;CelestialHash&amp;quot;,&amp;quot;AlignmentError&amp;quot;,&amp;quot;DistanceAu&amp;quot;,&amp;quot;OrbitPeriod&amp;quot;,&amp;quot;Inclination&amp;quot;,&amp;quot;Eccentricity&amp;quot;,&amp;quot;SemiMajorAxis&amp;quot;,&amp;quot;DistanceKm&amp;quot;,&amp;quot;CelestialParentHash&amp;quot;,&amp;quot;TrueAnomaly&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioHydrogen&amp;quot;,&amp;quot;RatioLiquidHydrogen&amp;quot;,&amp;quot;RatioPollutedWater&amp;quot;,&lt;br /&gt;
		&amp;quot;Discover&amp;quot;,&amp;quot;Chart&amp;quot;,&amp;quot;Survey&amp;quot;,&amp;quot;NavPoints&amp;quot;,&amp;quot;ChartedNavPoints&amp;quot;,&amp;quot;Sites&amp;quot;,&amp;quot;CurrentCode&amp;quot;,&amp;quot;Density&amp;quot;,&amp;quot;Richness&amp;quot;,&amp;quot;Size&amp;quot;,&amp;quot;TotalQuantity&amp;quot;,&amp;quot;MinedQuantity&amp;quot;,&lt;br /&gt;
		&amp;quot;BestContactFilter&amp;quot;,&lt;br /&gt;
		&amp;quot;NameHash&amp;quot;,&lt;br /&gt;
		&amp;quot;Altitude&amp;quot;,&lt;br /&gt;
		&amp;quot;TargetSlotIndex&amp;quot;,&amp;quot;TargetPrefabHash&amp;quot;,&lt;br /&gt;
		&amp;quot;Extended&amp;quot;,&lt;br /&gt;
		&amp;quot;NetworkFault&amp;quot;,&lt;br /&gt;
		&amp;quot;ProportionalGain&amp;quot;,&amp;quot;IntegralGain&amp;quot;,&amp;quot;DerivativeGain&amp;quot;,&amp;quot;Minimum&amp;quot;,&amp;quot;Setpoint&amp;quot;,&amp;quot;Reset&amp;quot;,&lt;br /&gt;
		&amp;quot;StackSize&amp;quot;,&lt;br /&gt;
		&amp;quot;NextWeatherHash&amp;quot;,&lt;br /&gt;
		&amp;quot;ContactSlotIndex&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioHydrazine&amp;quot;,&amp;quot;RatioLiquidHydrazine&amp;quot;,&amp;quot;RatioLiquidAlcohol&amp;quot;,&amp;quot;RatioHelium&amp;quot;,&amp;quot;RatioLiquidSodiumChloride&amp;quot;,&amp;quot;RatioSilanol&amp;quot;,&amp;quot;RatioLiquidSilanol&amp;quot;,&lt;br /&gt;
		&amp;quot;RatioHydrochloricAcid&amp;quot;,&amp;quot;RatioLiquidHydrochloricAcid&amp;quot;,&amp;quot;RatioOzone&amp;quot;,&amp;quot;RatioLiquidOzone&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
table.insert(parameters, &amp;quot;Sum&amp;quot;) --these weren't on that list.&lt;br /&gt;
table.insert(parameters, &amp;quot;Average&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table for parameters&lt;br /&gt;
local parameter_lookup = {}&lt;br /&gt;
for _, par in ipairs(parameters) do&lt;br /&gt;
    parameter_lookup[par] = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function highlight_line(line)&lt;br /&gt;
    --line = mw.text.nowiki(line) breaks strings in IC10 as it escapes &amp;quot;&amp;quot; &lt;br /&gt;
    --minimal replacement instead&lt;br /&gt;
    line = line&lt;br /&gt;
    :gsub(&amp;quot;&amp;amp;&amp;quot;, &amp;quot;&amp;amp;amp;&amp;quot;)&lt;br /&gt;
    :gsub(&amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;amp;lt;&amp;quot;)&lt;br /&gt;
    :gsub(&amp;quot;&amp;gt;&amp;quot;, &amp;quot;&amp;amp;gt;&amp;quot;)&lt;br /&gt;
    :gsub(&amp;quot;=&amp;quot;, &amp;quot;&amp;amp;equals;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        '&amp;lt;span style=&amp;quot;color:#7f8c8d;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        '&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- r0–r9&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r[0-9]%f[%W]&amp;quot;, '&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- r10–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r1[0-5]%f[%W]&amp;quot;, '&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, '&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- real devices d0–d5&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]d[0-5]%f[%W]&amp;quot;,&lt;br /&gt;
        '&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- placeholder d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]d%?&amp;quot;, &lt;br /&gt;
        '&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(%$[%da-fA-F]+)%f[%W]&amp;quot;,&lt;br /&gt;
        '&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        '&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
    -- opcodes&lt;br /&gt;
    for op,_ in pairs(opcode_lookup) do&lt;br /&gt;
        line = string.gsub(line,&lt;br /&gt;
            &amp;quot;%f[%w](&amp;quot;..op..&amp;quot;)%f[%W]&amp;quot;,&lt;br /&gt;
            '&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- parameters&lt;br /&gt;
    for par,_ in pairs(parameter_lookup) do&lt;br /&gt;
        line = string.gsub(line,&lt;br /&gt;
            &amp;quot;%f[%w](&amp;quot;..par..&amp;quot;)%f[%W]&amp;quot;,&lt;br /&gt;
            '&amp;lt;span style=&amp;quot;color: #F39C12; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return line&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.highlight(frame)&lt;br /&gt;
    local text = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
    local lines = mw.text.split(text, &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for i,line in ipairs(lines) do&lt;br /&gt;
        lines[i] = highlight_line(line)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return '&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#0d1b2a; border:1px solid #1b263b; white-space:pre; display:block; padding:8px; color:#ffffff;&amp;quot;&amp;gt;'&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. '&amp;lt;/pre&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Silanol&amp;diff=25870</id>
		<title>Silanol</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Silanol&amp;diff=25870"/>
				<updated>2026-03-10T20:33:44Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Notes */  fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox gas&lt;br /&gt;
| gas_name = Silanol&lt;br /&gt;
| image = icon-silanol.png&lt;br /&gt;
| heat = 101 J/mol*K &amp;lt;!-- Chemistry.SPECIFIC_HEAT_COOLANT --&amp;gt;&lt;br /&gt;
| latent_heat = 10000 J/mol &amp;lt;!-- Chemistry.LATENT_HEAT_COOLANT --&amp;gt;&lt;br /&gt;
| minimum_condensation = 516 kPa at 163.68638101 K&lt;br /&gt;
| max_liquid = 6000 kPa at 821.669458033 K &lt;br /&gt;
| coefficient_a = 0.22176555607618392 &amp;lt;!-- Chemistry.COEFFICIENT_A_COOLANT --&amp;gt;&lt;br /&gt;
| coefficient_b = 1.5206578718752168 &amp;lt;!-- Chemistry.COEFFICIENT_B_COOLANT --&amp;gt;&lt;br /&gt;
| freezes = 163.68638101 K&lt;br /&gt;
| liquid_volume = 160 L/kmol&lt;br /&gt;
| molar_mass = 166 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.26 &amp;lt;!-- Chemistry.PolyatomicDegreesOfFreedom --&amp;gt;&lt;br /&gt;
| thermal_efficiency = 0.05 &amp;lt;!-- Liquid Silanol is 0.00 --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Silanol is the premium refrigerant gas for utilizing [[Phase Change Mechanics||phase change]] to pump heat. With its extremely high heat capacity it also makes an excellent [[coolant]], able to absorb large quantities of heat energy with minimal temperature fluctuation. &amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Silanol is best used as a phase-change coolant in high-temperature-range loops. Its high critical temperature of 821.7 K (548.55 °C) allows it to still liquify and eject heat even on [[Venus]] (but not during [[Vulcan]] daytime).&lt;br /&gt;
&lt;br /&gt;
However, its extremely low molar volume of just 0.16 L/mol (6.25 mols/L) limits how quickly it can be pumped into an [[Evaporation Chamber]], for a maximum achievable evaporation capacity of 15.625 kJ at a 0.25 L/tick flow rate. For medium-temperature applications, a [[Water]] loop may provide superior performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Silanol is planned to be obtained through late-game synthesis[https://www.youtube.com/watch?v=i-Qk14wsDTo].&lt;br /&gt;
&lt;br /&gt;
It can also be acquired through medium and large gas traders.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Internal game constants refer to it as [[Coolant]].&lt;br /&gt;
* Silanol is highly toxic to humans, with concentrations above 1kPa causing lung damage. Similarly to [[Hydrazine]] and [[Hydrochloric Acid]], it isn't metabolized by human lungs at toxic concentrations.&lt;br /&gt;
* [[Zrilian]] lungs are immune to damage from exposure to Silanol.&lt;br /&gt;
&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Silanol&amp;diff=25869</id>
		<title>Silanol</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Silanol&amp;diff=25869"/>
				<updated>2026-03-10T20:32:08Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Add toxin information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox gas&lt;br /&gt;
| gas_name = Silanol&lt;br /&gt;
| image = icon-silanol.png&lt;br /&gt;
| heat = 101 J/mol*K &amp;lt;!-- Chemistry.SPECIFIC_HEAT_COOLANT --&amp;gt;&lt;br /&gt;
| latent_heat = 10000 J/mol &amp;lt;!-- Chemistry.LATENT_HEAT_COOLANT --&amp;gt;&lt;br /&gt;
| minimum_condensation = 516 kPa at 163.68638101 K&lt;br /&gt;
| max_liquid = 6000 kPa at 821.669458033 K &lt;br /&gt;
| coefficient_a = 0.22176555607618392 &amp;lt;!-- Chemistry.COEFFICIENT_A_COOLANT --&amp;gt;&lt;br /&gt;
| coefficient_b = 1.5206578718752168 &amp;lt;!-- Chemistry.COEFFICIENT_B_COOLANT --&amp;gt;&lt;br /&gt;
| freezes = 163.68638101 K&lt;br /&gt;
| liquid_volume = 160 L/kmol&lt;br /&gt;
| molar_mass = 166 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.26 &amp;lt;!-- Chemistry.PolyatomicDegreesOfFreedom --&amp;gt;&lt;br /&gt;
| thermal_efficiency = 0.05 &amp;lt;!-- Liquid Silanol is 0.00 --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Silanol is the premium refrigerant gas for utilizing [[Phase Change Mechanics||phase change]] to pump heat. With its extremely high heat capacity it also makes an excellent [[coolant]], able to absorb large quantities of heat energy with minimal temperature fluctuation. &amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Silanol is best used as a phase-change coolant in high-temperature-range loops. Its high critical temperature of 821.7 K (548.55 °C) allows it to still liquify and eject heat even on [[Venus]] (but not during [[Vulcan]] daytime).&lt;br /&gt;
&lt;br /&gt;
However, its extremely low molar volume of just 0.16 L/mol (6.25 mols/L) limits how quickly it can be pumped into an [[Evaporation Chamber]], for a maximum achievable evaporation capacity of 15.625 kJ at a 0.25 L/tick flow rate. For medium-temperature applications, a [[Water]] loop may provide superior performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Silanol is planned to be obtained through late-game synthesis[https://www.youtube.com/watch?v=i-Qk14wsDTo].&lt;br /&gt;
&lt;br /&gt;
It can also be acquired through medium and large gas traders.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Internal game constants refer to it as [[Coolant]].&lt;br /&gt;
* Silanol is highly toxic to humans, with concentrations above 1kPa causing lung damage. Similarly to [[Hydrazine]] and [[Hydrochloric Acid]], it isn't metabolized by human lungs at toxic concentrations.&lt;br /&gt;
* [[Zrillian]] lungs are immune to damage from exposure to Silanol.&lt;br /&gt;
&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Hydrazine&amp;diff=25868</id>
		<title>Hydrazine</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Hydrazine&amp;diff=25868"/>
				<updated>2026-03-10T01:23:18Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox gas&lt;br /&gt;
| gas_name = Hydrazine&lt;br /&gt;
| image = Icon-hydrazine.png&lt;br /&gt;
| heat = 48.4 J/mol*K &amp;lt;!-- Chemistry.SPECIFIC_HEAT_HYDRAZINE --&amp;gt;&lt;br /&gt;
| latent_heat = 4000 J/mol &amp;lt;!-- LATENT_HEAT_HYDRAZINE --&amp;gt;&lt;br /&gt;
| minimum_condensation = 6.3 kPa at 246.236749353 K &lt;br /&gt;
| max_liquid = 6000 kPa at 520.807708414 K &amp;lt;!-- Chemistry.COEFFIENT_B_HYDRAZINE (sic) --&amp;gt;&lt;br /&gt;
| freezes = 246.236749353 K&lt;br /&gt;
| autoignition_temperature = 520.807708414 K&lt;br /&gt;
| coefficient_a = 8E-22 &amp;lt;!-- Chemistry.COEFFIENT_A_HYDRAZINE (sic) --&amp;gt;&lt;br /&gt;
| coefficient_b = 9.15642808045339 &amp;lt;!-- Chemistry.COEFFIENT_B_HYDRAZINE (sic) --&amp;gt;&lt;br /&gt;
| thermal_efficiency = 0.08 &amp;lt;!-- Liquid hydrazine: 0.00 --&amp;gt;&lt;br /&gt;
| enthalpy = 204 kJ / mol &amp;lt;!-- Chemistry.ENTHALPY_HYDRAZINE --&amp;gt;&lt;br /&gt;
| liquid_volume = 30 L/kmol &amp;lt;!--Chemistry.MOLAR_VOLUME_HYDRAZINE--&amp;gt;&lt;br /&gt;
| molar_mass = 32 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.26 &amp;lt;!--Chemistry.PolyatomicDegreesOfFreedom--&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Hydrazine is the perfect fuel for space exploration as it requires no oxidiser to combust, only needing heat or a spark. It is more commonly stored in its liquid form Liquid Hydrazine which is stable at room temperature. Hydrazine is extremely reactive and will violently combust in the presence of an oxidiser. It is extremely toxic to all forms of life.&amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Hydrazine''' or '''N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;H&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;''' is a [[Hypergol]]. Hydrazine will spontaneously autoignite at 520.8 K (247.7°C), or at any temperature in the presence of [[Oxygen]], [[Ozone]] or [[Nitrous Oxide]].&amp;lt;!--untested--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Combustion ===&lt;br /&gt;
* 1 mol N2H4 -&amp;gt; 4 mol [[Pollutant|X]] + 204 kJ (autoignition at 247.7°C)&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
''See also: [[Fuel]]''&lt;br /&gt;
&lt;br /&gt;
Hydrazine has a low combustion enthalpy, making it suboptimal for rocketry applications that require high performance. However, the fact it is a monopropellant allows its use in a [[Pumped Gas Engine]] or [[Pressure-Fed Liquid Engine]] without requiring any premixing, simplifying rocket and/or launch pad design.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
TBW&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
Liquid hydrazine can be acquired from liquid traders.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;References /&amp;gt;&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;br /&gt;
[[Category:Gas]][[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Ozone&amp;diff=25867</id>
		<title>Ozone</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Ozone&amp;diff=25867"/>
				<updated>2026-03-10T01:20:13Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
{{Infobox gas&lt;br /&gt;
| gas_name = Ozone&lt;br /&gt;
| image = icon-ozone.png&lt;br /&gt;
| heat = 38.6 J/mol*K &amp;lt;!-- Atmospherics.Mole::GetSpecificHeat --&amp;gt;&lt;br /&gt;
| latent_heat = 1000 J/mol &amp;lt;!-- Atmospherics.Mole::LatentHeatOfVaporization --&amp;gt;&lt;br /&gt;
| minimum_condensation = 250 kPa at 81.4067268868 K&lt;br /&gt;
| max_liquid = 6000 kPa at 304.387897614 K&lt;br /&gt;
| freezes = 81.4067268868 K &amp;lt;!-- evaporation temperature at 250kPa--&amp;gt;&lt;br /&gt;
| coefficient_a = 0.006219763823043718 &amp;lt;!-- Evaporation Temperature = (pressure_kPa/A)^(1/B) --&amp;gt;&lt;br /&gt;
| coefficient_b = 2.4097251251207226 &amp;lt;!-- Evaporation Pressure = A*(Temperature^B) --&amp;gt;&lt;br /&gt;
| autoignition_offset = -150&lt;br /&gt;
| enthalpy_multiplier = 2&lt;br /&gt;
| liquid_volume = 26 L/kmol&lt;br /&gt;
| molar_mass = 24 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.333333 &lt;br /&gt;
| thermal_efficiency = 0.12&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Description = &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Ozone is a highly energetic oxidiser. As with [[Nitrous Oxide]], when mixed with a volatile gas Ozone will create extra hot combustion.&amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Ozone&amp;lt;/b&amp;gt;, also referred to as &amp;lt;b&amp;gt;O&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/b&amp;gt;, is an upcoming gas/liquid.&lt;br /&gt;
&lt;br /&gt;
= Details =&lt;br /&gt;
Ozone will condense into '''Liquid Ozone''' starting at {{Temperature|304.38}}.&lt;br /&gt;
&lt;br /&gt;
Combustions with Ozone are twice as energetic as [[Oxygen]] - a gain similar to [[Nitrous Oxide]]. Autoignition temperatures get reduced by 150°C.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* When used as oxidizer in rocket fuel, Ozone has a mass of 41.(6) mol/kg.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Ozone can be acquired from gas and liquid traders.&lt;br /&gt;
&lt;br /&gt;
You can collect Ozone from the following sources:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|-}&lt;br /&gt;
&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]][[Category:Liquid]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Helium&amp;diff=25866</id>
		<title>Helium</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Helium&amp;diff=25866"/>
				<updated>2026-03-10T01:18:28Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox gas&lt;br /&gt;
| gas_name = Helium&lt;br /&gt;
| image = Icon-helium.png&lt;br /&gt;
| heat = 20.8 J/mol*K &amp;lt;!-- Atmospherics.Mole::GetSpecificHeat --&amp;gt;&lt;br /&gt;
| thermal_efficiency = 0.18&lt;br /&gt;
| molar_mass = 4 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.666666 &amp;lt;!--Chemistry.MonatomicDegreesOfFreedom--&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;&amp;lt;A:EN:-1978884352&amp;gt;&amp;lt;/q&amp;gt;&amp;lt;br&amp;gt; &amp;lt;!--probably should wait until this gets filled.--&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
Helium is the only monoatomic gas in-game, giving it an unrivaled heat capacity ratio of 1.666666. This, along with its low molar mass, give make it ideal as a pressurant in specialized rocketry applications where [[Hydrogen]] isn't suitable.&lt;br /&gt;
&lt;br /&gt;
It is also completely inert, being incapable of condensing into a liquid form. This allows its use as a non-phase-changing heat exchange medium in extremely low temperature applications.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
Helium can be acquired from medium and large gas traders.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;References /&amp;gt;&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;br /&gt;
[[Category:Gas]][[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Silanol&amp;diff=25865</id>
		<title>Silanol</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Silanol&amp;diff=25865"/>
				<updated>2026-03-10T01:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox gas&lt;br /&gt;
| gas_name = Silanol&lt;br /&gt;
| image = icon-silanol.png&lt;br /&gt;
| heat = 101 J/mol*K &amp;lt;!-- Chemistry.SPECIFIC_HEAT_COOLANT --&amp;gt;&lt;br /&gt;
| latent_heat = 10000 J/mol &amp;lt;!-- Chemistry.LATENT_HEAT_COOLANT --&amp;gt;&lt;br /&gt;
| minimum_condensation = 516 kPa at 163.68638101 K&lt;br /&gt;
| max_liquid = 6000 kPa at 821.669458033 K &lt;br /&gt;
| coefficient_a = 0.22176555607618392 &amp;lt;!-- Chemistry.COEFFICIENT_A_COOLANT --&amp;gt;&lt;br /&gt;
| coefficient_b = 1.5206578718752168 &amp;lt;!-- Chemistry.COEFFICIENT_B_COOLANT --&amp;gt;&lt;br /&gt;
| freezes = 163.68638101 K&lt;br /&gt;
| liquid_volume = 160 L/kmol&lt;br /&gt;
| molar_mass = 166 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.26 &amp;lt;!-- Chemistry.PolyatomicDegreesOfFreedom --&amp;gt;&lt;br /&gt;
| thermal_efficiency = 0.05 &amp;lt;!-- Liquid Silanol is 0.00 --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Silanol is the premium refrigerant gas for utilizing [[Phase Change Mechanics||phase change]] to pump heat. With its extremely high heat capacity it also makes an excellent [[coolant]], able to absorb large quantities of heat energy with minimal temperature fluctuation. &amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Silanol is best used as a phase-change coolant in high-temperature-range loops. Its high critical temperature of 821.7 K (548.55 °C) allows it to still liquify and eject heat even on [[Venus]] (but not during [[Vulcan]] daytime).&lt;br /&gt;
&lt;br /&gt;
However, its extremely low molar volume of just 0.16 L/mol (6.25 mols/L) limits how quickly it can be pumped into an [[Evaporation Chamber]], for a maximum achievable evaporation capacity of 15.625 kJ at a 0.25 L/tick flow rate. For medium-temperature applications, a [[Water]] loop may provide superior performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Silanol is planned to be obtained through late-game synthesis[https://www.youtube.com/watch?v=i-Qk14wsDTo].&lt;br /&gt;
&lt;br /&gt;
It can also be acquired through medium and large gas traders.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Internal game constants refer to it as [[Coolant]].&lt;br /&gt;
&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Liquid_Sodium_Chloride&amp;diff=25864</id>
		<title>Liquid Sodium Chloride</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Liquid_Sodium_Chloride&amp;diff=25864"/>
				<updated>2026-03-10T01:16:26Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox gas&lt;br /&gt;
| gas_name = Liquid Sodium Chloride&lt;br /&gt;
| image = icon-liquidsodiumchloride.png&lt;br /&gt;
| heat = 130 J/mol*K &amp;lt;!-- Chemistry.SPECIFIC_HEAT_SODIUM_CHLORIDE --&amp;gt;&lt;br /&gt;
| latent_heat = 1000 J/mol &amp;lt;!-- Chemistry.LATENT_HEAT_SODIUM_CHLORIDE --&amp;gt;&lt;br /&gt;
| minimum_condensation = 6.3 kPa at 605.903458297 K&lt;br /&gt;
| max_liquid = 515 kPa at 2799.31057833 K &lt;br /&gt;
| coefficient_a = 6.211737044295E-08 &amp;lt;!-- Chemistry.COEFFICIENT_A_SODIUMCHLORIDE --&amp;gt;&lt;br /&gt;
| coefficient_b = 2.8774143233482707 &amp;lt;!-- Chemistry.COEFFICIENT_B_SODIUMCHLORIDE --&amp;gt;&lt;br /&gt;
| freezes = 605.903458297 K&lt;br /&gt;
| liquid_volume = 40 L/kmol&lt;br /&gt;
| molar_mass = 101 g/mol&lt;br /&gt;
| heat_capacity_ratio = 1.26 &amp;lt;!-- Chemistry.PolyatomicDegreesOfFreedom --&amp;gt;&lt;br /&gt;
| thermal_efficiency = 0 &amp;lt;!-- no idea how to cram this in a gas canister either. --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Liquid Sodium Chloride is unique in that it will remain in liquid form at extremely high temperatures making it an excellent medium for storing heat energy.&amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Liquid Sodium Chloride has the highest critical point and highest molar heat capacity of all liquids currently in-game, making it excellent for high-temperature heat storage.&lt;br /&gt;
&lt;br /&gt;
Its extremely low in-world liquid density (0.02215466833 mol/in-world L, 45.1372137513 in-world L/mol) and low evaporation pressure also make it an interesting candidate for low-power pumping systems. However, it decomposes into [[Pollutant]] on evaporation, losing considerable amounts of stored heat energy in the process. Care must be taken to avoid uncontrolled spills as small quantities can easily flood and overpressurize rooms, with only 177 mols (~7 L in pipes) being required to fill a world grid cell. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Liquid Sodium Chloride can be obtained by melting [[Salt]] (acquired from ore traders) at a [[Furnace]], [[Advanced Furnace]], or room exceeding its 333°C melting point.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| [[Salt]] || 50 mol&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
TBW&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25860</id>
		<title>User:RA2lover/Sandbox/Thermodynamics machinery notes</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25860"/>
				<updated>2026-03-07T23:31:01Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Note efficiency is actually 25 for 100%.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pipe / Liquid Pipe==&lt;br /&gt;
&lt;br /&gt;
====Weakest member selection====&lt;br /&gt;
* If the pipe network already has a weakest member, it remains in the same pipe network, it hasn't burst, and it's not buried, use it.&lt;br /&gt;
* Get all pipe segments in the network, discard burst/buried pipes, and pick the most damaged pipe.&lt;br /&gt;
* If no pipes are damaged, choose one of the remaining pipes at random.&lt;br /&gt;
&lt;br /&gt;
====Weakest member damage criteria====&lt;br /&gt;
* More than 0.05 moles/L of frozen elements are on the network: Instant, damage/tick = log2(total of frozen gases/0.05 mol/L), clamped between 0.5/tick and 10/tick &lt;br /&gt;
**Gases are not counted towards this if the pressure on the network is below the armstrong limit. (6.3 kPa)&lt;br /&gt;
* If a gas pipe: More than 2% of liquids (by volume) are on the network: Instant, damage/tick = log10(percentage of liquids) - 0.8, clamped between 0.2/tick and 10/tick&lt;br /&gt;
* If the weakest segment is under a pressure gradient above the pipe's pressure rating: Instant, damage = log2(PressureGradient/PressureRating), clamped between 0.2/tick and 10/tick&lt;br /&gt;
** If no pipes are damaged, check all pipe segments for pressure damage. (Possible Exploit: intentionally damage but don't break a specific pipe segment that's kept in a pressure-protected room, get a pressure-resistant pipe network)&lt;br /&gt;
&lt;br /&gt;
====Burst pipe====&lt;br /&gt;
* Set a network fault flag. (readable with a [[Pipe Analyzer]]'s NetworkFault logic value)&lt;br /&gt;
* Spawn ices around the pipe if the pipe network contains more than 50 mols of ices.&lt;br /&gt;
* For all atmos-containing grids the pipe belongs to:&lt;br /&gt;
** Move liquids from pipe to world. (rate: pipe volume/tick*number of atmos-containing grids, or enough to drain a pipe network with more liquids than its capacity down to 99% full in case the pipe had overcompressed liquids. Won't drain past &amp;gt;99% world cell fullness)&lt;br /&gt;
** If pressure gradient is above 1 atm, move gases unidirectionally attempting to equalize pressure.&lt;br /&gt;
*** Maximum pressure gradient/tick: 1/10th of the pipe's pressure rating. This value is reduced if grids are blocked.&lt;br /&gt;
*** Maximum moles moved/tick: The pipe volume's worth of contents. (Don't use it as a passive vent for an early venus advanced airlock or it can vacuum itself shut?)&lt;br /&gt;
****This limit is ignored if the pressure gradient before equalization is greater than the pipe's pressure rating&lt;br /&gt;
** If it's not, Mix contents of pipe network and atmospheric network.&lt;br /&gt;
&lt;br /&gt;
== Air Conditioner ==&lt;br /&gt;
&lt;br /&gt;
Additional details: [[User:RA2lover/Sandbox/Thermodynamics machinery notes/Air Conditioner|Link]]&lt;br /&gt;
&lt;br /&gt;
- If the *input* network is off from the target temperature by less than 1 degree, no action is performed on a tick.&lt;br /&gt;
&lt;br /&gt;
Otherwise, the air contitioner's internal logic takes place:&lt;br /&gt;
&lt;br /&gt;
 - 1 - Try to take contents from its input network into an internal storage (mole-equivalent of 100 liters of gas at the input network temperature and air conditioner's processing capability (750 kPa), includes both liquids and gases)&lt;br /&gt;
 - 2 - Transfer 14kJ * OperationalTemperatureEfficiency * TemperatureDifferentialEfficiency of energy between the waste network and the internal network (if either input network before the step 1 pumping or the waste network pressures are below 1atm, scale down by the lowest pressure from that to 0 linearly)&lt;br /&gt;
 - 3 - Transfer contents from its internal network to its output network&lt;br /&gt;
&lt;br /&gt;
TemperatureDeltaCurve losses can be avoided entirely by connecting the input network and waste network together (as opposed to the typical closed-loop configuration where input and output networks are connected together).&lt;br /&gt;
&lt;br /&gt;
How much is 14kJ? Vulcan night atmosphere (400 K @ 100L, 1atm) would get you 3.046 moles at 23.182 J/mol/K, or a drop of ~201 K (which would get hampered by the OperationalTemperatureEfficiency still not being that high).&lt;br /&gt;
&lt;br /&gt;
== Filtration ==&lt;br /&gt;
* Consume 0.1 W/kPa input pressure(capped at 100W/1MPa) + 10W(base).&lt;br /&gt;
* Calculate the pressure gradient between the input and the highest of the two output networks. If either output network is at a higher pressure than the input, treat the gradient as 0.&lt;br /&gt;
* Process 100 bar*L to 2000 atm*L per tick linearly mapped to the pressure gradient from 0 to 600 atm.&lt;br /&gt;
**This represents an additional 31.6884612 bar*L/tick/MPa, or an additional 100 bar*L/tick for every 3.1557228156 MPa of pressure gradient)&lt;br /&gt;
* Send processed contents matching filters to output, not-matching filters to unfiltered output.&lt;br /&gt;
&lt;br /&gt;
== Liquid Filtration ==&lt;br /&gt;
* Consume 200W/L liquids on input network (capped at 100W on 0.5L)  + 10W(base).&lt;br /&gt;
* Calculate the fill percentage gradient between the input and the fullest of the two output networks. If either output network is at a higher fill percentage than the input, treat the gradient as 0.&lt;br /&gt;
* Remove 0.5..20L/tick for processing, linearly mapped to the fill percentage gradient from 0% to 100%.&lt;br /&gt;
* Calculate the pressure gradient between the input and the highest of the two output networks. If either output network is at a higher pressure than the input, treat the gradient as 0.&lt;br /&gt;
* Remove 1000 kPa*10L (=100 bar*L) to MaxGasPipePressure/3*10L(=2000 atm*L)/tick for processing, linearly mapped to the pressure gradient from 0 to 600 atm. (liquid pipes can only withstand 60 atm)&lt;br /&gt;
* Process the removed contents through the filters, moving filtered contents to the filtered output.&lt;br /&gt;
* Send unfiltered contents to the unfiltered output.&lt;br /&gt;
&lt;br /&gt;
==H2 Combustor== &amp;lt;!-- out of date, now just &amp;quot;combustor&amp;quot; --&amp;gt;&lt;br /&gt;
* Equalize internal atmosphere with output atmosphere. (one-way, no limit)&lt;br /&gt;
* If not idle and input atmosphere has 0.0003 moles or more:&lt;br /&gt;
**Transfer 10 bar*L..200 atm*L from input atmosphere to internal atmosphere (mapped from pressure gradient between input atmosphere and internal atmosphere, 0..600atm)&lt;br /&gt;
***This is equivalent to 0.1 Filtration machines.&lt;br /&gt;
**Combust 66% of the oxygen/volatiles mix into liquid water (2 mol Volatiles + 1 mol O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 2 mol H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O + 429kJ)&lt;br /&gt;
**Instantly combust 90% of the remaining fuel mix. (regular combustion rules apply)&lt;br /&gt;
&lt;br /&gt;
==Electrolyzer==&lt;br /&gt;
* Consume 50W idle (3600W when active).&lt;br /&gt;
* If active, calculate the amount of energy required to electrolyze 1 mol of water.&lt;br /&gt;
** Base energy is the energy of electrolysis byproducts for 1 mol of water at 20°C: ((20.4J/K*2+21.1J/K)*293.15 K+(286 kJ*2)+(8kJ*3))/3 = 218.048661667 kJ/mol of water&lt;br /&gt;
** This is then subtracted by the specific energy of water at the input network's temperature (72 J/K). (results in 0 energy required at 3028.45 K; attempts to electrolyze at or above that temperature result in all water on the network being instantly split)&lt;br /&gt;
* Remove the amount of water the 3600 W can split at 40x efficiency (144 kW) from the input network, converting it to electrolysis byproducts at 20°C, and move those to output atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Nitrolyzer ==&lt;br /&gt;
* Consume 50W idle.&lt;br /&gt;
* Move internal atmosphere contents to output if there's a valid output network.&lt;br /&gt;
* Check for both input networks.&lt;br /&gt;
** If only one input network is connected, take 1.5 moles/tick from it, otherwise, take 0.75 moles/tick from each of the input networks.&lt;br /&gt;
* Calculate reaction efficiency.&lt;br /&gt;
** If the ratios of either nitrogen or oxygen are below 1%, set it to 0%.&lt;br /&gt;
** Otherwise, it's 30% * sum of nitrogen and oxygen gas ratios * (lowest ratio of the two / highest ratio of the two)&lt;br /&gt;
* If efficiency isn't 0%, consume 6kW instead of the 50W.&lt;br /&gt;
* Convert ReactionEfficiency% of the nitrogen/oxygen present internally into nitrous oxide.&lt;br /&gt;
** 2 moles -&amp;gt; 1 mole nitrous oxide. Output energy is half the components' energy + reaction inefficiency&lt;br /&gt;
** Example: 50/50 nitrogen:oxygen mix at 300K -&amp;gt; ((20.6*300 + 21.1*300)*0.225+4200)/(37.2*0.225) = 838.08K nitrous oxide output temperature. Actual output temperature is 448.82 K as it immediately mixes with unreacted gases.&lt;br /&gt;
&lt;br /&gt;
Because nitrous oxide contributes 286 kJ/mol in combustion, use of the nitrolyzer is 10.725x energy-positive at the maximum reaction efficiency of 30% (0.225 mol/tick).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wall Cooler ==&lt;br /&gt;
&lt;br /&gt;
Checks if pressure on both pipe and world grid atmosphere is above armstrong limit (6.3 kPa), transfers 1kJ * TemperatureDifferentialEffficiency of energy per tick from the environment to the pipe network.&lt;br /&gt;
Although no OperationalTemperatureEfficiency curve is present, this would only be more efficient than an air conditioner on situations where this value would be &amp;lt;5% (or 2.5%? TODO: clear up J/tick and W distinction for power consumers). You'll probably want an air conditioner on most scenarios.&lt;br /&gt;
&lt;br /&gt;
== Wall Heater ==&lt;br /&gt;
&lt;br /&gt;
Checks if world grid atmosphere is above armstrong limit and temperature is below 2500 K,  adds 1kJ/tick to world grid, '''ignites flammable atmospheres below autoignition temperature'''.&lt;br /&gt;
&lt;br /&gt;
== Pipe Heater ==&lt;br /&gt;
&lt;br /&gt;
Same pressure/temperature checks as wall heater, but doesn't ignite flammable pipe contents(assuming no autoignition occurs).&lt;br /&gt;
&lt;br /&gt;
== Road Flare ==&lt;br /&gt;
Ignites flamambles. Adds 1kJ/tick when lit. 1.2s fuse when fired from [[Flare Gun]]. 25m illumination range when falling from flare gun, 10m range otherwise.&lt;br /&gt;
&lt;br /&gt;
== Evaporation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo liquid volume regulator(0.25 L/tick, input-&amp;gt;internal, targets 10% internal liquid volume), purge valve (1500 kPa * 10L, internal-&amp;gt;output) and heat exchanger (15m² area, internal&amp;lt;&amp;gt;input 2).&lt;br /&gt;
&lt;br /&gt;
== Condensation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo pressure regulator (1500 kPa * 10 L), 2 condensation valves (input-&amp;gt;internal, internal-&amp;gt;output) and heat exchanger (15m² area).&lt;br /&gt;
&lt;br /&gt;
== Condensation Valve / Expansion Valve ==&lt;br /&gt;
&lt;br /&gt;
Moves 10 liters of liquids or half the liquids volume on the input pipe network per tick, whichever is smaller. Isn't supposed to move if the output network can't fit another 0.1L of liquids (untested).&lt;br /&gt;
&lt;br /&gt;
== Active Vent ==&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres.&lt;br /&gt;
** The calculation assumes both atmospheres have an identical heat capacity.&lt;br /&gt;
* If pumping into pipe, pump the smallest of:&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (grid minimum pressure limited to the external pressure limit)&lt;br /&gt;
** The amount of gas required to make the pipe network reach the internal pressure limit (at the average temperature)&lt;br /&gt;
* If pumping outwards, pump the smallest of:&lt;br /&gt;
** The amount of gas available in excess of the internal pressure limit (at the '''internal''' temperature)&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (limited to the external pressure limit)&lt;br /&gt;
* Set flow indicator status based on the difference in grid external pressure pre- and post- pumping and the maximum pumping capacity.&lt;br /&gt;
**&amp;gt;9 kPa: Max (Green)&lt;br /&gt;
**&amp;gt;5 kPa: Limited (Yellow)&lt;br /&gt;
**&amp;lt;5 kPa: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
For a 8000 L cell, the pumping capacity is 800 bar*L. As things get added to the cell this pumping capacity decreases.&lt;br /&gt;
&lt;br /&gt;
== Powered Vent == &amp;lt;!--StructurePoweredVentMultiGrid; small variant also uses multigrid--&amp;gt;&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres. (similar to active vent)&lt;br /&gt;
* If pumping into pipe:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the grid temperature into the pipe network (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
** If more than 0.1 kPa of pumping capacity remains available:&lt;br /&gt;
*** Calculate the cumulative pressure difference relative to the target pessure over open neighbor grids up to GridMixingDepth tiles away from the grid the vent is in.&lt;br /&gt;
*** If the pressure on the grid it's in is greater than the cumulative pressure difference, pull the pressure of it further down ignoring the external pressure limit (limited to the remaining pumping capacity).&lt;br /&gt;
*** If it's not, search for open grids 1 tile further away (starting from the vent grid, repeated until GridMixingDepth), and for each one pump their contents into the pipe(up to pressure limit) until the pumping capacity is exhausted or the GridMixingDepth limit is reached.&lt;br /&gt;
****The search is aborted if &amp;lt;0.1 kPa of remaining pumping capacity is left by the next grid expansion. &lt;br /&gt;
* If pumping into world:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the average temperature (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
**If more than 0.1 kPa of pumping capacity remains available, calculate the cumulative pressure difference relative to the target pressure over over neighbor grids up to GridMixingDepth tiles away, and pump up to that into world using the remaining pumping capacity (ignoring the external pressure limit).&lt;br /&gt;
* Set flow indicator status to remaining pumping capacity after pumping:&lt;br /&gt;
** &amp;lt; 1.1 kPa: Max (Green)&lt;br /&gt;
** &amp;lt; PressurePerTick/2: Limited (Yellow)&lt;br /&gt;
** &amp;gt; PressurePerTick/2: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
PressurePerTick: 20 kPa (small), 40 kPa (large)&lt;br /&gt;
&amp;lt;br&amp;gt;GridMixingDepth: 4 (small), 6 (large)&lt;br /&gt;
&lt;br /&gt;
== Passive Vent ==&lt;br /&gt;
Mixes pipe gas contents with world cell gas contents, or mixes all pipe contents with all world cell contents if submerged in liquid. Not sure how to make use of this considering the amount of liquids required to submerge one.&lt;br /&gt;
&lt;br /&gt;
== Pipe Radiators ==&lt;br /&gt;
&lt;br /&gt;
Convection power = 100*area*deltaT. Area is multiplied by internal and external pressure ratios compared to 1atm, so effectiveness is reduced if either is below this pressure.&lt;br /&gt;
&lt;br /&gt;
Radiation power is based on a curve function on the difference between the network temperature and the background temperature (world temperature on a vacuum, lerped to atmospheric temperature based on how many moles are on it up to 20kPa @ 0°C (=70.450583221073 mols on a world cell)). Area is multiplied by internal pressure ratio compared to 1atm.&lt;br /&gt;
&lt;br /&gt;
== Pipe Organ ==&lt;br /&gt;
&lt;br /&gt;
Makes sound if pressure delta between pipe network and world is above 10kPa. Equalizes pipe network gases with world cell gases at a rate of 20 kPa/tick.&lt;br /&gt;
&lt;br /&gt;
== Liquid Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Move setting L/tick of '''liquids''' from input to output network, then remove gases from input network until output network pressure is equalized.&lt;br /&gt;
&lt;br /&gt;
A liquid volume pump set to 0.0000001 L can be used as a one-way liquid-pipe-to-liquid-pipe gas valve with a negligible power consumption. (This behavior is different from the one-way valve, which also moves liquids)&lt;br /&gt;
&lt;br /&gt;
== Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Take the moles present in setting L of the input pipe network, move them to the output in a single tick. If setting is greater than the input pipe network volume, only the input pipe network is used but power is still consumed based on the setting parameter.&lt;br /&gt;
&lt;br /&gt;
== Turbopumps ==&lt;br /&gt;
&lt;br /&gt;
Same mechanics as turbo pumps but with a fixed base power consumption and a lower consumption/L pumped.&lt;br /&gt;
&lt;br /&gt;
== Gas regulators ==&lt;br /&gt;
&lt;br /&gt;
(Comprises Pressure Regulator, Back Pressure Regulator, Pressurant Valve, Purge Valve)&lt;br /&gt;
&lt;br /&gt;
If output network pressure is greater than input network pressure, move up to a mole-equivalent quantity of gas that would fit in pressurePerTick(=1atm?)*10L volume at the pipe network temperature.&lt;br /&gt;
&lt;br /&gt;
With a 10L volume pump consuming twice the power of a gas regulator, This makes a gas regulator more efficient than a volume pump when operating on input network pipe pressures below pressurePerTick*2 (2 atm?) as more volume/W is scavenged in that circumstance.&lt;br /&gt;
&lt;br /&gt;
If input pipe pressure is greater than output network pressure, check if more gas could be moved by moving a quarter of the pressure difference on the input network per tick instead, and move up to that if so. This makes a regulator more efficient than a volume pump in scenarios where the input network volume is large enough to make a reasonable pressure gradient worthwhile.&lt;br /&gt;
&lt;br /&gt;
PressurePerTick value is 101.325 kPa for all 4.&lt;br /&gt;
&lt;br /&gt;
== Gas Mixer == &amp;lt;!-- analysis not paying enough attention, reminder to check later --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Calculates the amount of gas a gas regulator working against the pressure gradient would take in a tick, multiplied by the ratio fraction belonging to the given input. (for example: 75% ratio would take 7.5 atm*L from input 1 and 2.5 atm*L from input 2)&lt;br /&gt;
&amp;lt;br&amp;gt;Takes a (weighed by ratio) average of the input pressures on both networks.&lt;br /&gt;
&amp;lt;br&amp;gt;Calculates &amp;quot;Max Moles Per Tick&amp;quot; for both networks - This is similar to the &amp;quot;pressure regulator working with the help of a pressure gradient&amp;quot; case, but only up to a fifth of the pressure differential(between the input's pressure and the average input pressure) instead of a 1/4th as in the pressure regulator. &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Acts as a Gas regulator, except:&lt;br /&gt;
* Moves either 20 '''bar'''*L/tick weighed between both input networks by ratio (as opposed to 10 '''atm'''*L/tick) or a fifth of the pressure gradient(instead of a fourth), whichever is greater.&lt;br /&gt;
* Uses the average input pressure (weighed by ratio) for pressure gradient calculations.&lt;br /&gt;
* Stops moving if either either input is empty and currently in use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Liquid regulators ==&lt;br /&gt;
&lt;br /&gt;
(Liquid volume regulator, Liquid Back Volume regulator)&lt;br /&gt;
&lt;br /&gt;
If volume percentage on input network is greater than output network, pump '''liquids''' up to the greater of:&lt;br /&gt;
&lt;br /&gt;
 - A quarter of the combined network liquid volume percentage to output network per tick (if input network volume ratio &amp;gt; output network volume ratio). '''This isn't liquid level balancing''' - a 50.(0)1/100L against a 50/100L network will still result in a single-tick movement of ~100L/4 = 25L from input to output. There's a likely bug here.&lt;br /&gt;
 - The regulator's liquid volume pumping capacity (0.25L/tick).&lt;br /&gt;
&lt;br /&gt;
If any liquids were moved, balance gas pressures on the output with a one-way '''gas''' valve from input to output. Liquids have to be moved for this, unlike the 0L liquid volume pump.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Air Conditioner ==&lt;br /&gt;
&amp;lt;!-- not including data about HARM suit as the build i have access to is out-of-date --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If suit AC is off, suit has no waste tank attached or no/empty battery, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Calculate the energy required to move the suit/helmet's internal atmosphere to the target temperature.&lt;br /&gt;
&lt;br /&gt;
If cooling to that temperature, transfer the excess energy to the waste tank consuming 1% of it in battery power, and marking an amount of gas to be moved to the waste tank on that tick's filtration step (1 mol / 2 kJ cooled).&lt;br /&gt;
&lt;br /&gt;
If heating to that temperature, consume 50% of the energy spent heating the contents in battery power.&lt;br /&gt;
&lt;br /&gt;
The maximum amount of heat a suit can add/remove per tick is proportional to its condition, but the heating/cooling efficiency remains the same.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Filtration ==&lt;br /&gt;
&lt;br /&gt;
If filtration is off, suit is unpowered or has no waste tank attached, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Fill waste tank to 1 kPa with air tank contents if waste tank pressure is below 1kPa.&lt;br /&gt;
&lt;br /&gt;
Remove all gases in the space suit's internal volume matching the filters in its slots.&lt;br /&gt;
&lt;br /&gt;
Remove additional gases from the space suit's internal volume if the amount of gas to be moved on the AC step exceeds the amount of gas moved by the filters, up to the suit's pumping rate (proportional to its condition).&lt;br /&gt;
&lt;br /&gt;
Consume 10 J from battery.&lt;br /&gt;
&lt;br /&gt;
== Gas Mask == &amp;lt;!-- the GasMask class is actually for suit helmets. The actual gas mask's class name is FilterMask... which is an extension of it. --&amp;gt;&lt;br /&gt;
If equipped:&lt;br /&gt;
* Transfer internal atmosphere contents to world.&lt;br /&gt;
* Equalize world and internal pressures.&lt;br /&gt;
* Filter gasses from internal atmosphere into world atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Fridge (large) ==&lt;br /&gt;
&lt;br /&gt;
Initialize an atmosphere containing 1.72 moles of nitrogen at 20°C (if world grid pressure below armstrong limit) or world grid temperature.&lt;br /&gt;
&lt;br /&gt;
Heat internal atmosphere to 142 K or move internal atmosphere energy to environment down to 142 K at up to 1kJ/tick.&lt;br /&gt;
&lt;br /&gt;
Add energy added/moved to that tick's power consumption.&lt;br /&gt;
&lt;br /&gt;
Fridge has a convection factor to world atmosphere of 0.01 when door is opened and 0 when closed.&lt;br /&gt;
&lt;br /&gt;
== Welding Torch ==&lt;br /&gt;
Has a 1L internal reservoir.&lt;br /&gt;
&amp;lt;br&amp;gt;If on, checks for internal reservoir contents, and if any, ejects them into world atmosphere '''and ignites world atmosphere flammables (even if the internal reservoir contents are cold inert gas).'''&lt;br /&gt;
&amp;lt;br&amp;gt;Moves 0.01 moles/tick from canister contents (both gas and liquid) into the internal reservoir, and attempts to perform complete manual combustion of them.&lt;br /&gt;
&amp;lt;br&amp;gt;Is operable if any combustion has occurred within the reservoir, regardless of the final temperature after combustion.&lt;br /&gt;
&lt;br /&gt;
Gains a 30% additive work speed bonus (on top of its 20% additive work speed bonus relative to the arc welder?) if the internal reservoir temperature is above 3000°C after combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Awards the &amp;quot;Fast and Furious&amp;quot; achievement to the wielder when welding with an internal atmosphere of &amp;gt;10% nitrous oxide gas (liquids not counted).&lt;br /&gt;
&lt;br /&gt;
== Furnace ==&lt;br /&gt;
* Doesn't explode if partially deconstructed before an overpressure event. &amp;lt;!--early return on FurnaceBase:OnAtmosphericTick--&amp;gt;&lt;br /&gt;
* Includes a passive pollutant filter that prioritizes moving out pollutant from its internal storage to the output before any other gases when attempting to equalize pressure. &amp;lt;!--Furnace:HandleGasInput--&amp;gt;&lt;br /&gt;
** Filter max flow rate before allowing other gasses through is 2000 kPa at the hottest of (internal, output) temperatures and smallest of (internal, output) volumes.&lt;br /&gt;
* Starts processing ores once the furnace's internal temperature is above their flashpoint. &amp;lt;!--FurnaceBase:OnServerImportTick--&amp;gt;&lt;br /&gt;
** Ices get melted. Ores/reagent mixes get their contents added to reagents. Ingots become reagents and cool the input down by 45J*Flashpoint Temperature/g.&lt;br /&gt;
* When ejecting, check if internal reagent mix and internal conditions forms one of the recipes, output recipe if so, or reagent mix otherwise.&lt;br /&gt;
&lt;br /&gt;
== Advanced Furnace ==&lt;br /&gt;
&lt;br /&gt;
Input pump removes both gases and liquids from input.&lt;br /&gt;
&amp;lt;br&amp;gt;Output pump pumps only gases into the output gas pipe and only liquids into the output liquid pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;Doesn't include a passive pollutant filter, unlike the regular furnace.&lt;br /&gt;
&amp;lt;br&amp;gt;Power consumption is 100W idle, plus another 1W/L on each pump being used. This makes them more efficient than a [[Turbo_Volume_Pump_(Gas)|Turbopump]] at 100W+2W/L contrasted to the turbopump's 200W+6W/L in applications where flow direction reversibility and the internal buffer tank's volume/liquid retention don't matter.&lt;br /&gt;
&lt;br /&gt;
== Cryo Tube ==&lt;br /&gt;
Does not allow robots inside.&lt;br /&gt;
&amp;lt;br&amp;gt;Has an 800L internal atmosphere, mixed with world atmosphere when open and input network atmosphere when closed.&lt;br /&gt;
&amp;lt;br&amp;gt;Tries to heat the internal atmosphere to 4°C if below, converting up to 250 J/tick as electric power into heat when open. Heating persists even if door is closed? (possible bug)&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant is colder, Will transfer energy from the internal atmosphere to the coolant atmosphere at a rate of 1 J/K/tick until equalization or internal temperature reaches 0°C, clamped between 1 and 100 J/tick.&lt;br /&gt;
&amp;lt;br&amp;gt;Can only revive/heal if the input pipe network has at least 10L of pure liquid nitrogen at 130 K (-143.15°C) or below. Heals 1 damage/tick in those conditions.&lt;br /&gt;
&amp;lt;br&amp;gt;Revives players at 25% of max HP.&lt;br /&gt;
&lt;br /&gt;
== Fire Extinguisher ==&lt;br /&gt;
Transfers 0.25L/s and 200kPa/s out of its canister (the latter until pressure with its environment's atmosphere is equalized) when used.&lt;br /&gt;
&amp;lt;br&amp;gt;If its canister's contents are &amp;gt;99% inert(not nitrous oxide/oxygen/volatiles) by moles and there were at least 1 mol of liquids or enough pressure on the canister to prevent equalization, supresses fires on the cell it's been used and adjacent neighbors for 10 ticks and extinguishes fires on entities on fire within said cells.&lt;br /&gt;
&amp;lt;br&amp;gt;Additionally, if the temperature on the cell it's in is above 300°C after the contents transfer, removes 20kJ/tick of energy from it.&lt;br /&gt;
&lt;br /&gt;
== Active liquid outlet ==&lt;br /&gt;
'''before an atmospherics tick,''' dumps up to 50 mols of the liquid pipe's contents (both liquids and gases) each tick into the world cell if active.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid inlet ==&lt;br /&gt;
If submerged, Attempts to drain liquids from the cell it's in, then from adjacent cells without an open grid below them(repeated up to 6 tiles away), up to a cumulative total of 20L/tick (stopping at 99% network fullness or more than 19.9L drained before the next grid search range expansion). &amp;lt;!-- looks like a costly operation to run every tick on large rooms. --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; After that step, mixes pipe network and world atmospheres.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid drain ==&lt;br /&gt;
Behaves as an always-on condensation valve, but moves liquids to a world atmosphere instead of a pipe network.&lt;br /&gt;
&lt;br /&gt;
== Counterflow Heat Exchanger ==&lt;br /&gt;
Before an atmospherics tick:&lt;br /&gt;
* Remove liquids from inputs to outputs to balance liquid percentages on both input/output networks.&lt;br /&gt;
* Remove gases from inputs to outputs to balance pressures on both input/output networks.&lt;br /&gt;
If contents moved on either of the two networks are less than 0.008 mols, send moved contents to outputs while performing no heat transfer, otherwise:&lt;br /&gt;
* Split removed contents into 8 packets&lt;br /&gt;
* Calculate heat exchange efficiency based on input network pressure/liquid volume after removal (biggest scaling factor of: 0-100% from 0-1atm pressure OR 0-100% from 0-1% liquid volume for each network; final result is the product of both networks' efficiency factors)&lt;br /&gt;
* Perform a total of 48 heat transfers in a sliding window.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    Turns out there is too much crossover between the transfers.&lt;br /&gt;
    Assuming:&lt;br /&gt;
    INPUT  1     D  E  F  0 [1][2][3][4][5][6][7][8] 9  A  B  C   OUTPUT 1&lt;br /&gt;
    OUTPUT 2     C  B  A  9 [8][7][6][5][4][3][2][1] 0  F  E  D   INPUT  2&lt;br /&gt;
    &lt;br /&gt;
    Transfers are made in 2 kernels that slide across left to right along the sequence (discarding transfers made when either hits a non-valid packet):&lt;br /&gt;
    First:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'&lt;br /&gt;
      9ABC  (this latter one's order is actually reversed and has been un-reversed so it could be drawn without overlap)&lt;br /&gt;
    Followed by:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'   (same as the first, but shifting the second network's packets one step to the right)&lt;br /&gt;
      89AB &lt;br /&gt;
    The next iteration would then shift the first input to the right:&lt;br /&gt;
       F012&lt;br /&gt;
       89AB&lt;br /&gt;
    Followed by the second sequence being shifted:&lt;br /&gt;
       F012&lt;br /&gt;
       789A&lt;br /&gt;
    repeated until all the transfers are covered (would stop with the first valid transfer being 1-8 on the 0123-789A step and last valid transfer being 8 1 on the 789A-0123 step)&lt;br /&gt;
There should be enough info here to create an animation on how the transfer works. if there isn't, feel free to hit me for clarification on my talk page.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** Exchange rate for each transfer is 15.625W*ΔT*EfficiencyRatio&lt;br /&gt;
* Merge the split packets back into a single packet for each network&lt;br /&gt;
* Send packet to each network's output&lt;br /&gt;
&lt;br /&gt;
==Portable Air Conditioner==&lt;br /&gt;
Stops heating if external air temperature is above 50°C, stops cooling if external temperature is below -10°C.&lt;br /&gt;
&amp;lt;br&amp;gt;Stops operating if internal pressure is above 40 atm or if any contents on the liquid canister are frozen.&lt;br /&gt;
&amp;lt;br&amp;gt;Consume 25 J/tick from battery.('''BUG: Only when operating in cooling mode.''')&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant tank pressure is above 40 atm, transfer excess pressure to internal tank.&lt;br /&gt;
&amp;lt;br&amp;gt;Without a canister: If in heating mode, heat by 250 J/tick using an internal heating element.&lt;br /&gt;
&amp;lt;br&amp;gt;With a canister: Transfer Clamp( (100-TDelta)/100, min=0.01, max = 1) * 2500 J/tick between  canister and atmosphere. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Portable Generator==&lt;br /&gt;
Removes 1.5 atm*L/tick from input canister (=2.37480469 kPa/tick for a 64L container) into its internal chamber.&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 90% of the chamber's contents.&lt;br /&gt;
&amp;lt;br&amp;gt;Converts 6% of the combustion's energy into power.&lt;br /&gt;
&amp;lt;br&amp;gt;Moves previous tick's combusted contents into atmosphere.&lt;br /&gt;
&lt;br /&gt;
==Gas Fuel Generator==&lt;br /&gt;
* Shuts down if outside operating conditions (at least 19.998 kPa on grid atmosphere, grid atmosphere between 3°C and 57°C)  for 5+ ticks in a row.&lt;br /&gt;
** These are slightly laxer than the conditions for valid atmosphere on its tooltip. (20kPa, 5-55°C)&lt;br /&gt;
* Removes 10 bar*L/tick (100 kPa * 10 L) from the input network into its internal chamber.&lt;br /&gt;
* Instantly combusts 90% of the internal chamber's contents.&lt;br /&gt;
* Sets the device's convection/radiation area to (0.01 + PostCombustionPressure*0.66)*0.28. &lt;br /&gt;
* Converts 17% of the combustion's energy into power.&lt;br /&gt;
** Superfuel at -20°C, at full input rate: 0.475103 mol/tick -&amp;gt; 122291.5 kJ/t -&amp;gt; 20789.56 W&lt;br /&gt;
** ~18.64x as much power as a [[Portable Generator]] on the same fuel mix, at ~6.58x the fuel consumption rate.&lt;br /&gt;
* Moves previous tick's combusted contents into output.&lt;br /&gt;
&lt;br /&gt;
==Rocket Combustion Chamber== &amp;lt;!--RocketEngineBase:CombustEngine--&amp;gt;&lt;br /&gt;
(shared by all engines)&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 96% of the fuel mix.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust temperature to the temperature after this instant combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust velocity to 25 * Engine Efficiency% * sqrt (8.3144 * Exhaust temperature * Degrees of freedom contributing to exhaust velocity)&lt;br /&gt;
* The number of degrees of freedom depends on the substance's molecular structure:&lt;br /&gt;
** Monoatomic = 1.666666 (None)&lt;br /&gt;
** Diatomic = 1.4 (Oxygen, Nitrogen, Hydrogen)&lt;br /&gt;
** Triatomic = 1.333333 (Carbon Dioxide, Volatiles, Polluted Water/Water/Steam, Nitrous Oxide)&lt;br /&gt;
** Polyatomic = 1.26 (Pollutant)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Mass flow rate to the total mass of gases in the combustion chamber after combustion / tick speed (0.5s)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets engine thrust to Mass flow rate * Exhaust velocity&lt;br /&gt;
&lt;br /&gt;
==Pumped Gas Engine== &amp;lt;!--GovernedGasEngine. Simulation runs off a 100L, 480 atm, 0.666:0.334 fuel mix at 215 K--&amp;gt;&lt;br /&gt;
Removes 0..18 moles from the input atmosphere per tick into combustion chamber depending on throttle.&lt;br /&gt;
&lt;br /&gt;
==Pumped Liquid Engine== &amp;lt;!--Simulation runs off 2 100L tanks containing 80L of liquid volatiles / liquid oxygen at 125 K and a mixing ratio of 70%--&amp;gt;&lt;br /&gt;
Removes a total of 0..0.55 L from the input tanks into the combustion chamber depending on throttle (proportion depends on mixing ratio)&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Gas Engine== &amp;lt;!-- Simulation runs off 2 100L tanks at 215 K, one containing 32391 kPa of volatiles and another containing 16244 kPa of oxygen and ends up burning volatiles-rich at a ~2.686:1 ratio? --&amp;gt;&lt;br /&gt;
At full throttle, removes 10? atm*L .. BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) from each of its 2 inputs into the combustion chamber depending on the fraction of max pipe pressure on each input pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;This is scaled down proportional to throttle. &lt;br /&gt;
* Base pressure-fed gas engine has the Base Pumping Capacity at 500 bar*L, Heavy variant has it at 850 bar*L&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Liquid Engine== &amp;lt;!-- Simulation runs off a 100L tank at 125 K, containing 80L of liquid volatiles/liquid oxygen(at a 70:30 ratio) and a 0.666:0.334 gas fuel mix at 48 atm --&amp;gt;&lt;br /&gt;
At max throttle, pump between 0.04L..MaxFlowRate of liquids into combustion chamber, scaling on input pipe fraction of max pressure. Pumped amount is scaled by throttle.&lt;br /&gt;
* MaxFlowRate is 0.8L for base variant, 1.5L for heavy variant. &lt;br /&gt;
Additionally, move 10? atm*L..BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) of gases into the combustion chamber. (also linearly scaled by throttle)&lt;br /&gt;
* That's the same formula as the pressure-fed gas engine, but scaling from 0-60 atm instea of 0-600 atm.&lt;br /&gt;
* BasePumpingCapacity is 500 bar*L for base variant, 600 bar*L for heavy variant.&lt;br /&gt;
&amp;lt;br&amp;gt;Perform phase change after combustion step but before heat exchange step.&lt;br /&gt;
&amp;lt;br&amp;gt;Max heat exchange area is 3m² for base variant, 5m² for heavy variant, proportional to setting.&lt;br /&gt;
&lt;br /&gt;
==Pneumatic Mining Drill==&lt;br /&gt;
&amp;lt;!--Comparison:&lt;br /&gt;
Emergency Pickaxe: -0.5 ManuallyAuthoredToolSpeedOffset, 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Pickaxe: 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Mining Drill: 1 UsedPowerPassive, 30 UsedPowerActive, 0.11 MineCompletionTime, 0.2 MineAmount&lt;br /&gt;
Pneumatic Mining Drill: 0.4 MineAmount, 20 MinOperationalPressureDifferential, 6000 MaxPressureDifferential, 0.01 MinMolesPerTick, 0.2 MaxMolesPerTick, 0.05 IdleUsageMolesPerTick, 0.05 FastestMineTime, 0.2 SlowestMineTime&lt;br /&gt;
Mining Drill mk2: &amp;quot;manuallyAuthoredToolSpeedOffset&amp;quot;: 0.1, otherwise same as mining drill&lt;br /&gt;
Mining Drill Heavy: UsedPowerPassive: 2, UsedPowerActive: 150, MineCompletionTime: 0.05, MineAmount: 0.4&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Eject internal atmosphere into external atmosphere.&lt;br /&gt;
* Calculates pressure differential between external atmosphere and canister.&lt;br /&gt;
* Calculate base mole consumption: 0.05 mol/tick on idle, 0.2 mol/tick when active.&lt;br /&gt;
* Calculate actual mole consumption: map between 0.01 mol/tick at 20kPa pressure differential to Base mole consumption at 6 MPa pressure differential&lt;br /&gt;
* Remove actual mole consumption from canister into internal atmosphere.&lt;br /&gt;
* Map time between mine actions: 0.2s at 20kPa- pressure differential to 0.05s at 6MPa+ presure differential.&lt;br /&gt;
** Equals heavy mining drill speed if pressure differential is at 6+ MPa, equals mining drill mk1 speed if pressure differential is above ~3.608 MPa (at double the MineAmount, which still loses out to the pickaxe, aimee or autominer.)&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Liquid_Filtration&amp;diff=25847</id>
		<title>Liquid Filtration</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Liquid_Filtration&amp;diff=25847"/>
				<updated>2026-03-04T14:02:01Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Create page using filtration article as a baseline&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Atmospherics]]&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Liquid Filtration&lt;br /&gt;
 | image            = [[File:ItemKitLiquidFiltration.png]]&lt;br /&gt;
 | prefab_hash       = -1399038877&lt;br /&gt;
 | power_usage      = 10-110w&lt;br /&gt;
 | placed_with_item = [[Kit (Liquid Filtration)]]&lt;br /&gt;
 | placed_on_grid   = Small Grid&lt;br /&gt;
 | requires_frames  = Yes&lt;br /&gt;
&lt;br /&gt;
 | stage_image1     = [[File:StructureFiltrationLiquid_BuildState0.png]]&lt;br /&gt;
 | const_with_item1 = 2 x [[Kit (Liquid Pipe)]]&lt;br /&gt;
 | decon_with_tool1 = [[Hand Drill]]&lt;br /&gt;
 | item_rec1        = [[Kit (Liquid Filtration)]]&lt;br /&gt;
&lt;br /&gt;
 | stage_image2     = [[File:StructureFiltrationLiquid_BuildState1.png]]&lt;br /&gt;
 | const_with_tool2 = [[Screwdriver]]&lt;br /&gt;
 | const_with_item2 = 2 x [[Cable Coil]]&lt;br /&gt;
 | decon_with_tool2 = [[Wrench]]&lt;br /&gt;
 | item_rec2        = 2 x [[Kit (Liquid Pipe)]]&lt;br /&gt;
&lt;br /&gt;
 | stage_image3     = [[File:StructureFiltrationLiquid.png]]&lt;br /&gt;
 | decon_with_tool3 = [[Hand Drill]]&lt;br /&gt;
 | item_rec3        = 2 x [[Cable Coil]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
=Description=&lt;br /&gt;
The Liquid Filtration Unit is a powered machine, that is used to separate [[Liquids|liquids]] from one [[Pipes|pipe]] network into another using [[Filter|filters]]. The liquid Filtration unit occupies a 3x3 space on the small building grid supported by a frame. Back face of the unit provide floor-level power and logic cable ports, while the front side holds the output port, control panel and two filter sockets. Right and left side also feature dedicated one-way pipe ports for managing liquid inputs and ouputs.&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
Once you have placed the Filtration Unit in your desired location, there are 3 separate pipe connections that will need to be made:&lt;br /&gt;
# '''Input''' - Starting liquid network that you want to filter from, on the right side of the machine.&lt;br /&gt;
# '''Output 1''' - Filtered liquid output, on the left side of the machine.&lt;br /&gt;
# '''Output 2''' - The remainder liquid mixture output, colloquially called &amp;quot;waste output&amp;quot;, on the bottom left of the front panel of the machine.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
When powered and turned on, the Liquid Filtration Unit will take a specific amount (in mols) of the Input gas/liquid mixture and process it using the Filters attached. It will then separate all the gases associated with these Filters and eject them to the Output 1 pipe network, and eject the remaining gases to the Output 2 network. The Liquid Filtration Unit can process slightly greater amounts of gases over time if the Input network pressure is significantly greater than pressure in either of its ouput networks and/or the input network is cooled,  and significantly greater amounts of liquids if the input liquid network is at a higher fill percentage than the output networks.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Guide (Filtration)]] provides additional information regarding the function, construction, and operation of a Filtration unit.&lt;br /&gt;
&lt;br /&gt;
=Characteristics=&lt;br /&gt;
* It has a manual power switch.&lt;br /&gt;
* It consumes 10W of [[Power]] per [[Tick]] when idle and 10-110W(depending on its input pressure) when active.&lt;br /&gt;
* It has a separate [[Power Port]] and [[Data Port]].&lt;br /&gt;
* It has an on-board IC10 chip slot.&lt;br /&gt;
* It has a pipe port (labelled &amp;quot;Input&amp;quot;) for the gas mixture from which the designated gas(es) '''will be''' filtered.&lt;br /&gt;
* It has a pipe port (labelled &amp;quot;Filtered&amp;quot;) for the designated gas(es) that '''have been''' filtered. (This is in line with and directly opposite of the input)&lt;br /&gt;
* It has a pipe port (labelled &amp;quot;Unfiltered&amp;quot;) for any remaining unfiltered gases. (This is to the side)&lt;br /&gt;
* It can filter up to 2 different gases at once by inserting two different filters.&lt;br /&gt;
** Inserting two of the '''same''' type of filter does not increase filtration speed.&lt;br /&gt;
Note: When using an I/O slot reader chip, the filter slots are labeled as slot 1, slot 2 and slot 3(IC), with 1 being the slot closer to the inlet.&lt;br /&gt;
When using an IC chip, the slots are labeled as slot 0, slot1 and slot 2(IC).&lt;br /&gt;
&lt;br /&gt;
=User Interface=&lt;br /&gt;
A Filtration unit provides the following user interface:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Type !! Function&lt;br /&gt;
|-&lt;br /&gt;
| [[Filters|Filter]] (Right) || Slot 0 || Port for a gas filter. If gas of the same type is present in the incoming mixture, it will be redirected out the &amp;quot;Filtered&amp;quot; pipe port.&lt;br /&gt;
|-&lt;br /&gt;
| Filter (Left) || Slot 1 || Another Port for a gas filter that functions the same as its twin slot. May contain the same or a different filter.&lt;br /&gt;
|-&lt;br /&gt;
| v || Slot 2 || IC10 placed in filtration unit (has 2 Input/Outputs)&lt;br /&gt;
|-&lt;br /&gt;
| On || Switch || Switches Filtration unit between turned on or turned off. (On=1/Off=0)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Data Network Header}}&lt;br /&gt;
&lt;br /&gt;
{{Data Parameters}}&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Powers on the Filtration unit on when set to 1. Powers off when set to 0.&lt;br /&gt;
|-&lt;br /&gt;
| Open || Boolean  || &lt;br /&gt;
|-&lt;br /&gt;
| Setting || Integer || &lt;br /&gt;
|- &lt;br /&gt;
| Lock || Boolean ||&lt;br /&gt;
|-&lt;br /&gt;
| Mode || Boolean  || 0: idle, 1: Active&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Data Outputs}}&lt;br /&gt;
{{incomplete}}&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Output Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Power || Boolean || Returns whether the Filtration unit is turned on and receives power. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| Open || Boolean  || Returns whether the Filtration unit IC Slot cover is open or closed. (0 for closed, 1 for open)&lt;br /&gt;
|-&lt;br /&gt;
| Mode || Boolean  || Returns whether the Filtration unit is active or idle (0 for idle, 1 for Active)&lt;br /&gt;
|-&lt;br /&gt;
| Error || Boolean || Returns whether the Filtration unit is flashing an error. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| Lock || Boolean || Returns whether the Filtration unit is locked. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| Setting || Integer || &lt;br /&gt;
|-&lt;br /&gt;
| Maximum || Integer || &lt;br /&gt;
|-&lt;br /&gt;
| Ratio || Float ||&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Returns whether the Filtration unit is turned on. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| RequiredPower || Integer || Returns the current amount of power in Watts required by the Filtration unit.&lt;br /&gt;
|-&lt;br /&gt;
| PressureInput|| Float || Input pressure in kilopascals&lt;br /&gt;
|-&lt;br /&gt;
| TemperatureInput || Float || Input temperature in kelvin&lt;br /&gt;
|-&lt;br /&gt;
| RatioOxygenInput || Float || Percentage of Oxygen in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioCarbonDioxideInput || Float || Percentage of Carbon Dioxide in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrogenInput || Float || Percentage of Nitrogen in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioPollutantInput || Float || Percentage of Pollutant in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioVolatilesInput || Float || Percentage of Volatiles in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioWaterInput || Float || Percentage of Water in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrousOxideInput || Float || Percentage of Nitrous Oxide in input as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| TotalMolesInput|| Float || Total quantity of gas in input measured in moles&lt;br /&gt;
|-&lt;br /&gt;
| PressureOutput|| Float || Output pressure in kilopascals&lt;br /&gt;
|-&lt;br /&gt;
| TemperatureOutput || Float || Output temperature in kelvin&lt;br /&gt;
|-&lt;br /&gt;
| RatioOxygenOutput || Float || Percentage of Oxygen in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioCarbonDioxideOutput || Float || Percentage of Carbon Dioxide in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrogenOutput || Float || Percentage of Nitrogen in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioPollutantOutput || Float || Percentage of Pollutant in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioVolatilesOutput || Float || Percentage of Volatiles in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioWaterOutput || Float || Percentage of Water in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrousOxideOutput || Float || Percentage of Nitrous Oxide in output as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| TotalMolesOutput|| Float || Total quantity of gas in output measured in moles&lt;br /&gt;
|-&lt;br /&gt;
| PressureOutput2|| Float || Waste pressure in kilopascals&lt;br /&gt;
|-&lt;br /&gt;
| TemperatureOutput2 || Float || Waste temperature in kelvin&lt;br /&gt;
|-&lt;br /&gt;
| RatioOxygenOutput2 || Float || Percentage of Oxygen in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioCarbonDioxideOutput2 || Float || Percentage of Carbon Dioxide in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrogenOutput2 || Float || Percentage of Nitrogen in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioPollutantOutput2 || Float || Percentage of Pollutant in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioVolatilesOutput2 || Float || Percentage of Volatiles in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioWaterOutput2 || Float || Percentage of Water in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrousOxideOutput2 || Float || Percentage of Nitrous Oxide in waste as ratio between 0 and 1&lt;br /&gt;
|-&lt;br /&gt;
| TotalMolesOutput2 || Float || Total quantity of gas in waste measured in moles&lt;br /&gt;
|-&lt;br /&gt;
| CombustionInput || Float ||&lt;br /&gt;
|-&lt;br /&gt;
| CombustionOutput || Float ||&lt;br /&gt;
|-&lt;br /&gt;
| CombustionOutput2 || Float ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
==Slot Outputs==&lt;br /&gt;
Slot 0 and 1 are the two gas [[filter]]s.  Slot 2 is the [[Integrated Circuit (IC10)|programmable chip]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Output Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Occupied || Boolean || Returns whether the slot is occupied. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| OccupantHash || Integer || Returns the hash of the object in the slot.&lt;br /&gt;
|-&lt;br /&gt;
| Quantity || Integer || Returns the filter life remaining, in percent.&lt;br /&gt;
|-&lt;br /&gt;
| Damage || Integer || Returns the damage state of the item in the slot.&lt;br /&gt;
|-&lt;br /&gt;
| Class || Integer || Returns an integer representing the class of object.&lt;br /&gt;
|-&lt;br /&gt;
| MaxQuanity || Integer || Returns max stack size of the item in the slot.&lt;br /&gt;
|-&lt;br /&gt;
| PrefabHash || Integer || Returns the hash of the structure in the slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
=See Also=&lt;br /&gt;
* [[Guide (Filtration)]]&lt;br /&gt;
* [[Filtration]]&lt;br /&gt;
* [[Kit (Atmospherics)]]&lt;br /&gt;
* [[Kit (Portable Scrubber) Portable Scrubber|Portable Scrubber]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:StructureFiltrationLiquid_BuildState1.png&amp;diff=25844</id>
		<title>File:StructureFiltrationLiquid BuildState1.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:StructureFiltrationLiquid_BuildState1.png&amp;diff=25844"/>
				<updated>2026-03-04T13:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Sprite taken from game files. Copyright RocketWerkz Ltd. Use on wiki should fall within NZ Copyright law's research exemption.}}&lt;br /&gt;
|date=2026-03-04&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Structures]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:StructureFiltrationLiquid_BuildState0.png&amp;diff=25845</id>
		<title>File:StructureFiltrationLiquid BuildState0.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:StructureFiltrationLiquid_BuildState0.png&amp;diff=25845"/>
				<updated>2026-03-04T13:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Sprite taken from game files. Copyright RocketWerkz Ltd. Use on wiki should fall within NZ Copyright law's research exemption.}}&lt;br /&gt;
|date=2026-03-04&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Structures]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:StructureFiltrationLiquid.png&amp;diff=25846</id>
		<title>File:StructureFiltrationLiquid.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:StructureFiltrationLiquid.png&amp;diff=25846"/>
				<updated>2026-03-04T13:28:58Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Sprite taken from game files. Copyright RocketWerkz Ltd. Use on wiki should fall within NZ Copyright law's research exemption.}}&lt;br /&gt;
|date=2026-03-04&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Structures]]&lt;br /&gt;
[[Category:Machines]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:ItemKitLiquidFiltration.png&amp;diff=25843</id>
		<title>File:ItemKitLiquidFiltration.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:ItemKitLiquidFiltration.png&amp;diff=25843"/>
				<updated>2026-03-04T13:28:57Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Sprite taken from game files. Copyright RocketWerkz Ltd. Use on wiki should fall within NZ Copyright law's research exemption.}}&lt;br /&gt;
|date=2026-03-04&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Items]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25842</id>
		<title>User:RA2lover/Sandbox/Thermodynamics machinery notes</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25842"/>
				<updated>2026-03-04T13:23:44Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Liquid Filtration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pipe / Liquid Pipe==&lt;br /&gt;
&lt;br /&gt;
====Weakest member selection====&lt;br /&gt;
* If the pipe network already has a weakest member, it remains in the same pipe network, it hasn't burst, and it's not buried, use it.&lt;br /&gt;
* Get all pipe segments in the network, discard burst/buried pipes, and pick the most damaged pipe.&lt;br /&gt;
* If no pipes are damaged, choose one of the remaining pipes at random.&lt;br /&gt;
&lt;br /&gt;
====Weakest member damage criteria====&lt;br /&gt;
* More than 0.05 moles/L of frozen elements are on the network: Instant, damage/tick = log2(total of frozen gases/0.05 mol/L), clamped between 0.5/tick and 10/tick &lt;br /&gt;
**Gases are not counted towards this if the pressure on the network is below the armstrong limit. (6.3 kPa)&lt;br /&gt;
* If a gas pipe: More than 2% of liquids (by volume) are on the network: Instant, damage/tick = log10(percentage of liquids) - 0.8, clamped between 0.2/tick and 10/tick&lt;br /&gt;
* If the weakest segment is under a pressure gradient above the pipe's pressure rating: Instant, damage = log2(PressureGradient/PressureRating), clamped between 0.2/tick and 10/tick&lt;br /&gt;
** If no pipes are damaged, check all pipe segments for pressure damage. (Possible Exploit: intentionally damage but don't break a specific pipe segment that's kept in a pressure-protected room, get a pressure-resistant pipe network)&lt;br /&gt;
&lt;br /&gt;
====Burst pipe====&lt;br /&gt;
* Set a network fault flag. (readable with a [[Pipe Analyzer]]'s NetworkFault logic value)&lt;br /&gt;
* Spawn ices around the pipe if the pipe network contains more than 50 mols of ices.&lt;br /&gt;
* For all atmos-containing grids the pipe belongs to:&lt;br /&gt;
** Move liquids from pipe to world. (rate: pipe volume/tick*number of atmos-containing grids, or enough to drain a pipe network with more liquids than its capacity down to 99% full in case the pipe had overcompressed liquids. Won't drain past &amp;gt;99% world cell fullness)&lt;br /&gt;
** If pressure gradient is above 1 atm, move gases unidirectionally attempting to equalize pressure.&lt;br /&gt;
*** Maximum pressure gradient/tick: 1/10th of the pipe's pressure rating. This value is reduced if grids are blocked.&lt;br /&gt;
*** Maximum moles moved/tick: The pipe volume's worth of contents. (Don't use it as a passive vent for an early venus advanced airlock or it can vacuum itself shut?)&lt;br /&gt;
****This limit is ignored if the pressure gradient before equalization is greater than the pipe's pressure rating&lt;br /&gt;
** If it's not, Mix contents of pipe network and atmospheric network.&lt;br /&gt;
&lt;br /&gt;
== Air Conditioner ==&lt;br /&gt;
&lt;br /&gt;
Additional details: [[User:RA2lover/Sandbox/Thermodynamics machinery notes/Air Conditioner|Link]]&lt;br /&gt;
&lt;br /&gt;
- If the *input* network is off from the target temperature by less than 1 degree, no action is performed on a tick.&lt;br /&gt;
&lt;br /&gt;
Otherwise, the air contitioner's internal logic takes place:&lt;br /&gt;
&lt;br /&gt;
 - 1 - Try to take contents from its input network into an internal storage (mole-equivalent of 100 liters of gas at the input network temperature and air conditioner's processing capability (750 kPa), includes both liquids and gases)&lt;br /&gt;
 - 2 - Transfer 14kJ * OperationalTemperatureEfficiency * TemperatureDifferentialEfficiency of energy between the waste network and the internal network (if either input network before the step 1 pumping or the waste network pressures are below 1atm, scale down by the lowest pressure from that to 0 linearly)&lt;br /&gt;
 - 3 - Transfer contents from its internal network to its output network&lt;br /&gt;
&lt;br /&gt;
TemperatureDeltaCurve losses can be avoided entirely by connecting the input network and waste network together (as opposed to the typical closed-loop configuration where input and output networks are connected together).&lt;br /&gt;
&lt;br /&gt;
How much is 14kJ? Vulcan night atmosphere (400 K @ 100L, 1atm) would get you 3.046 moles at 23.182 J/mol/K, or a drop of ~201 K (which would get hampered by the OperationalTemperatureEfficiency still not being that high).&lt;br /&gt;
&lt;br /&gt;
== Filtration ==&lt;br /&gt;
* Consume 0.1 W/kPa input pressure(capped at 100W/1MPa) + 10W(base).&lt;br /&gt;
* Calculate the pressure gradient between the input and the highest of the two output networks. If either output network is at a higher pressure than the input, treat the gradient as 0.&lt;br /&gt;
* Process 100 bar*L to 2000 atm*L per tick linearly mapped to the pressure gradient from 0 to 600 atm.&lt;br /&gt;
**This represents an additional 31.6884612 bar*L/tick/MPa, or an additional 100 bar*L/tick for every 3.1557228156 MPa of pressure gradient)&lt;br /&gt;
* Send processed contents matching filters to output, not-matching filters to unfiltered output.&lt;br /&gt;
&lt;br /&gt;
== Liquid Filtration ==&lt;br /&gt;
* Consume 200W/L liquids on input network (capped at 100W on 0.5L)  + 10W(base).&lt;br /&gt;
* Calculate the fill percentage gradient between the input and the fullest of the two output networks. If either output network is at a higher fill percentage than the input, treat the gradient as 0.&lt;br /&gt;
* Remove 0.5..20L/tick for processing, linearly mapped to the fill percentage gradient from 0% to 100%.&lt;br /&gt;
* Calculate the pressure gradient between the input and the highest of the two output networks. If either output network is at a higher pressure than the input, treat the gradient as 0.&lt;br /&gt;
* Remove 1000 kPa*10L (=100 bar*L) to MaxGasPipePressure/3*10L(=2000 atm*L)/tick for processing, linearly mapped to the pressure gradient from 0 to 600 atm. (liquid pipes can only withstand 60 atm)&lt;br /&gt;
* Process the removed contents through the filters, moving filtered contents to the filtered output.&lt;br /&gt;
* Send unfiltered contents to the unfiltered output.&lt;br /&gt;
&lt;br /&gt;
==H2 Combustor== &amp;lt;!-- out of date, now just &amp;quot;combustor&amp;quot; --&amp;gt;&lt;br /&gt;
* Equalize internal atmosphere with output atmosphere. (one-way, no limit)&lt;br /&gt;
* If not idle and input atmosphere has 0.0003 moles or more:&lt;br /&gt;
**Transfer 10 bar*L..200 atm*L from input atmosphere to internal atmosphere (mapped from pressure gradient between input atmosphere and internal atmosphere, 0..600atm)&lt;br /&gt;
***This is equivalent to 0.1 Filtration machines.&lt;br /&gt;
**Combust 66% of the oxygen/volatiles mix into liquid water (2 mol Volatiles + 1 mol O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 2 mol H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O + 429kJ)&lt;br /&gt;
**Instantly combust 90% of the remaining fuel mix. (regular combustion rules apply)&lt;br /&gt;
&lt;br /&gt;
==Electrolyzer==&lt;br /&gt;
* Consume 50W idle (3600W when active).&lt;br /&gt;
* If active, calculate the amount of energy required to electrolyze 1 mol of water.&lt;br /&gt;
** Base energy is the energy of electrolysis byproducts for 1 mol of water at 20°C: ((20.4J/K*2+21.1J/K)*293.15 K+(286 kJ*2)+(8kJ*3))/3 = 218.048661667 kJ/mol of water&lt;br /&gt;
** This is then subtracted by the specific energy of water at the input network's temperature (72 J/K). (results in 0 energy required at 3028.45 K; attempts to electrolyze at or above that temperature result in all water on the network being instantly split)&lt;br /&gt;
* Remove the amount of water the 3600 W can split at 40x efficiency (144 kW) from the input network, converting it to electrolysis byproducts at 20°C, and move those to output atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Nitrolyzer ==&lt;br /&gt;
* Consume 50W idle.&lt;br /&gt;
* Move internal atmosphere contents to output if there's a valid output network.&lt;br /&gt;
* Check for both input networks.&lt;br /&gt;
** If only one input network is connected, take 1.5 moles/tick from it, otherwise, take 0.75 moles/tick from each of the input networks.&lt;br /&gt;
* Calculate reaction efficiency.&lt;br /&gt;
** If the ratios of either nitrogen or oxygen are below 1%, set it to 0%.&lt;br /&gt;
** Otherwise, it's 30% * sum of nitrogen and oxygen gas ratios * (lowest ratio of the two / highest ratio of the two)&lt;br /&gt;
* If efficiency isn't 0%, consume 6kW instead of the 50W.&lt;br /&gt;
* Convert ReactionEfficiency% of the nitrogen/oxygen present internally into nitrous oxide.&lt;br /&gt;
** 2 moles -&amp;gt; 1 mole nitrous oxide. Output energy is half the components' energy + reaction inefficiency&lt;br /&gt;
** Example: 50/50 nitrogen:oxygen mix at 300K -&amp;gt; ((20.6*300 + 21.1*300)*0.225+4200)/(37.2*0.225) = 838.08K nitrous oxide output temperature. Actual output temperature is 448.82 K as it immediately mixes with unreacted gases.&lt;br /&gt;
&lt;br /&gt;
Because nitrous oxide contributes 286 kJ/mol in combustion, use of the nitrolyzer is 10.725x energy-positive at the maximum reaction efficiency of 30% (0.225 mol/tick).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wall Cooler ==&lt;br /&gt;
&lt;br /&gt;
Checks if pressure on both pipe and world grid atmosphere is above armstrong limit (6.3 kPa), transfers 1kJ * TemperatureDifferentialEffficiency of energy per tick from the environment to the pipe network.&lt;br /&gt;
Although no OperationalTemperatureEfficiency curve is present, this would only be more efficient than an air conditioner on situations where this value would be &amp;lt;5% (or 2.5%? TODO: clear up J/tick and W distinction for power consumers). You'll probably want an air conditioner on most scenarios.&lt;br /&gt;
&lt;br /&gt;
== Wall Heater ==&lt;br /&gt;
&lt;br /&gt;
Checks if world grid atmosphere is above armstrong limit and temperature is below 2500 K,  adds 1kJ/tick to world grid, '''ignites flammable atmospheres below autoignition temperature'''.&lt;br /&gt;
&lt;br /&gt;
== Pipe Heater ==&lt;br /&gt;
&lt;br /&gt;
Same pressure/temperature checks as wall heater, but doesn't ignite flammable pipe contents(assuming no autoignition occurs).&lt;br /&gt;
&lt;br /&gt;
== Road Flare ==&lt;br /&gt;
Ignites flamambles. Adds 1kJ/tick when lit. 1.2s fuse when fired from [[Flare Gun]]. 25m illumination range when falling from flare gun, 10m range otherwise.&lt;br /&gt;
&lt;br /&gt;
== Evaporation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo liquid volume regulator(0.25 L/tick, input-&amp;gt;internal, targets 10% internal liquid volume), purge valve (1500 kPa * 10L, internal-&amp;gt;output) and heat exchanger (15m² area, internal&amp;lt;&amp;gt;input 2).&lt;br /&gt;
&lt;br /&gt;
== Condensation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo pressure regulator (1500 kPa * 10 L), 2 condensation valves (input-&amp;gt;internal, internal-&amp;gt;output) and heat exchanger (15m² area).&lt;br /&gt;
&lt;br /&gt;
== Condensation Valve / Expansion Valve ==&lt;br /&gt;
&lt;br /&gt;
Moves 10 liters of liquids or half the liquids volume on the input pipe network per tick, whichever is smaller. Isn't supposed to move if the output network can't fit another 0.1L of liquids (untested).&lt;br /&gt;
&lt;br /&gt;
== Active Vent ==&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres.&lt;br /&gt;
** The calculation assumes both atmospheres have an identical heat capacity.&lt;br /&gt;
* If pumping into pipe, pump the smallest of:&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (grid minimum pressure limited to the external pressure limit)&lt;br /&gt;
** The amount of gas required to make the pipe network reach the internal pressure limit (at the average temperature)&lt;br /&gt;
* If pumping outwards, pump the smallest of:&lt;br /&gt;
** The amount of gas available in excess of the internal pressure limit (at the '''internal''' temperature)&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (limited to the external pressure limit)&lt;br /&gt;
* Set flow indicator status based on the difference in grid external pressure pre- and post- pumping and the maximum pumping capacity.&lt;br /&gt;
**&amp;gt;9 kPa: Max (Green)&lt;br /&gt;
**&amp;gt;5 kPa: Limited (Yellow)&lt;br /&gt;
**&amp;lt;5 kPa: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
For a 8000 L cell, the pumping capacity is 800 bar*L. As things get added to the cell this pumping capacity decreases.&lt;br /&gt;
&lt;br /&gt;
== Powered Vent == &amp;lt;!--StructurePoweredVentMultiGrid; small variant also uses multigrid--&amp;gt;&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres. (similar to active vent)&lt;br /&gt;
* If pumping into pipe:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the grid temperature into the pipe network (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
** If more than 0.1 kPa of pumping capacity remains available:&lt;br /&gt;
*** Calculate the cumulative pressure difference relative to the target pessure over open neighbor grids up to GridMixingDepth tiles away from the grid the vent is in.&lt;br /&gt;
*** If the pressure on the grid it's in is greater than the cumulative pressure difference, pull the pressure of it further down ignoring the external pressure limit (limited to the remaining pumping capacity).&lt;br /&gt;
*** If it's not, search for open grids 1 tile further away (starting from the vent grid, repeated until GridMixingDepth), and for each one pump their contents into the pipe(up to pressure limit) until the pumping capacity is exhausted or the GridMixingDepth limit is reached.&lt;br /&gt;
****The search is aborted if &amp;lt;0.1 kPa of remaining pumping capacity is left by the next grid expansion. &lt;br /&gt;
* If pumping into world:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the average temperature (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
**If more than 0.1 kPa of pumping capacity remains available, calculate the cumulative pressure difference relative to the target pressure over over neighbor grids up to GridMixingDepth tiles away, and pump up to that into world using the remaining pumping capacity (ignoring the external pressure limit).&lt;br /&gt;
* Set flow indicator status to remaining pumping capacity after pumping:&lt;br /&gt;
** &amp;lt; 1.1 kPa: Max (Green)&lt;br /&gt;
** &amp;lt; PressurePerTick/2: Limited (Yellow)&lt;br /&gt;
** &amp;gt; PressurePerTick/2: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
PressurePerTick: 20 kPa (small), 40 kPa (large)&lt;br /&gt;
&amp;lt;br&amp;gt;GridMixingDepth: 4 (small), 6 (large)&lt;br /&gt;
&lt;br /&gt;
== Passive Vent ==&lt;br /&gt;
Mixes pipe gas contents with world cell gas contents, or mixes all pipe contents with all world cell contents if submerged in liquid. Not sure how to make use of this considering the amount of liquids required to submerge one.&lt;br /&gt;
&lt;br /&gt;
== Pipe Radiators ==&lt;br /&gt;
&lt;br /&gt;
Convection power = 100*area*deltaT. Area is multiplied by internal and external pressure ratios compared to 1atm, so effectiveness is reduced if either is below this pressure.&lt;br /&gt;
&lt;br /&gt;
Radiation power is based on a curve function on the difference between the network temperature and the background temperature (world temperature on a vacuum, lerped to atmospheric temperature based on how many moles are on it up to 20kPa @ 0°C (=70.450583221073 mols on a world cell)). Area is multiplied by internal pressure ratio compared to 1atm.&lt;br /&gt;
&lt;br /&gt;
== Pipe Organ ==&lt;br /&gt;
&lt;br /&gt;
Makes sound if pressure delta between pipe network and world is above 10kPa. Equalizes pipe network gases with world cell gases at a rate of 20 kPa/tick.&lt;br /&gt;
&lt;br /&gt;
== Liquid Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Move setting L/tick of '''liquids''' from input to output network, then remove gases from input network until output network pressure is equalized.&lt;br /&gt;
&lt;br /&gt;
A liquid volume pump set to 0.0000001 L can be used as a one-way liquid-pipe-to-liquid-pipe gas valve with a negligible power consumption. (This behavior is different from the one-way valve, which also moves liquids)&lt;br /&gt;
&lt;br /&gt;
== Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Take the moles present in setting L of the input pipe network, move them to the output in a single tick. If setting is greater than the input pipe network volume, only the input pipe network is used but power is still consumed based on the setting parameter.&lt;br /&gt;
&lt;br /&gt;
== Turbopumps ==&lt;br /&gt;
&lt;br /&gt;
Same mechanics as turbo pumps but with a fixed base power consumption and a lower consumption/L pumped.&lt;br /&gt;
&lt;br /&gt;
== Gas regulators ==&lt;br /&gt;
&lt;br /&gt;
(Comprises Pressure Regulator, Back Pressure Regulator, Pressurant Valve, Purge Valve)&lt;br /&gt;
&lt;br /&gt;
If output network pressure is greater than input network pressure, move up to a mole-equivalent quantity of gas that would fit in pressurePerTick(=1atm?)*10L volume at the pipe network temperature.&lt;br /&gt;
&lt;br /&gt;
With a 10L volume pump consuming twice the power of a gas regulator, This makes a gas regulator more efficient than a volume pump when operating on input network pipe pressures below pressurePerTick*2 (2 atm?) as more volume/W is scavenged in that circumstance.&lt;br /&gt;
&lt;br /&gt;
If input pipe pressure is greater than output network pressure, check if more gas could be moved by moving a quarter of the pressure difference on the input network per tick instead, and move up to that if so. This makes a regulator more efficient than a volume pump in scenarios where the input network volume is large enough to make a reasonable pressure gradient worthwhile.&lt;br /&gt;
&lt;br /&gt;
PressurePerTick value is 101.325 kPa for all 4.&lt;br /&gt;
&lt;br /&gt;
== Gas Mixer == &amp;lt;!-- analysis not paying enough attention, reminder to check later --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Calculates the amount of gas a gas regulator working against the pressure gradient would take in a tick, multiplied by the ratio fraction belonging to the given input. (for example: 75% ratio would take 7.5 atm*L from input 1 and 2.5 atm*L from input 2)&lt;br /&gt;
&amp;lt;br&amp;gt;Takes a (weighed by ratio) average of the input pressures on both networks.&lt;br /&gt;
&amp;lt;br&amp;gt;Calculates &amp;quot;Max Moles Per Tick&amp;quot; for both networks - This is similar to the &amp;quot;pressure regulator working with the help of a pressure gradient&amp;quot; case, but only up to a fifth of the pressure differential(between the input's pressure and the average input pressure) instead of a 1/4th as in the pressure regulator. &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Acts as a Gas regulator, except:&lt;br /&gt;
* Moves either 20 '''bar'''*L/tick weighed between both input networks by ratio (as opposed to 10 '''atm'''*L/tick) or a fifth of the pressure gradient(instead of a fourth), whichever is greater.&lt;br /&gt;
* Uses the average input pressure (weighed by ratio) for pressure gradient calculations.&lt;br /&gt;
* Stops moving if either either input is empty and currently in use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Liquid regulators ==&lt;br /&gt;
&lt;br /&gt;
(Liquid volume regulator, Liquid Back Volume regulator)&lt;br /&gt;
&lt;br /&gt;
If volume percentage on input network is greater than output network, pump '''liquids''' up to the greater of:&lt;br /&gt;
&lt;br /&gt;
 - A quarter of the combined network liquid volume percentage to output network per tick (if input network volume ratio &amp;gt; output network volume ratio). '''This isn't liquid level balancing''' - a 50.(0)1/100L against a 50/100L network will still result in a single-tick movement of ~100L/4 = 25L from input to output. There's a likely bug here.&lt;br /&gt;
 - The regulator's liquid volume pumping capacity (0.25L/tick).&lt;br /&gt;
&lt;br /&gt;
If any liquids were moved, balance gas pressures on the output with a one-way '''gas''' valve from input to output. Liquids have to be moved for this, unlike the 0L liquid volume pump.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Air Conditioner ==&lt;br /&gt;
&amp;lt;!-- not including data about HARM suit as the build i have access to is out-of-date --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If suit AC is off, suit has no waste tank attached or no/empty battery, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Calculate the energy required to move the suit/helmet's internal atmosphere to the target temperature.&lt;br /&gt;
&lt;br /&gt;
If cooling to that temperature, transfer the excess energy to the waste tank consuming 1% of it in battery power, and marking an amount of gas to be moved to the waste tank on that tick's filtration step (1 mol / 2 kJ cooled).&lt;br /&gt;
&lt;br /&gt;
If heating to that temperature, consume 50% of the energy spent heating the contents in battery power.&lt;br /&gt;
&lt;br /&gt;
The maximum amount of heat a suit can add/remove per tick is proportional to its condition, but the heating/cooling efficiency remains the same.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Filtration ==&lt;br /&gt;
&lt;br /&gt;
If filtration is off, suit is unpowered or has no waste tank attached, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Fill waste tank to 1 kPa with air tank contents if waste tank pressure is below 1kPa.&lt;br /&gt;
&lt;br /&gt;
Remove all gases in the space suit's internal volume matching the filters in its slots.&lt;br /&gt;
&lt;br /&gt;
Remove additional gases from the space suit's internal volume if the amount of gas to be moved on the AC step exceeds the amount of gas moved by the filters, up to the suit's pumping rate (proportional to its condition).&lt;br /&gt;
&lt;br /&gt;
Consume 10 J from battery.&lt;br /&gt;
&lt;br /&gt;
== Gas Mask == &amp;lt;!-- the GasMask class is actually for suit helmets. The actual gas mask's class name is FilterMask... which is an extension of it. --&amp;gt;&lt;br /&gt;
If equipped:&lt;br /&gt;
* Transfer internal atmosphere contents to world.&lt;br /&gt;
* Equalize world and internal pressures.&lt;br /&gt;
* Filter gasses from internal atmosphere into world atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Fridge (large) ==&lt;br /&gt;
&lt;br /&gt;
Initialize an atmosphere containing 1.72 moles of nitrogen at 20°C (if world grid pressure below armstrong limit) or world grid temperature.&lt;br /&gt;
&lt;br /&gt;
Heat internal atmosphere to 142 K or move internal atmosphere energy to environment down to 142 K at up to 1kJ/tick.&lt;br /&gt;
&lt;br /&gt;
Add energy added/moved to that tick's power consumption.&lt;br /&gt;
&lt;br /&gt;
Fridge has a convection factor to world atmosphere of 0.01 when door is opened and 0 when closed.&lt;br /&gt;
&lt;br /&gt;
== Welding Torch ==&lt;br /&gt;
Has a 1L internal reservoir.&lt;br /&gt;
&amp;lt;br&amp;gt;If on, checks for internal reservoir contents, and if any, ejects them into world atmosphere '''and ignites world atmosphere flammables (even if the internal reservoir contents are cold inert gas).'''&lt;br /&gt;
&amp;lt;br&amp;gt;Moves 0.01 moles/tick from canister contents (both gas and liquid) into the internal reservoir, and attempts to perform complete manual combustion of them.&lt;br /&gt;
&amp;lt;br&amp;gt;Is operable if any combustion has occurred within the reservoir, regardless of the final temperature after combustion.&lt;br /&gt;
&lt;br /&gt;
Gains a 30% additive work speed bonus (on top of its 20% additive work speed bonus relative to the arc welder?) if the internal reservoir temperature is above 3000°C after combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Awards the &amp;quot;Fast and Furious&amp;quot; achievement to the wielder when welding with an internal atmosphere of &amp;gt;10% nitrous oxide gas (liquids not counted).&lt;br /&gt;
&lt;br /&gt;
== Furnace ==&lt;br /&gt;
* Doesn't explode if partially deconstructed before an overpressure event. &amp;lt;!--early return on FurnaceBase:OnAtmosphericTick--&amp;gt;&lt;br /&gt;
* Includes a passive pollutant filter that prioritizes moving out pollutant from its internal storage to the output before any other gases when attempting to equalize pressure. &amp;lt;!--Furnace:HandleGasInput--&amp;gt;&lt;br /&gt;
** Filter max flow rate before allowing other gasses through is 2000 kPa at the hottest of (internal, output) temperatures and smallest of (internal, output) volumes.&lt;br /&gt;
* Starts processing ores once the furnace's internal temperature is above their flashpoint. &amp;lt;!--FurnaceBase:OnServerImportTick--&amp;gt;&lt;br /&gt;
** Ices get melted. Ores/reagent mixes get their contents added to reagents. Ingots become reagents and cool the input down by 45J*Flashpoint Temperature/g.&lt;br /&gt;
* When ejecting, check if internal reagent mix and internal conditions forms one of the recipes, output recipe if so, or reagent mix otherwise.&lt;br /&gt;
&lt;br /&gt;
== Advanced Furnace ==&lt;br /&gt;
&lt;br /&gt;
Input pump removes both gases and liquids from input.&lt;br /&gt;
&amp;lt;br&amp;gt;Output pump pumps only gases into the output gas pipe and only liquids into the output liquid pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;Doesn't include a passive pollutant filter, unlike the regular furnace.&lt;br /&gt;
&amp;lt;br&amp;gt;Power consumption is 100W idle, plus another 1W/L on each pump being used. This makes them more efficient than a [[Turbo_Volume_Pump_(Gas)|Turbopump]] at 100W+2W/L contrasted to the turbopump's 200W+6W/L in applications where flow direction reversibility and the internal buffer tank's volume/liquid retention don't matter.&lt;br /&gt;
&lt;br /&gt;
== Cryo Tube ==&lt;br /&gt;
Does not allow robots inside.&lt;br /&gt;
&amp;lt;br&amp;gt;Has an 800L internal atmosphere, mixed with world atmosphere when open and input network atmosphere when closed.&lt;br /&gt;
&amp;lt;br&amp;gt;Tries to heat the internal atmosphere to 4°C if below, converting up to 250 J/tick as electric power into heat when open. Heating persists even if door is closed? (possible bug)&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant is colder, Will transfer energy from the internal atmosphere to the coolant atmosphere at a rate of 1 J/K/tick until equalization or internal temperature reaches 0°C, clamped between 1 and 100 J/tick.&lt;br /&gt;
&amp;lt;br&amp;gt;Can only revive/heal if the input pipe network has at least 10L of pure liquid nitrogen at 130 K (-143.15°C) or below. Heals 1 damage/tick in those conditions.&lt;br /&gt;
&amp;lt;br&amp;gt;Revives players at 25% of max HP.&lt;br /&gt;
&lt;br /&gt;
== Fire Extinguisher ==&lt;br /&gt;
Transfers 0.25L/s and 200kPa/s out of its canister (the latter until pressure with its environment's atmosphere is equalized) when used.&lt;br /&gt;
&amp;lt;br&amp;gt;If its canister's contents are &amp;gt;99% inert(not nitrous oxide/oxygen/volatiles) by moles and there were at least 1 mol of liquids or enough pressure on the canister to prevent equalization, supresses fires on the cell it's been used and adjacent neighbors for 10 ticks and extinguishes fires on entities on fire within said cells.&lt;br /&gt;
&amp;lt;br&amp;gt;Additionally, if the temperature on the cell it's in is above 300°C after the contents transfer, removes 20kJ/tick of energy from it.&lt;br /&gt;
&lt;br /&gt;
== Active liquid outlet ==&lt;br /&gt;
'''before an atmospherics tick,''' dumps up to 50 mols of the liquid pipe's contents (both liquids and gases) each tick into the world cell if active.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid inlet ==&lt;br /&gt;
If submerged, Attempts to drain liquids from the cell it's in, then from adjacent cells without an open grid below them(repeated up to 6 tiles away), up to a cumulative total of 20L/tick (stopping at 99% network fullness or more than 19.9L drained before the next grid search range expansion). &amp;lt;!-- looks like a costly operation to run every tick on large rooms. --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; After that step, mixes pipe network and world atmospheres.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid drain ==&lt;br /&gt;
Behaves as an always-on condensation valve, but moves liquids to a world atmosphere instead of a pipe network.&lt;br /&gt;
&lt;br /&gt;
== Counterflow Heat Exchanger ==&lt;br /&gt;
Before an atmospherics tick:&lt;br /&gt;
* Remove liquids from inputs to outputs to balance liquid percentages on both input/output networks.&lt;br /&gt;
* Remove gases from inputs to outputs to balance pressures on both input/output networks.&lt;br /&gt;
If contents moved on either of the two networks are less than 0.008 mols, send moved contents to outputs while performing no heat transfer, otherwise:&lt;br /&gt;
* Split removed contents into 8 packets&lt;br /&gt;
* Calculate heat exchange efficiency based on input network pressure/liquid volume after removal (biggest scaling factor of: 0-100% from 0-1atm pressure OR 0-100% from 0-1% liquid volume for each network; final result is the product of both networks' efficiency factors)&lt;br /&gt;
* Perform a total of 48 heat transfers in a sliding window.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    Turns out there is too much crossover between the transfers.&lt;br /&gt;
    Assuming:&lt;br /&gt;
    INPUT  1     D  E  F  0 [1][2][3][4][5][6][7][8] 9  A  B  C   OUTPUT 1&lt;br /&gt;
    OUTPUT 2     C  B  A  9 [8][7][6][5][4][3][2][1] 0  F  E  D   INPUT  2&lt;br /&gt;
    &lt;br /&gt;
    Transfers are made in 2 kernels that slide across left to right along the sequence (discarding transfers made when either hits a non-valid packet):&lt;br /&gt;
    First:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'&lt;br /&gt;
      9ABC  (this latter one's order is actually reversed and has been un-reversed so it could be drawn without overlap)&lt;br /&gt;
    Followed by:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'   (same as the first, but shifting the second network's packets one step to the right)&lt;br /&gt;
      89AB &lt;br /&gt;
    The next iteration would then shift the first input to the right:&lt;br /&gt;
       F012&lt;br /&gt;
       89AB&lt;br /&gt;
    Followed by the second sequence being shifted:&lt;br /&gt;
       F012&lt;br /&gt;
       789A&lt;br /&gt;
    repeated until all the transfers are covered (would stop with the first valid transfer being 1-8 on the 0123-789A step and last valid transfer being 8 1 on the 789A-0123 step)&lt;br /&gt;
There should be enough info here to create an animation on how the transfer works. if there isn't, feel free to hit me for clarification on my talk page.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** Exchange rate for each transfer is 15.625W*ΔT*EfficiencyRatio&lt;br /&gt;
* Merge the split packets back into a single packet for each network&lt;br /&gt;
* Send packet to each network's output&lt;br /&gt;
&lt;br /&gt;
==Portable Air Conditioner==&lt;br /&gt;
Stops heating if external air temperature is above 50°C, stops cooling if external temperature is below -10°C.&lt;br /&gt;
&amp;lt;br&amp;gt;Stops operating if internal pressure is above 40 atm or if any contents on the liquid canister are frozen.&lt;br /&gt;
&amp;lt;br&amp;gt;Consume 25 J/tick from battery.('''BUG: Only when operating in cooling mode.''')&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant tank pressure is above 40 atm, transfer excess pressure to internal tank.&lt;br /&gt;
&amp;lt;br&amp;gt;Without a canister: If in heating mode, heat by 250 J/tick using an internal heating element.&lt;br /&gt;
&amp;lt;br&amp;gt;With a canister: Transfer Clamp( (100-TDelta)/100, min=0.01, max = 1) * 2500 J/tick between  canister and atmosphere. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Portable Generator==&lt;br /&gt;
Removes 1.5 atm*L/tick from input canister (=2.37480469 kPa/tick for a 64L container) into its internal chamber.&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 90% of the chamber's contents.&lt;br /&gt;
&amp;lt;br&amp;gt;Converts 6% of the combustion's energy into power.&lt;br /&gt;
&amp;lt;br&amp;gt;Moves previous tick's combusted contents into atmosphere.&lt;br /&gt;
&lt;br /&gt;
==Gas Fuel Generator==&lt;br /&gt;
* Shuts down if outside operating conditions (at least 19.998 kPa on grid atmosphere, grid atmosphere between 3°C and 57°C)  for 5+ ticks in a row.&lt;br /&gt;
** These are slightly laxer than the conditions for valid atmosphere on its tooltip. (20kPa, 5-55°C)&lt;br /&gt;
* Removes 10 bar*L/tick (100 kPa * 10 L) from the input network into its internal chamber.&lt;br /&gt;
* Instantly combusts 90% of the internal chamber's contents.&lt;br /&gt;
* Sets the device's convection/radiation area to (0.01 + PostCombustionPressure*0.66)*0.28. &lt;br /&gt;
* Converts 17% of the combustion's energy into power.&lt;br /&gt;
** Superfuel at -20°C, at full input rate: 0.475103 mol/tick -&amp;gt; 122291.5 kJ/t -&amp;gt; 20789.56 W&lt;br /&gt;
** ~18.64x as much power as a [[Portable Generator]] on the same fuel mix, at ~6.58x the fuel consumption rate.&lt;br /&gt;
* Moves previous tick's combusted contents into output.&lt;br /&gt;
&lt;br /&gt;
==Rocket Combustion Chamber== &amp;lt;!--RocketEngineBase:CombustEngine--&amp;gt;&lt;br /&gt;
(shared by all engines)&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 96% of the fuel mix.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust temperature to the temperature after this instant combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust velocity to Engine Efficiency * sqrt (8.3144 * Exhaust temperature * Degrees of freedom contributing to exhaust velocity)&lt;br /&gt;
* The number of degrees of freedom depends on the substance's molecular structure:&lt;br /&gt;
** Monoatomic = 1.666666 (None)&lt;br /&gt;
** Diatomic = 1.4 (Oxygen, Nitrogen, Hydrogen)&lt;br /&gt;
** Triatomic = 1.333333 (Carbon Dioxide, Volatiles, Polluted Water/Water/Steam, Nitrous Oxide)&lt;br /&gt;
** Polyatomic = 1.26 (Pollutant)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Mass flow rate to the total mass of gases in the combustion chamber after combustion / tick speed (0.5s)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets engine thrust to Mass flow rate * Exhaust velocity&lt;br /&gt;
&lt;br /&gt;
==Pumped Gas Engine== &amp;lt;!--GovernedGasEngine. Simulation runs off a 100L, 480 atm, 0.666:0.334 fuel mix at 215 K--&amp;gt;&lt;br /&gt;
Removes 0..18 moles from the input atmosphere per tick into combustion chamber depending on throttle.&lt;br /&gt;
&lt;br /&gt;
==Pumped Liquid Engine== &amp;lt;!--Simulation runs off 2 100L tanks containing 80L of liquid volatiles / liquid oxygen at 125 K and a mixing ratio of 70%--&amp;gt;&lt;br /&gt;
Removes a total of 0..0.55 L from the input tanks into the combustion chamber depending on throttle (proportion depends on mixing ratio)&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Gas Engine== &amp;lt;!-- Simulation runs off 2 100L tanks at 215 K, one containing 32391 kPa of volatiles and another containing 16244 kPa of oxygen and ends up burning volatiles-rich at a ~2.686:1 ratio? --&amp;gt;&lt;br /&gt;
At full throttle, removes 10? atm*L .. BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) from each of its 2 inputs into the combustion chamber depending on the fraction of max pipe pressure on each input pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;This is scaled down proportional to throttle. &lt;br /&gt;
* Base pressure-fed gas engine has the Base Pumping Capacity at 500 bar*L, Heavy variant has it at 850 bar*L&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Liquid Engine== &amp;lt;!-- Simulation runs off a 100L tank at 125 K, containing 80L of liquid volatiles/liquid oxygen(at a 70:30 ratio) and a 0.666:0.334 gas fuel mix at 48 atm --&amp;gt;&lt;br /&gt;
At max throttle, pump between 0.04L..MaxFlowRate of liquids into combustion chamber, scaling on input pipe fraction of max pressure. Pumped amount is scaled by throttle.&lt;br /&gt;
* MaxFlowRate is 0.8L for base variant, 1.5L for heavy variant. &lt;br /&gt;
Additionally, move 10? atm*L..BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) of gases into the combustion chamber. (also linearly scaled by throttle)&lt;br /&gt;
* That's the same formula as the pressure-fed gas engine, but scaling from 0-60 atm instea of 0-600 atm.&lt;br /&gt;
* BasePumpingCapacity is 500 bar*L for base variant, 600 bar*L for heavy variant.&lt;br /&gt;
&amp;lt;br&amp;gt;Perform phase change after combustion step but before heat exchange step.&lt;br /&gt;
&amp;lt;br&amp;gt;Max heat exchange area is 3m² for base variant, 5m² for heavy variant, proportional to setting.&lt;br /&gt;
&lt;br /&gt;
==Pneumatic Mining Drill==&lt;br /&gt;
&amp;lt;!--Comparison:&lt;br /&gt;
Emergency Pickaxe: -0.5 ManuallyAuthoredToolSpeedOffset, 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Pickaxe: 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Mining Drill: 1 UsedPowerPassive, 30 UsedPowerActive, 0.11 MineCompletionTime, 0.2 MineAmount&lt;br /&gt;
Pneumatic Mining Drill: 0.4 MineAmount, 20 MinOperationalPressureDifferential, 6000 MaxPressureDifferential, 0.01 MinMolesPerTick, 0.2 MaxMolesPerTick, 0.05 IdleUsageMolesPerTick, 0.05 FastestMineTime, 0.2 SlowestMineTime&lt;br /&gt;
Mining Drill mk2: &amp;quot;manuallyAuthoredToolSpeedOffset&amp;quot;: 0.1, otherwise same as mining drill&lt;br /&gt;
Mining Drill Heavy: UsedPowerPassive: 2, UsedPowerActive: 150, MineCompletionTime: 0.05, MineAmount: 0.4&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Eject internal atmosphere into external atmosphere.&lt;br /&gt;
* Calculates pressure differential between external atmosphere and canister.&lt;br /&gt;
* Calculate base mole consumption: 0.05 mol/tick on idle, 0.2 mol/tick when active.&lt;br /&gt;
* Calculate actual mole consumption: map between 0.01 mol/tick at 20kPa pressure differential to Base mole consumption at 6 MPa pressure differential&lt;br /&gt;
* Remove actual mole consumption from canister into internal atmosphere.&lt;br /&gt;
* Map time between mine actions: 0.2s at 20kPa- pressure differential to 0.05s at 6MPa+ presure differential.&lt;br /&gt;
** Equals heavy mining drill speed if pressure differential is at 6+ MPa, equals mining drill mk1 speed if pressure differential is above ~3.608 MPa (at double the MineAmount, which still loses out to the pickaxe, aimee or autominer.)&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25841</id>
		<title>User:RA2lover/Sandbox/Thermodynamics machinery notes</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25841"/>
				<updated>2026-03-04T12:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Electrolyzer */  update for beta 0.2.6192.26983, https://steamcommunity.com/app/544550/discussions/2/762934390303059149/#c797837596195582451&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pipe / Liquid Pipe==&lt;br /&gt;
&lt;br /&gt;
====Weakest member selection====&lt;br /&gt;
* If the pipe network already has a weakest member, it remains in the same pipe network, it hasn't burst, and it's not buried, use it.&lt;br /&gt;
* Get all pipe segments in the network, discard burst/buried pipes, and pick the most damaged pipe.&lt;br /&gt;
* If no pipes are damaged, choose one of the remaining pipes at random.&lt;br /&gt;
&lt;br /&gt;
====Weakest member damage criteria====&lt;br /&gt;
* More than 0.05 moles/L of frozen elements are on the network: Instant, damage/tick = log2(total of frozen gases/0.05 mol/L), clamped between 0.5/tick and 10/tick &lt;br /&gt;
**Gases are not counted towards this if the pressure on the network is below the armstrong limit. (6.3 kPa)&lt;br /&gt;
* If a gas pipe: More than 2% of liquids (by volume) are on the network: Instant, damage/tick = log10(percentage of liquids) - 0.8, clamped between 0.2/tick and 10/tick&lt;br /&gt;
* If the weakest segment is under a pressure gradient above the pipe's pressure rating: Instant, damage = log2(PressureGradient/PressureRating), clamped between 0.2/tick and 10/tick&lt;br /&gt;
** If no pipes are damaged, check all pipe segments for pressure damage. (Possible Exploit: intentionally damage but don't break a specific pipe segment that's kept in a pressure-protected room, get a pressure-resistant pipe network)&lt;br /&gt;
&lt;br /&gt;
====Burst pipe====&lt;br /&gt;
* Set a network fault flag. (readable with a [[Pipe Analyzer]]'s NetworkFault logic value)&lt;br /&gt;
* Spawn ices around the pipe if the pipe network contains more than 50 mols of ices.&lt;br /&gt;
* For all atmos-containing grids the pipe belongs to:&lt;br /&gt;
** Move liquids from pipe to world. (rate: pipe volume/tick*number of atmos-containing grids, or enough to drain a pipe network with more liquids than its capacity down to 99% full in case the pipe had overcompressed liquids. Won't drain past &amp;gt;99% world cell fullness)&lt;br /&gt;
** If pressure gradient is above 1 atm, move gases unidirectionally attempting to equalize pressure.&lt;br /&gt;
*** Maximum pressure gradient/tick: 1/10th of the pipe's pressure rating. This value is reduced if grids are blocked.&lt;br /&gt;
*** Maximum moles moved/tick: The pipe volume's worth of contents. (Don't use it as a passive vent for an early venus advanced airlock or it can vacuum itself shut?)&lt;br /&gt;
****This limit is ignored if the pressure gradient before equalization is greater than the pipe's pressure rating&lt;br /&gt;
** If it's not, Mix contents of pipe network and atmospheric network.&lt;br /&gt;
&lt;br /&gt;
== Air Conditioner ==&lt;br /&gt;
&lt;br /&gt;
Additional details: [[User:RA2lover/Sandbox/Thermodynamics machinery notes/Air Conditioner|Link]]&lt;br /&gt;
&lt;br /&gt;
- If the *input* network is off from the target temperature by less than 1 degree, no action is performed on a tick.&lt;br /&gt;
&lt;br /&gt;
Otherwise, the air contitioner's internal logic takes place:&lt;br /&gt;
&lt;br /&gt;
 - 1 - Try to take contents from its input network into an internal storage (mole-equivalent of 100 liters of gas at the input network temperature and air conditioner's processing capability (750 kPa), includes both liquids and gases)&lt;br /&gt;
 - 2 - Transfer 14kJ * OperationalTemperatureEfficiency * TemperatureDifferentialEfficiency of energy between the waste network and the internal network (if either input network before the step 1 pumping or the waste network pressures are below 1atm, scale down by the lowest pressure from that to 0 linearly)&lt;br /&gt;
 - 3 - Transfer contents from its internal network to its output network&lt;br /&gt;
&lt;br /&gt;
TemperatureDeltaCurve losses can be avoided entirely by connecting the input network and waste network together (as opposed to the typical closed-loop configuration where input and output networks are connected together).&lt;br /&gt;
&lt;br /&gt;
How much is 14kJ? Vulcan night atmosphere (400 K @ 100L, 1atm) would get you 3.046 moles at 23.182 J/mol/K, or a drop of ~201 K (which would get hampered by the OperationalTemperatureEfficiency still not being that high).&lt;br /&gt;
&lt;br /&gt;
== Filtration ==&lt;br /&gt;
* Consume 0.1 W/kPa input pressure(capped at 100W/1MPa) + 10W(base).&lt;br /&gt;
* Calculate the pressure gradient between the input and the highest of the two output networks. If either output network is at a higher pressure than the input, treat the gradient as 0.&lt;br /&gt;
* Process 100 bar*L to 2000 atm*L per tick linearly mapped to the pressure gradient from 0 to 600 atm.&lt;br /&gt;
**This represents an additional 31.6884612 bar*L/tick/MPa, or an additional 100 bar*L/tick for every 3.1557228156 MPa of pressure gradient)&lt;br /&gt;
* Send processed contents matching filters to output, not-matching filters to unfiltered output.&lt;br /&gt;
&lt;br /&gt;
==H2 Combustor==&lt;br /&gt;
* Equalize internal atmosphere with output atmosphere. (one-way, no limit)&lt;br /&gt;
* If not idle and input atmosphere has 0.0003 moles or more:&lt;br /&gt;
**Transfer 10 bar*L..200 atm*L from input atmosphere to internal atmosphere (mapped from pressure gradient between input atmosphere and internal atmosphere, 0..600atm)&lt;br /&gt;
***This is equivalent to 0.1 Filtration machines.&lt;br /&gt;
**Combust 66% of the oxygen/volatiles mix into liquid water (2 mol Volatiles + 1 mol O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 2 mol H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O + 429kJ)&lt;br /&gt;
**Instantly combust 90% of the remaining fuel mix. (regular combustion rules apply)&lt;br /&gt;
&lt;br /&gt;
==Electrolyzer==&lt;br /&gt;
* Consume 50W idle (3600W when active).&lt;br /&gt;
* If active, calculate the amount of energy required to electrolyze 1 mol of water.&lt;br /&gt;
** Base energy is the energy of electrolysis byproducts for 1 mol of water at 20°C: ((20.4J/K*2+21.1J/K)*293.15 K+(286 kJ*2)+(8kJ*3))/3 = 218.048661667 kJ/mol of water&lt;br /&gt;
** This is then subtracted by the specific energy of water at the input network's temperature (72 J/K). (results in 0 energy required at 3028.45 K; attempts to electrolyze at or above that temperature result in all water on the network being instantly split)&lt;br /&gt;
* Remove the amount of water the 3600 W can split at 40x efficiency (144 kW) from the input network, converting it to electrolysis byproducts at 20°C, and move those to output atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Nitrolyzer ==&lt;br /&gt;
* Consume 50W idle.&lt;br /&gt;
* Move internal atmosphere contents to output if there's a valid output network.&lt;br /&gt;
* Check for both input networks.&lt;br /&gt;
** If only one input network is connected, take 1.5 moles/tick from it, otherwise, take 0.75 moles/tick from each of the input networks.&lt;br /&gt;
* Calculate reaction efficiency.&lt;br /&gt;
** If the ratios of either nitrogen or oxygen are below 1%, set it to 0%.&lt;br /&gt;
** Otherwise, it's 30% * sum of nitrogen and oxygen gas ratios * (lowest ratio of the two / highest ratio of the two)&lt;br /&gt;
* If efficiency isn't 0%, consume 6kW instead of the 50W.&lt;br /&gt;
* Convert ReactionEfficiency% of the nitrogen/oxygen present internally into nitrous oxide.&lt;br /&gt;
** 2 moles -&amp;gt; 1 mole nitrous oxide. Output energy is half the components' energy + reaction inefficiency&lt;br /&gt;
** Example: 50/50 nitrogen:oxygen mix at 300K -&amp;gt; ((20.6*300 + 21.1*300)*0.225+4200)/(37.2*0.225) = 838.08K nitrous oxide output temperature. Actual output temperature is 448.82 K as it immediately mixes with unreacted gases.&lt;br /&gt;
&lt;br /&gt;
Because nitrous oxide contributes 286 kJ/mol in combustion, use of the nitrolyzer is 10.725x energy-positive at the maximum reaction efficiency of 30% (0.225 mol/tick).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wall Cooler ==&lt;br /&gt;
&lt;br /&gt;
Checks if pressure on both pipe and world grid atmosphere is above armstrong limit (6.3 kPa), transfers 1kJ * TemperatureDifferentialEffficiency of energy per tick from the environment to the pipe network.&lt;br /&gt;
Although no OperationalTemperatureEfficiency curve is present, this would only be more efficient than an air conditioner on situations where this value would be &amp;lt;5% (or 2.5%? TODO: clear up J/tick and W distinction for power consumers). You'll probably want an air conditioner on most scenarios.&lt;br /&gt;
&lt;br /&gt;
== Wall Heater ==&lt;br /&gt;
&lt;br /&gt;
Checks if world grid atmosphere is above armstrong limit and temperature is below 2500 K,  adds 1kJ/tick to world grid, '''ignites flammable atmospheres below autoignition temperature'''.&lt;br /&gt;
&lt;br /&gt;
== Pipe Heater ==&lt;br /&gt;
&lt;br /&gt;
Same pressure/temperature checks as wall heater, but doesn't ignite flammable pipe contents(assuming no autoignition occurs).&lt;br /&gt;
&lt;br /&gt;
== Road Flare ==&lt;br /&gt;
Ignites flamambles. Adds 1kJ/tick when lit. 1.2s fuse when fired from [[Flare Gun]]. 25m illumination range when falling from flare gun, 10m range otherwise.&lt;br /&gt;
&lt;br /&gt;
== Evaporation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo liquid volume regulator(0.25 L/tick, input-&amp;gt;internal, targets 10% internal liquid volume), purge valve (1500 kPa * 10L, internal-&amp;gt;output) and heat exchanger (15m² area, internal&amp;lt;&amp;gt;input 2).&lt;br /&gt;
&lt;br /&gt;
== Condensation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo pressure regulator (1500 kPa * 10 L), 2 condensation valves (input-&amp;gt;internal, internal-&amp;gt;output) and heat exchanger (15m² area).&lt;br /&gt;
&lt;br /&gt;
== Condensation Valve / Expansion Valve ==&lt;br /&gt;
&lt;br /&gt;
Moves 10 liters of liquids or half the liquids volume on the input pipe network per tick, whichever is smaller. Isn't supposed to move if the output network can't fit another 0.1L of liquids (untested).&lt;br /&gt;
&lt;br /&gt;
== Active Vent ==&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres.&lt;br /&gt;
** The calculation assumes both atmospheres have an identical heat capacity.&lt;br /&gt;
* If pumping into pipe, pump the smallest of:&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (grid minimum pressure limited to the external pressure limit)&lt;br /&gt;
** The amount of gas required to make the pipe network reach the internal pressure limit (at the average temperature)&lt;br /&gt;
* If pumping outwards, pump the smallest of:&lt;br /&gt;
** The amount of gas available in excess of the internal pressure limit (at the '''internal''' temperature)&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (limited to the external pressure limit)&lt;br /&gt;
* Set flow indicator status based on the difference in grid external pressure pre- and post- pumping and the maximum pumping capacity.&lt;br /&gt;
**&amp;gt;9 kPa: Max (Green)&lt;br /&gt;
**&amp;gt;5 kPa: Limited (Yellow)&lt;br /&gt;
**&amp;lt;5 kPa: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
For a 8000 L cell, the pumping capacity is 800 bar*L. As things get added to the cell this pumping capacity decreases.&lt;br /&gt;
&lt;br /&gt;
== Powered Vent == &amp;lt;!--StructurePoweredVentMultiGrid; small variant also uses multigrid--&amp;gt;&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres. (similar to active vent)&lt;br /&gt;
* If pumping into pipe:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the grid temperature into the pipe network (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
** If more than 0.1 kPa of pumping capacity remains available:&lt;br /&gt;
*** Calculate the cumulative pressure difference relative to the target pessure over open neighbor grids up to GridMixingDepth tiles away from the grid the vent is in.&lt;br /&gt;
*** If the pressure on the grid it's in is greater than the cumulative pressure difference, pull the pressure of it further down ignoring the external pressure limit (limited to the remaining pumping capacity).&lt;br /&gt;
*** If it's not, search for open grids 1 tile further away (starting from the vent grid, repeated until GridMixingDepth), and for each one pump their contents into the pipe(up to pressure limit) until the pumping capacity is exhausted or the GridMixingDepth limit is reached.&lt;br /&gt;
****The search is aborted if &amp;lt;0.1 kPa of remaining pumping capacity is left by the next grid expansion. &lt;br /&gt;
* If pumping into world:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the average temperature (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
**If more than 0.1 kPa of pumping capacity remains available, calculate the cumulative pressure difference relative to the target pressure over over neighbor grids up to GridMixingDepth tiles away, and pump up to that into world using the remaining pumping capacity (ignoring the external pressure limit).&lt;br /&gt;
* Set flow indicator status to remaining pumping capacity after pumping:&lt;br /&gt;
** &amp;lt; 1.1 kPa: Max (Green)&lt;br /&gt;
** &amp;lt; PressurePerTick/2: Limited (Yellow)&lt;br /&gt;
** &amp;gt; PressurePerTick/2: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
PressurePerTick: 20 kPa (small), 40 kPa (large)&lt;br /&gt;
&amp;lt;br&amp;gt;GridMixingDepth: 4 (small), 6 (large)&lt;br /&gt;
&lt;br /&gt;
== Passive Vent ==&lt;br /&gt;
Mixes pipe gas contents with world cell gas contents, or mixes all pipe contents with all world cell contents if submerged in liquid. Not sure how to make use of this considering the amount of liquids required to submerge one.&lt;br /&gt;
&lt;br /&gt;
== Pipe Radiators ==&lt;br /&gt;
&lt;br /&gt;
Convection power = 100*area*deltaT. Area is multiplied by internal and external pressure ratios compared to 1atm, so effectiveness is reduced if either is below this pressure.&lt;br /&gt;
&lt;br /&gt;
Radiation power is based on a curve function on the difference between the network temperature and the background temperature (world temperature on a vacuum, lerped to atmospheric temperature based on how many moles are on it up to 20kPa @ 0°C (=70.450583221073 mols on a world cell)). Area is multiplied by internal pressure ratio compared to 1atm.&lt;br /&gt;
&lt;br /&gt;
== Pipe Organ ==&lt;br /&gt;
&lt;br /&gt;
Makes sound if pressure delta between pipe network and world is above 10kPa. Equalizes pipe network gases with world cell gases at a rate of 20 kPa/tick.&lt;br /&gt;
&lt;br /&gt;
== Liquid Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Move setting L/tick of '''liquids''' from input to output network, then remove gases from input network until output network pressure is equalized.&lt;br /&gt;
&lt;br /&gt;
A liquid volume pump set to 0.0000001 L can be used as a one-way liquid-pipe-to-liquid-pipe gas valve with a negligible power consumption. (This behavior is different from the one-way valve, which also moves liquids)&lt;br /&gt;
&lt;br /&gt;
== Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Take the moles present in setting L of the input pipe network, move them to the output in a single tick. If setting is greater than the input pipe network volume, only the input pipe network is used but power is still consumed based on the setting parameter.&lt;br /&gt;
&lt;br /&gt;
== Turbopumps ==&lt;br /&gt;
&lt;br /&gt;
Same mechanics as turbo pumps but with a fixed base power consumption and a lower consumption/L pumped.&lt;br /&gt;
&lt;br /&gt;
== Gas regulators ==&lt;br /&gt;
&lt;br /&gt;
(Comprises Pressure Regulator, Back Pressure Regulator, Pressurant Valve, Purge Valve)&lt;br /&gt;
&lt;br /&gt;
If output network pressure is greater than input network pressure, move up to a mole-equivalent quantity of gas that would fit in pressurePerTick(=1atm?)*10L volume at the pipe network temperature.&lt;br /&gt;
&lt;br /&gt;
With a 10L volume pump consuming twice the power of a gas regulator, This makes a gas regulator more efficient than a volume pump when operating on input network pipe pressures below pressurePerTick*2 (2 atm?) as more volume/W is scavenged in that circumstance.&lt;br /&gt;
&lt;br /&gt;
If input pipe pressure is greater than output network pressure, check if more gas could be moved by moving a quarter of the pressure difference on the input network per tick instead, and move up to that if so. This makes a regulator more efficient than a volume pump in scenarios where the input network volume is large enough to make a reasonable pressure gradient worthwhile.&lt;br /&gt;
&lt;br /&gt;
PressurePerTick value is 101.325 kPa for all 4.&lt;br /&gt;
&lt;br /&gt;
== Gas Mixer == &amp;lt;!-- analysis not paying enough attention, reminder to check later --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Calculates the amount of gas a gas regulator working against the pressure gradient would take in a tick, multiplied by the ratio fraction belonging to the given input. (for example: 75% ratio would take 7.5 atm*L from input 1 and 2.5 atm*L from input 2)&lt;br /&gt;
&amp;lt;br&amp;gt;Takes a (weighed by ratio) average of the input pressures on both networks.&lt;br /&gt;
&amp;lt;br&amp;gt;Calculates &amp;quot;Max Moles Per Tick&amp;quot; for both networks - This is similar to the &amp;quot;pressure regulator working with the help of a pressure gradient&amp;quot; case, but only up to a fifth of the pressure differential(between the input's pressure and the average input pressure) instead of a 1/4th as in the pressure regulator. &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Acts as a Gas regulator, except:&lt;br /&gt;
* Moves either 20 '''bar'''*L/tick weighed between both input networks by ratio (as opposed to 10 '''atm'''*L/tick) or a fifth of the pressure gradient(instead of a fourth), whichever is greater.&lt;br /&gt;
* Uses the average input pressure (weighed by ratio) for pressure gradient calculations.&lt;br /&gt;
* Stops moving if either either input is empty and currently in use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Liquid regulators ==&lt;br /&gt;
&lt;br /&gt;
(Liquid volume regulator, Liquid Back Volume regulator)&lt;br /&gt;
&lt;br /&gt;
If volume percentage on input network is greater than output network, pump '''liquids''' up to the greater of:&lt;br /&gt;
&lt;br /&gt;
 - A quarter of the combined network liquid volume percentage to output network per tick (if input network volume ratio &amp;gt; output network volume ratio). '''This isn't liquid level balancing''' - a 50.(0)1/100L against a 50/100L network will still result in a single-tick movement of ~100L/4 = 25L from input to output. There's a likely bug here.&lt;br /&gt;
 - The regulator's liquid volume pumping capacity (0.25L/tick).&lt;br /&gt;
&lt;br /&gt;
If any liquids were moved, balance gas pressures on the output with a one-way '''gas''' valve from input to output. Liquids have to be moved for this, unlike the 0L liquid volume pump.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Air Conditioner ==&lt;br /&gt;
&amp;lt;!-- not including data about HARM suit as the build i have access to is out-of-date --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If suit AC is off, suit has no waste tank attached or no/empty battery, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Calculate the energy required to move the suit/helmet's internal atmosphere to the target temperature.&lt;br /&gt;
&lt;br /&gt;
If cooling to that temperature, transfer the excess energy to the waste tank consuming 1% of it in battery power, and marking an amount of gas to be moved to the waste tank on that tick's filtration step (1 mol / 2 kJ cooled).&lt;br /&gt;
&lt;br /&gt;
If heating to that temperature, consume 50% of the energy spent heating the contents in battery power.&lt;br /&gt;
&lt;br /&gt;
The maximum amount of heat a suit can add/remove per tick is proportional to its condition, but the heating/cooling efficiency remains the same.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Filtration ==&lt;br /&gt;
&lt;br /&gt;
If filtration is off, suit is unpowered or has no waste tank attached, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Fill waste tank to 1 kPa with air tank contents if waste tank pressure is below 1kPa.&lt;br /&gt;
&lt;br /&gt;
Remove all gases in the space suit's internal volume matching the filters in its slots.&lt;br /&gt;
&lt;br /&gt;
Remove additional gases from the space suit's internal volume if the amount of gas to be moved on the AC step exceeds the amount of gas moved by the filters, up to the suit's pumping rate (proportional to its condition).&lt;br /&gt;
&lt;br /&gt;
Consume 10 J from battery.&lt;br /&gt;
&lt;br /&gt;
== Gas Mask == &amp;lt;!-- the GasMask class is actually for suit helmets. The actual gas mask's class name is FilterMask... which is an extension of it. --&amp;gt;&lt;br /&gt;
If equipped:&lt;br /&gt;
* Transfer internal atmosphere contents to world.&lt;br /&gt;
* Equalize world and internal pressures.&lt;br /&gt;
* Filter gasses from internal atmosphere into world atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Fridge (large) ==&lt;br /&gt;
&lt;br /&gt;
Initialize an atmosphere containing 1.72 moles of nitrogen at 20°C (if world grid pressure below armstrong limit) or world grid temperature.&lt;br /&gt;
&lt;br /&gt;
Heat internal atmosphere to 142 K or move internal atmosphere energy to environment down to 142 K at up to 1kJ/tick.&lt;br /&gt;
&lt;br /&gt;
Add energy added/moved to that tick's power consumption.&lt;br /&gt;
&lt;br /&gt;
Fridge has a convection factor to world atmosphere of 0.01 when door is opened and 0 when closed.&lt;br /&gt;
&lt;br /&gt;
== Welding Torch ==&lt;br /&gt;
Has a 1L internal reservoir.&lt;br /&gt;
&amp;lt;br&amp;gt;If on, checks for internal reservoir contents, and if any, ejects them into world atmosphere '''and ignites world atmosphere flammables (even if the internal reservoir contents are cold inert gas).'''&lt;br /&gt;
&amp;lt;br&amp;gt;Moves 0.01 moles/tick from canister contents (both gas and liquid) into the internal reservoir, and attempts to perform complete manual combustion of them.&lt;br /&gt;
&amp;lt;br&amp;gt;Is operable if any combustion has occurred within the reservoir, regardless of the final temperature after combustion.&lt;br /&gt;
&lt;br /&gt;
Gains a 30% additive work speed bonus (on top of its 20% additive work speed bonus relative to the arc welder?) if the internal reservoir temperature is above 3000°C after combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Awards the &amp;quot;Fast and Furious&amp;quot; achievement to the wielder when welding with an internal atmosphere of &amp;gt;10% nitrous oxide gas (liquids not counted).&lt;br /&gt;
&lt;br /&gt;
== Furnace ==&lt;br /&gt;
* Doesn't explode if partially deconstructed before an overpressure event. &amp;lt;!--early return on FurnaceBase:OnAtmosphericTick--&amp;gt;&lt;br /&gt;
* Includes a passive pollutant filter that prioritizes moving out pollutant from its internal storage to the output before any other gases when attempting to equalize pressure. &amp;lt;!--Furnace:HandleGasInput--&amp;gt;&lt;br /&gt;
** Filter max flow rate before allowing other gasses through is 2000 kPa at the hottest of (internal, output) temperatures and smallest of (internal, output) volumes.&lt;br /&gt;
* Starts processing ores once the furnace's internal temperature is above their flashpoint. &amp;lt;!--FurnaceBase:OnServerImportTick--&amp;gt;&lt;br /&gt;
** Ices get melted. Ores/reagent mixes get their contents added to reagents. Ingots become reagents and cool the input down by 45J*Flashpoint Temperature/g.&lt;br /&gt;
* When ejecting, check if internal reagent mix and internal conditions forms one of the recipes, output recipe if so, or reagent mix otherwise.&lt;br /&gt;
&lt;br /&gt;
== Advanced Furnace ==&lt;br /&gt;
&lt;br /&gt;
Input pump removes both gases and liquids from input.&lt;br /&gt;
&amp;lt;br&amp;gt;Output pump pumps only gases into the output gas pipe and only liquids into the output liquid pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;Doesn't include a passive pollutant filter, unlike the regular furnace.&lt;br /&gt;
&amp;lt;br&amp;gt;Power consumption is 100W idle, plus another 1W/L on each pump being used. This makes them more efficient than a [[Turbo_Volume_Pump_(Gas)|Turbopump]] at 100W+2W/L contrasted to the turbopump's 200W+6W/L in applications where flow direction reversibility and the internal buffer tank's volume/liquid retention don't matter.&lt;br /&gt;
&lt;br /&gt;
== Cryo Tube ==&lt;br /&gt;
Does not allow robots inside.&lt;br /&gt;
&amp;lt;br&amp;gt;Has an 800L internal atmosphere, mixed with world atmosphere when open and input network atmosphere when closed.&lt;br /&gt;
&amp;lt;br&amp;gt;Tries to heat the internal atmosphere to 4°C if below, converting up to 250 J/tick as electric power into heat when open. Heating persists even if door is closed? (possible bug)&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant is colder, Will transfer energy from the internal atmosphere to the coolant atmosphere at a rate of 1 J/K/tick until equalization or internal temperature reaches 0°C, clamped between 1 and 100 J/tick.&lt;br /&gt;
&amp;lt;br&amp;gt;Can only revive/heal if the input pipe network has at least 10L of pure liquid nitrogen at 130 K (-143.15°C) or below. Heals 1 damage/tick in those conditions.&lt;br /&gt;
&amp;lt;br&amp;gt;Revives players at 25% of max HP.&lt;br /&gt;
&lt;br /&gt;
== Fire Extinguisher ==&lt;br /&gt;
Transfers 0.25L/s and 200kPa/s out of its canister (the latter until pressure with its environment's atmosphere is equalized) when used.&lt;br /&gt;
&amp;lt;br&amp;gt;If its canister's contents are &amp;gt;99% inert(not nitrous oxide/oxygen/volatiles) by moles and there were at least 1 mol of liquids or enough pressure on the canister to prevent equalization, supresses fires on the cell it's been used and adjacent neighbors for 10 ticks and extinguishes fires on entities on fire within said cells.&lt;br /&gt;
&amp;lt;br&amp;gt;Additionally, if the temperature on the cell it's in is above 300°C after the contents transfer, removes 20kJ/tick of energy from it.&lt;br /&gt;
&lt;br /&gt;
== Active liquid outlet ==&lt;br /&gt;
'''before an atmospherics tick,''' dumps up to 50 mols of the liquid pipe's contents (both liquids and gases) each tick into the world cell if active.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid inlet ==&lt;br /&gt;
If submerged, Attempts to drain liquids from the cell it's in, then from adjacent cells without an open grid below them(repeated up to 6 tiles away), up to a cumulative total of 20L/tick (stopping at 99% network fullness or more than 19.9L drained before the next grid search range expansion). &amp;lt;!-- looks like a costly operation to run every tick on large rooms. --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; After that step, mixes pipe network and world atmospheres.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid drain ==&lt;br /&gt;
Behaves as an always-on condensation valve, but moves liquids to a world atmosphere instead of a pipe network.&lt;br /&gt;
&lt;br /&gt;
== Counterflow Heat Exchanger ==&lt;br /&gt;
Before an atmospherics tick:&lt;br /&gt;
* Remove liquids from inputs to outputs to balance liquid percentages on both input/output networks.&lt;br /&gt;
* Remove gases from inputs to outputs to balance pressures on both input/output networks.&lt;br /&gt;
If contents moved on either of the two networks are less than 0.008 mols, send moved contents to outputs while performing no heat transfer, otherwise:&lt;br /&gt;
* Split removed contents into 8 packets&lt;br /&gt;
* Calculate heat exchange efficiency based on input network pressure/liquid volume after removal (biggest scaling factor of: 0-100% from 0-1atm pressure OR 0-100% from 0-1% liquid volume for each network; final result is the product of both networks' efficiency factors)&lt;br /&gt;
* Perform a total of 48 heat transfers in a sliding window.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    Turns out there is too much crossover between the transfers.&lt;br /&gt;
    Assuming:&lt;br /&gt;
    INPUT  1     D  E  F  0 [1][2][3][4][5][6][7][8] 9  A  B  C   OUTPUT 1&lt;br /&gt;
    OUTPUT 2     C  B  A  9 [8][7][6][5][4][3][2][1] 0  F  E  D   INPUT  2&lt;br /&gt;
    &lt;br /&gt;
    Transfers are made in 2 kernels that slide across left to right along the sequence (discarding transfers made when either hits a non-valid packet):&lt;br /&gt;
    First:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'&lt;br /&gt;
      9ABC  (this latter one's order is actually reversed and has been un-reversed so it could be drawn without overlap)&lt;br /&gt;
    Followed by:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'   (same as the first, but shifting the second network's packets one step to the right)&lt;br /&gt;
      89AB &lt;br /&gt;
    The next iteration would then shift the first input to the right:&lt;br /&gt;
       F012&lt;br /&gt;
       89AB&lt;br /&gt;
    Followed by the second sequence being shifted:&lt;br /&gt;
       F012&lt;br /&gt;
       789A&lt;br /&gt;
    repeated until all the transfers are covered (would stop with the first valid transfer being 1-8 on the 0123-789A step and last valid transfer being 8 1 on the 789A-0123 step)&lt;br /&gt;
There should be enough info here to create an animation on how the transfer works. if there isn't, feel free to hit me for clarification on my talk page.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** Exchange rate for each transfer is 15.625W*ΔT*EfficiencyRatio&lt;br /&gt;
* Merge the split packets back into a single packet for each network&lt;br /&gt;
* Send packet to each network's output&lt;br /&gt;
&lt;br /&gt;
==Portable Air Conditioner==&lt;br /&gt;
Stops heating if external air temperature is above 50°C, stops cooling if external temperature is below -10°C.&lt;br /&gt;
&amp;lt;br&amp;gt;Stops operating if internal pressure is above 40 atm or if any contents on the liquid canister are frozen.&lt;br /&gt;
&amp;lt;br&amp;gt;Consume 25 J/tick from battery.('''BUG: Only when operating in cooling mode.''')&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant tank pressure is above 40 atm, transfer excess pressure to internal tank.&lt;br /&gt;
&amp;lt;br&amp;gt;Without a canister: If in heating mode, heat by 250 J/tick using an internal heating element.&lt;br /&gt;
&amp;lt;br&amp;gt;With a canister: Transfer Clamp( (100-TDelta)/100, min=0.01, max = 1) * 2500 J/tick between  canister and atmosphere. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Portable Generator==&lt;br /&gt;
Removes 1.5 atm*L/tick from input canister (=2.37480469 kPa/tick for a 64L container) into its internal chamber.&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 90% of the chamber's contents.&lt;br /&gt;
&amp;lt;br&amp;gt;Converts 6% of the combustion's energy into power.&lt;br /&gt;
&amp;lt;br&amp;gt;Moves previous tick's combusted contents into atmosphere.&lt;br /&gt;
&lt;br /&gt;
==Gas Fuel Generator==&lt;br /&gt;
* Shuts down if outside operating conditions (at least 19.998 kPa on grid atmosphere, grid atmosphere between 3°C and 57°C)  for 5+ ticks in a row.&lt;br /&gt;
** These are slightly laxer than the conditions for valid atmosphere on its tooltip. (20kPa, 5-55°C)&lt;br /&gt;
* Removes 10 bar*L/tick (100 kPa * 10 L) from the input network into its internal chamber.&lt;br /&gt;
* Instantly combusts 90% of the internal chamber's contents.&lt;br /&gt;
* Sets the device's convection/radiation area to (0.01 + PostCombustionPressure*0.66)*0.28. &lt;br /&gt;
* Converts 17% of the combustion's energy into power.&lt;br /&gt;
** Superfuel at -20°C, at full input rate: 0.475103 mol/tick -&amp;gt; 122291.5 kJ/t -&amp;gt; 20789.56 W&lt;br /&gt;
** ~18.64x as much power as a [[Portable Generator]] on the same fuel mix, at ~6.58x the fuel consumption rate.&lt;br /&gt;
* Moves previous tick's combusted contents into output.&lt;br /&gt;
&lt;br /&gt;
==Rocket Combustion Chamber== &amp;lt;!--RocketEngineBase:CombustEngine--&amp;gt;&lt;br /&gt;
(shared by all engines)&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 96% of the fuel mix.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust temperature to the temperature after this instant combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust velocity to Engine Efficiency * sqrt (8.3144 * Exhaust temperature * Degrees of freedom contributing to exhaust velocity)&lt;br /&gt;
* The number of degrees of freedom depends on the substance's molecular structure:&lt;br /&gt;
** Monoatomic = 1.666666 (None)&lt;br /&gt;
** Diatomic = 1.4 (Oxygen, Nitrogen, Hydrogen)&lt;br /&gt;
** Triatomic = 1.333333 (Carbon Dioxide, Volatiles, Polluted Water/Water/Steam, Nitrous Oxide)&lt;br /&gt;
** Polyatomic = 1.26 (Pollutant)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Mass flow rate to the total mass of gases in the combustion chamber after combustion / tick speed (0.5s)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets engine thrust to Mass flow rate * Exhaust velocity&lt;br /&gt;
&lt;br /&gt;
==Pumped Gas Engine== &amp;lt;!--GovernedGasEngine. Simulation runs off a 100L, 480 atm, 0.666:0.334 fuel mix at 215 K--&amp;gt;&lt;br /&gt;
Removes 0..18 moles from the input atmosphere per tick into combustion chamber depending on throttle.&lt;br /&gt;
&lt;br /&gt;
==Pumped Liquid Engine== &amp;lt;!--Simulation runs off 2 100L tanks containing 80L of liquid volatiles / liquid oxygen at 125 K and a mixing ratio of 70%--&amp;gt;&lt;br /&gt;
Removes a total of 0..0.55 L from the input tanks into the combustion chamber depending on throttle (proportion depends on mixing ratio)&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Gas Engine== &amp;lt;!-- Simulation runs off 2 100L tanks at 215 K, one containing 32391 kPa of volatiles and another containing 16244 kPa of oxygen and ends up burning volatiles-rich at a ~2.686:1 ratio? --&amp;gt;&lt;br /&gt;
At full throttle, removes 10? atm*L .. BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) from each of its 2 inputs into the combustion chamber depending on the fraction of max pipe pressure on each input pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;This is scaled down proportional to throttle. &lt;br /&gt;
* Base pressure-fed gas engine has the Base Pumping Capacity at 500 bar*L, Heavy variant has it at 850 bar*L&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Liquid Engine== &amp;lt;!-- Simulation runs off a 100L tank at 125 K, containing 80L of liquid volatiles/liquid oxygen(at a 70:30 ratio) and a 0.666:0.334 gas fuel mix at 48 atm --&amp;gt;&lt;br /&gt;
At max throttle, pump between 0.04L..MaxFlowRate of liquids into combustion chamber, scaling on input pipe fraction of max pressure. Pumped amount is scaled by throttle.&lt;br /&gt;
* MaxFlowRate is 0.8L for base variant, 1.5L for heavy variant. &lt;br /&gt;
Additionally, move 10? atm*L..BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) of gases into the combustion chamber. (also linearly scaled by throttle)&lt;br /&gt;
* That's the same formula as the pressure-fed gas engine, but scaling from 0-60 atm instea of 0-600 atm.&lt;br /&gt;
* BasePumpingCapacity is 500 bar*L for base variant, 600 bar*L for heavy variant.&lt;br /&gt;
&amp;lt;br&amp;gt;Perform phase change after combustion step but before heat exchange step.&lt;br /&gt;
&amp;lt;br&amp;gt;Max heat exchange area is 3m² for base variant, 5m² for heavy variant, proportional to setting.&lt;br /&gt;
&lt;br /&gt;
==Pneumatic Mining Drill==&lt;br /&gt;
&amp;lt;!--Comparison:&lt;br /&gt;
Emergency Pickaxe: -0.5 ManuallyAuthoredToolSpeedOffset, 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Pickaxe: 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Mining Drill: 1 UsedPowerPassive, 30 UsedPowerActive, 0.11 MineCompletionTime, 0.2 MineAmount&lt;br /&gt;
Pneumatic Mining Drill: 0.4 MineAmount, 20 MinOperationalPressureDifferential, 6000 MaxPressureDifferential, 0.01 MinMolesPerTick, 0.2 MaxMolesPerTick, 0.05 IdleUsageMolesPerTick, 0.05 FastestMineTime, 0.2 SlowestMineTime&lt;br /&gt;
Mining Drill mk2: &amp;quot;manuallyAuthoredToolSpeedOffset&amp;quot;: 0.1, otherwise same as mining drill&lt;br /&gt;
Mining Drill Heavy: UsedPowerPassive: 2, UsedPowerActive: 150, MineCompletionTime: 0.05, MineAmount: 0.4&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Eject internal atmosphere into external atmosphere.&lt;br /&gt;
* Calculates pressure differential between external atmosphere and canister.&lt;br /&gt;
* Calculate base mole consumption: 0.05 mol/tick on idle, 0.2 mol/tick when active.&lt;br /&gt;
* Calculate actual mole consumption: map between 0.01 mol/tick at 20kPa pressure differential to Base mole consumption at 6 MPa pressure differential&lt;br /&gt;
* Remove actual mole consumption from canister into internal atmosphere.&lt;br /&gt;
* Map time between mine actions: 0.2s at 20kPa- pressure differential to 0.05s at 6MPa+ presure differential.&lt;br /&gt;
** Equals heavy mining drill speed if pressure differential is at 6+ MPa, equals mining drill mk1 speed if pressure differential is above ~3.608 MPa (at double the MineAmount, which still loses out to the pickaxe, aimee or autominer.)&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Ore_Detector&amp;diff=25839</id>
		<title>Ore Detector</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Ore_Detector&amp;diff=25839"/>
				<updated>2026-03-02T20:59:35Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Created page with &amp;quot;{{Itembox  | name        = Ore Detector  | image       = File:{{#setmainimage:ItemOreDetector.png}}  | stacks      = No  | createdwith = Special:MyLanguage/Tool_Manufact...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Itembox&lt;br /&gt;
 | name        = Ore Detector&lt;br /&gt;
 | image       = [[File:{{#setmainimage:ItemOreDetector.png}}]]&lt;br /&gt;
 | stacks      = No&lt;br /&gt;
 | createdwith = [[Special:MyLanguage/Tool_Manufactory|Tool Manufactory]] (Tier 1)&lt;br /&gt;
 | cost        = 5g [[Special:MyLanguage/Gold_Ingot|Gold]], 5g [[Special:MyLanguage/Copper_Ingot|Copper]], 2g [[Special:MyLanguage/Solder_Ingot|Solder]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;A device for locating specific ores. The closer the player is to the selected type of ore, the more indicators will light up.&amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Consumes 25W when on. Ores/Ices (except [[Uranium Ore]]) can be selected by scrolling until the desired type is displayed on-screen.&lt;br /&gt;
&amp;lt;br&amp;gt;If any are detected within a 30m range, display lights and an audio tone progressively increase in intensity the closer the player is to a mineable ore of the desired type.&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:ItemOreDetector.png&amp;diff=25838</id>
		<title>File:ItemOreDetector.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:ItemOreDetector.png&amp;diff=25838"/>
				<updated>2026-03-02T20:38:38Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Sprite extracted from game files. Copyright RocketWerkz Ltd, but use on this wiki should fall within the NZ copyright law fair dealing research exemption.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Electrolyzer&amp;diff=25837</id>
		<title>Electrolyzer</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Electrolyzer&amp;diff=25837"/>
				<updated>2026-03-02T20:32:08Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Update electrolyzer ratio and remove internal atmosphere (Beta 0.2.6192.26983)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Structurebox&lt;br /&gt;
 | name             = Electrolyzer&lt;br /&gt;
 | image            = [[File:Electrolyzer front.png]]&lt;br /&gt;
 | power_usage      = 3600W&lt;br /&gt;
 | placed_with_item = [[Kit (Atmospherics)]]&lt;br /&gt;
 | placed_on_grid   = Small Grid&lt;br /&gt;
 | requires_frames  = Yes&lt;br /&gt;
 | decon_with_tool1 = [[Hand Drill]]&lt;br /&gt;
 | item_rec1        = [[Kit (Atmospherics)]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
Storing water got you down? At the expense of power, you can turn that excess water into a bunch of heat and a somewhat risky mix of Oxygen and Volatiles using the new Electrolysis Machine. Available on the existing Atmospherics kit with Air Conditioners and Filtration machines.&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
# Select [[Kit (Atmospherics)]] for placement, and change the variant to Electrolyzer.&lt;br /&gt;
# Connect liquid pipe to the '''Input''' liquid connection to transfer water into the machine.&lt;br /&gt;
# Connect gas pipe to the '''Output''' gas connection to remove the created H2 and O2.&lt;br /&gt;
&lt;br /&gt;
=Notes=&lt;br /&gt;
* H2 and O2 are produced mixed together in a single gas pipe, creating a dangerous fuel mixture that can be directly used in a furnace.&lt;br /&gt;
* Higher water temperatures result in slightly higher efficiency leading to marginally higher production rates. https://en.wikipedia.org/wiki/High-temperature_electrolysis&lt;br /&gt;
* The conversion rate is 3 mol [[Water|H2O]] produces 1 mol [[Oxygen|O2]] and 2 mol [[Hydrogen|H2]].&lt;br /&gt;
* The Electrolyzer always outputs its byproducts at 20°C.&lt;br /&gt;
* If the temperature inside the electrolyzer output gets high enough, autoignition occurs, creating additional heat, and converting virtually all O2 and H2 on the output network into Steam. Keep this in mind on high-temperature worlds.&lt;br /&gt;
* If autoignition occurs, it doesn't propagate to the electrolyzer itself, so any new gas created by it is safe, provided it is insulated from further temperature increases.&lt;br /&gt;
&lt;br /&gt;
{{Data Network Header}}&lt;br /&gt;
&lt;br /&gt;
{{Data Parameters}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Lock || Boolean || Locks the Electrolyzer , when set to 1. Unlocks it, when set to 0. &lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Turns the Electrolyzer on, when set to 1. Turns it off, when set to 0. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Data Outputs}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Output Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Power || Boolean || Returns whether the Electrolyzer is turned on and receives power. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| Error || Boolean || Returns whether the Electrolyzer is flashing an error. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| Lock || Boolean || Returns whether the Electrolyzer is locked. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Returns whether the Electrolyzer is turned on. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| RequiredPower || Integer || Returns the current amount of power, required by the Electrolyzer, in Watts.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Pneumatic_Mining_Drill&amp;diff=25836</id>
		<title>Pneumatic Mining Drill</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Pneumatic_Mining_Drill&amp;diff=25836"/>
				<updated>2026-03-02T16:04:05Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: /* Description */ speed data. yield is theoretically 2x the basic mining drill but i didn't include this as i havent confirmed it yet.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hand Tools]]&lt;br /&gt;
[[Category:Tools]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 |            name = Pneumatic Mining Drill&lt;br /&gt;
 |           image = [[File:ItemMiningDrillPneumatic.png]]&lt;br /&gt;
 |       paintable = yes&lt;br /&gt;
 |     createdwith = [[Tool Manufactory|Tool Manufactory (Tier One)]]&lt;br /&gt;
 |            cost = 2000 [[Energy]], 4g [[Ingot_(Copper)|Copper]], 6g [[Ingot_(Steel)|Steel]], 4g [[Ingot_(Solder)|Solder]]&lt;br /&gt;
 |         maxtemp = 523K (250°C)&lt;br /&gt;
 |      prefabhash = 1258187304&lt;br /&gt;
 |      prefabname = ItemMiningDrillPneumatic&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox | decat = yes&lt;br /&gt;
 | title = Slots&lt;br /&gt;
 | header1 = Gas Canister&lt;br /&gt;
   {{Infobox | decat = yes | child = yes&lt;br /&gt;
    | label1 = Type&lt;br /&gt;
    |  data1 = Gas Canister&lt;br /&gt;
    | label2 = Index&lt;br /&gt;
    |  data2 = 0&lt;br /&gt;
   }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox | decat = yes&lt;br /&gt;
 | title = Mode&lt;br /&gt;
   {{Infobox | decat = yes | child = yes&lt;br /&gt;
    | label1 = Default&lt;br /&gt;
    |  data1 = 0&lt;br /&gt;
    | label2 = Flatten&lt;br /&gt;
    |  data2 = 1&lt;br /&gt;
   }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
This drill uses gas power for mining, instead of batteries like the others. The drill's mining speed is a function of the pressure differential between its canister and external atmosphere meaning it will slow down as you deplete it's gas canister, but it's equal to the [[Mining Drill (Heavy)]] at pressure differentials at or above 6 MPa and is faster than the [[Mining Drill]] at pressures above ~3.6 MPa.&lt;br /&gt;
&lt;br /&gt;
This also means that you can effectively give it an upgrade by using the smart canister to gain a much higher operation time between recharges. You can use any gas to provide the pressure.&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25835</id>
		<title>User:RA2lover/Sandbox/Thermodynamics machinery notes</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=User:RA2lover/Sandbox/Thermodynamics_machinery_notes&amp;diff=25835"/>
				<updated>2026-03-02T15:33:10Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Pneumatic mining drill&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pipe / Liquid Pipe==&lt;br /&gt;
&lt;br /&gt;
====Weakest member selection====&lt;br /&gt;
* If the pipe network already has a weakest member, it remains in the same pipe network, it hasn't burst, and it's not buried, use it.&lt;br /&gt;
* Get all pipe segments in the network, discard burst/buried pipes, and pick the most damaged pipe.&lt;br /&gt;
* If no pipes are damaged, choose one of the remaining pipes at random.&lt;br /&gt;
&lt;br /&gt;
====Weakest member damage criteria====&lt;br /&gt;
* More than 0.05 moles/L of frozen elements are on the network: Instant, damage/tick = log2(total of frozen gases/0.05 mol/L), clamped between 0.5/tick and 10/tick &lt;br /&gt;
**Gases are not counted towards this if the pressure on the network is below the armstrong limit. (6.3 kPa)&lt;br /&gt;
* If a gas pipe: More than 2% of liquids (by volume) are on the network: Instant, damage/tick = log10(percentage of liquids) - 0.8, clamped between 0.2/tick and 10/tick&lt;br /&gt;
* If the weakest segment is under a pressure gradient above the pipe's pressure rating: Instant, damage = log2(PressureGradient/PressureRating), clamped between 0.2/tick and 10/tick&lt;br /&gt;
** If no pipes are damaged, check all pipe segments for pressure damage. (Possible Exploit: intentionally damage but don't break a specific pipe segment that's kept in a pressure-protected room, get a pressure-resistant pipe network)&lt;br /&gt;
&lt;br /&gt;
====Burst pipe====&lt;br /&gt;
* Set a network fault flag. (readable with a [[Pipe Analyzer]]'s NetworkFault logic value)&lt;br /&gt;
* Spawn ices around the pipe if the pipe network contains more than 50 mols of ices.&lt;br /&gt;
* For all atmos-containing grids the pipe belongs to:&lt;br /&gt;
** Move liquids from pipe to world. (rate: pipe volume/tick*number of atmos-containing grids, or enough to drain a pipe network with more liquids than its capacity down to 99% full in case the pipe had overcompressed liquids. Won't drain past &amp;gt;99% world cell fullness)&lt;br /&gt;
** If pressure gradient is above 1 atm, move gases unidirectionally attempting to equalize pressure.&lt;br /&gt;
*** Maximum pressure gradient/tick: 1/10th of the pipe's pressure rating. This value is reduced if grids are blocked.&lt;br /&gt;
*** Maximum moles moved/tick: The pipe volume's worth of contents. (Don't use it as a passive vent for an early venus advanced airlock or it can vacuum itself shut?)&lt;br /&gt;
****This limit is ignored if the pressure gradient before equalization is greater than the pipe's pressure rating&lt;br /&gt;
** If it's not, Mix contents of pipe network and atmospheric network.&lt;br /&gt;
&lt;br /&gt;
== Air Conditioner ==&lt;br /&gt;
&lt;br /&gt;
Additional details: [[User:RA2lover/Sandbox/Thermodynamics machinery notes/Air Conditioner|Link]]&lt;br /&gt;
&lt;br /&gt;
- If the *input* network is off from the target temperature by less than 1 degree, no action is performed on a tick.&lt;br /&gt;
&lt;br /&gt;
Otherwise, the air contitioner's internal logic takes place:&lt;br /&gt;
&lt;br /&gt;
 - 1 - Try to take contents from its input network into an internal storage (mole-equivalent of 100 liters of gas at the input network temperature and air conditioner's processing capability (750 kPa), includes both liquids and gases)&lt;br /&gt;
 - 2 - Transfer 14kJ * OperationalTemperatureEfficiency * TemperatureDifferentialEfficiency of energy between the waste network and the internal network (if either input network before the step 1 pumping or the waste network pressures are below 1atm, scale down by the lowest pressure from that to 0 linearly)&lt;br /&gt;
 - 3 - Transfer contents from its internal network to its output network&lt;br /&gt;
&lt;br /&gt;
TemperatureDeltaCurve losses can be avoided entirely by connecting the input network and waste network together (as opposed to the typical closed-loop configuration where input and output networks are connected together).&lt;br /&gt;
&lt;br /&gt;
How much is 14kJ? Vulcan night atmosphere (400 K @ 100L, 1atm) would get you 3.046 moles at 23.182 J/mol/K, or a drop of ~201 K (which would get hampered by the OperationalTemperatureEfficiency still not being that high).&lt;br /&gt;
&lt;br /&gt;
== Filtration ==&lt;br /&gt;
* Consume 0.1 W/kPa input pressure(capped at 100W/1MPa) + 10W(base).&lt;br /&gt;
* Calculate the pressure gradient between the input and the highest of the two output networks. If either output network is at a higher pressure than the input, treat the gradient as 0.&lt;br /&gt;
* Process 100 bar*L to 2000 atm*L per tick linearly mapped to the pressure gradient from 0 to 600 atm.&lt;br /&gt;
**This represents an additional 31.6884612 bar*L/tick/MPa, or an additional 100 bar*L/tick for every 3.1557228156 MPa of pressure gradient)&lt;br /&gt;
* Send processed contents matching filters to output, not-matching filters to unfiltered output.&lt;br /&gt;
&lt;br /&gt;
==H2 Combustor==&lt;br /&gt;
* Equalize internal atmosphere with output atmosphere. (one-way, no limit)&lt;br /&gt;
* If not idle and input atmosphere has 0.0003 moles or more:&lt;br /&gt;
**Transfer 10 bar*L..200 atm*L from input atmosphere to internal atmosphere (mapped from pressure gradient between input atmosphere and internal atmosphere, 0..600atm)&lt;br /&gt;
***This is equivalent to 0.1 Filtration machines.&lt;br /&gt;
**Combust 66% of the oxygen/volatiles mix into liquid water (2 mol Volatiles + 1 mol O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 2 mol H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O + 429kJ)&lt;br /&gt;
**Instantly combust 90% of the remaining fuel mix. (regular combustion rules apply)&lt;br /&gt;
&lt;br /&gt;
==Electrolyzer==&lt;br /&gt;
* Consume 50W idle (3600W when active).&lt;br /&gt;
* If active, calculate the amount of energy required to electrolyze 1 mol of water.&lt;br /&gt;
** Base energy is the energy of electrolysis byproducts for '''2''' moles of water at 20°C: (20.4J/K*2+21.1J/K)*293.15 K+(286 kJ*2) = 590.145985kJ/mol of water &amp;lt;!--Possible bug, results in water at critical temperature only improving efficiency by ~5% compared to 0K water--&amp;gt;&lt;br /&gt;
** This is then subtracted by the specific energy of water at the input network's temperature (72 J/K). (results in 0 energy required at 8196.472 K; attempts to electrolyze at or above that temperature result in all water on the network being instantly split)&lt;br /&gt;
* Remove the amount of water the 3600 W can split at 40x efficiency (144 kW) from the input network, converting it to electrolysis byproducts at 20°C, and add those to the internal atmosphere.&lt;br /&gt;
* Attempt to balance internal atmosphere with output (1atm max pressure change/tick, one-way)&lt;br /&gt;
&lt;br /&gt;
== Nitrolyzer ==&lt;br /&gt;
* Consume 50W idle.&lt;br /&gt;
* Move internal atmosphere contents to output if there's a valid output network.&lt;br /&gt;
* Check for both input networks.&lt;br /&gt;
** If only one input network is connected, take 1.5 moles/tick from it, otherwise, take 0.75 moles/tick from each of the input networks.&lt;br /&gt;
* Calculate reaction efficiency.&lt;br /&gt;
** If the ratios of either nitrogen or oxygen are below 1%, set it to 0%.&lt;br /&gt;
** Otherwise, it's 30% * sum of nitrogen and oxygen gas ratios * (lowest ratio of the two / highest ratio of the two)&lt;br /&gt;
* If efficiency isn't 0%, consume 6kW instead of the 50W.&lt;br /&gt;
* Convert ReactionEfficiency% of the nitrogen/oxygen present internally into nitrous oxide.&lt;br /&gt;
** 2 moles -&amp;gt; 1 mole nitrous oxide. Output energy is half the components' energy + reaction inefficiency&lt;br /&gt;
** Example: 50/50 nitrogen:oxygen mix at 300K -&amp;gt; ((20.6*300 + 21.1*300)*0.225+4200)/(37.2*0.225) = 838.08K nitrous oxide output temperature. Actual output temperature is 448.82 K as it immediately mixes with unreacted gases.&lt;br /&gt;
&lt;br /&gt;
Because nitrous oxide contributes 286 kJ/mol in combustion, use of the nitrolyzer is 10.725x energy-positive at the maximum reaction efficiency of 30% (0.225 mol/tick).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wall Cooler ==&lt;br /&gt;
&lt;br /&gt;
Checks if pressure on both pipe and world grid atmosphere is above armstrong limit (6.3 kPa), transfers 1kJ * TemperatureDifferentialEffficiency of energy per tick from the environment to the pipe network.&lt;br /&gt;
Although no OperationalTemperatureEfficiency curve is present, this would only be more efficient than an air conditioner on situations where this value would be &amp;lt;5% (or 2.5%? TODO: clear up J/tick and W distinction for power consumers). You'll probably want an air conditioner on most scenarios.&lt;br /&gt;
&lt;br /&gt;
== Wall Heater ==&lt;br /&gt;
&lt;br /&gt;
Checks if world grid atmosphere is above armstrong limit and temperature is below 2500 K,  adds 1kJ/tick to world grid, '''ignites flammable atmospheres below autoignition temperature'''.&lt;br /&gt;
&lt;br /&gt;
== Pipe Heater ==&lt;br /&gt;
&lt;br /&gt;
Same pressure/temperature checks as wall heater, but doesn't ignite flammable pipe contents(assuming no autoignition occurs).&lt;br /&gt;
&lt;br /&gt;
== Road Flare ==&lt;br /&gt;
Ignites flamambles. Adds 1kJ/tick when lit. 1.2s fuse when fired from [[Flare Gun]]. 25m illumination range when falling from flare gun, 10m range otherwise.&lt;br /&gt;
&lt;br /&gt;
== Evaporation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo liquid volume regulator(0.25 L/tick, input-&amp;gt;internal, targets 10% internal liquid volume), purge valve (1500 kPa * 10L, internal-&amp;gt;output) and heat exchanger (15m² area, internal&amp;lt;&amp;gt;input 2).&lt;br /&gt;
&lt;br /&gt;
== Condensation Chamber ==&lt;br /&gt;
&lt;br /&gt;
Combo pressure regulator (1500 kPa * 10 L), 2 condensation valves (input-&amp;gt;internal, internal-&amp;gt;output) and heat exchanger (15m² area).&lt;br /&gt;
&lt;br /&gt;
== Condensation Valve / Expansion Valve ==&lt;br /&gt;
&lt;br /&gt;
Moves 10 liters of liquids or half the liquids volume on the input pipe network per tick, whichever is smaller. Isn't supposed to move if the output network can't fit another 0.1L of liquids (untested).&lt;br /&gt;
&lt;br /&gt;
== Active Vent ==&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres.&lt;br /&gt;
** The calculation assumes both atmospheres have an identical heat capacity.&lt;br /&gt;
* If pumping into pipe, pump the smallest of:&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (grid minimum pressure limited to the external pressure limit)&lt;br /&gt;
** The amount of gas required to make the pipe network reach the internal pressure limit (at the average temperature)&lt;br /&gt;
* If pumping outwards, pump the smallest of:&lt;br /&gt;
** The amount of gas available in excess of the internal pressure limit (at the '''internal''' temperature)&lt;br /&gt;
** 10 kPa*grid volume/tick at the average temperature (limited to the external pressure limit)&lt;br /&gt;
* Set flow indicator status based on the difference in grid external pressure pre- and post- pumping and the maximum pumping capacity.&lt;br /&gt;
**&amp;gt;9 kPa: Max (Green)&lt;br /&gt;
**&amp;gt;5 kPa: Limited (Yellow)&lt;br /&gt;
**&amp;lt;5 kPa: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
For a 8000 L cell, the pumping capacity is 800 bar*L. As things get added to the cell this pumping capacity decreases.&lt;br /&gt;
&lt;br /&gt;
== Powered Vent == &amp;lt;!--StructurePoweredVentMultiGrid; small variant also uses multigrid--&amp;gt;&lt;br /&gt;
* Calculate the average temperature of input network and grid atmospheres. (similar to active vent)&lt;br /&gt;
* If pumping into pipe:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the grid temperature into the pipe network (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
** If more than 0.1 kPa of pumping capacity remains available:&lt;br /&gt;
*** Calculate the cumulative pressure difference relative to the target pessure over open neighbor grids up to GridMixingDepth tiles away from the grid the vent is in.&lt;br /&gt;
*** If the pressure on the grid it's in is greater than the cumulative pressure difference, pull the pressure of it further down ignoring the external pressure limit (limited to the remaining pumping capacity).&lt;br /&gt;
*** If it's not, search for open grids 1 tile further away (starting from the vent grid, repeated until GridMixingDepth), and for each one pump their contents into the pipe(up to pressure limit) until the pumping capacity is exhausted or the GridMixingDepth limit is reached.&lt;br /&gt;
****The search is aborted if &amp;lt;0.1 kPa of remaining pumping capacity is left by the next grid expansion. &lt;br /&gt;
* If pumping into world:&lt;br /&gt;
** Pump PressurePerTick*Grid volume at the average temperature (limited to the external pressure limit) and subtract the pumped pressure from the pumping capacity.&lt;br /&gt;
**If more than 0.1 kPa of pumping capacity remains available, calculate the cumulative pressure difference relative to the target pressure over over neighbor grids up to GridMixingDepth tiles away, and pump up to that into world using the remaining pumping capacity (ignoring the external pressure limit).&lt;br /&gt;
* Set flow indicator status to remaining pumping capacity after pumping:&lt;br /&gt;
** &amp;lt; 1.1 kPa: Max (Green)&lt;br /&gt;
** &amp;lt; PressurePerTick/2: Limited (Yellow)&lt;br /&gt;
** &amp;gt; PressurePerTick/2: Very limited (Red)&lt;br /&gt;
&lt;br /&gt;
PressurePerTick: 20 kPa (small), 40 kPa (large)&lt;br /&gt;
&amp;lt;br&amp;gt;GridMixingDepth: 4 (small), 6 (large)&lt;br /&gt;
&lt;br /&gt;
== Passive Vent ==&lt;br /&gt;
Mixes pipe gas contents with world cell gas contents, or mixes all pipe contents with all world cell contents if submerged in liquid. Not sure how to make use of this considering the amount of liquids required to submerge one.&lt;br /&gt;
&lt;br /&gt;
== Pipe Radiators ==&lt;br /&gt;
&lt;br /&gt;
Convection power = 100*area*deltaT. Area is multiplied by internal and external pressure ratios compared to 1atm, so effectiveness is reduced if either is below this pressure.&lt;br /&gt;
&lt;br /&gt;
Radiation power is based on a curve function on the difference between the network temperature and the background temperature (world temperature on a vacuum, lerped to atmospheric temperature based on how many moles are on it up to 20kPa @ 0°C (=70.450583221073 mols on a world cell)). Area is multiplied by internal pressure ratio compared to 1atm.&lt;br /&gt;
&lt;br /&gt;
== Pipe Organ ==&lt;br /&gt;
&lt;br /&gt;
Makes sound if pressure delta between pipe network and world is above 10kPa. Equalizes pipe network gases with world cell gases at a rate of 20 kPa/tick.&lt;br /&gt;
&lt;br /&gt;
== Liquid Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Move setting L/tick of '''liquids''' from input to output network, then remove gases from input network until output network pressure is equalized.&lt;br /&gt;
&lt;br /&gt;
A liquid volume pump set to 0.0000001 L can be used as a one-way liquid-pipe-to-liquid-pipe gas valve with a negligible power consumption. (This behavior is different from the one-way valve, which also moves liquids)&lt;br /&gt;
&lt;br /&gt;
== Volume Pump ==&lt;br /&gt;
&lt;br /&gt;
Take the moles present in setting L of the input pipe network, move them to the output in a single tick. If setting is greater than the input pipe network volume, only the input pipe network is used but power is still consumed based on the setting parameter.&lt;br /&gt;
&lt;br /&gt;
== Turbopumps ==&lt;br /&gt;
&lt;br /&gt;
Same mechanics as turbo pumps but with a fixed base power consumption and a lower consumption/L pumped.&lt;br /&gt;
&lt;br /&gt;
== Gas regulators ==&lt;br /&gt;
&lt;br /&gt;
(Comprises Pressure Regulator, Back Pressure Regulator, Pressurant Valve, Purge Valve)&lt;br /&gt;
&lt;br /&gt;
If output network pressure is greater than input network pressure, move up to a mole-equivalent quantity of gas that would fit in pressurePerTick(=1atm?)*10L volume at the pipe network temperature.&lt;br /&gt;
&lt;br /&gt;
With a 10L volume pump consuming twice the power of a gas regulator, This makes a gas regulator more efficient than a volume pump when operating on input network pipe pressures below pressurePerTick*2 (2 atm?) as more volume/W is scavenged in that circumstance.&lt;br /&gt;
&lt;br /&gt;
If input pipe pressure is greater than output network pressure, check if more gas could be moved by moving a quarter of the pressure difference on the input network per tick instead, and move up to that if so. This makes a regulator more efficient than a volume pump in scenarios where the input network volume is large enough to make a reasonable pressure gradient worthwhile.&lt;br /&gt;
&lt;br /&gt;
PressurePerTick value is 101.325 kPa for all 4.&lt;br /&gt;
&lt;br /&gt;
== Gas Mixer == &amp;lt;!-- analysis not paying enough attention, reminder to check later --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Calculates the amount of gas a gas regulator working against the pressure gradient would take in a tick, multiplied by the ratio fraction belonging to the given input. (for example: 75% ratio would take 7.5 atm*L from input 1 and 2.5 atm*L from input 2)&lt;br /&gt;
&amp;lt;br&amp;gt;Takes a (weighed by ratio) average of the input pressures on both networks.&lt;br /&gt;
&amp;lt;br&amp;gt;Calculates &amp;quot;Max Moles Per Tick&amp;quot; for both networks - This is similar to the &amp;quot;pressure regulator working with the help of a pressure gradient&amp;quot; case, but only up to a fifth of the pressure differential(between the input's pressure and the average input pressure) instead of a 1/4th as in the pressure regulator. &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Acts as a Gas regulator, except:&lt;br /&gt;
* Moves either 20 '''bar'''*L/tick weighed between both input networks by ratio (as opposed to 10 '''atm'''*L/tick) or a fifth of the pressure gradient(instead of a fourth), whichever is greater.&lt;br /&gt;
* Uses the average input pressure (weighed by ratio) for pressure gradient calculations.&lt;br /&gt;
* Stops moving if either either input is empty and currently in use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Liquid regulators ==&lt;br /&gt;
&lt;br /&gt;
(Liquid volume regulator, Liquid Back Volume regulator)&lt;br /&gt;
&lt;br /&gt;
If volume percentage on input network is greater than output network, pump '''liquids''' up to the greater of:&lt;br /&gt;
&lt;br /&gt;
 - A quarter of the combined network liquid volume percentage to output network per tick (if input network volume ratio &amp;gt; output network volume ratio). '''This isn't liquid level balancing''' - a 50.(0)1/100L against a 50/100L network will still result in a single-tick movement of ~100L/4 = 25L from input to output. There's a likely bug here.&lt;br /&gt;
 - The regulator's liquid volume pumping capacity (0.25L/tick).&lt;br /&gt;
&lt;br /&gt;
If any liquids were moved, balance gas pressures on the output with a one-way '''gas''' valve from input to output. Liquids have to be moved for this, unlike the 0L liquid volume pump.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Air Conditioner ==&lt;br /&gt;
&amp;lt;!-- not including data about HARM suit as the build i have access to is out-of-date --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If suit AC is off, suit has no waste tank attached or no/empty battery, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Calculate the energy required to move the suit/helmet's internal atmosphere to the target temperature.&lt;br /&gt;
&lt;br /&gt;
If cooling to that temperature, transfer the excess energy to the waste tank consuming 1% of it in battery power, and marking an amount of gas to be moved to the waste tank on that tick's filtration step (1 mol / 2 kJ cooled).&lt;br /&gt;
&lt;br /&gt;
If heating to that temperature, consume 50% of the energy spent heating the contents in battery power.&lt;br /&gt;
&lt;br /&gt;
The maximum amount of heat a suit can add/remove per tick is proportional to its condition, but the heating/cooling efficiency remains the same.&lt;br /&gt;
&lt;br /&gt;
== Space Suit Filtration ==&lt;br /&gt;
&lt;br /&gt;
If filtration is off, suit is unpowered or has no waste tank attached, do nothing.&lt;br /&gt;
&lt;br /&gt;
Close waste tank valve. If waste tank is full, do nothing.&lt;br /&gt;
&lt;br /&gt;
Fill waste tank to 1 kPa with air tank contents if waste tank pressure is below 1kPa.&lt;br /&gt;
&lt;br /&gt;
Remove all gases in the space suit's internal volume matching the filters in its slots.&lt;br /&gt;
&lt;br /&gt;
Remove additional gases from the space suit's internal volume if the amount of gas to be moved on the AC step exceeds the amount of gas moved by the filters, up to the suit's pumping rate (proportional to its condition).&lt;br /&gt;
&lt;br /&gt;
Consume 10 J from battery.&lt;br /&gt;
&lt;br /&gt;
== Gas Mask == &amp;lt;!-- the GasMask class is actually for suit helmets. The actual gas mask's class name is FilterMask... which is an extension of it. --&amp;gt;&lt;br /&gt;
If equipped:&lt;br /&gt;
* Transfer internal atmosphere contents to world.&lt;br /&gt;
* Equalize world and internal pressures.&lt;br /&gt;
* Filter gasses from internal atmosphere into world atmosphere.&lt;br /&gt;
&lt;br /&gt;
== Fridge (large) ==&lt;br /&gt;
&lt;br /&gt;
Initialize an atmosphere containing 1.72 moles of nitrogen at 20°C (if world grid pressure below armstrong limit) or world grid temperature.&lt;br /&gt;
&lt;br /&gt;
Heat internal atmosphere to 142 K or move internal atmosphere energy to environment down to 142 K at up to 1kJ/tick.&lt;br /&gt;
&lt;br /&gt;
Add energy added/moved to that tick's power consumption.&lt;br /&gt;
&lt;br /&gt;
Fridge has a convection factor to world atmosphere of 0.01 when door is opened and 0 when closed.&lt;br /&gt;
&lt;br /&gt;
== Welding Torch ==&lt;br /&gt;
Has a 1L internal reservoir.&lt;br /&gt;
&amp;lt;br&amp;gt;If on, checks for internal reservoir contents, and if any, ejects them into world atmosphere '''and ignites world atmosphere flammables (even if the internal reservoir contents are cold inert gas).'''&lt;br /&gt;
&amp;lt;br&amp;gt;Moves 0.01 moles/tick from canister contents (both gas and liquid) into the internal reservoir, and attempts to perform complete manual combustion of them.&lt;br /&gt;
&amp;lt;br&amp;gt;Is operable if any combustion has occurred within the reservoir, regardless of the final temperature after combustion.&lt;br /&gt;
&lt;br /&gt;
Gains a 30% additive work speed bonus (on top of its 20% additive work speed bonus relative to the arc welder?) if the internal reservoir temperature is above 3000°C after combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Awards the &amp;quot;Fast and Furious&amp;quot; achievement to the wielder when welding with an internal atmosphere of &amp;gt;10% nitrous oxide gas (liquids not counted).&lt;br /&gt;
&lt;br /&gt;
== Furnace ==&lt;br /&gt;
* Doesn't explode if partially deconstructed before an overpressure event. &amp;lt;!--early return on FurnaceBase:OnAtmosphericTick--&amp;gt;&lt;br /&gt;
* Includes a passive pollutant filter that prioritizes moving out pollutant from its internal storage to the output before any other gases when attempting to equalize pressure. &amp;lt;!--Furnace:HandleGasInput--&amp;gt;&lt;br /&gt;
** Filter max flow rate before allowing other gasses through is 2000 kPa at the hottest of (internal, output) temperatures and smallest of (internal, output) volumes.&lt;br /&gt;
* Starts processing ores once the furnace's internal temperature is above their flashpoint. &amp;lt;!--FurnaceBase:OnServerImportTick--&amp;gt;&lt;br /&gt;
** Ices get melted. Ores/reagent mixes get their contents added to reagents. Ingots become reagents and cool the input down by 45J*Flashpoint Temperature/g.&lt;br /&gt;
* When ejecting, check if internal reagent mix and internal conditions forms one of the recipes, output recipe if so, or reagent mix otherwise.&lt;br /&gt;
&lt;br /&gt;
== Advanced Furnace ==&lt;br /&gt;
&lt;br /&gt;
Input pump removes both gases and liquids from input.&lt;br /&gt;
&amp;lt;br&amp;gt;Output pump pumps only gases into the output gas pipe and only liquids into the output liquid pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;Doesn't include a passive pollutant filter, unlike the regular furnace.&lt;br /&gt;
&amp;lt;br&amp;gt;Power consumption is 100W idle, plus another 1W/L on each pump being used. This makes them more efficient than a [[Turbo_Volume_Pump_(Gas)|Turbopump]] at 100W+2W/L contrasted to the turbopump's 200W+6W/L in applications where flow direction reversibility and the internal buffer tank's volume/liquid retention don't matter.&lt;br /&gt;
&lt;br /&gt;
== Cryo Tube ==&lt;br /&gt;
Does not allow robots inside.&lt;br /&gt;
&amp;lt;br&amp;gt;Has an 800L internal atmosphere, mixed with world atmosphere when open and input network atmosphere when closed.&lt;br /&gt;
&amp;lt;br&amp;gt;Tries to heat the internal atmosphere to 4°C if below, converting up to 250 J/tick as electric power into heat when open. Heating persists even if door is closed? (possible bug)&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant is colder, Will transfer energy from the internal atmosphere to the coolant atmosphere at a rate of 1 J/K/tick until equalization or internal temperature reaches 0°C, clamped between 1 and 100 J/tick.&lt;br /&gt;
&amp;lt;br&amp;gt;Can only revive/heal if the input pipe network has at least 10L of pure liquid nitrogen at 130 K (-143.15°C) or below. Heals 1 damage/tick in those conditions.&lt;br /&gt;
&amp;lt;br&amp;gt;Revives players at 25% of max HP.&lt;br /&gt;
&lt;br /&gt;
== Fire Extinguisher ==&lt;br /&gt;
Transfers 0.25L/s and 200kPa/s out of its canister (the latter until pressure with its environment's atmosphere is equalized) when used.&lt;br /&gt;
&amp;lt;br&amp;gt;If its canister's contents are &amp;gt;99% inert(not nitrous oxide/oxygen/volatiles) by moles and there were at least 1 mol of liquids or enough pressure on the canister to prevent equalization, supresses fires on the cell it's been used and adjacent neighbors for 10 ticks and extinguishes fires on entities on fire within said cells.&lt;br /&gt;
&amp;lt;br&amp;gt;Additionally, if the temperature on the cell it's in is above 300°C after the contents transfer, removes 20kJ/tick of energy from it.&lt;br /&gt;
&lt;br /&gt;
== Active liquid outlet ==&lt;br /&gt;
'''before an atmospherics tick,''' dumps up to 50 mols of the liquid pipe's contents (both liquids and gases) each tick into the world cell if active.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid inlet ==&lt;br /&gt;
If submerged, Attempts to drain liquids from the cell it's in, then from adjacent cells without an open grid below them(repeated up to 6 tiles away), up to a cumulative total of 20L/tick (stopping at 99% network fullness or more than 19.9L drained before the next grid search range expansion). &amp;lt;!-- looks like a costly operation to run every tick on large rooms. --&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; After that step, mixes pipe network and world atmospheres.&lt;br /&gt;
&lt;br /&gt;
== Passive liquid drain ==&lt;br /&gt;
Behaves as an always-on condensation valve, but moves liquids to a world atmosphere instead of a pipe network.&lt;br /&gt;
&lt;br /&gt;
== Counterflow Heat Exchanger ==&lt;br /&gt;
Before an atmospherics tick:&lt;br /&gt;
* Remove liquids from inputs to outputs to balance liquid percentages on both input/output networks.&lt;br /&gt;
* Remove gases from inputs to outputs to balance pressures on both input/output networks.&lt;br /&gt;
If contents moved on either of the two networks are less than 0.008 mols, send moved contents to outputs while performing no heat transfer, otherwise:&lt;br /&gt;
* Split removed contents into 8 packets&lt;br /&gt;
* Calculate heat exchange efficiency based on input network pressure/liquid volume after removal (biggest scaling factor of: 0-100% from 0-1atm pressure OR 0-100% from 0-1% liquid volume for each network; final result is the product of both networks' efficiency factors)&lt;br /&gt;
* Perform a total of 48 heat transfers in a sliding window.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
    Turns out there is too much crossover between the transfers.&lt;br /&gt;
    Assuming:&lt;br /&gt;
    INPUT  1     D  E  F  0 [1][2][3][4][5][6][7][8] 9  A  B  C   OUTPUT 1&lt;br /&gt;
    OUTPUT 2     C  B  A  9 [8][7][6][5][4][3][2][1] 0  F  E  D   INPUT  2&lt;br /&gt;
    &lt;br /&gt;
    Transfers are made in 2 kernels that slide across left to right along the sequence (discarding transfers made when either hits a non-valid packet):&lt;br /&gt;
    First:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'&lt;br /&gt;
      9ABC  (this latter one's order is actually reversed and has been un-reversed so it could be drawn without overlap)&lt;br /&gt;
    Followed by:&lt;br /&gt;
    E  F  0  1&lt;br /&gt;
     \ | / ,'   (same as the first, but shifting the second network's packets one step to the right)&lt;br /&gt;
      89AB &lt;br /&gt;
    The next iteration would then shift the first input to the right:&lt;br /&gt;
       F012&lt;br /&gt;
       89AB&lt;br /&gt;
    Followed by the second sequence being shifted:&lt;br /&gt;
       F012&lt;br /&gt;
       789A&lt;br /&gt;
    repeated until all the transfers are covered (would stop with the first valid transfer being 1-8 on the 0123-789A step and last valid transfer being 8 1 on the 789A-0123 step)&lt;br /&gt;
There should be enough info here to create an animation on how the transfer works. if there isn't, feel free to hit me for clarification on my talk page.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
** Exchange rate for each transfer is 15.625W*ΔT*EfficiencyRatio&lt;br /&gt;
* Merge the split packets back into a single packet for each network&lt;br /&gt;
* Send packet to each network's output&lt;br /&gt;
&lt;br /&gt;
==Portable Air Conditioner==&lt;br /&gt;
Stops heating if external air temperature is above 50°C, stops cooling if external temperature is below -10°C.&lt;br /&gt;
&amp;lt;br&amp;gt;Stops operating if internal pressure is above 40 atm or if any contents on the liquid canister are frozen.&lt;br /&gt;
&amp;lt;br&amp;gt;Consume 25 J/tick from battery.('''BUG: Only when operating in cooling mode.''')&lt;br /&gt;
&amp;lt;br&amp;gt;If coolant tank pressure is above 40 atm, transfer excess pressure to internal tank.&lt;br /&gt;
&amp;lt;br&amp;gt;Without a canister: If in heating mode, heat by 250 J/tick using an internal heating element.&lt;br /&gt;
&amp;lt;br&amp;gt;With a canister: Transfer Clamp( (100-TDelta)/100, min=0.01, max = 1) * 2500 J/tick between  canister and atmosphere. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Portable Generator==&lt;br /&gt;
Removes 1.5 atm*L/tick from input canister (=2.37480469 kPa/tick for a 64L container) into its internal chamber.&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 90% of the chamber's contents.&lt;br /&gt;
&amp;lt;br&amp;gt;Converts 6% of the combustion's energy into power.&lt;br /&gt;
&amp;lt;br&amp;gt;Moves previous tick's combusted contents into atmosphere.&lt;br /&gt;
&lt;br /&gt;
==Gas Fuel Generator==&lt;br /&gt;
* Shuts down if outside operating conditions (at least 19.998 kPa on grid atmosphere, grid atmosphere between 3°C and 57°C)  for 5+ ticks in a row.&lt;br /&gt;
** These are slightly laxer than the conditions for valid atmosphere on its tooltip. (20kPa, 5-55°C)&lt;br /&gt;
* Removes 10 bar*L/tick (100 kPa * 10 L) from the input network into its internal chamber.&lt;br /&gt;
* Instantly combusts 90% of the internal chamber's contents.&lt;br /&gt;
* Sets the device's convection/radiation area to (0.01 + PostCombustionPressure*0.66)*0.28. &lt;br /&gt;
* Converts 17% of the combustion's energy into power.&lt;br /&gt;
** Superfuel at -20°C, at full input rate: 0.475103 mol/tick -&amp;gt; 122291.5 kJ/t -&amp;gt; 20789.56 W&lt;br /&gt;
** ~18.64x as much power as a [[Portable Generator]] on the same fuel mix, at ~6.58x the fuel consumption rate.&lt;br /&gt;
* Moves previous tick's combusted contents into output.&lt;br /&gt;
&lt;br /&gt;
==Rocket Combustion Chamber== &amp;lt;!--RocketEngineBase:CombustEngine--&amp;gt;&lt;br /&gt;
(shared by all engines)&lt;br /&gt;
&amp;lt;br&amp;gt;Instantly combusts 96% of the fuel mix.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust temperature to the temperature after this instant combustion.&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Exhaust velocity to Engine Efficiency * sqrt (8.3144 * Exhaust temperature * Degrees of freedom contributing to exhaust velocity)&lt;br /&gt;
* The number of degrees of freedom depends on the substance's molecular structure:&lt;br /&gt;
** Monoatomic = 1.666666 (None)&lt;br /&gt;
** Diatomic = 1.4 (Oxygen, Nitrogen, Hydrogen)&lt;br /&gt;
** Triatomic = 1.333333 (Carbon Dioxide, Volatiles, Polluted Water/Water/Steam, Nitrous Oxide)&lt;br /&gt;
** Polyatomic = 1.26 (Pollutant)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets Mass flow rate to the total mass of gases in the combustion chamber after combustion / tick speed (0.5s)&lt;br /&gt;
&amp;lt;br&amp;gt;Sets engine thrust to Mass flow rate * Exhaust velocity&lt;br /&gt;
&lt;br /&gt;
==Pumped Gas Engine== &amp;lt;!--GovernedGasEngine. Simulation runs off a 100L, 480 atm, 0.666:0.334 fuel mix at 215 K--&amp;gt;&lt;br /&gt;
Removes 0..18 moles from the input atmosphere per tick into combustion chamber depending on throttle.&lt;br /&gt;
&lt;br /&gt;
==Pumped Liquid Engine== &amp;lt;!--Simulation runs off 2 100L tanks containing 80L of liquid volatiles / liquid oxygen at 125 K and a mixing ratio of 70%--&amp;gt;&lt;br /&gt;
Removes a total of 0..0.55 L from the input tanks into the combustion chamber depending on throttle (proportion depends on mixing ratio)&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Gas Engine== &amp;lt;!-- Simulation runs off 2 100L tanks at 215 K, one containing 32391 kPa of volatiles and another containing 16244 kPa of oxygen and ends up burning volatiles-rich at a ~2.686:1 ratio? --&amp;gt;&lt;br /&gt;
At full throttle, removes 10? atm*L .. BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) from each of its 2 inputs into the combustion chamber depending on the fraction of max pipe pressure on each input pipe.&lt;br /&gt;
&amp;lt;br&amp;gt;This is scaled down proportional to throttle. &lt;br /&gt;
* Base pressure-fed gas engine has the Base Pumping Capacity at 500 bar*L, Heavy variant has it at 850 bar*L&lt;br /&gt;
&lt;br /&gt;
==Pressure Fed Liquid Engine== &amp;lt;!-- Simulation runs off a 100L tank at 125 K, containing 80L of liquid volatiles/liquid oxygen(at a 70:30 ratio) and a 0.666:0.334 gas fuel mix at 48 atm --&amp;gt;&lt;br /&gt;
At max throttle, pump between 0.04L..MaxFlowRate of liquids into combustion chamber, scaling on input pipe fraction of max pressure. Pumped amount is scaled by throttle.&lt;br /&gt;
* MaxFlowRate is 0.8L for base variant, 1.5L for heavy variant. &lt;br /&gt;
Additionally, move 10? atm*L..BasePumpingCapacity*(3 + -2.999 / (1 + (FractionOfMaxPipePressureClamped/2)^0.7)) of gases into the combustion chamber. (also linearly scaled by throttle)&lt;br /&gt;
* That's the same formula as the pressure-fed gas engine, but scaling from 0-60 atm instea of 0-600 atm.&lt;br /&gt;
* BasePumpingCapacity is 500 bar*L for base variant, 600 bar*L for heavy variant.&lt;br /&gt;
&amp;lt;br&amp;gt;Perform phase change after combustion step but before heat exchange step.&lt;br /&gt;
&amp;lt;br&amp;gt;Max heat exchange area is 3m² for base variant, 5m² for heavy variant, proportional to setting.&lt;br /&gt;
&lt;br /&gt;
==Pneumatic Mining Drill==&lt;br /&gt;
&amp;lt;!--Comparison:&lt;br /&gt;
Emergency Pickaxe: -0.5 ManuallyAuthoredToolSpeedOffset, 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Pickaxe: 0.5 MineCompletionTime, 0.5 MineAmount&lt;br /&gt;
Mining Drill: 1 UsedPowerPassive, 30 UsedPowerActive, 0.11 MineCompletionTime, 0.2 MineAmount&lt;br /&gt;
Pneumatic Mining Drill: 0.4 MineAmount, 20 MinOperationalPressureDifferential, 6000 MaxPressureDifferential, 0.01 MinMolesPerTick, 0.2 MaxMolesPerTick, 0.05 IdleUsageMolesPerTick, 0.05 FastestMineTime, 0.2 SlowestMineTime&lt;br /&gt;
Mining Drill mk2: &amp;quot;manuallyAuthoredToolSpeedOffset&amp;quot;: 0.1, otherwise same as mining drill&lt;br /&gt;
Mining Drill Heavy: UsedPowerPassive: 2, UsedPowerActive: 150, MineCompletionTime: 0.05, MineAmount: 0.4&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* Eject internal atmosphere into external atmosphere.&lt;br /&gt;
* Calculates pressure differential between external atmosphere and canister.&lt;br /&gt;
* Calculate base mole consumption: 0.05 mol/tick on idle, 0.2 mol/tick when active.&lt;br /&gt;
* Calculate actual mole consumption: map between 0.01 mol/tick at 20kPa pressure differential to Base mole consumption at 6 MPa pressure differential&lt;br /&gt;
* Remove actual mole consumption from canister into internal atmosphere.&lt;br /&gt;
* Map time between mine actions: 0.2s at 20kPa- pressure differential to 0.05s at 6MPa+ presure differential.&lt;br /&gt;
** Equals heavy mining drill speed if pressure differential is at 6+ MPa, equals mining drill mk1 speed if pressure differential is above ~3.608 MPa (at double the MineAmount, which still loses out to the pickaxe, aimee or autominer.)&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Gases_and_Liquids/Menu&amp;diff=25834</id>
		<title>Gases and Liquids/Menu</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Gases_and_Liquids/Menu&amp;diff=25834"/>
				<updated>2026-03-02T13:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: fix molten salt link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;4&amp;quot;| &amp;lt;div style=&amp;quot;text-align:center;font-weight:bold;&amp;quot;&amp;gt;Gases and Liquids&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! ''' Elements '''&lt;br /&gt;
! ''' Compounds '''&lt;br /&gt;
! ''' Mixtures '''&lt;br /&gt;
! ''' Other '''&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-oxygen.png|32px|link=https://stationeers-wiki.com/Oxygen|Oxygen]]&lt;br /&gt;
[[File:Icon-nitrogen.png|32px|link=https://stationeers-wiki.com/Nitrogen|Nitrogen]]&lt;br /&gt;
[[File:Icon-pollutant.png|32px|link=https://stationeers-wiki.com/Pollutant|Pollutant]]&lt;br /&gt;
[[File:Icon-Hydrogen.png|32px|link=https://stationeers-wiki.com/Hydrogen|Hydrogen]]&lt;br /&gt;
[[File:Icon-Helium.png|32px|link=https://stationeers-wiki.com/Helium|Helium]]&lt;br /&gt;
[[File:Icon-Ozone.png|32px|link=https://stationeers-wiki.com/Ozone|Ozone]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-Methane.png|32px|link=https://stationeers-wiki.com/Methane|Methane]]&lt;br /&gt;
[[File:Icon-carbondioxide.png|32px|link=https://stationeers-wiki.com/Carbon_Dioxide|Carbon Dioxide]]&lt;br /&gt;
[[File:Icon-water.png|32px|link=https://stationeers-wiki.com/Water|Water]]&lt;br /&gt;
[[File:Icon-nitrousoxide.png|32px|link=https://stationeers-wiki.com/Nitrous_Oxide|Nitrous Oxide]]&lt;br /&gt;
[[File:Icon-pollutedwater.png|32px|link=https://stationeers-wiki.com/Polluted_Water|Polluted Water]]&lt;br /&gt;
[[File:Icon-LiquidAlcohol.png|32px|link=https://stationeers-wiki.com/Alcohol|Alcohol]]&lt;br /&gt;
[[File:Icon-Silanol.png|32px|link=https://stationeers-wiki.com/Silanol|Silanol]]&lt;br /&gt;
[[File:Icon-LiquidSodiumChloride.png|32px|link=https://stationeers-wiki.com/Liquid_Sodium_Chloride|Liquid Sodium Chloride]]&lt;br /&gt;
[[File:Icon-HydrochloricAcid.png|32px|link=https://stationeers-wiki.com/Hydrochloric_Acid|Hydrochloric Acid]]&lt;br /&gt;
[[File:Icon-Hydrazine.png|32px|link=https://stationeers-wiki.com/Hydrazine|Hydrazine]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-fuel.png|32px]][[Special:MyLanguage/Fuel|Fuel (66.6% H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 33.3% O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Icon-nitro.png|32px]][[Special:MyLanguage/Fuel|Superfuel (50% H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 50% N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Icon-air.png|32px]][[Special:MyLanguage/Air|Air (75% N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 25% O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-atmosphere.png|32px]] [[Special:MyLanguage/Atmosphere|Atmosphere]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Icon-coolant.png|32px]] [[Special:MyLanguage/Coolant|Coolant]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Module:Gas/data&amp;diff=25833</id>
		<title>Module:Gas/data</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Module:Gas/data&amp;diff=25833"/>
				<updated>2026-03-02T13:41:21Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Add image links for all gases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[--&lt;br /&gt;
This module is intended to be loaded through mw.loaddata, giving the following restrictions:&lt;br /&gt;
	The loaded module is evaluated only once per page, rather than once per {{#invoke:}} call.&lt;br /&gt;
	The loaded module is not recorded in package.loaded.&lt;br /&gt;
	The value returned from the loaded module must be a table. Other data types are not supported.&lt;br /&gt;
	The returned table (and all subtables) may contain only booleans, numbers, strings, and other tables. Other data types, particularly functions, are not allowed.&lt;br /&gt;
	The returned table (and all subtables) may not have a metatable.&lt;br /&gt;
	All table keys must be booleans, numbers, or strings.&lt;br /&gt;
	The table actually returned by mw.loadData() has metamethods that provide read-only access to the table returned by the module. Since it does not contain the data directly, pairs() and ipairs() will work but other methods, including #value, next(), and the functions in the Table library, will not work correctly.&lt;br /&gt;
--]]--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Gas Constants:&lt;br /&gt;
	p.StefanBoltzmannConstant = 5.6703e-8&lt;br /&gt;
	p.R = 8.3144 --J/mol*K&lt;br /&gt;
	p.PolyatomicHeatCapacityRatio = 1.26&lt;br /&gt;
	p.TriatomicHeatCapacityRatio = 1.333333&lt;br /&gt;
	p.DiatomicHeatCapacityRatio = 1.4&lt;br /&gt;
	p.MonoatomicHeatCapacityRatio = 1.666666&lt;br /&gt;
&lt;br /&gt;
--[[--&lt;br /&gt;
	Gas fields:&lt;br /&gt;
	--Name(string, Required): Lua-indexable name for the gas. Should use the english localization with spaces removed. gases[&amp;quot;Liquid Hydrochloric Acid&amp;quot;] is a handful to use compared to gases.LiquidHydrochloricAcid.&lt;br /&gt;
	--ID(number, Required): Internal Game-specific ID for the gas.&lt;br /&gt;
	--HumanReadableName: (string, default: Autofilled from name by prepending uppercase letters with spaces when they're followed by a lowercase letter): Printable name.&lt;br /&gt;
	--HumanReadableSymbol: (string): Community-defined chemical name for the gas. Aim for simple: X instead of POL, Alc instead of EtOH|MeOH|CH3CH2OH|CH4O.&lt;br /&gt;
 	--Image: (string, NYI): wiki-local URI to an icon of the gas.&lt;br /&gt;
	--MolarMass (number, g/mol, Required): Molar mass of the gas for rocketry.&lt;br /&gt;
	--HeatCapacityRatio (number, Default: p.MonoatomicHeatCapacityRatio): The gas's heat capacity ratio. Used in rocketry to calculate exhaust velocity.&lt;br /&gt;
	--State(string, Autofilled as &amp;quot;Gas&amp;quot;): Phase the gas is in. (Internally, liquids are treated as gases)&lt;br /&gt;
	--MolarVolume (number, L/mol, Defaults to 0 for gases): Volume taken by a Liquid.&lt;br /&gt;
&lt;br /&gt;
	--SpecificHeat(number, J/mol*K, Default: nil): Heat capacity for the gas.&lt;br /&gt;
	--LatentHeat (number, J/mol, Default: nil): latent heat for the gas.&lt;br /&gt;
	--CondensesInto: (Default: nil): Name of gas it condenses in. nil for things that don't condense.&lt;br /&gt;
	--EvaporatesInto: (Default: nil): Name of gas it evaporates in. nil for things that don't evaporate.&lt;br /&gt;
	--TriplePressure: (number, kPa, Default: nil): Minimum condensation pressure.&lt;br /&gt;
	--CriticalPressure: (number, kPa, Default: nil): Maximum liquid pressure.&lt;br /&gt;
	--A: (number, Default: nil): Coefficient A for the phase change pressure-temperature curve.&lt;br /&gt;
	--B: (number, Default: nil): Coefficient B for the phase change pressure-temperature curve.&lt;br /&gt;
	--FreezingTemperature: (number, K, Autofilled from TriplePressure, A, B): Temperature at which the gas starts to freeze.&lt;br /&gt;
	--CriticalTemperature: (number, K, Autofilled from CriticalPressure, A, B): Temperature at which liquid starts to evaporate regardless of pressure.&lt;br /&gt;
&lt;br /&gt;
	--Enthalpy: (Default: nil) Enthalpy of combustion per mol. Non-0 values indicate it's a fuel or hypergol.&lt;br /&gt;
	--AutoignitionTemperature: Temperature at which autoignition occurs under oxygen.&lt;br /&gt;
	--IsHypergol: (Default: nil) Whether it autoignites in the presence of an oxidizer regardless of autoignition offset.&lt;br /&gt;
	--AutoignitionOffset: (Default: nil) How far it changes autoignition temperatures (relative to oxygen) for fuels that react with it.&lt;br /&gt;
	--EnthalpyMultiplier: (Default: nil) How much it multiplies a Fuel's combustion enthalpy when reacting with it. 1 for oxygen, 2 for Ozone/Nitrous Oxide.&lt;br /&gt;
&lt;br /&gt;
	--ThermalEfficiency: (Default: 0.03 for gases, forced to 0 for liquids) The efficiency of a gas inside a stirling engine.&lt;br /&gt;
--]]--&lt;br /&gt;
&lt;br /&gt;
  local function GetHumanReadableName(gas)&lt;br /&gt;
    --attempts to create a human-readable name by adding a space before an uppercase letter if it's preceeded by a lowercase letter.&lt;br /&gt;
    return string.gsub(gas.Name, &amp;quot;(%l)(%u)&amp;quot;, &amp;quot;%1 %2&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local function AddGas(gas)&lt;br /&gt;
    if gas.State == &amp;quot;Gas&amp;quot; then&lt;br /&gt;
      gas.MolarVolume = gas.MolarVolume or 0&lt;br /&gt;
      gas.ThermalEfficiency = gas.ThermalEfficiency or 0.03&lt;br /&gt;
    elseif gas.State == &amp;quot;Liquid&amp;quot; then&lt;br /&gt;
      gas.ThermalEfficiency = 0  --FIXME: If any liquid gets a non-zero thermal efficiency. Kept this way for the time being as liquid generation copies from gases.&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if gas.CondensesInto or gas.EvaporatesInto then&lt;br /&gt;
      gas.FreezingTemperature = gas.FreezingTemperature or (gas.TriplePressure/gas.A)^(1/gas.B)&lt;br /&gt;
      gas.CriticalTemperature = gas.CriticalTemperature or (gas.CriticalPressure/gas.A)^(1/gas.B)&lt;br /&gt;
    end&lt;br /&gt;
   &lt;br /&gt;
    gas.HeatCapacityRatio = gas.HeatCapacityRatio or 0.03&lt;br /&gt;
    gas.HumanReadableName = gas.HumanReadableName or GetHumanReadableName(gas)&lt;br /&gt;
&lt;br /&gt;
    for k,v in pairs(gas) do&lt;br /&gt;
      if k ~= &amp;quot;Name&amp;quot; then &lt;br /&gt;
        --print (k, v)&lt;br /&gt;
        if not p[k] then p[k]={} end&lt;br /&gt;
        p[k][gas.Name]=v&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  p[gas.Name]=gas&lt;br /&gt;
  p[gas.ID]=gas --for iterating over all gases, run pairs then filter by type(key)==&amp;quot;number&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
local function makeliquidfromgas(gas)&lt;br /&gt;
	--creates a deep copy of the original argument with basic changes to make it into a liquid. Some fields still have to be filled in manually.&lt;br /&gt;
	local liquid = {}&lt;br /&gt;
	for k,v in pairs(gas) do &lt;br /&gt;
		liquid[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	liquid.EvaporatesInto = gas.Name&lt;br /&gt;
	liquid.Name = liquid.CondensesInto&lt;br /&gt;
	liquid.CondensesInto = nil&lt;br /&gt;
	liquid.State = &amp;quot;Liquid&amp;quot;&lt;br /&gt;
	liquid.ThermalEfficiency = 0&lt;br /&gt;
	return liquid&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
	local Oxygen = {&lt;br /&gt;
		Name = &amp;quot;Oxygen&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;O2&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-oxygen.png&amp;quot;, &lt;br /&gt;
		ID = 1,&lt;br /&gt;
		MolarMass = 16,&lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio, --Oxygen itself is diatomic, but that's not used on any gas right now. argh. (recheck after rocketry overhaul)&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat =  21.1,&lt;br /&gt;
		LatentHeat = 800,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidOxygen&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 2.6854996004e-11,&lt;br /&gt;
		B = 6.49214937325,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = 0,&lt;br /&gt;
		EnthalpyMultiplier = 1,&lt;br /&gt;
&lt;br /&gt;
		ThermalEfficiency = 0.12&lt;br /&gt;
	}&lt;br /&gt;
local LiquidOxygen = makeliquidfromgas(Oxygen)&lt;br /&gt;
	LiquidOxygen.Image = &amp;quot;Icon-liquidoxygen.png&amp;quot;&lt;br /&gt;
	LiquidOxygen.ID = 256&lt;br /&gt;
	LiquidOxygen.MolarVolume = 0.03&lt;br /&gt;
AddGas(Oxygen)&lt;br /&gt;
AddGas(LiquidOxygen)&lt;br /&gt;
&lt;br /&gt;
	local Nitrogen = {&lt;br /&gt;
		Name = &amp;quot;Nitrogen&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;N2&amp;quot;, --ingame still uses &amp;quot;N&amp;quot;&lt;br /&gt;
		Image=&amp;quot;Icon-nitrogen.png&amp;quot;, &lt;br /&gt;
		ID = 2,&lt;br /&gt;
		MolarMass = 64, --recheck after rocketry overhaul.&lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio, --Nitrogen itself is diatomic, but that's not used on any gas right now. argh. (recheck after rocketry overhaul)&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 20.6,&lt;br /&gt;
		LatentHeat = 500,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidNitrogen&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 5.5757107833e-7,&lt;br /&gt;
		B = 4.40221368946,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.12&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local LiquidNitrogen = makeliquidfromgas(Nitrogen)&lt;br /&gt;
	LiquidNitrogen.Image = &amp;quot;Icon-liquidnitrogen.png&amp;quot;&lt;br /&gt;
	LiquidNitrogen.ID = 128&lt;br /&gt;
	LiquidNitrogen.MolarVolume = 0.0348&lt;br /&gt;
AddGas(Nitrogen)&lt;br /&gt;
AddGas(LiquidNitrogen)&lt;br /&gt;
&lt;br /&gt;
local CarbonDioxide = {&lt;br /&gt;
		Name = &amp;quot;CarbonDioxide&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;CO2&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-carbondioxide.png&amp;quot;, &lt;br /&gt;
		ID = 4,&lt;br /&gt;
		MolarMass = 44,&lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio, --Triatomic at room temperatures. Gains vibrational freedom on high temperatures making polyatomic-ish there IRL but notingame. (recheck after rocketry overhaul)&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 28.2,&lt;br /&gt;
		LatentHeat = 600,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidCarbonDioxide&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 517,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 1.579573e-26,&lt;br /&gt;
		B = 12.195837931,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.08&lt;br /&gt;
	}&lt;br /&gt;
local LiquidCarbonDioxide = makeliquidfromgas(CarbonDioxide)&lt;br /&gt;
	LiquidCarbonDioxide.Image = &amp;quot;Icon-liquidcarbondioxide.png&amp;quot;&lt;br /&gt;
	LiquidCarbonDioxide.ID = 2048&lt;br /&gt;
	LiquidCarbonDioxide.MolarVolume = 0.04&lt;br /&gt;
AddGas(CarbonDioxide)&lt;br /&gt;
AddGas(LiquidCarbonDioxide)&lt;br /&gt;
&lt;br /&gt;
	local Methane = {&lt;br /&gt;
		Name = &amp;quot;Methane&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;CH4&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-Methane.png&amp;quot;, &lt;br /&gt;
		ID = 8,&lt;br /&gt;
		MolarMass = 16, &lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio,&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 20.4,&lt;br /&gt;
		LatentHeat = 1000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidMethane&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 5.863496734e-15,&lt;br /&gt;
		B = 7.8643601035,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = 286000,&lt;br /&gt;
		AutoignitionTemperature = 573.15,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.15&lt;br /&gt;
	}&lt;br /&gt;
local LiquidMethane = makeliquidfromgas(Methane)&lt;br /&gt;
	LiquidMethane.Image = &amp;quot;Icon-LiquidMethane.png&amp;quot;&lt;br /&gt;
	LiquidMethane.MolarVolume = 0.04&lt;br /&gt;
	LiquidMethane.ID = 512&lt;br /&gt;
AddGas(Methane)&lt;br /&gt;
AddGas(LiquidMethane)&lt;br /&gt;
&lt;br /&gt;
	local Pollutant = {&lt;br /&gt;
		Name = &amp;quot;Pollutant&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;X&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-pollutant.png&amp;quot;, &lt;br /&gt;
		ID = 16,&lt;br /&gt;
		MolarMass = 28, &lt;br /&gt;
		HeatCapacityRatio = p.PolyatomicHeatCapacityRatio, --not triatomic.&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 24.8,&lt;br /&gt;
		LatentHeat = 2000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidPollutant&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 1800,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 2.079033884,&lt;br /&gt;
		B = 1.31202194555,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.05&lt;br /&gt;
	}&lt;br /&gt;
local LiquidPollutant = makeliquidfromgas(Pollutant)&lt;br /&gt;
	LiquidPollutant.Image = &amp;quot;Icon-liquidpollutant.png&amp;quot;&lt;br /&gt;
	LiquidPollutant.MolarVolume = 0.04&lt;br /&gt;
	LiquidPollutant.ID = 4096&lt;br /&gt;
AddGas(Pollutant)&lt;br /&gt;
AddGas(LiquidPollutant)&lt;br /&gt;
&lt;br /&gt;
--next is theoretically Water, but because i'm too lazy to create a makegasfromliquid function, here goes Steam instead.&lt;br /&gt;
	local Steam = {&lt;br /&gt;
		Name = &amp;quot;Steam&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;H2O&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-water.png&amp;quot;, &lt;br /&gt;
		ID = 1024,&lt;br /&gt;
		MolarMass = 48, --higher than IRL water. recheck after rocketry overhaul.&lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio,&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 72,&lt;br /&gt;
		LatentHeat = 8000,&lt;br /&gt;
		CondensesInto = &amp;quot;Water&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 3.8782059839e-19,&lt;br /&gt;
		B = 7.90030107708,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.05&lt;br /&gt;
	}&lt;br /&gt;
local Water = makeliquidfromgas(Steam)&lt;br /&gt;
	Water.Image = &amp;quot;Icon-LiquidWater.png&amp;quot;&lt;br /&gt;
	Water.MolarVolume = 0.018&lt;br /&gt;
	Water.ID = 32&lt;br /&gt;
AddGas(Steam)&lt;br /&gt;
AddGas(Water)&lt;br /&gt;
&lt;br /&gt;
	local NitrousOxide = {&lt;br /&gt;
		Name = &amp;quot;NitrousOxide&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;N2O&amp;quot;, --Chemistry.GasSymbols uses &amp;quot;NOS&amp;quot; which is a trademark?&lt;br /&gt;
		Image=&amp;quot;Icon-nitrousoxide.png&amp;quot;, &lt;br /&gt;
		ID = 64,&lt;br /&gt;
		MolarMass = 46, &lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio,&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 37.2,&lt;br /&gt;
		LatentHeat = 4000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidNitrousOxide&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 800,&lt;br /&gt;
		CriticalPressure = 2000,&lt;br /&gt;
		A = 0.065353501531,&lt;br /&gt;
		B = 1.70297431874,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = -250,&lt;br /&gt;
		EnthalpyMultiplier = 2, --strong oxidizer&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.12&lt;br /&gt;
	}&lt;br /&gt;
local LiquidNitrousOxide = makeliquidfromgas(NitrousOxide)&lt;br /&gt;
	LiquidNitrousOxide.Image = &amp;quot;Icon-LiquidNitrousoxide.png&amp;quot;&lt;br /&gt;
	LiquidNitrousOxide.MolarVolume = 0.026&lt;br /&gt;
	LiquidNitrousOxide.ID = 8192&lt;br /&gt;
AddGas(NitrousOxide)&lt;br /&gt;
AddGas(LiquidNitrousOxide)&lt;br /&gt;
&lt;br /&gt;
--earlier liquids and steam get slotted here, so their IDs are already represented.&lt;br /&gt;
&lt;br /&gt;
	local Hydrogen = {&lt;br /&gt;
		Name = &amp;quot;Hydrogen&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;H2&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-Hydrogen.png&amp;quot;, &lt;br /&gt;
		ID = 16384,&lt;br /&gt;
		MolarMass = 2, &lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio,&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 20.4, --used to be 2, recheck after rocketry overhaul&lt;br /&gt;
		LatentHeat = 200,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidHydrogen&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 3.18041e-5,&lt;br /&gt;
		B = 4.4843872973,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = 306000,&lt;br /&gt;
		AutoignitionTemperature = 573.15,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.18&lt;br /&gt;
	}&lt;br /&gt;
local LiquidHydrogen = makeliquidfromgas(Hydrogen)&lt;br /&gt;
	LiquidHydrogen.Image = &amp;quot;Icon-LiquidHydrogen.png&amp;quot;&lt;br /&gt;
	LiquidHydrogen.MolarVolume = 0.028&lt;br /&gt;
	LiquidHydrogen.ID = 32768&lt;br /&gt;
AddGas(Hydrogen)&lt;br /&gt;
AddGas(LiquidHydrogen)&lt;br /&gt;
&lt;br /&gt;
--Polluted water lacks a gas form. reeeee&lt;br /&gt;
	local PollutedWater = {&lt;br /&gt;
		Name = &amp;quot;PollutedWater&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;XH2O&amp;quot;, --can't think of a commonly adopted community symbol. ingame icon uses PW but also XH2O in Chemistry._gasSymbols.&lt;br /&gt;
		Image=&amp;quot;Icon-pollutedwater.png&amp;quot;, &lt;br /&gt;
		ID = 65536,&lt;br /&gt;
		MolarMass = 48,&lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio,&lt;br /&gt;
		State = &amp;quot;Liquid&amp;quot;, --NOT a gas.&lt;br /&gt;
		MolarVolume = 0.018,&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 72,&lt;br /&gt;
		LatentHeat = 8000,&lt;br /&gt;
		CondensesInto = nil,&lt;br /&gt;
		EvaporatesInto = &amp;quot;Steam&amp;quot;,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 4e-20,&lt;br /&gt;
		B = 8.27025711260823,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.00&lt;br /&gt;
	}&lt;br /&gt;
AddGas(PollutedWater)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	local Hydrazine = {&lt;br /&gt;
		Name = &amp;quot;Hydrazine&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;N2H4&amp;quot;, --Chemistry.GasSymbols uses &amp;quot;HZ&amp;quot;&lt;br /&gt;
		Image=&amp;quot;Icon-Hydrazine.png&amp;quot;, &lt;br /&gt;
		ID = 131072,&lt;br /&gt;
		MolarMass = 32, &lt;br /&gt;
		HeatCapacityRatio = p.PolyatomicHeatCapacityRatio, --NOT triatomic.&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 48.4,&lt;br /&gt;
		LatentHeat = 4000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidHydrazine&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 8E-22,&lt;br /&gt;
		B = 9.15642808045339,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = 204000,&lt;br /&gt;
		AutoignitionTemperature = (6000/8e-22)^(1/9.15642808045339), -- = evaporation temperature at critical pressure&lt;br /&gt;
		IsHypergol = true, --Only hypergol in the game as of now (along with liquid hydrazine)&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.08&lt;br /&gt;
	}&lt;br /&gt;
local LiquidHydrazine = makeliquidfromgas(Hydrazine)&lt;br /&gt;
	LiquidHydrazine.Image = &amp;quot;Icon-LiquidHydrazine.png&amp;quot;&lt;br /&gt;
	LiquidHydrazine.MolarVolume = 0.03&lt;br /&gt;
	LiquidHydrazine.ID = 262144&lt;br /&gt;
AddGas(Hydrazine)&lt;br /&gt;
AddGas(LiquidHydrazine)&lt;br /&gt;
&lt;br /&gt;
--Liquid Alcohol lacks a gas form. reeeee&lt;br /&gt;
	local LiquidAlcohol = {&lt;br /&gt;
		Name = &amp;quot;LiquidAlcohol&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;Alc&amp;quot;, --still listed as &amp;quot;Al&amp;quot; in Chemistry._gasSymbols.&lt;br /&gt;
		Image=&amp;quot;Icon-LiquidAlcohol.png&amp;quot;, &lt;br /&gt;
		ID = 524288,&lt;br /&gt;
		MolarMass = 46, --same as Ethanol&lt;br /&gt;
		HeatCapacityRatio = p.PolyatomicHeatCapacityRatio, --NOT triatomic.&lt;br /&gt;
		State = &amp;quot;Liquid&amp;quot;, --NOT a gas.&lt;br /&gt;
		MolarVolume = 0.058,&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 63,&lt;br /&gt;
		LatentHeat = 18000,&lt;br /&gt;
		CondensesInto = nil,&lt;br /&gt;
		EvaporatesInto = &amp;quot;Methane&amp;quot;,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 1000,&lt;br /&gt;
		A = 9e-20,&lt;br /&gt;
		B = 8.391884446078986,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = 418000,&lt;br /&gt;
		AutoignitionTemperature = 673.15, -- 100°C higher than other fuels&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.00&lt;br /&gt;
	}&lt;br /&gt;
AddGas(LiquidAlcohol)&lt;br /&gt;
&lt;br /&gt;
	local Helium = {&lt;br /&gt;
		Name = &amp;quot;Helium&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;He&amp;quot;, --listed as &amp;quot;HE&amp;quot; in Chemistry._gasSymbols.&lt;br /&gt;
		Image=&amp;quot;Icon-Helium.png&amp;quot;, &lt;br /&gt;
		ID = 1048576,&lt;br /&gt;
		MolarMass = 4, &lt;br /&gt;
		HeatCapacityRatio = p.MonoatomicHeatCapacityRatio, --the only monoatomic gas currently ingame.&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 20.8,&lt;br /&gt;
		LatentHeat = 0, --Chemistry.LATENT_HEAT_HELIUM&lt;br /&gt;
		CondensesInto = nil,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 0, --Chemistry.MINIMUM_LIQUID_PRESSURE_HELIUM&lt;br /&gt;
		CriticalPressure = 515, --Mole.MinimumLiquidPressureAtMaxTemperature. Same as molten salt for some reason.&lt;br /&gt;
		A = 0, -- These are actually defined. Were it not defined, these would return an ArgumentOutOfRangeException when queried ingame.&lt;br /&gt;
		B = 0, -- Enjoy the divisions by 0 while trying to calculate evaporation pressure, i guess.&lt;br /&gt;
		FreezingTemperature = 0, --Chemistry.FREEZING_POINT_HELIUM&lt;br /&gt;
		CriticalTemperature = 0, --Chemistry.CRITICAL_TEMPERATURE_HELIUM_K&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.18&lt;br /&gt;
	}&lt;br /&gt;
AddGas(Helium)&lt;br /&gt;
&lt;br /&gt;
local LiquidSodiumChloride = {&lt;br /&gt;
		Name = &amp;quot;LiquidSodiumChloride&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;NaCl&amp;quot;, --most liquids in Chemistry._gasSymbols are prepended with a &amp;quot;L&amp;quot;, but not this one.&lt;br /&gt;
		Image=&amp;quot;Icon-LiquidSodiumChloride.png&amp;quot;, &lt;br /&gt;
		ID = 2097152,&lt;br /&gt;
		MolarMass = 101,&lt;br /&gt;
		HeatCapacityRatio = p.PolyatomicHeatCapacityRatio, --NOT triatomic.&lt;br /&gt;
		State = &amp;quot;Liquid&amp;quot;, --NOT a gas.&lt;br /&gt;
		MolarVolume = 0.04,&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 130,&lt;br /&gt;
		LatentHeat = 1000,&lt;br /&gt;
		CondensesInto = nil,&lt;br /&gt;
		EvaporatesInto = &amp;quot;Pollutant&amp;quot;,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 515,&lt;br /&gt;
		A = 6.211737044295E-08,&lt;br /&gt;
		B = 2.8774143233482707,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.00&lt;br /&gt;
	}&lt;br /&gt;
AddGas(LiquidSodiumChloride)&lt;br /&gt;
&lt;br /&gt;
	local Silanol = {&lt;br /&gt;
		Name = &amp;quot;Silanol&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;Sil&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-Silanol.png&amp;quot;, &lt;br /&gt;
		ID = 4194304,&lt;br /&gt;
		MolarMass = 166, &lt;br /&gt;
		HeatCapacityRatio = p.PolyatomicHeatCapacityRatio, --not triatomic.&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 101,&lt;br /&gt;
		LatentHeat = 10000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidSilanol&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 516,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 0.22176555607618392,&lt;br /&gt;
		B = 1.5206578718752168,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.05&lt;br /&gt;
	}&lt;br /&gt;
local LiquidSilanol = makeliquidfromgas(Silanol)&lt;br /&gt;
	LiquidSilanol.Image = &amp;quot;Icon-LiquidSilanol.png&amp;quot;&lt;br /&gt;
	LiquidSilanol.MolarVolume = 0.16&lt;br /&gt;
	LiquidSilanol.ID = 8388608&lt;br /&gt;
AddGas(Silanol)&lt;br /&gt;
AddGas(LiquidSilanol)&lt;br /&gt;
&lt;br /&gt;
	local HydrochloricAcid = {&lt;br /&gt;
		Name = &amp;quot;HydrochloricAcid&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;HCl&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-HydrochloricAcid.png&amp;quot;, &lt;br /&gt;
		ID = 16777216,&lt;br /&gt;
		MolarMass = 36, &lt;br /&gt;
		HeatCapacityRatio = p.PolyatomicHeatCapacityRatio, --NOT triatomic.&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat = 37, --used to be 2, recheck after rocketry overhaul&lt;br /&gt;
		LatentHeat = 1000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidHydrochloricAcid&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 6.3,&lt;br /&gt;
		CriticalPressure = 1000,&lt;br /&gt;
		A = 1E-21,&lt;br /&gt;
		B = 9.108844460789863,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = nil,&lt;br /&gt;
		EnthalpyMultiplier = nil,&lt;br /&gt;
		&lt;br /&gt;
		ThermalEfficiency = 0.05&lt;br /&gt;
	}&lt;br /&gt;
local LiquidHydrochloricAcid = makeliquidfromgas(HydrochloricAcid)&lt;br /&gt;
	LiquidHydrochloricAcid.Image = &amp;quot;Icon-LiquidHydrochloricAcid.png&amp;quot;&lt;br /&gt;
	LiquidHydrochloricAcid.MolarVolume = 0.028&lt;br /&gt;
	LiquidHydrochloricAcid.ID = 33554432&lt;br /&gt;
AddGas(HydrochloricAcid)&lt;br /&gt;
AddGas(LiquidHydrochloricAcid)&lt;br /&gt;
&lt;br /&gt;
	local Ozone = {&lt;br /&gt;
		Name = &amp;quot;Ozone&amp;quot;,&lt;br /&gt;
		HumanReadableSymbol = &amp;quot;O3&amp;quot;,&lt;br /&gt;
		Image=&amp;quot;Icon-Ozone.png&amp;quot;, &lt;br /&gt;
		ID = 67108864,&lt;br /&gt;
		MolarMass = 24,&lt;br /&gt;
		HeatCapacityRatio = p.TriatomicHeatCapacityRatio,&lt;br /&gt;
		State = &amp;quot;Gas&amp;quot;,&lt;br /&gt;
		MolarVolume = nil, --will be defaulted to 0 on AddGas&lt;br /&gt;
		&lt;br /&gt;
		SpecificHeat =  38.6,&lt;br /&gt;
		LatentHeat = 1000,&lt;br /&gt;
		CondensesInto = &amp;quot;LiquidOzone&amp;quot;,&lt;br /&gt;
		EvaporatesInto = nil,&lt;br /&gt;
		TriplePressure = 250,&lt;br /&gt;
		CriticalPressure = 6000,&lt;br /&gt;
		A = 0.006219763823043718,&lt;br /&gt;
		B = 2.4097251251207226,&lt;br /&gt;
		FreezingTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
		CriticalTemperature = nil, --will be calculated later on AddGas&lt;br /&gt;
&lt;br /&gt;
		Enthalpy = nil,&lt;br /&gt;
		AutoignitionTemperature = nil,&lt;br /&gt;
		IsHypergol = nil,&lt;br /&gt;
		AutoignitionOffset = -150, --strong oxidizer.&lt;br /&gt;
		EnthalpyMultiplier = 2,&lt;br /&gt;
&lt;br /&gt;
		ThermalEfficiency = 0.12&lt;br /&gt;
	}&lt;br /&gt;
local LiquidOzone = makeliquidfromgas(Ozone)&lt;br /&gt;
	LiquidOzone.Image = &amp;quot;Icon-LiquidOzone.png&amp;quot;&lt;br /&gt;
	LiquidOzone.ID = 134217728&lt;br /&gt;
	LiquidOzone.MolarVolume = 0.026&lt;br /&gt;
AddGas(Ozone)&lt;br /&gt;
AddGas(LiquidOzone)&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Gases_and_Liquids/Menu&amp;diff=25832</id>
		<title>Gases and Liquids/Menu</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Gases_and_Liquids/Menu&amp;diff=25832"/>
				<updated>2026-03-02T13:28:01Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: Add new beta gases. not sure how to categorize oxygen and ozone here. Maybe split into inerts/fuels/oxidizers/hypergols?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;4&amp;quot;| &amp;lt;div style=&amp;quot;text-align:center;font-weight:bold;&amp;quot;&amp;gt;Gases and Liquids&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! ''' Elements '''&lt;br /&gt;
! ''' Compounds '''&lt;br /&gt;
! ''' Mixtures '''&lt;br /&gt;
! ''' Other '''&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-oxygen.png|32px|link=https://stationeers-wiki.com/Oxygen|Oxygen]]&lt;br /&gt;
[[File:Icon-nitrogen.png|32px|link=https://stationeers-wiki.com/Nitrogen|Nitrogen]]&lt;br /&gt;
[[File:Icon-pollutant.png|32px|link=https://stationeers-wiki.com/Pollutant|Pollutant]]&lt;br /&gt;
[[File:Icon-Hydrogen.png|32px|link=https://stationeers-wiki.com/Hydrogen|Hydrogen]]&lt;br /&gt;
[[File:Icon-Helium.png|32px|link=https://stationeers-wiki.com/Helium|Helium]]&lt;br /&gt;
[[File:Icon-Ozone.png|32px|link=https://stationeers-wiki.com/Ozone|Ozone]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-Methane.png|32px|link=https://stationeers-wiki.com/Methane|Methane]]&lt;br /&gt;
[[File:Icon-carbondioxide.png|32px|link=https://stationeers-wiki.com/Carbon_Dioxide|Carbon Dioxide]]&lt;br /&gt;
[[File:Icon-water.png|32px|link=https://stationeers-wiki.com/Water|Water]]&lt;br /&gt;
[[File:Icon-nitrousoxide.png|32px|link=https://stationeers-wiki.com/Nitrous_Oxide|Nitrous Oxide]]&lt;br /&gt;
[[File:Icon-pollutedwater.png|32px|link=https://stationeers-wiki.com/Polluted_Water|Polluted Water]]&lt;br /&gt;
[[File:Icon-LiquidAlcohol.png|32px|link=https://stationeers-wiki.com/Alcohol|Alcohol]]&lt;br /&gt;
[[File:Icon-Silanol.png|32px|link=https://stationeers-wiki.com/Silanol|Silanol]]&lt;br /&gt;
[[File:Icon-LiquidSodiumChloride.png|32px|link=https://stationeers-wiki.com/Sodium_Chloride|Sodium Chloride]]&lt;br /&gt;
[[File:Icon-HydrochloricAcid.png|32px|link=https://stationeers-wiki.com/Hydrochloric_Acid|Hydrochloric Acid]]&lt;br /&gt;
[[File:Icon-Hydrazine.png|32px|link=https://stationeers-wiki.com/Hydrazine|Hydrazine]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-fuel.png|32px]][[Special:MyLanguage/Fuel|Fuel (66.6% H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 33.3% O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Icon-nitro.png|32px]][[Special:MyLanguage/Fuel|Superfuel (50% H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 50% N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O)]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Icon-air.png|32px]][[Special:MyLanguage/Air|Air (75% N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 25% O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)]]&lt;br /&gt;
|&lt;br /&gt;
[[File:Icon-atmosphere.png|32px]] [[Special:MyLanguage/Atmosphere|Atmosphere]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Icon-coolant.png|32px]] [[Special:MyLanguage/Coolant|Coolant]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=Polluted_Water&amp;diff=25831</id>
		<title>Polluted Water</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=Polluted_Water&amp;diff=25831"/>
				<updated>2026-03-02T13:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: change icon to new beta icon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
{{Infobox gas&lt;br /&gt;
| gas_name = Polluted Water&lt;br /&gt;
| image = icon-pollutedwater.png&lt;br /&gt;
| heat = 72 J/mol*K &amp;lt;!-- Atmospherics.Mole::GetSpecificHeat --&amp;gt;&lt;br /&gt;
| latent_heat = 8000 J/mol &amp;lt;!-- Atmospherics.Mole::LatentHeatOfVaporization --&amp;gt;&lt;br /&gt;
| minimum_condensation = 6.3 kPa at 276.15 K &amp;lt;!-- Atmospherics.Mole::FreezingTemperature --&amp;gt;&lt;br /&gt;
| max_liquid = 6000 kPa at 629 K &amp;lt;!-- Atmospherics.Mole::MaxLiquidTemperature --&amp;gt;&lt;br /&gt;
| freezes = 276.15 K&lt;br /&gt;
| liquid_volume = 18 L/kmol&lt;br /&gt;
| molar_mass = 18 g/mol&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;q&amp;gt;Polluted water is a waste product from the use of [[Water]] in certain devices. It will freeze into [[Ice (Polluted Water)]] but boil into [[Water|Steam]]. &amp;lt;br&amp;gt;&lt;br /&gt;
A [[Water Purifier]] can be used to convert it back to [[Water]]&amp;lt;/q&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''- Stationpedia'''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Polluted Water is a byproduct of various machines such as when the player uses a [[shower]] as a means to raise a player's [[hygiene]]. Polluted water needs to be cleaned before it can be usable, either through a &lt;br /&gt;
[[Water Purifier|water purifier]] or by boiling the liquid into [[Water|Steam]].&lt;br /&gt;
&lt;br /&gt;
Polluted Water has a specific heat of 72 J/K making it a great alternative to [[water]] for [[Coolant|cooling]]. &lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
Polluted water can be obtained by using a [[shower]].&lt;br /&gt;
&lt;br /&gt;
You can obtain polluted water by smelting [[Ice (Polluted Water)]] using a [[Furnace]] or crushing [[Ice (Polluted Water)]] in an [[Ice Crusher]]. Filtering is no longer required as the [[Furnace]] and [[Ice Crusher]] now contain separate outputs for liquids and gases.&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !! Amount&lt;br /&gt;
|-&lt;br /&gt;
| [[Ice (Polluted Water)]] || 50 mol&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
Polluted water was added as part of the &amp;quot;Shelter in Space&amp;quot; update. It was added as a potential byproduct for raising the [[hygiene]] stat.&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-oxygen.png&amp;diff=25830</id>
		<title>File:Icon-oxygen.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-oxygen.png&amp;diff=25830"/>
				<updated>2026-03-02T13:12:23Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: RA2lover uploaded a new version of File:Icon-oxygen.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon-oxygen}}&lt;br /&gt;
|date=2023-05-09&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Keifhausin|Keifhausin]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-nitrogen.png&amp;diff=25829</id>
		<title>File:Icon-nitrogen.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-nitrogen.png&amp;diff=25829"/>
				<updated>2026-03-02T13:11:46Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: RA2lover uploaded a new version of File:Icon-nitrogen.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon-nitrogen}}&lt;br /&gt;
|date=2023-05-09&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Keifhausin|Keifhausin]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-carbondioxide.png&amp;diff=25828</id>
		<title>File:Icon-carbondioxide.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-carbondioxide.png&amp;diff=25828"/>
				<updated>2026-03-02T13:11:08Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: RA2lover uploaded a new version of File:Icon-carbondioxide.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=CO2 icon}}&lt;br /&gt;
|date=2023-04-26&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Keifhausin|Keifhausin]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-nitrousoxide.png&amp;diff=25827</id>
		<title>File:Icon-nitrousoxide.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-nitrousoxide.png&amp;diff=25827"/>
				<updated>2026-03-02T13:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: RA2lover uploaded a new version of File:Icon-nitrousoxide.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon-nitrousoxide}}&lt;br /&gt;
|date=2023-05-09&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Keifhausin|Keifhausin]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-pollutant.png&amp;diff=25826</id>
		<title>File:Icon-pollutant.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-pollutant.png&amp;diff=25826"/>
				<updated>2026-03-02T13:09:19Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: RA2lover uploaded a new version of File:Icon-pollutant.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon-pollutant}}&lt;br /&gt;
|date=2023-05-09&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Keifhausin|Keifhausin]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-water.png&amp;diff=25825</id>
		<title>File:Icon-water.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-water.png&amp;diff=25825"/>
				<updated>2026-03-02T13:05:11Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: RA2lover uploaded a new version of File:Icon-water.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon-water}}&lt;br /&gt;
|date=2023-05-09&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Keifhausin|Keifhausin]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-liquidcarbondioxide.png&amp;diff=25821</id>
		<title>File:Icon-liquidcarbondioxide.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-liquidcarbondioxide.png&amp;diff=25821"/>
				<updated>2026-03-02T13:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidNitrogen.png&amp;diff=25822</id>
		<title>File:Icon-LiquidNitrogen.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidNitrogen.png&amp;diff=25822"/>
				<updated>2026-03-02T13:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-liquidoxygen.png&amp;diff=25823</id>
		<title>File:Icon-liquidoxygen.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-liquidoxygen.png&amp;diff=25823"/>
				<updated>2026-03-02T13:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Ozone.png&amp;diff=25824</id>
		<title>File:Icon-Ozone.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Ozone.png&amp;diff=25824"/>
				<updated>2026-03-02T13:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Hydrogen.png&amp;diff=25815</id>
		<title>File:Icon-Hydrogen.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Hydrogen.png&amp;diff=25815"/>
				<updated>2026-03-02T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidNitrousoxide.png&amp;diff=25816</id>
		<title>File:Icon-LiquidNitrousoxide.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidNitrousoxide.png&amp;diff=25816"/>
				<updated>2026-03-02T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-liquidpollutant.png&amp;diff=25817</id>
		<title>File:Icon-liquidpollutant.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-liquidpollutant.png&amp;diff=25817"/>
				<updated>2026-03-02T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidWater.png&amp;diff=25818</id>
		<title>File:Icon-LiquidWater.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidWater.png&amp;diff=25818"/>
				<updated>2026-03-02T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidMethane.png&amp;diff=25819</id>
		<title>File:Icon-LiquidMethane.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidMethane.png&amp;diff=25819"/>
				<updated>2026-03-02T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Methane.png&amp;diff=25820</id>
		<title>File:Icon-Methane.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Methane.png&amp;diff=25820"/>
				<updated>2026-03-02T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Helium.png&amp;diff=25809</id>
		<title>File:Icon-Helium.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Helium.png&amp;diff=25809"/>
				<updated>2026-03-02T13:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidAlcohol.png&amp;diff=25810</id>
		<title>File:Icon-LiquidAlcohol.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidAlcohol.png&amp;diff=25810"/>
				<updated>2026-03-02T13:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidHydrazine.png&amp;diff=25811</id>
		<title>File:Icon-LiquidHydrazine.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidHydrazine.png&amp;diff=25811"/>
				<updated>2026-03-02T13:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Hydrazine.png&amp;diff=25812</id>
		<title>File:Icon-Hydrazine.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Hydrazine.png&amp;diff=25812"/>
				<updated>2026-03-02T13:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-pollutedwater.png&amp;diff=25813</id>
		<title>File:Icon-pollutedwater.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-pollutedwater.png&amp;diff=25813"/>
				<updated>2026-03-02T13:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidHydrogen.png&amp;diff=25814</id>
		<title>File:Icon-LiquidHydrogen.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidHydrogen.png&amp;diff=25814"/>
				<updated>2026-03-02T13:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidHydrochloricAcid.png&amp;diff=25806</id>
		<title>File:Icon-LiquidHydrochloricAcid.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-LiquidHydrochloricAcid.png&amp;diff=25806"/>
				<updated>2026-03-02T13:00:38Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	<entry>
		<id>https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Silanol.png&amp;diff=25807</id>
		<title>File:Icon-Silanol.png</title>
		<link rel="alternate" type="text/html" href="https://legacy.stationeers-wiki.com/index.php?title=File:Icon-Silanol.png&amp;diff=25807"/>
				<updated>2026-03-02T13:00:38Z</updated>
		
		<summary type="html">&lt;p&gt;RA2lover: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Icon extracted from Stationeers game files. Copyright is held by RocketWerkz Ltd. but its use in the wiki should be covered under NZ Copyright Law's fair dealing exemptions regarding research purposes.}}&lt;br /&gt;
|date=2026-03-02&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:RA2lover|RA2lover]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{licensing|generic}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Gas]]&lt;br /&gt;
[[Category:Liquid]]&lt;/div&gt;</summary>
		<author><name>RA2lover</name></author>	</entry>

	</feed>