<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://stationeers-wiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TK421</id>
	<title>Stationeers Community Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://stationeers-wiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TK421"/>
	<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/Special:Contributions/TK421"/>
	<updated>2026-04-04T08:53:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Furnace&amp;diff=25850</id>
		<title>Furnace</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Furnace&amp;diff=25850"/>
		<updated>2026-03-06T04:00:36Z</updated>

		<summary type="html">&lt;p&gt;TK421: restore previous mention of being able to simply using a furnace to melt ice&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;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
[[Category:Machines]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Furnace)&lt;br /&gt;
 | image       = [[File:ItemKitFurnace.png]]&lt;br /&gt;
 | recipe_machine1 = Autolathe&lt;br /&gt;
 | recipe_cost1    = 30g [[Special:MyLanguage/Iron|Iron]], 10g [[Special:MyLanguage/Copper|Copper]]&lt;br /&gt;
 | recipe_machine2 = Fabricator&lt;br /&gt;
 | recipe_cost2    = 30g [[Special:MyLanguage/Iron|Iron]], 10g [[Special:MyLanguage/Copper|Copper]]&lt;br /&gt;
 | volume      = 1000 L&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the basic furnace. For the advanced version, see [[Advanced Furnace]].&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Furnace&lt;br /&gt;
 | image            = [[File:Furnace.jpg]]&lt;br /&gt;
 | prefab_hash      = 1947944864&lt;br /&gt;
 | prefab_name      = StructureFurnace&lt;br /&gt;
 | placed_with_item = [[Kit (Furnace)]]&lt;br /&gt;
 | placed_on_grid   = Small Grid&lt;br /&gt;
 | const_with_tool1 = [[Wrench]]&lt;br /&gt;
 | const_with_item1 = 2x [[Iron Sheets]]&lt;br /&gt;
 | decon_with_tool1 = [[Crowbar]]&lt;br /&gt;
 | item_rec1        = [[Kit (Furnace)]]&lt;br /&gt;
 | const_with_tool2 = [[Welding Torch]]&lt;br /&gt;
 | const_with_item2 = 2x [[Iron Sheets]]&lt;br /&gt;
 | decon_with_tool2 = [[Special:MyLanguage/Crowbar|Crowbar]]&lt;br /&gt;
 | item_rec2        = 2x [[Iron Sheets]]&lt;br /&gt;
 | decon_with_tool3 = [[Angle Grinder]]&lt;br /&gt;
 | item_rec3        = 2x [[Iron Sheets|Iron Sheets]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description == &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Furnace&amp;lt;/b&amp;gt; is used to smelt [[Ore|ore]] into ingots and alloys using an oxygen/volatile gas mix. [[Special:MyLanguage/Ice (Oxite)|Ice (Oxite)]] and [[Special:MyLanguage/Ice (Volatiles)|Ice (Volatiles)]] can be manually input directly in the furnace in order to create crude gas mixtures, or to be directly extracted as an easy trick for melting ice.&lt;br /&gt;
&lt;br /&gt;
It features a gas pipe input port (connected to its internal storage through an internal always-open [[One_Way_Valve_(Gas)|one-way valve]]), a gas pipe output port (which lacks a one-way valve and acts as a bidirectional gas port), and a liquid output port (which acts as an always-open [[Condensation_Valve|condensation valve]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
If the contents of the furnace are ejected without reaching the required temperature and pressure for smelting, they&#039;ll come out as [[Special:MyLanguage/Reagent Mix|Reagent Mix]] which can be processed in a [[Special:MyLanguage/Centrifuge|Centrifuge]] to recover the raw ores. [[Special:MyLanguage/Reagent Mix|Reagent Mix]] can also be re-smelted if the ingredients and ratios are a valid alloy recipe. This allows an intermission when the resources for reaching the required temperature / pressure are not on hand / need to be gathered first. Effectively, this means that the used metals can be &#039;reserved&#039; for the intended alloy.&lt;br /&gt;
&lt;br /&gt;
The Furnace can be used to smelt basic ores and simpler alloys, but an [[Advanced Furnace]] will be required for the more complex alloys.&lt;br /&gt;
&lt;br /&gt;
An [[Arc Furnace]] (included in the starting gear) is required to make the metals for manufacturing a Furnace.  By comparison, the Furnace can do everything the Arc Furnace can do, but without using electricity, and far more efficiently. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Danger&#039;&#039;&#039;: The furnace is &#039;&#039;&#039;not insulated&#039;&#039;&#039;, so it interacts with the surrounding atmosphere and can heat rooms to dangerous levels within minutes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
All the alloys the furnace can smelt are easily achieved with ice, and they can also be smelted using gases fed into the furnace through the pipe inputs. Regardless of which method is used the furnace gases must be purged thru a working piping setup (a valve and passive vent at bare minimum to vent the internal gasses). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt; Gaseous fuel can be premixed and fed into the furnace. This can be done either by feeding Volatile ices and Oxite ices in an Ice Crusher in the correct ratio to produce [[Fuel#Basic_Ice_Crusher_Setup|fuel]]. The optimal gas mix that burns completely is 1 part (33.3%) oxygen to 2 parts (66.6%) volatiles, other mixes could also work but leave either leftover oxygen or volatiles depending on the percentages used. &amp;lt;br&amp;gt; Alternately you could separate the gases into tanks using atmospheric units and pipe individual gases through a mixer and a [[Special:MyLanguage/Pressure Regulator|Pressure Regulator]] or a [[Special:MyLanguage/Pipe Volume Pump|Pipe Volume Pump]] connected to the furnace input. The Furnace&#039;s output can also be extracted and vented/recycled through a backpressure regulator to maintain furnace pressure. Adding additional gases to the furnace can result in lower temperature if that is desired, but you could also use a volume pump with a lower fuel input setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Make sure to put the fuel in first, then press the activate button. Afterwards put in the ingredients and press the handle after you see the &amp;quot;will produce&amp;quot; while hovering over the furnace.&#039;&#039;&#039;  Also, You MUST put in exact amounts matching the recipe amounts. For instance, you must put in 12 iron and 4 coal to make 16 steel. You cannot put in 12 iron and 7 coal. The furnace will not manufacture anything if the ingredient ratios are not correct and you will have to eject it all or add resources to balance the recipe.&lt;br /&gt;
&lt;br /&gt;
== Required conditions for smelting  == &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
The following table shows the pressure and temperature conditions required to smelt various ores and alloys. &lt;br /&gt;
{{:Furnace/Recipes}} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Alloy recipes=== &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
====Ice only recipes====&lt;br /&gt;
&lt;br /&gt;
The ices should be loaded into the furnace and ignited, and then the ores should be loaded immediately after. No wait time is necessary. &#039;&#039;&#039;Make sure to put the fuel in first, then press the activate button. Afterwards put in the ingredients and wait for the button to turn green again, or until you see the &amp;quot;will produce&amp;quot; while hovering over the furnace.&#039;&#039;&#039; Then pull the handle and your alloy will be ejected. &lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Ice Chunks&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Ingredients&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Temperature&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Pressure&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Alloy&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemVolatiles.png|link=Ice_(Volatiles)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Volatiles)|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemOxite.png|link=Ice_(Oxite)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Oxite)|Oxite]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;75&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCoalOre.png|link=Ore (Coal)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;25&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Coal)|Coal]]&#039;&#039;&#039;&lt;br /&gt;
|1.05 kK&lt;br /&gt;
|6.2 MPa&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSteelIngot.png|link=Ingot (Steel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Steel)|Steel]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemVolatiles.png|link=Ice_(Volatiles)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;12&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Volatiles)|Volatiles]]&#039;&#039;&#039;&amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemOxite.png|link=Ice_(Oxite)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;6&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Oxite)|Oxite]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCopperOre.png|link=Ore (Copper)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Copper)|Copper Ore]]&#039;&#039;&#039;  &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNickelOre.png|link=Ore (Nickel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Nickel)|Nickel Ore]]&#039;&#039;&#039; &lt;br /&gt;
|1.81 kK&lt;br /&gt;
|21 MPa&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemConstantanIngot.png|link=Ingot (Constantan)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Constantan)|Constantan]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemVolatiles.png|link=Ice_(Volatiles)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;8&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Volatiles)|Volatiles]]&#039;&#039;&#039;&amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemOxite.png|link=Ice_(Oxite)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;24&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Oxite)|Oxite]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNickelOre.png|link=Ore (Nickel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Nickel)|Nickel Ore]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039;&lt;br /&gt;
|1.5 kK&lt;br /&gt;
|19 MPa&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemInvarIngot.png|link=Ingot (Invar)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Invar)|Invar]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemVolatiles.png|link=Ice_(Volatiles)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Volatiles)|Volatiles]]&#039;&#039;&#039;&amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNitrice.png|link=Ice_(Nitrice)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;30&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Nitrice)|Nitrice]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNickelOre.png|link=Ore (Nickel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;150&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Nickel)|Nickel Ore]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;150&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039;&lt;br /&gt;
|1.32 kK&lt;br /&gt;
|18.6 MPa&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemInvarIngot.png|link=Ingot (Invar)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;300&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Invar)|Invar]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemVolatiles.png|link=Ice_(Volatiles)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Volatiles)|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemOxite.png|link=Ice_(Oxite)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Oxite)|Oxite]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSilverIngot.png|link=Ingot (Silver)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Silver)|Silver Ingot]] ***&#039;&#039;&#039;  &amp;lt;br&amp;gt;  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGoldIngot.png|link=Ingot (Gold)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Gold)|Gold Ingot]] ***&#039;&#039;&#039;&lt;br /&gt;
|997 K&lt;br /&gt;
|1.1 MPa&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemElectrumIngot.png|link=Ingot (Electrum)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Electrum)|Electrum]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemVolatiles.png|link=Ice_(Volatiles)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Volatiles)|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNitrice.png|link=Ice_(Nitrice)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;2&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Nitrice)|Nitrice]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIce.png|link=Ice_(Water)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;3&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ice_(Water)|Water Ice]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemLeadIngot.png|link=Ingot (Lead)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Lead)|Lead Ingot]] ***&#039;&#039;&#039; &amp;lt;br&amp;gt;  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039;&lt;br /&gt;
|528 K&lt;br /&gt;
|1.16 MPa&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSolderIngot.png|link=Ingot (Solder)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Solder)|Solder]]&#039;&#039;&#039;&lt;br /&gt;
|}  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;***&#039;&#039;&#039; Ingots are used instead of raw ores to prevent the production of extra gases when making these recipes&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Gaseous Fuel Recipes====&lt;br /&gt;
[[File:ICE_CRUSHER.png|thumb|&#039;&#039;&#039;A basic [[Fuel#Basic_Ice_Crusher_Setup|ice crushing]], gas collection and measuring setup&#039;&#039;&#039;]]&lt;br /&gt;
In this setup fuel is pumped into the furnace from either pre-measured canisters or pumped into the furnace in measured amounts. Fuel is a 2:1 Volatile to O2 mixture, a close approximtion of this ratio can be obtained from the raw gases produced when 2 Volatile and  1 Oxite ices are put into an Ice crusher, or by melting the gases in an enclosed area and pumping the gases into a canister with an active vent. Raw gasses made from ices will have a ratio of 3.6% Nitrogen, 32.7% Oxygen, and 63.7% Volatiles, and the Volatile to Oxygen ratio will be 1.95:1 instead of 2:1, but it will burn adequately well. &amp;lt;br&amp;gt;  The gas should be pumped into the furnace and ignited; the ores should be placed in the furnace as soon as the gases are ignited. It is not necessary to wait for the furnace to come up to temperature.  &#039;&#039;&#039;Make sure to put the fuel in first, then press the activate button. Afterwards put in the ingredients and wait for the button to turn green again, until you see the &amp;quot;will produce&amp;quot; while hovering over the furnace.&#039;&#039;&#039; Then pull the handle and your alloy will be ejected. &lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Canister Pressure @ 0°C&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Gases&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Ingredients&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Temperature&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Pressure&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;1&amp;quot; |Alloy&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;&amp;amp;nbsp;&amp;amp;ensp; &amp;amp;emsp;1,400 KPa&#039;&#039;&#039; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterFuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Fuel|Fuel]]&#039;&#039;&#039;  &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;24 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Volatiles|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;12.3 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Oxygen|Oxygen]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;75&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCoalOre.png|link=Ore (Coal)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;25&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Coal)|Coal]]&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;910 K&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;4.63 MPa&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSteelIngot.png|link=Ingot (Steel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Steel)|Steel]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;&amp;amp;nbsp;&amp;amp;emsp; &amp;amp;emsp; 160 KPa&#039;&#039;&#039; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterFuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Fuel|Fuel]]&#039;&#039;&#039;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;2.8 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Volatiles|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;1.43 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Oxygen|Oxygen]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSilverOre.png|link=Ore_(Silver)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ore_(Silver)|Silver Ore]]&#039;&#039;&#039;  &amp;lt;br&amp;gt;  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGoldOre.png|link=Ore_(Gold)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ore_(Gold)|Gold Ore]]&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;610 K&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;1.39 MPa&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemElectrumIngot.png|link=Ingot (Electrum)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Electrum)|Electrum]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;&amp;amp;ensp;  &amp;amp;emsp; &amp;amp;emsp;  30 KPa&#039;&#039;&#039; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterFuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Fuel|Fuel]]&#039;&#039;&#039;  &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;0.516 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Volatiles|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;0.264Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Oxygen|Oxygen]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemLeadOre.png|link=Ore_(Lead)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ore_(Lead)|Lead Ore]]&#039;&#039;&#039; &amp;lt;br&amp;gt;  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;417 K&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;1.09 MPa&#039;&#039;&#039;&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSolderIngot.png|link=Ingot (Solder)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Solder)|Solder]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;(2x) 7,500 KPa&#039;&#039;&#039; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterFuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Fuel|Fuel]]&#039;&#039;&#039;  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;256 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Volatiles|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;131 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Oxygen|Oxygen]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCopperOre.png|link=Ore (Copper)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Copper)|Copper Ore]]&#039;&#039;&#039;  &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNickelOre.png|link=Ore (Nickel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Nickel)|Nickel Ore]]&#039;&#039;&#039; &lt;br /&gt;
|&#039;&#039;&#039;1.9 kK&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;21.2 MPa&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemConstantanIngot.png|link=Ingot (Constantan)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Constantan)|Constantan]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;(2x)  6,000 KPa&#039;&#039;&#039; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterFuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Fuel|Fuel]]&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&#039;&#039;&#039;(2x) 9,500 KPa&#039;&#039;&#039;&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterCarbonDioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Carbon_Dioxide|Pressurant]]&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;205 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Volatiles|Volatiles]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;105 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Oxygen|Oxygen]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGasCanisterCarbonDioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;538 Mols&#039;&#039;&#039; &#039;&#039;&#039;[[Carbon_Dioxide|Pressurant]] ^^^&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNickelOre.png|link=Ore (Nickel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ore (Nickel)|Nickel Ore]]&#039;&#039;&#039; &amp;lt;br&amp;gt; &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;50&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;[[Ore (Iron)|Iron Ore]]&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;1.38 kK&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;19 MPa&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemInvarIngot.png|link=Ingot (Invar)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;100&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;[[Ingot (Invar)|Invar]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;^^^&#039;&#039;&#039;These recipes use CO2 @ 0°C as a pressurant. Other pressurants such as Nitrogen, Pollutants, and Oxygen are possible, but they may result in different outcomes.&lt;br /&gt;
&lt;br /&gt;
=== Tips === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
*Placing 15 ice(volatiles) and 15 ice(oxite) will bring pressure to around 22000kpa and temp 2000k. For Invar, you will have to wait for the temperature to drop before you can process. You can use this time while the pressure is still over 20000kpa to make constantan. &amp;lt;br /&amp;gt;&lt;br /&gt;
*All other alloys can be achieved with a ratio of 2 volatiles to 1 oxite&lt;br /&gt;
*If atmosphere inside and/or around furnace is too cold to melt ice one can press &#039;activate&#039; button to manually melt one ice per ignition attempt. You will need to press the ignition button for each piece of ice from the first stack that you put in. Until all solid matter was melted the import slot will remain blocked.&lt;br /&gt;
*[[Special:MyLanguage/Reagent Mix|Reagent Mix]] can be re-melted to continue balancing the recipe should you need to gather more resources or find yourself unable to balance the temperature/pressure manually.&lt;br /&gt;
*On [[Vulcan]] the daytime temperatures allow smelting of many basic alloys right from the start by using an active vent, even high enough for [[Steel]]. This will save the very valuable, and limited oxygen of the player, especially on brutal start conditions.&lt;br /&gt;
*Placing 50 silver ore into an ignited furnace will produce 50 Mol of N2O inside the furnace, which can be further burned in the presence of volatiles resulting in a higher temperature after smelting. This will push the furnace temperature beyond what may be otherwise obtainable (early game daytime Vulcan, for example).&lt;br /&gt;
&lt;br /&gt;
===Additional fuel mixes=== &amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot; |Prime&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot; |FAR&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;1&amp;quot; |In: Mols&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; rowspan=&amp;quot;1&amp;quot; |Result&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; rowspan=&amp;quot;1&amp;quot; |Out: Mols&lt;br /&gt;
|-&lt;br /&gt;
!H2&lt;br /&gt;
!O2&lt;br /&gt;
!Press.&lt;br /&gt;
!Celcius&lt;br /&gt;
!Kelvin&lt;br /&gt;
!O2&lt;br /&gt;
!H2&lt;br /&gt;
!Co2&lt;br /&gt;
!X&lt;br /&gt;
|-&lt;br /&gt;
|100 kPa&lt;br /&gt;
|2:1&lt;br /&gt;
|29&lt;br /&gt;
|14&lt;br /&gt;
|2 135&lt;br /&gt;
|1 953&lt;br /&gt;
|2 216&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|82&lt;br /&gt;
|33&lt;br /&gt;
|-&lt;br /&gt;
|200 kPa&lt;br /&gt;
|2:1&lt;br /&gt;
|59&lt;br /&gt;
|29&lt;br /&gt;
|4 500&lt;br /&gt;
|2 000&lt;br /&gt;
|2 273&lt;br /&gt;
|1&lt;br /&gt;
|5&lt;br /&gt;
|169&lt;br /&gt;
|80&lt;br /&gt;
|-&lt;br /&gt;
|200 kPa&lt;br /&gt;
|3:1&lt;br /&gt;
|65&lt;br /&gt;
|21&lt;br /&gt;
|3 400&lt;br /&gt;
|1 900&lt;br /&gt;
|2 173&lt;br /&gt;
|2&lt;br /&gt;
|26&lt;br /&gt;
|118&lt;br /&gt;
|52&lt;br /&gt;
|-&lt;br /&gt;
|200 kPa&lt;br /&gt;
|4:1&lt;br /&gt;
|72&lt;br /&gt;
|18&lt;br /&gt;
|3 000&lt;br /&gt;
|1 800&lt;br /&gt;
|2 273&lt;br /&gt;
|1&lt;br /&gt;
|40&lt;br /&gt;
|99&lt;br /&gt;
|42&lt;br /&gt;
|-&lt;br /&gt;
|200 kPa&lt;br /&gt;
|1:1&lt;br /&gt;
|43&lt;br /&gt;
|43&lt;br /&gt;
|3 493&lt;br /&gt;
|1 917&lt;br /&gt;
|2 190&lt;br /&gt;
|22&lt;br /&gt;
|2&lt;br /&gt;
|127&lt;br /&gt;
|59&lt;br /&gt;
|-&lt;br /&gt;
|200 kPa&lt;br /&gt;
|1:4&lt;br /&gt;
|17&lt;br /&gt;
|68&lt;br /&gt;
|1 646&lt;br /&gt;
|1 319&lt;br /&gt;
|1 592&lt;br /&gt;
|63&lt;br /&gt;
|2&lt;br /&gt;
|50&lt;br /&gt;
|18&lt;br /&gt;
|-&lt;br /&gt;
|300 kPa&lt;br /&gt;
|2:1&lt;br /&gt;
|86&lt;br /&gt;
|42&lt;br /&gt;
|6 850&lt;br /&gt;
|2 109&lt;br /&gt;
|2 382&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|242&lt;br /&gt;
|115&lt;br /&gt;
|-&lt;br /&gt;
|902.7 kPa&lt;br /&gt;
|2:1&lt;br /&gt;
|263&lt;br /&gt;
|108&lt;br /&gt;
|19.25 MPa&lt;br /&gt;
|2 054&lt;br /&gt;
|2 357&lt;br /&gt;
|70&lt;br /&gt;
|7&lt;br /&gt;
|767&lt;br /&gt;
|151&lt;br /&gt;
|-&lt;br /&gt;
|1 MPa&lt;br /&gt;
|2:1&lt;br /&gt;
|291&lt;br /&gt;
|120&lt;br /&gt;
|21.62 MPa&lt;br /&gt;
|2 061&lt;br /&gt;
|2 334&lt;br /&gt;
|74&lt;br /&gt;
|7&lt;br /&gt;
|862&lt;br /&gt;
|170&lt;br /&gt;
|-&lt;br /&gt;
|1.497 MPa&lt;br /&gt;
|2:1&lt;br /&gt;
|408&lt;br /&gt;
|204&lt;br /&gt;
|35.34 MPa&lt;br /&gt;
|2 121&lt;br /&gt;
|2 394&lt;br /&gt;
|10&lt;br /&gt;
|20&lt;br /&gt;
|1163&lt;br /&gt;
|581&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ore Off-Gassing=== &amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Ores being smelted release gases, unless they have been previously sent through a furnace or centrifuge. However both the centrifuge and arc furnace require additional time and energy to remove gases from ores, and the gases will be lost. These gases will  increase pressure and lower temperature inside the furnace, but can also be beneficial to the smelting process. For example Solder, requires very little fuel to smelt due to the N20 released from the Lead Ore during smelting. Removing the N20 from the lead ore prior to smelting will result in the need for additional fuel to make up for it&#039;s loss. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CAUTION: As Vol is far more reactive with N2O and burns at a rate of 1:1, rather than 2:1 with O2, be cautious to not add additional volatiles after smelting silver or lead ores. Doing so could lead to rapid spikes in pressure and, not managed properly, could lead to a furnace exploding.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot; |Ore&lt;br /&gt;
! colspan=&amp;quot;6&amp;quot; rowspan=&amp;quot;1&amp;quot; |Out: Mols&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| Vol&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| X&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| CO2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| O2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| N2O&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemOrganicMaterial.png|link=Biomass]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Biomass|Biomass]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 8.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 4.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCoalOre.png|link=Ore (Coal)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Coal)|Coal]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 3.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 10.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSiliconOre.png|link=Ore (Silicon)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Silicon)|Silicon]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemIronOre.png|link=Ore (Iron)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Iron)|Iron]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 2.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.5&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemGoldOre.png|link=Ore (Gold)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Gold)|Gold]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 2.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.5&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.2&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCopperOre.png|link=Ore (Copper)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Copper)|Copper]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.5&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemSilverOre.png|link=Ore (Silver)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Silver)|Silver]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.4&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemLeadOre.png|link=Ore (Lead)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Lead)|Lead]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 2.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.4&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.4&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemNickelOre.png|link=Ore (Nickel)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Nickel)|Nickel]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.5&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCobaltOre.png|link=Ore (Cobalt)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore (Cobalt)|Cobalt]]&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 1.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 3.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;| 0.0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
{{Data Network Header}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
{{Data Parameters}}&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Activate || Boolean || Activates the Furnace, when set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| ClearMemory || Boolean || When set to 1,clears the counter memory(e.g.ExportCount). Will set itself back to 0 when actioned.&lt;br /&gt;
|-&lt;br /&gt;
| Lock || Boolean || Locks the Furnace, when set to 1. Unlocks it when set to 0.&lt;br /&gt;
|-&lt;br /&gt;
| Mode|| Integer || Returns whether the Furnace is smelting. (0 for no, 1 for yes).&lt;br /&gt;
|-&lt;br /&gt;
| Open || Boolean || Opens the Furnace, when set to 1. Closes it, when set to 0.&lt;br /&gt;
|-&lt;br /&gt;
| Setting || Float || (Unknown) Affects the Setting output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
{{Data Outputs}}&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Output Name !! Data Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Activate || Boolean || Returns if the furnace is active.&lt;br /&gt;
|-&lt;br /&gt;
| Combustion|| Boolean || Returns 1 if the furnace atmosphere is on fire.&lt;br /&gt;
|-&lt;br /&gt;
| ExportCount || Integer || How many items exported since last ClearMemory.&lt;br /&gt;
|-&lt;br /&gt;
| ImportCount || Integer || How many items imported since last ClearMemory.&lt;br /&gt;
|-&lt;br /&gt;
| Lock || Boolean || Returns whether the Furnace is locked.&lt;br /&gt;
|-&lt;br /&gt;
| Maximum || Integer || (Unknown) Returns 100.&lt;br /&gt;
|-&lt;br /&gt;
| Mode || Integer || Returns whether the Furnace is smelting. (0 for no, 1 for yes).&lt;br /&gt;
|-&lt;br /&gt;
| Open || Boolean || Returns whether the Furnace is open. (0 for no, 1 for yes).&lt;br /&gt;
|-&lt;br /&gt;
| PrefabHash || Integer || The hash of the structure.&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || Float || Returns the pressure in the Furnace in kilo pascal.&lt;br /&gt;
|-&lt;br /&gt;
| Ratio || Float || (Unknown) Returns 0.5.&lt;br /&gt;
|-&lt;br /&gt;
| RatioCarbonDioxide || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of carbon dioxide in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrogen || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of nitrogen in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| RatioNitrousOxide || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of nitrous oxide in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| RatioOxygen || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of oxygen in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| RatioPollutant || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of pollutant in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| RatioVolatiles || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of volatiles in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| RatioWater || Float || Returns a range from 0.0 to 1.0. Returns the percentage ratio of the amount of water in the Furnace.&lt;br /&gt;
|-&lt;br /&gt;
| Reagents || Float || Returns the amount of reagents (smeltable ores, not counting ice) in the Furnace, in grams.&lt;br /&gt;
|-&lt;br /&gt;
| RecipeHash || int || Current hash of the recipe the device is set to produce.&lt;br /&gt;
|-&lt;br /&gt;
| Setting || Float || (Unknown) Affected by the Setting parameter.&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || Float || Returns the temperature in the Furnace in kelvin.&lt;br /&gt;
|-&lt;br /&gt;
| TotalMoles || Float || Returns the total moles of the furnace.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=User_talk:Eearslya&amp;diff=25791</id>
		<title>User talk:Eearslya</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=User_talk:Eearslya&amp;diff=25791"/>
		<updated>2026-02-26T07:03:00Z</updated>

		<summary type="html">&lt;p&gt;TK421: /* skipcaptcha rights request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi. Is it possible to get permissions to translate pages? I want to translate into german. I use this wiki to find informations for the game and make it easyer for german players.&lt;br /&gt;
&lt;br /&gt;
THX&lt;br /&gt;
Adi2412&lt;br /&gt;
&lt;br /&gt;
== Hiring for german translation ==&lt;br /&gt;
&lt;br /&gt;
Hallo there! I&#039;d love to bring the german translation a bit foreword. :-)&amp;lt;br&amp;gt;&lt;br /&gt;
May you grant me permissons?&lt;br /&gt;
&lt;br /&gt;
--[[User:Rot-Fuxs|Rot-Fuxs]] ([[User talk:Rot-Fuxs|talk]]) 09:43, 24 March 2019 (CDT)&lt;br /&gt;
&lt;br /&gt;
== skipcaptcha rights request ==&lt;br /&gt;
I&#039;ve been getting into captcha hell territory where completing captchas takes longer than minor page edits.&lt;br /&gt;
&amp;lt;br&amp;gt;Not sure if this is better handled with an extended-autoconfirmed role or similar granting that right so you don&#039;t have to be nagged every time someone requests this but i guess i&#039;m the first one to have requested it so far.&lt;br /&gt;
&amp;lt;br&amp;gt;--[[User:RA2lover|RA2lover]] ([[User talk:RA2lover|talk]]) 02:07, 25 February 2026 (CST)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve had the same issue with the captcha&#039;s, but it&#039;s been effective at stopping the spam for sure. I&#039;d suggest some users (RA2lover for example) who frequently make edits shouldn&#039;t have to complete captchas at all. [[User:TK421|TK421]] ([[User talk:TK421|talk]]) 01:03, 26 February 2026 (CST)&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Stirling_Engine&amp;diff=25775</id>
		<title>Stirling Engine</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Stirling_Engine&amp;diff=25775"/>
		<updated>2026-02-24T08:35:06Z</updated>

		<summary type="html">&lt;p&gt;TK421: correct spelling of celsius. Mention can only use it on Vulcan at night, remove loulan.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Power]]&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Stirling Engine) [[File:Kit (Stirling Engine).jpg|thumb|Creates a Stirling Engine]]&lt;br /&gt;
 | createdwith = [[Electronics Printer]]&lt;br /&gt;
 | cost        = 5 [[Gold]], 20 [[Copper]], 30 [[Steel]]&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
 | prefabname  = ItemKitStirlingEngine&lt;br /&gt;
 | prefabhash  = -1821571150&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Stirling Engine [[File:Stirling Engine Front.jpg|thumb|Front]] [[File:Stirling Engine Back.jpg|thumb|Back]]&lt;br /&gt;
 | prefab_hash      = -260316435&lt;br /&gt;
 | prefab_name      = StructureStirlingEngine&lt;br /&gt;
 | power_usage      = 1W&lt;br /&gt;
 | placed_with_item = [[Kit (Stirling Engine)]]&lt;br /&gt;
 | placed_on_grid   = Small Grid&lt;br /&gt;
 | requires_frames  = Yes&lt;br /&gt;
 | build states     = Three&lt;br /&gt;
 | decon_with_tool1 = [[Hand Drill]]&lt;br /&gt;
 | item_rec1        = 2x [[Electronic Parts]]&lt;br /&gt;
 | decon_with_tool2 = [[Wrench]]&lt;br /&gt;
 | item_rec2        = 2x [[Steel Sheets]]&lt;br /&gt;
 | decon_with_tool3 = [[Hand Drill]]&lt;br /&gt;
 | item_rec3        = [[Kit (Stirling Engine)]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Overall Stirling Engine Cost/Requirements [[File:Stirling Engine Front.jpg|thumb|Front]]&lt;br /&gt;
 | createdwith = [[Electronics Printer]], [[Autolathe]]&lt;br /&gt;
 | cost        =  6 [[Iron]], 9 [[Gold]], 26 [[Copper]], 31 [[Steel]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
Harnessing an ancient thermal exploit, the Recurso &#039;Libra&#039; Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.&lt;br /&gt;
&lt;br /&gt;
When high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room&#039;s ambient atmosphere, which must be kept at a lower temperature in order to create a differential. Add a working gas by inserting a gas canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.&lt;br /&gt;
&lt;br /&gt;
Gases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have... sub-optimal results.&lt;br /&gt;
&lt;br /&gt;
== Efficiency ==&lt;br /&gt;
The Stirling Engine has an efficiency curve that is dependent on three factors:&lt;br /&gt;
* Environment&lt;br /&gt;
* Working Gas&lt;br /&gt;
* Input to Output efficiency&lt;br /&gt;
The best a Stirling Engine can provide in power is 15% efficiency of the input heat, whereas a [[Kit (Gas Fuel Generator)|Gas Fuel Generator]] has a much higher efficiency ratio per Mol of fuel.&lt;br /&gt;
&lt;br /&gt;
== Environment ==&lt;br /&gt;
The Stirling engine itself is best placed in a 13-25 Celsius environment to provide the highest efficiency. The only planets where it cannot effectively be used outside are: Venus, Moon and Mimas. On Vulcan it can only be used outside during the night.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Stirling_temp.png|Temperature dependency&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In World ===&lt;br /&gt;
* Moon (Vacuum): 0%&lt;br /&gt;
* [[Venus]]: 12% efficiency @ 463 Celsius&lt;br /&gt;
* Vulcan (Night): 91% efficiency @ 126 Celsius&lt;br /&gt;
* Mars: 100%&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== In Room ===&lt;br /&gt;
The Stirling engine can be kept in a room to cool it down at maximum efficiency, since the exposed working gas canister heats the room up, it requires an effective cooling system.&lt;br /&gt;
&lt;br /&gt;
== Working Gas ==&lt;br /&gt;
The working gas is a canister of gas that must be provided to the machine before it can be used. The gas itself is not lost, only used as a heat transfer gas.&lt;br /&gt;
When filling it, 60 mols of gas in the canister is needed, which is usually around 2.4MPa when it is pressurized at room temperature.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;If the canister&#039;s pressure ever reaches 11 MPa, the machine will have a chance of instantly exploding.&#039;&#039;&#039;&#039;&#039; This sets a limit on maximum safe operation temperature based on how many mols are present in the canister. At 60 mols, that&#039;s 1411 K.&lt;br /&gt;
&amp;lt;!--Objects.Electrical.StirlingEngine::HandlePressureCheck() - chance of explosion is a roll on every tick, exploding if a random number between 1 and the pressure delta exceeds the maximum rated pressure. unchecked if it&#039;s 11MPa, could be slightly lower. --&amp;gt;&lt;br /&gt;
Here are the efficiencies of several gasses:&lt;br /&gt;
* Steam: 5%&lt;br /&gt;
* Pollutants: 5%&lt;br /&gt;
* Carbon Dioxide: 8%&lt;br /&gt;
* Oxygen: 12%&lt;br /&gt;
* Nitrogen: 12%&lt;br /&gt;
* Nitrous Oxide: 12%&lt;br /&gt;
* Volatiles: 15% (Best)&lt;br /&gt;
&amp;lt;!-- Hydrogen: 18% (not available ingame through normal means) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== User Comments== &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
The Stirling Generator has a maximum pressure differential of 11000 KPa (11 MPa): If the difference in pressure between the internal working gas and external atmosphere exceeds this, it will explode in a radius of more than 3x3, destroying everything in its path and killing players. There needs to be one canister that is used to transfer the heat, it explodes easily if overpressure is reached, unlike normal canisters it doesn&#039;t take time to explode as it is instant. Due to its explosive nature, steps of caution i.e. pressure regulators are advised to be placed before the generator input. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The power output scales on how fast it can transfer heat from the input gas to the outside atmosphere, which depends on the pressure and heat transfer rate of the working gas, and the temperature difference between the input gas and the outside temperature. The cooled down input gas is transferred to the output pipe - you can connect the output to the input in order to extract heat energy from a pipe network.&amp;lt;br&amp;gt;&lt;br /&gt;
To increase the pressure differential efficiency, you can increase the temperature delta between the input gas and the outside atmosphere, or increase the working gas pressure.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Details&amp;lt;br&amp;gt;&lt;br /&gt;
Max power: 8000W&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maximum internal-external pressure differential: 11000kPa&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Environment operating efficiency: Around 300K for 100%&amp;lt;br&amp;gt;&lt;br /&gt;
Minimum power for maximum internal pressure differential efficiency: 4600.452W ((0.15×20.4×2500×5)÷8.3144)&amp;lt;br&amp;gt;&lt;br /&gt;
Maximum working gas efficiency: 15% (0.15) with volatiles&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technical details&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ideal pressure differential: 2500&amp;lt;br&amp;gt;&lt;br /&gt;
Internal volume: 54L&amp;lt;br&amp;gt;&lt;br /&gt;
Piston volume: 5L&amp;lt;br&amp;gt;&lt;br /&gt;
Heat exchanger volume: 10L&amp;lt;br&amp;gt;&lt;br /&gt;
Hot side area: 2&amp;lt;br&amp;gt;&lt;br /&gt;
Cold side area: 3.5&amp;lt;br&amp;gt;&lt;br /&gt;
Convection factor: 0.15&amp;lt;br&amp;gt;&lt;br /&gt;
Radiation factor: 0.15&amp;lt;br&amp;gt;&lt;br /&gt;
Surface area: 8.499227&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vulcan==&lt;br /&gt;
&lt;br /&gt;
The Stirling Engine is a reasonable way to generate night time power on Vulcan when solar power is unavailable. Place it outside so it&#039;s in night time (400K) atmosphere, and capture mid-day (900 to 950K) atmosphere into a tank and run the Stirling Generator from that hot air at night, the generator can produce around 1.8 kW from the temperature difference.  For the working gas, a good starting point is 70 moles of H2 in the canister.  You can boost the power output to about 2.1kW by using an active vent to blow cold night air into the large grid that the Stirling Engine is in to cool it down.&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;
{{Data Parameters/row|On|Boolean|The current state of the Stirling Engine.|multiple=2|0|Off|1|On}}&lt;br /&gt;
{{Data Parameters/row|Setting|Integer|?.}}&lt;br /&gt;
{{Data Parameters/row|Power|Boolean|w=0|Can be read to return if the Stirling Engine is correctly powered or not, set via the power system, return 1 if powered and 0 if not|multiple=2|0|Unpowered|1|Powered}}&lt;br /&gt;
{{Data Parameters/row|Error|Boolean|w=0|1 if device is in error state, otherwise 0|multiple=2|0|&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;|1|Error}}&lt;br /&gt;
{{Data Parameters/row|Pressure|Float|w=0|In kPa}}&lt;br /&gt;
{{Data Parameters/row|Temperature|Float|w=0|In Kelvin}}&lt;br /&gt;
{{Data Parameters/row|RatioOxygen|Float|w=0|Ratio of gaseous [[Oxygen]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioCarbonDioxide|Float|w=0|Ratio of gaseous [[Carbon Dioxide]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioNitrogen|Float|w=0|Ratio of gaseous [[Nitrogen]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioPollutant|Float|w=0|Ratio of gaseous [[Pollutant]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioVolatiles|Float|w=0|Ratio of gaseous [[Volatiles]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioWater|Float|w=0|Ratio of liquid [[Water]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|Maximum|Integer|w=0|?}}&lt;br /&gt;
{{Data Parameters/row|Ratio|Float|w=0|?}}&lt;br /&gt;
{{Data Parameters/row|Quantity|Integer|w=0|?}}&lt;br /&gt;
{{Data Parameters/row|RequiredPower|Integer|w=0|Idle operating power quantity, does not necessarily include extra demand power}}&lt;br /&gt;
{{Data Parameters/row|PowerGeneration|Integer|w=0|Returns how much power is being generated}}&lt;br /&gt;
{{Data Parameters/row|TotalMoles|Float|w=0|}}&lt;br /&gt;
{{Data Parameters/row|Volume|Integer|w=0|In L}}&lt;br /&gt;
{{Data Parameters/row|RatioNitrousOxide|Float|w=0|Ratio of gaseous [[Nitrous Oxide]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|Combustion|Boolean|w=0|1 if the atmosphere is on fire, 0 otherwise}}&lt;br /&gt;
{{Data Parameters/row|EnvironmentEfficiency|Float|w=0|Environment Efficiency reported by the machine, as a float between 0 and 1}}&lt;br /&gt;
{{Data Parameters/row|WorkingGasEfficiency |Float|w=0|Working Gas Efficiency reported by the machine, as a float between 0 and 1}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidNitrogen|Float|w=0|Ratio of liquid [[Nitrogen]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidOxygen|Float|w=0|Ratio of liquid [[Oxygen]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidVolatiles|Float|w=0|Ratio of liquid [[Volatiles]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioSteam|Float|w=0|Ratio of gaseous [[Water]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidCarbonDioxide|Float|w=0|Ratio of liquid [[Carbon Dioxide]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidPollutant|Float|w=0|Ratio of liquid [[Pollutant]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidNitrousOxide|Float|w=0|Ratio of liquid [[Nitrous Oxide]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|RatioHydrogen|Float|w=0|Ratio of gaseous Hydrogen in the atmosphere (Hydrogen is deprecated and has been replaced by [[Volatiles]])}}&lt;br /&gt;
{{Data Parameters/row|RatioLiquidHydrogen|Float|w=0|Ratio of liquid Hydrogen in the atmosphere (Hydrogen is deprecated and has been replaced by [[Volatiles]])}}&lt;br /&gt;
{{Data Parameters/row|RatioPollutedWater|Float|w=0|Ratio of liquid [[Polluted Water]] in the atmosphere}}&lt;br /&gt;
{{Data Parameters/row|PrefabHash|Integer|w=0|The hash of the structure}}&lt;br /&gt;
{{Data Parameters/row|ReferenceId|Integer|w=0|Unique Reference Identifier for this object}}&lt;br /&gt;
{{Data Parameters/row|NameHash|Integer|w=0|Provides the hash value for the name of the object as a 32 bit integer.}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25767</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25767"/>
		<updated>2026-02-22T07:48:32Z</updated>

		<summary type="html">&lt;p&gt;TK421: Using syntax highlighting module instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIterator r0 &lt;br /&gt;
 main: &lt;br /&gt;
move rIterator 0 &lt;br /&gt;
 Loop: &lt;br /&gt;
 ... &lt;br /&gt;
add rIterator rIterator 1 &lt;br /&gt;
blt rIterator 4 Loop &lt;br /&gt;
&lt;br /&gt;
j main &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy because adding lines might break them if you don&#039;t adjust the relative jump. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIndex r0&lt;br /&gt;
alias rTemp r1&lt;br /&gt;
alias rValue r2&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
move rIndex 1&lt;br /&gt;
mul rTemp rIndex 2&lt;br /&gt;
add rTemp rTemp 1&lt;br /&gt;
jr rTemp&lt;br /&gt;
move rValue 123 #Index 0&lt;br /&gt;
j Select_end&lt;br /&gt;
move rValue 456 #Index 1&lt;br /&gt;
j Select_end&lt;br /&gt;
move rValue 789 #Index 2&lt;br /&gt;
j Select_end&lt;br /&gt;
...&lt;br /&gt;
Select_end:&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Comparison ==&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIndex r0&lt;br /&gt;
alias rValue r1&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
move rIndex 1&amp;lt;/span&amp;gt;&lt;br /&gt;
move rValue  123 #Index 0&lt;br /&gt;
sub rIndex rIndex 1&lt;br /&gt;
select rValue rIndex rValue 456 #Index 1&lt;br /&gt;
sub rIndex rIndex 1&lt;br /&gt;
select rValue rIndex rValue 789 #Index 2&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
In most programming languages, you can do the same thing in different ways. A third way would be to use the stack.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
main:&lt;br /&gt;
alias dCurrent d0&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
alias dCurrent d1&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIterator r0&lt;br /&gt;
alias rTemp r1&lt;br /&gt;
main:&lt;br /&gt;
move rIterator 0&lt;br /&gt;
Loop:&lt;br /&gt;
jal _UpdateReference&lt;br /&gt;
jal _FunctionForDevice&lt;br /&gt;
add rIterator rIterator 1&lt;br /&gt;
bgt rIterator 3 Loop_End&lt;br /&gt;
j Loop&lt;br /&gt;
Loop_End:&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
_UpdateReference:&lt;br /&gt;
mul rTemp rIterator 2&lt;br /&gt;
add rTemp rTemp 1&lt;br /&gt;
jr rTemp&lt;br /&gt;
alias dCurrentDevice d0 #Index 0&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d1 #Index 1&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d2 #Index 2&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d3 #Index 3&lt;br /&gt;
j Select_end&lt;br /&gt;
Select_end:&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_FunctionForDevice:&lt;br /&gt;
#Manipulate dCurrentDevice&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
WaitForDevices:&lt;br /&gt;
yield&lt;br /&gt;
ls rBusy dSorter 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 2 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
&lt;br /&gt;
== Detecting devices on a network ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to use code to detect the devices connected to the data network, instead of using pins on the housing, or via usage of the batch commands (such as &amp;lt;code&amp;gt;lbn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sbn&amp;lt;/code&amp;gt;). The current way to detect attached devices is via a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, passing in a network id: &amp;lt;code&amp;gt;get r0 db:0 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What the above snippet does is to run the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, addressed to the network connection (network &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;db:0&amp;lt;/code&amp;gt;) attached to the housing of the chip (&amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command normally accesses the stack of the device being addressed (such as the chip itself, or a sorter), but if the address being passed to the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command is a network reference (with the colon and number indicating which connection), then the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;command will return the &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; of the device at the given index (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; in the example above - if there is no such a device at the index, then &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; is returned). The order is not determined by anything specific (even though it seems to remain the same until the network itself is changed, so write your code accordingly). &lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; being returned (in the example above it is saved in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt;), this can be used in a later command to obtain information about the device - such as their &amp;lt;code&amp;gt;PrefabHash&amp;lt;/code&amp;gt; to detect the device type (and/or any other LogicProperty it has available). &lt;br /&gt;
&lt;br /&gt;
One scenario where this is useful is in dynamically detecting newly attached structures without a priori having their device name(s), or even a count of how many, and being able to control them individually (rather than as a batch like one would for solar tracking) - centrifuges is one such type of device where this is helpful, since their cycle times are not synced up, you cannot use a batch command to control them (without losing efficiency). Below is reproduced some code from [https://old.reddit.com/r/Stationeers/comments/1r7k148/ic10_control_centrifuges_via_data_connection/ various] [https://old.reddit.com/r/Stationeers/comments/1r6uer7/ic10_is_there_a_way_to_dynamically_adress_all/ reddit] [https://old.reddit.com/r/Stationeers/comments/1q30e9z/coal_power_plant_math_check/nxy1g7n/ posts] that discuss this scenario:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias refid r14&lt;br /&gt;
alias index r15&lt;br /&gt;
alias devicecount r13&lt;br /&gt;
alias ticks r12&lt;br /&gt;
define centrifuge HASH(&amp;quot;StructureCentrifuge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
discoveryinit:&lt;br /&gt;
yield&lt;br /&gt;
move sp 0&lt;br /&gt;
lb r0 centrifuge PrefabHash Sum&lt;br /&gt;
div devicecount r0 centrifuge&lt;br /&gt;
move index 0&lt;br /&gt;
&lt;br /&gt;
discovery:&lt;br /&gt;
get refid db:0 index&lt;br /&gt;
l r0 refid PrefabHash&lt;br /&gt;
bne r0 centrifuge wrongid&lt;br /&gt;
push refid&lt;br /&gt;
s refid On 1&lt;br /&gt;
&lt;br /&gt;
wrongid:&lt;br /&gt;
beq devicecount sp maininit&lt;br /&gt;
add index index 1&lt;br /&gt;
j discovery&lt;br /&gt;
&lt;br /&gt;
maininit:&lt;br /&gt;
move ticks 0&lt;br /&gt;
beqz sp discoveryinit&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
bge ticks 120 discoveryinit&lt;br /&gt;
add ticks ticks 1&lt;br /&gt;
move sp devicecount&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
beqz sp main&lt;br /&gt;
pop refid&lt;br /&gt;
bdns refid discoveryinit&lt;br /&gt;
l r0 refid Error&lt;br /&gt;
beqz r0 loop                  &lt;br /&gt;
l r0 refid Reagents&lt;br /&gt;
sge r0 r0 5&lt;br /&gt;
s refid Open r0&lt;br /&gt;
j loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25766</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25766"/>
		<updated>2026-02-22T07:45:35Z</updated>

		<summary type="html">&lt;p&gt;TK421: Using syntax highlighting module instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy because adding lines might break them if you don&#039;t adjust the relative jump. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIndex r0&lt;br /&gt;
alias rTemp r1&lt;br /&gt;
alias rValue r2&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
move rIndex 1&lt;br /&gt;
mul rTemp rIndex 2&lt;br /&gt;
add rTemp rTemp 1&lt;br /&gt;
jr rTemp&lt;br /&gt;
move rValue 123 #Index 0&lt;br /&gt;
j Select_end&lt;br /&gt;
move rValue 456 #Index 1&lt;br /&gt;
j Select_end&lt;br /&gt;
move rValue 789 #Index 2&lt;br /&gt;
j Select_end&lt;br /&gt;
...&lt;br /&gt;
Select_end:&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Comparison ==&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIndex r0&lt;br /&gt;
alias rValue r1&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
move rIndex 1&amp;lt;/span&amp;gt;&lt;br /&gt;
move rValue  123 #Index 0&lt;br /&gt;
sub rIndex rIndex 1&lt;br /&gt;
select rValue rIndex rValue 456 #Index 1&lt;br /&gt;
sub rIndex rIndex 1&lt;br /&gt;
select rValue rIndex rValue 789 #Index 2&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
In most programming languages, you can do the same thing in different ways. A third way would be to use the stack.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
main:&lt;br /&gt;
alias dCurrent d0&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
alias dCurrent d1&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIterator r0&lt;br /&gt;
alias rTemp r1&lt;br /&gt;
main:&lt;br /&gt;
move rIterator 0&lt;br /&gt;
Loop:&lt;br /&gt;
jal _UpdateReference&lt;br /&gt;
jal _FunctionForDevice&lt;br /&gt;
add rIterator rIterator 1&lt;br /&gt;
bgt rIterator 3 Loop_End&lt;br /&gt;
j Loop&lt;br /&gt;
Loop_End:&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
_UpdateReference:&lt;br /&gt;
mul rTemp rIterator 2&lt;br /&gt;
add rTemp rTemp 1&lt;br /&gt;
jr rTemp&lt;br /&gt;
alias dCurrentDevice d0 #Index 0&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d1 #Index 1&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d2 #Index 2&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d3 #Index 3&lt;br /&gt;
j Select_end&lt;br /&gt;
Select_end:&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_FunctionForDevice:&lt;br /&gt;
#Manipulate dCurrentDevice&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
WaitForDevices:&lt;br /&gt;
yield&lt;br /&gt;
ls rBusy dSorter 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 2 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
&lt;br /&gt;
== Detecting devices on a network ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to use code to detect the devices connected to the data network, instead of using pins on the housing, or via usage of the batch commands (such as &amp;lt;code&amp;gt;lbn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sbn&amp;lt;/code&amp;gt;). The current way to detect attached devices is via a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, passing in a network id: &amp;lt;code&amp;gt;get r0 db:0 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What the above snippet does is to run the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, addressed to the network connection (network &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;db:0&amp;lt;/code&amp;gt;) attached to the housing of the chip (&amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command normally accesses the stack of the device being addressed (such as the chip itself, or a sorter), but if the address being passed to the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command is a network reference (with the colon and number indicating which connection), then the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;command will return the &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; of the device at the given index (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; in the example above - if there is no such a device at the index, then &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; is returned). The order is not determined by anything specific (even though it seems to remain the same until the network itself is changed, so write your code accordingly). &lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; being returned (in the example above it is saved in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt;), this can be used in a later command to obtain information about the device - such as their &amp;lt;code&amp;gt;PrefabHash&amp;lt;/code&amp;gt; to detect the device type (and/or any other LogicProperty it has available). &lt;br /&gt;
&lt;br /&gt;
One scenario where this is useful is in dynamically detecting newly attached structures without a priori having their device name(s), or even a count of how many, and being able to control them individually (rather than as a batch like one would for solar tracking) - centrifuges is one such type of device where this is helpful, since their cycle times are not synced up, you cannot use a batch command to control them (without losing efficiency). Below is reproduced some code from [https://old.reddit.com/r/Stationeers/comments/1r7k148/ic10_control_centrifuges_via_data_connection/ various] [https://old.reddit.com/r/Stationeers/comments/1r6uer7/ic10_is_there_a_way_to_dynamically_adress_all/ reddit] [https://old.reddit.com/r/Stationeers/comments/1q30e9z/coal_power_plant_math_check/nxy1g7n/ posts] that discuss this scenario:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias refid r14&lt;br /&gt;
alias index r15&lt;br /&gt;
alias devicecount r13&lt;br /&gt;
alias ticks r12&lt;br /&gt;
define centrifuge HASH(&amp;quot;StructureCentrifuge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
discoveryinit:&lt;br /&gt;
yield&lt;br /&gt;
move sp 0&lt;br /&gt;
lb r0 centrifuge PrefabHash Sum&lt;br /&gt;
div devicecount r0 centrifuge&lt;br /&gt;
move index 0&lt;br /&gt;
&lt;br /&gt;
discovery:&lt;br /&gt;
get refid db:0 index&lt;br /&gt;
l r0 refid PrefabHash&lt;br /&gt;
bne r0 centrifuge wrongid&lt;br /&gt;
push refid&lt;br /&gt;
s refid On 1&lt;br /&gt;
&lt;br /&gt;
wrongid:&lt;br /&gt;
beq devicecount sp maininit&lt;br /&gt;
add index index 1&lt;br /&gt;
j discovery&lt;br /&gt;
&lt;br /&gt;
maininit:&lt;br /&gt;
move ticks 0&lt;br /&gt;
beqz sp discoveryinit&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
bge ticks 120 discoveryinit&lt;br /&gt;
add ticks ticks 1&lt;br /&gt;
move sp devicecount&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
beqz sp main&lt;br /&gt;
pop refid&lt;br /&gt;
bdns refid discoveryinit&lt;br /&gt;
l r0 refid Error&lt;br /&gt;
beqz r0 loop                  &lt;br /&gt;
l r0 refid Reagents&lt;br /&gt;
sge r0 r0 5&lt;br /&gt;
s refid Open r0&lt;br /&gt;
j loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=User_talk:RA2lover&amp;diff=25764</id>
		<title>User talk:RA2lover</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=User_talk:RA2lover&amp;diff=25764"/>
		<updated>2026-02-22T07:42:56Z</updated>

		<summary type="html">&lt;p&gt;TK421: Thanks for adding IC10 parameters to highlighting module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nice work on the IC10 Parameters in the highlighting module. I was planning on having a look in the game files to see if I could find them all, but you beat me to it! [[User:TK421|TK421]] ([[User talk:TK421|talk]]) 01:42, 22 February 2026 (CST)&lt;br /&gt;
&lt;br /&gt;
Hey, thanks for taking the time to write to me. I appreciate this info very much. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;Is the PFGE max thrust figure obtained from running both inputs with premixed 60.7MPa fuel at 196 K?&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yes, that is exactly what I did with Volatile/O2 mix. I didn&#039;t try testing it with N2O mix since it seemed convoluted, so I didn&#039;t update that value. Though at this point I have a better understanding of how to get it to work, so I might just test that for the sake of getting it on record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;You can add up to 0.05 mol/L of frozen gases or liquids to a pipe network before it starts taking damage and i wonder if adding ~0.134% of frozen liquid nitrous oxide is enough to get another 100-200N of thrust.&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oh, that&#039;s very neat. I didn&#039;t know about this limit. So it would be a fuel mix with a tiny superfuel boost. Not practical, but kinda cool. I&#039;ll probably try it out before building an N2O PFGE.&lt;br /&gt;
&lt;br /&gt;
And thanks for the coefficients. I saw someone posted them on Reddit, but this list is more comprehensive. I noticed that the 6.3 kPA min and 6000 kPA max defines the minimum and maximum liquid temperatures for some substances, but not others like CO2, N2O, and pollutants. Are those limits defined by the wiki values, or is there something more going on?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;quot;Also, note frozen liquids linearly interpolate their evaporation pressures from their freezing point values at their freezing temperature down to 6.3 kPa at half their freezing temperature, see [1]. I&#039;m not sure if there&#039;s an application where this is useful(open-cycle pollutant evaporation chamber for liquid oxygen?), but it&#039;s there&amp;quot;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huh, so the phase change diagrams showing a vertical line aren&#039;t exactly accurate, then? Technically it should be a slope? Weird.&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25760</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25760"/>
		<updated>2026-02-22T03:18:37Z</updated>

		<summary type="html">&lt;p&gt;TK421: Using syntax highlighting module instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy because adding lines might break them if you don&#039;t adjust the relative jump. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;789&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Indexing With Comparison ==&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIndex r0&lt;br /&gt;
alias rValue r1&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
move rIndex 1&amp;lt;/span&amp;gt;&lt;br /&gt;
move rValue  123 #Index 0&lt;br /&gt;
sub rIndex rIndex 1&lt;br /&gt;
select rValue rIndex rValue 456 #Index 1&lt;br /&gt;
sub rIndex rIndex 1&lt;br /&gt;
select rValue rIndex rValue 789 #Index 2&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
In most programming languages, you can do the same thing in different ways. A third way would be to use the stack.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
main:&lt;br /&gt;
alias dCurrent d0&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
alias dCurrent d1&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIterator r0&lt;br /&gt;
alias rTemp r1&lt;br /&gt;
main:&lt;br /&gt;
move rIterator 0&lt;br /&gt;
Loop:&lt;br /&gt;
jal _UpdateReference&lt;br /&gt;
jal _FunctionForDevice&lt;br /&gt;
add rIterator rIterator 1&lt;br /&gt;
bgt rIterator 3 Loop_End&lt;br /&gt;
j Loop&lt;br /&gt;
Loop_End:&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
_UpdateReference:&lt;br /&gt;
mul rTemp rIterator 2&lt;br /&gt;
add rTemp rTemp 1&lt;br /&gt;
jr rTemp&lt;br /&gt;
alias dCurrentDevice d0 #Index 0&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d1 #Index 1&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d2 #Index 2&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d3 #Index 3&lt;br /&gt;
j Select_end&lt;br /&gt;
Select_end:&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_FunctionForDevice:&lt;br /&gt;
#Manipulate dCurrentDevice&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
WaitForDevices:&lt;br /&gt;
yield&lt;br /&gt;
ls rBusy dSorter 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 2 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
&lt;br /&gt;
== Detecting devices on a network ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to use code to detect the devices connected to the data network, instead of using pins on the housing, or via usage of the batch commands (such as &amp;lt;code&amp;gt;lbn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sbn&amp;lt;/code&amp;gt;). The current way to detect attached devices is via a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, passing in a network id: &amp;lt;code&amp;gt;get r0 db:0 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What the above snippet does is to run the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, addressed to the network connection (network &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;db:0&amp;lt;/code&amp;gt;) attached to the housing of the chip (&amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command normally accesses the stack of the device being addressed (such as the chip itself, or a sorter), but if the address being passed to the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command is a network reference (with the colon and number indicating which connection), then the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;command will return the &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; of the device at the given index (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; in the example above - if there is no such a device at the index, then &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; is returned). The order is not determined by anything specific (even though it seems to remain the same until the network itself is changed, so write your code accordingly). &lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; being returned (in the example above it is saved in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt;), this can be used in a later command to obtain information about the device - such as their &amp;lt;code&amp;gt;PrefabHash&amp;lt;/code&amp;gt; to detect the device type (and/or any other LogicProperty it has available). &lt;br /&gt;
&lt;br /&gt;
One scenario where this is useful is in dynamically detecting newly attached structures without a priori having their device name(s), or even a count of how many, and being able to control them individually (rather than as a batch like one would for solar tracking) - centrifuges is one such type of device where this is helpful, since their cycle times are not synced up, you cannot use a batch command to control them (without losing efficiency). Below is reproduced some code from [https://old.reddit.com/r/Stationeers/comments/1r7k148/ic10_control_centrifuges_via_data_connection/ various] [https://old.reddit.com/r/Stationeers/comments/1r6uer7/ic10_is_there_a_way_to_dynamically_adress_all/ reddit] [https://old.reddit.com/r/Stationeers/comments/1q30e9z/coal_power_plant_math_check/nxy1g7n/ posts] that discuss this scenario:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias refid r14&lt;br /&gt;
alias index r15&lt;br /&gt;
alias devicecount r13&lt;br /&gt;
alias ticks r12&lt;br /&gt;
define centrifuge HASH(&amp;quot;StructureCentrifuge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
discoveryinit:&lt;br /&gt;
yield&lt;br /&gt;
move sp 0&lt;br /&gt;
lb r0 centrifuge PrefabHash Sum&lt;br /&gt;
div devicecount r0 centrifuge&lt;br /&gt;
move index 0&lt;br /&gt;
&lt;br /&gt;
discovery:&lt;br /&gt;
get refid db:0 index&lt;br /&gt;
l r0 refid PrefabHash&lt;br /&gt;
bne r0 centrifuge wrongid&lt;br /&gt;
push refid&lt;br /&gt;
s refid On 1&lt;br /&gt;
&lt;br /&gt;
wrongid:&lt;br /&gt;
beq devicecount sp maininit&lt;br /&gt;
add index index 1&lt;br /&gt;
j discovery&lt;br /&gt;
&lt;br /&gt;
maininit:&lt;br /&gt;
move ticks 0&lt;br /&gt;
beqz sp discoveryinit&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
bge ticks 120 discoveryinit&lt;br /&gt;
add ticks ticks 1&lt;br /&gt;
move sp devicecount&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
beqz sp main&lt;br /&gt;
pop refid&lt;br /&gt;
bdns refid discoveryinit&lt;br /&gt;
l r0 refid Error&lt;br /&gt;
beqz r0 loop                  &lt;br /&gt;
l r0 refid Reagents&lt;br /&gt;
sge r0 r0 5&lt;br /&gt;
s refid Open r0&lt;br /&gt;
j loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25759</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25759"/>
		<updated>2026-02-21T09:41:41Z</updated>

		<summary type="html">&lt;p&gt;TK421: Using syntax highlighting module instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy because adding lines might break them if you don&#039;t adjust the relative jump. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;789&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Indexing With Comparison ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;sub&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;select&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 456&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;sub&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;select&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 789&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In most programming languages, you can do the same thing in different ways. A third way would be to use the stack.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
main:&lt;br /&gt;
alias dCurrent d0&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
alias dCurrent d1&lt;br /&gt;
jal _MyFunction&lt;br /&gt;
j main&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias rIterator r0&lt;br /&gt;
alias rTemp r1&lt;br /&gt;
main:&lt;br /&gt;
move rIterator 0&lt;br /&gt;
Loop:&lt;br /&gt;
jal _UpdateReference&lt;br /&gt;
jal _FunctionForDevice&lt;br /&gt;
add rIterator rIterator 1&lt;br /&gt;
bgt rIterator 3 Loop_End&lt;br /&gt;
j Loop&lt;br /&gt;
Loop_End:&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
_UpdateReference:&lt;br /&gt;
mul rTemp rIterator 2&lt;br /&gt;
add rTemp rTemp 1&lt;br /&gt;
jr rTemp&lt;br /&gt;
alias dCurrentDevice d0 #Index 0&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d1 #Index 1&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d2 #Index 2&lt;br /&gt;
j Select_end&lt;br /&gt;
alias dCurrentDevice d3 #Index 3&lt;br /&gt;
j Select_end&lt;br /&gt;
Select_end:&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_FunctionForDevice:&lt;br /&gt;
#Manipulate dCurrentDevice&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
WaitForDevices:&lt;br /&gt;
yield&lt;br /&gt;
ls rBusy dSorter 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 2 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
&lt;br /&gt;
== Detecting devices on a network ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to use code to detect the devices connected to the data network, instead of using pins on the housing, or via usage of the batch commands (such as &amp;lt;code&amp;gt;lbn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sbn&amp;lt;/code&amp;gt;). The current way to detect attached devices is via a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, passing in a network id: &amp;lt;code&amp;gt;get r0 db:0 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What the above snippet does is to run the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, addressed to the network connection (network &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;db:0&amp;lt;/code&amp;gt;) attached to the housing of the chip (&amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command normally accesses the stack of the device being addressed (such as the chip itself, or a sorter), but if the address being passed to the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command is a network reference (with the colon and number indicating which connection), then the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;command will return the &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; of the device at the given index (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; in the example above - if there is no such a device at the index, then &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; is returned). The order is not determined by anything specific (even though it seems to remain the same until the network itself is changed, so write your code accordingly). &lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; being returned (in the example above it is saved in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt;), this can be used in a later command to obtain information about the device - such as their &amp;lt;code&amp;gt;PrefabHash&amp;lt;/code&amp;gt; to detect the device type (and/or any other LogicProperty it has available). &lt;br /&gt;
&lt;br /&gt;
One scenario where this is useful is in dynamically detecting newly attached structures without a priori having their device name(s), or even a count of how many, and being able to control them individually (rather than as a batch like one would for solar tracking) - centrifuges is one such type of device where this is helpful, since their cycle times are not synced up, you cannot use a batch command to control them (without losing efficiency). Below is reproduced some code from [https://old.reddit.com/r/Stationeers/comments/1r7k148/ic10_control_centrifuges_via_data_connection/ various] [https://old.reddit.com/r/Stationeers/comments/1r6uer7/ic10_is_there_a_way_to_dynamically_adress_all/ reddit] [https://old.reddit.com/r/Stationeers/comments/1q30e9z/coal_power_plant_math_check/nxy1g7n/ posts] that discuss this scenario:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias refid r14&lt;br /&gt;
alias index r15&lt;br /&gt;
alias devicecount r13&lt;br /&gt;
alias ticks r12&lt;br /&gt;
define centrifuge HASH(&amp;quot;StructureCentrifuge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
discoveryinit:&lt;br /&gt;
yield&lt;br /&gt;
move sp 0&lt;br /&gt;
lb r0 centrifuge PrefabHash Sum&lt;br /&gt;
div devicecount r0 centrifuge&lt;br /&gt;
move index 0&lt;br /&gt;
&lt;br /&gt;
discovery:&lt;br /&gt;
get refid db:0 index&lt;br /&gt;
l r0 refid PrefabHash&lt;br /&gt;
bne r0 centrifuge wrongid&lt;br /&gt;
push refid&lt;br /&gt;
s refid On 1&lt;br /&gt;
&lt;br /&gt;
wrongid:&lt;br /&gt;
beq devicecount sp maininit&lt;br /&gt;
add index index 1&lt;br /&gt;
j discovery&lt;br /&gt;
&lt;br /&gt;
maininit:&lt;br /&gt;
move ticks 0&lt;br /&gt;
beqz sp discoveryinit&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
bge ticks 120 discoveryinit&lt;br /&gt;
add ticks ticks 1&lt;br /&gt;
move sp devicecount&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
beqz sp main&lt;br /&gt;
pop refid&lt;br /&gt;
bdns refid discoveryinit&lt;br /&gt;
l r0 refid Error&lt;br /&gt;
beqz r0 loop                  &lt;br /&gt;
l r0 refid Reagents&lt;br /&gt;
sge r0 r0 5&lt;br /&gt;
s refid Open r0&lt;br /&gt;
j loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25758</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25758"/>
		<updated>2026-02-21T08:42:40Z</updated>

		<summary type="html">&lt;p&gt;TK421: Highlighting for batch modes&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 = {&lt;br /&gt;
    &amp;quot;On&amp;quot;,&amp;quot;Activate&amp;quot;,&amp;quot;Lock&amp;quot;,&amp;quot;Mode&amp;quot;,&amp;quot;ClearMemory&amp;quot;,&amp;quot;Open&amp;quot;,&amp;quot;Setting&amp;quot;,&lt;br /&gt;
    &amp;quot;Combustion&amp;quot;,&amp;quot;ExportCount&amp;quot;,&amp;quot;ImportCount&amp;quot;,&amp;quot;PrefabHash&amp;quot;,&lt;br /&gt;
    &amp;quot;Minimum&amp;quot;,&amp;quot;Maximum&amp;quot;,&amp;quot;Sum&amp;quot;,&amp;quot;Average&amp;quot;,&lt;br /&gt;
    &amp;quot;Pressure&amp;quot;,&amp;quot;Ratio&amp;quot;,&amp;quot;RatioCarbonDioxide&amp;quot;,&amp;quot;RatioNitrogen&amp;quot;,&amp;quot;RatioNitrousOxide&amp;quot;,&amp;quot;RatioOxygen&amp;quot;,&amp;quot;RatioPollutant&amp;quot;,&amp;quot;RatioVolatiles&amp;quot;,&amp;quot;RatioWater&amp;quot;,&lt;br /&gt;
    &amp;quot;Reagents&amp;quot;,&amp;quot;RecipeHash&amp;quot;,&amp;quot;Temperature&amp;quot;,&amp;quot;TotalMoles&amp;quot;,&amp;quot;Power&amp;quot;,&amp;quot;Error&amp;quot;,&amp;quot;RequiredPower&amp;quot;,&lt;br /&gt;
    &amp;quot;PressureInput&amp;quot;,&amp;quot;TemperatureInput&amp;quot;,&amp;quot;RatioOxygenInput&amp;quot;,&amp;quot;RatioCarbonDioxideInput&amp;quot;,&amp;quot;RatioNitrogenInput&amp;quot;,&lt;br /&gt;
    &amp;quot;RatioPollutantInput&amp;quot;,&amp;quot;RatioVolatilesInput&amp;quot;,&amp;quot;RatioWaterInput&amp;quot;,&amp;quot;RatioNitrousOxideInput&amp;quot;,&amp;quot;TotalMolesInput&amp;quot;,&lt;br /&gt;
    &amp;quot;PressureOutput&amp;quot;,&amp;quot;TemperatureOutput&amp;quot;,&amp;quot;RatioOxygenOutput&amp;quot;,&amp;quot;RatioCarbonDioxideOutput&amp;quot;,&amp;quot;RatioNitrogenOutput&amp;quot;,&lt;br /&gt;
    &amp;quot;RatioPollutantOutput&amp;quot;,&amp;quot;RatioVolatilesOutput&amp;quot;,&amp;quot;RatioWaterOutput&amp;quot;,&amp;quot;RatioNitrousOxideOutput&amp;quot;,&amp;quot;TotalMolesOutput&amp;quot;,&lt;br /&gt;
    &amp;quot;PressureOutput2&amp;quot;,&amp;quot;TemperatureOutput2&amp;quot;,&amp;quot;RatioOxygenOutput2&amp;quot;,&amp;quot;RatioCarbonDioxideOutput2&amp;quot;,&amp;quot;RatioNitrogenOutput2&amp;quot;,&lt;br /&gt;
    &amp;quot;RatioPollutantOutput2&amp;quot;,&amp;quot;RatioVolatilesOutput2&amp;quot;,&amp;quot;RatioWaterOutput2&amp;quot;,&amp;quot;RatioNitrousOxideOutput2&amp;quot;,&amp;quot;TotalMolesOutput2&amp;quot;,&lt;br /&gt;
    &amp;quot;CombustionInput&amp;quot;,&amp;quot;CombustionOutput&amp;quot;,&amp;quot;CombustionOutput2&amp;quot;&lt;br /&gt;
}&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;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#7f8c8d;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #F39C12; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25757</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25757"/>
		<updated>2026-02-21T08:39:07Z</updated>

		<summary type="html">&lt;p&gt;TK421: adding highlighting for parameters&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 = {&lt;br /&gt;
    &amp;quot;On&amp;quot;,&amp;quot;Activate&amp;quot;,&amp;quot;Lock&amp;quot;,&amp;quot;Mode&amp;quot;,&amp;quot;ClearMemory&amp;quot;,&amp;quot;Open&amp;quot;,&amp;quot;Setting&amp;quot;,&lt;br /&gt;
    &amp;quot;Combustion&amp;quot;,&amp;quot;ExportCount&amp;quot;,&amp;quot;ImportCount&amp;quot;,&amp;quot;Maximum&amp;quot;,&amp;quot;PrefabHash&amp;quot;,&lt;br /&gt;
    &amp;quot;Pressure&amp;quot;,&amp;quot;Ratio&amp;quot;,&amp;quot;RatioCarbonDioxide&amp;quot;,&amp;quot;RatioNitrogen&amp;quot;,&amp;quot;RatioNitrousOxide&amp;quot;,&amp;quot;RatioOxygen&amp;quot;,&amp;quot;RatioPollutant&amp;quot;,&amp;quot;RatioVolatiles&amp;quot;,&amp;quot;RatioWater&amp;quot;,&lt;br /&gt;
    &amp;quot;Reagents&amp;quot;,&amp;quot;RecipeHash&amp;quot;,&amp;quot;Temperature&amp;quot;,&amp;quot;TotalMoles&amp;quot;,&amp;quot;Power&amp;quot;,&amp;quot;Error&amp;quot;,&amp;quot;RequiredPower&amp;quot;,&lt;br /&gt;
    &amp;quot;PressureInput&amp;quot;,&amp;quot;TemperatureInput&amp;quot;,&amp;quot;RatioOxygenInput&amp;quot;,&amp;quot;RatioCarbonDioxideInput&amp;quot;,&amp;quot;RatioNitrogenInput&amp;quot;,&lt;br /&gt;
    &amp;quot;RatioPollutantInput&amp;quot;,&amp;quot;RatioVolatilesInput&amp;quot;,&amp;quot;RatioWaterInput&amp;quot;,&amp;quot;RatioNitrousOxideInput&amp;quot;,&amp;quot;TotalMolesInput&amp;quot;,&lt;br /&gt;
    &amp;quot;PressureOutput&amp;quot;,&amp;quot;TemperatureOutput&amp;quot;,&amp;quot;RatioOxygenOutput&amp;quot;,&amp;quot;RatioCarbonDioxideOutput&amp;quot;,&amp;quot;RatioNitrogenOutput&amp;quot;,&lt;br /&gt;
    &amp;quot;RatioPollutantOutput&amp;quot;,&amp;quot;RatioVolatilesOutput&amp;quot;,&amp;quot;RatioWaterOutput&amp;quot;,&amp;quot;RatioNitrousOxideOutput&amp;quot;,&amp;quot;TotalMolesOutput&amp;quot;,&lt;br /&gt;
    &amp;quot;PressureOutput2&amp;quot;,&amp;quot;TemperatureOutput2&amp;quot;,&amp;quot;RatioOxygenOutput2&amp;quot;,&amp;quot;RatioCarbonDioxideOutput2&amp;quot;,&amp;quot;RatioNitrogenOutput2&amp;quot;,&lt;br /&gt;
    &amp;quot;RatioPollutantOutput2&amp;quot;,&amp;quot;RatioVolatilesOutput2&amp;quot;,&amp;quot;RatioWaterOutput2&amp;quot;,&amp;quot;RatioNitrousOxideOutput2&amp;quot;,&amp;quot;TotalMolesOutput2&amp;quot;,&lt;br /&gt;
    &amp;quot;CombustionInput&amp;quot;,&amp;quot;CombustionOutput&amp;quot;,&amp;quot;CombustionOutput2&amp;quot;&lt;br /&gt;
}&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;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#7f8c8d;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #F39C12; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Custom_Airlock_IC10&amp;diff=25755</id>
		<title>Custom Airlock IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Custom_Airlock_IC10&amp;diff=25755"/>
		<updated>2026-02-20T09:39:48Z</updated>

		<summary type="html">&lt;p&gt;TK421: removed unecessary &amp;lt;br&amp;gt; tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
[[File:Airlockscreen.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
= Contents =&lt;br /&gt;
This script controls all functions of an airlock that consists of the following:&lt;br /&gt;
&lt;br /&gt;
* [[Integrated Circuit (IC10) | IC10]]&lt;br /&gt;
* [[Kit (IC Housing) | IC Housing]]&lt;br /&gt;
* 2X [[Active Vent]]&lt;br /&gt;
* [[Gas Sensor]]&lt;br /&gt;
* [[Kit (Lights) | LED Light]]&lt;br /&gt;
* 2X [[Door]]&lt;br /&gt;
&lt;br /&gt;
= Assembly =&lt;br /&gt;
&lt;br /&gt;
Set up a standard airlock for atmosphere on both sides. Configure the pressures in the first two lines of the script. &#039;&#039;&#039;Before exporting the script or resetting the IC, make sure the airlock is cycled to the outside (inner door closed, outer open)&#039;&#039;&#039;. The LED serves as trigger for both cycling the airlock and skipping each phase, hence should be placed inside the airlock. The airlock should be a single frame to avoid leftover atmosphere after depressurization. For larger airlocks place the sensor on the far side from the vents. The script supports [[Blast Doors]], but since they lack a door handle you will need a button on each side (outside) of the airlock. Connect a [[Logic Writer]] to each button and use it to toggle the LED.&lt;br /&gt;
&lt;br /&gt;
IC10 pin layout:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| D0|| Interior Door&lt;br /&gt;
|-&lt;br /&gt;
| D1|| Exterior Door&lt;br /&gt;
|-&lt;br /&gt;
| D2|| Interior Vent&lt;br /&gt;
|-&lt;br /&gt;
| D3|| Exterior Vent&lt;br /&gt;
|-&lt;br /&gt;
| D4|| Gas Sensor&lt;br /&gt;
|-&lt;br /&gt;
| D5|| LED Light&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
The airlock can be cycled by interacting with either door, or turning the LED off. During cycling the doors are locked, and the LED can be used to skip both depressurize (red) and pressurize (yellow) phases.&lt;br /&gt;
&lt;br /&gt;
[https://pastebin.com/62E7BfqY Source Code]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
!Source code:&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define Int.Pressure 100&lt;br /&gt;
define Ext.Pressure 0&lt;br /&gt;
&lt;br /&gt;
alias Int.Door d0&lt;br /&gt;
alias Ext.Door d1&lt;br /&gt;
alias Int.Vent d2&lt;br /&gt;
alias Ext.Vent d3&lt;br /&gt;
alias Sensor d4&lt;br /&gt;
alias LedLight d5&lt;br /&gt;
&lt;br /&gt;
define Color.Red 4&lt;br /&gt;
define Color.Yellow 5&lt;br /&gt;
define Color.Green 2&lt;br /&gt;
define Mode.Out 1&lt;br /&gt;
define Mode.In 0&lt;br /&gt;
&lt;br /&gt;
alias rT r0&lt;br /&gt;
alias rT2 r1&lt;br /&gt;
alias rTarPressure r2&lt;br /&gt;
&lt;br /&gt;
Init:&lt;br /&gt;
s Int.Vent On 0&lt;br /&gt;
s Ext.Vent On 0&lt;br /&gt;
s Ext.Door Mode 1 #Logic mode&lt;br /&gt;
s Int.Door Mode 1 #Logic mode&lt;br /&gt;
s LedLight Color Color.Green&lt;br /&gt;
s LedLight On 1&lt;br /&gt;
s Int.Door Open 0&lt;br /&gt;
s Ext.Door Open 1&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
jal _monitorTrigger&lt;br /&gt;
jal _cycleToInt&lt;br /&gt;
jal _monitorTrigger&lt;br /&gt;
jal _cycleToExt&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
_cycleToInt:&lt;br /&gt;
push ra&lt;br /&gt;
s Ext.Door Lock 1&lt;br /&gt;
s Int.Door Lock 1&lt;br /&gt;
s Ext.Door Open 0&lt;br /&gt;
s Ext.Vent Mode Mode.Out&lt;br /&gt;
s Ext.Vent On 1&lt;br /&gt;
s LedLight Color Color.Red&lt;br /&gt;
s LedLight On 1&lt;br /&gt;
jal _dePressurize&lt;br /&gt;
s Ext.Vent On 0&lt;br /&gt;
s Int.Vent Mode Mode.In&lt;br /&gt;
s Int.Vent PressureExternal Int.Pressure&lt;br /&gt;
move rTarPressure Int.Pressure&lt;br /&gt;
s Int.Vent On 1&lt;br /&gt;
s LedLight Color Color.Yellow&lt;br /&gt;
jal _pressurize&lt;br /&gt;
s LedLight Color Color.Green&lt;br /&gt;
s Int.Vent On 0&lt;br /&gt;
s Int.Door Open 1&lt;br /&gt;
s Ext.Door Lock 0&lt;br /&gt;
s Int.Door Lock 0&lt;br /&gt;
pop ra&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_cycleToExt:&lt;br /&gt;
push ra&lt;br /&gt;
s Int.Door Lock 1&lt;br /&gt;
s Ext.Door Lock 1&lt;br /&gt;
s Int.Door Open 0&lt;br /&gt;
s Int.Vent Mode Mode.Out&lt;br /&gt;
s Int.Vent On 1&lt;br /&gt;
s LedLight Color Color.Red&lt;br /&gt;
s LedLight On 1&lt;br /&gt;
jal _dePressurize&lt;br /&gt;
s Int.Vent On 0&lt;br /&gt;
s Ext.Vent Mode Mode.In&lt;br /&gt;
s Ext.Vent PressureExternal Ext.Pressure&lt;br /&gt;
move rTarPressure Ext.Pressure&lt;br /&gt;
s Ext.Vent On 1&lt;br /&gt;
s LedLight Color Color.Yellow&lt;br /&gt;
jal _pressurize&lt;br /&gt;
s LedLight Color Color.Green&lt;br /&gt;
s Ext.Vent On 0&lt;br /&gt;
s Ext.Door Open 1&lt;br /&gt;
s Int.Door Lock 0&lt;br /&gt;
s Ext.Door Lock 0&lt;br /&gt;
pop ra&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_dePressurize:&lt;br /&gt;
l rT Sensor Pressure&lt;br /&gt;
beqz rT dePressurize_end&lt;br /&gt;
l rT LedLight On&lt;br /&gt;
beqz rT dePressurize_end&lt;br /&gt;
j _dePressurize&lt;br /&gt;
dePressurize_end:&lt;br /&gt;
s LedLight On 1&lt;br /&gt;
yield&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_pressurize:&lt;br /&gt;
l rT Sensor Pressure&lt;br /&gt;
bge rT rTarPressure pressurize_end&lt;br /&gt;
l rT LedLight On&lt;br /&gt;
beqz rT pressurize_end&lt;br /&gt;
j _pressurize&lt;br /&gt;
pressurize_end:&lt;br /&gt;
s LedLight On 1&lt;br /&gt;
yield&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
_monitorTrigger:&lt;br /&gt;
l rT Int.Door Setting&lt;br /&gt;
l rT2 Ext.Door Setting&lt;br /&gt;
beq rT rT2 monitorTrigger_end&lt;br /&gt;
l rT LedLight On&lt;br /&gt;
beqz rT monitorTrigger_end&lt;br /&gt;
yield&lt;br /&gt;
j _monitorTrigger&lt;br /&gt;
monitorTrigger_end:&lt;br /&gt;
yield&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Custom_Airlock_IC10&amp;diff=25754</id>
		<title>Custom Airlock IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Custom_Airlock_IC10&amp;diff=25754"/>
		<updated>2026-02-20T09:38:22Z</updated>

		<summary type="html">&lt;p&gt;TK421: move ICCode template inside collapse template correctly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
[[File:Airlockscreen.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
= Contents =&lt;br /&gt;
This script controls all functions of an airlock that consists of the following:&lt;br /&gt;
&lt;br /&gt;
* [[Integrated Circuit (IC10) | IC10]]&lt;br /&gt;
* [[Kit (IC Housing) | IC Housing]]&lt;br /&gt;
* 2X [[Active Vent]]&lt;br /&gt;
* [[Gas Sensor]]&lt;br /&gt;
* [[Kit (Lights) | LED Light]]&lt;br /&gt;
* 2X [[Door]]&lt;br /&gt;
&lt;br /&gt;
= Assembly =&lt;br /&gt;
&lt;br /&gt;
Set up a standard airlock for atmosphere on both sides. Configure the pressures in the first two lines of the script. &#039;&#039;&#039;Before exporting the script or resetting the IC, make sure the airlock is cycled to the outside (inner door closed, outer open)&#039;&#039;&#039;. The LED serves as trigger for both cycling the airlock and skipping each phase, hence should be placed inside the airlock. The airlock should be a single frame to avoid leftover atmosphere after depressurization. For larger airlocks place the sensor on the far side from the vents. The script supports [[Blast Doors]], but since they lack a door handle you will need a button on each side (outside) of the airlock. Connect a [[Logic Writer]] to each button and use it to toggle the LED.&lt;br /&gt;
&lt;br /&gt;
IC10 pin layout:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| D0|| Interior Door&lt;br /&gt;
|-&lt;br /&gt;
| D1|| Exterior Door&lt;br /&gt;
|-&lt;br /&gt;
| D2|| Interior Vent&lt;br /&gt;
|-&lt;br /&gt;
| D3|| Exterior Vent&lt;br /&gt;
|-&lt;br /&gt;
| D4|| Gas Sensor&lt;br /&gt;
|-&lt;br /&gt;
| D5|| LED Light&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
The airlock can be cycled by interacting with either door, or turning the LED off. During cycling the doors are locked, and the LED can be used to skip both depressurize (red) and pressurize (yellow) phases.&lt;br /&gt;
&lt;br /&gt;
[https://pastebin.com/62E7BfqY Source Code]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
!Source code:&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{{ICCode|&amp;lt;br&amp;gt;&lt;br /&gt;
define Int.Pressure 100&amp;lt;br&amp;gt;&lt;br /&gt;
define Ext.Pressure 0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
alias Int.Door d0&amp;lt;br&amp;gt;&lt;br /&gt;
alias Ext.Door d1&amp;lt;br&amp;gt;&lt;br /&gt;
alias Int.Vent d2&amp;lt;br&amp;gt;&lt;br /&gt;
alias Ext.Vent d3&amp;lt;br&amp;gt;&lt;br /&gt;
alias Sensor d4&amp;lt;br&amp;gt;&lt;br /&gt;
alias LedLight d5&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
define Color.Red 4&amp;lt;br&amp;gt;&lt;br /&gt;
define Color.Yellow 5&amp;lt;br&amp;gt;&lt;br /&gt;
define Color.Green 2&amp;lt;br&amp;gt;&lt;br /&gt;
define Mode.Out 1&amp;lt;br&amp;gt;&lt;br /&gt;
define Mode.In 0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
alias rT r0&amp;lt;br&amp;gt;&lt;br /&gt;
alias rT2 r1&amp;lt;br&amp;gt;&lt;br /&gt;
alias rTarPressure r2&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Init:&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Mode 1 #Logic mode&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Mode 1 #Logic mode&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Green&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Open 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Open 1&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
main:&amp;lt;br&amp;gt;&lt;br /&gt;
jal _monitorTrigger&amp;lt;br&amp;gt;&lt;br /&gt;
jal _cycleToInt&amp;lt;br&amp;gt;&lt;br /&gt;
jal _monitorTrigger&amp;lt;br&amp;gt;&lt;br /&gt;
jal _cycleToExt&amp;lt;br&amp;gt;&lt;br /&gt;
j main&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_cycleToInt:&amp;lt;br&amp;gt;&lt;br /&gt;
push ra&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Open 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent Mode Mode.Out&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Red&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
jal _dePressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent Mode Mode.In&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent PressureExternal Int.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
move rTarPressure Int.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Yellow&amp;lt;br&amp;gt;&lt;br /&gt;
jal _pressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Green&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Open 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
pop ra&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_cycleToExt:&amp;lt;br&amp;gt;&lt;br /&gt;
push ra&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Open 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent Mode Mode.Out&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Red&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
jal _dePressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent Mode Mode.In&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent PressureExternal Ext.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
move rTarPressure Ext.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Yellow&amp;lt;br&amp;gt;&lt;br /&gt;
jal _pressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Green&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Open 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
pop ra&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_dePressurize:&amp;lt;br&amp;gt;&lt;br /&gt;
l rT Sensor Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT dePressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
l rT LedLight On&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT dePressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
j _dePressurize&amp;lt;br&amp;gt;&lt;br /&gt;
dePressurize_end:&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_pressurize:&amp;lt;br&amp;gt;&lt;br /&gt;
l rT Sensor Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
bge rT rTarPressure pressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
l rT LedLight On&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT pressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
j _pressurize&amp;lt;br&amp;gt;&lt;br /&gt;
pressurize_end:&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_monitorTrigger:&amp;lt;br&amp;gt;&lt;br /&gt;
l rT Int.Door Setting&amp;lt;br&amp;gt;&lt;br /&gt;
l rT2 Ext.Door Setting&amp;lt;br&amp;gt;&lt;br /&gt;
beq rT rT2 monitorTrigger_end&amp;lt;br&amp;gt;&lt;br /&gt;
l rT LedLight On&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT monitorTrigger_end&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j _monitorTrigger&amp;lt;br&amp;gt;&lt;br /&gt;
monitorTrigger_end:&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Custom_Airlock_IC10&amp;diff=25753</id>
		<title>Custom Airlock IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Custom_Airlock_IC10&amp;diff=25753"/>
		<updated>2026-02-20T09:35:12Z</updated>

		<summary type="html">&lt;p&gt;TK421: Use new version IC10 template for syntax highlighting.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
[[File:Airlockscreen.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
= Contents =&lt;br /&gt;
This script controls all functions of an airlock that consists of the following:&lt;br /&gt;
&lt;br /&gt;
* [[Integrated Circuit (IC10) | IC10]]&lt;br /&gt;
* [[Kit (IC Housing) | IC Housing]]&lt;br /&gt;
* 2X [[Active Vent]]&lt;br /&gt;
* [[Gas Sensor]]&lt;br /&gt;
* [[Kit (Lights) | LED Light]]&lt;br /&gt;
* 2X [[Door]]&lt;br /&gt;
&lt;br /&gt;
= Assembly =&lt;br /&gt;
&lt;br /&gt;
Set up a standard airlock for atmosphere on both sides. Configure the pressures in the first two lines of the script. &#039;&#039;&#039;Before exporting the script or resetting the IC, make sure the airlock is cycled to the outside (inner door closed, outer open)&#039;&#039;&#039;. The LED serves as trigger for both cycling the airlock and skipping each phase, hence should be placed inside the airlock. The airlock should be a single frame to avoid leftover atmosphere after depressurization. For larger airlocks place the sensor on the far side from the vents. The script supports [[Blast Doors]], but since they lack a door handle you will need a button on each side (outside) of the airlock. Connect a [[Logic Writer]] to each button and use it to toggle the LED.&lt;br /&gt;
&lt;br /&gt;
IC10 pin layout:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| D0|| Interior Door&lt;br /&gt;
|-&lt;br /&gt;
| D1|| Exterior Door&lt;br /&gt;
|-&lt;br /&gt;
| D2|| Interior Vent&lt;br /&gt;
|-&lt;br /&gt;
| D3|| Exterior Vent&lt;br /&gt;
|-&lt;br /&gt;
| D4|| Gas Sensor&lt;br /&gt;
|-&lt;br /&gt;
| D5|| LED Light&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
The airlock can be cycled by interacting with either door, or turning the LED off. During cycling the doors are locked, and the LED can be used to skip both depressurize (red) and pressurize (yellow) phases.&lt;br /&gt;
&lt;br /&gt;
[https://pastebin.com/62E7BfqY Source Code]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
!Source code:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;br&amp;gt;&lt;br /&gt;
define Int.Pressure 100&amp;lt;br&amp;gt;&lt;br /&gt;
define Ext.Pressure 0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
alias Int.Door d0&amp;lt;br&amp;gt;&lt;br /&gt;
alias Ext.Door d1&amp;lt;br&amp;gt;&lt;br /&gt;
alias Int.Vent d2&amp;lt;br&amp;gt;&lt;br /&gt;
alias Ext.Vent d3&amp;lt;br&amp;gt;&lt;br /&gt;
alias Sensor d4&amp;lt;br&amp;gt;&lt;br /&gt;
alias LedLight d5&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
define Color.Red 4&amp;lt;br&amp;gt;&lt;br /&gt;
define Color.Yellow 5&amp;lt;br&amp;gt;&lt;br /&gt;
define Color.Green 2&amp;lt;br&amp;gt;&lt;br /&gt;
define Mode.Out 1&amp;lt;br&amp;gt;&lt;br /&gt;
define Mode.In 0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
alias rT r0&amp;lt;br&amp;gt;&lt;br /&gt;
alias rT2 r1&amp;lt;br&amp;gt;&lt;br /&gt;
alias rTarPressure r2&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Init:&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Mode 1 #Logic mode&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Mode 1 #Logic mode&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Green&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Open 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Open 1&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
main:&amp;lt;br&amp;gt;&lt;br /&gt;
jal _monitorTrigger&amp;lt;br&amp;gt;&lt;br /&gt;
jal _cycleToInt&amp;lt;br&amp;gt;&lt;br /&gt;
jal _monitorTrigger&amp;lt;br&amp;gt;&lt;br /&gt;
jal _cycleToExt&amp;lt;br&amp;gt;&lt;br /&gt;
j main&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_cycleToInt:&amp;lt;br&amp;gt;&lt;br /&gt;
push ra&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Open 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent Mode Mode.Out&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Red&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
jal _dePressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent Mode Mode.In&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent PressureExternal Int.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
move rTarPressure Int.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Yellow&amp;lt;br&amp;gt;&lt;br /&gt;
jal _pressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Green&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Open 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
pop ra&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_cycleToExt:&amp;lt;br&amp;gt;&lt;br /&gt;
push ra&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Open 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent Mode Mode.Out&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Red&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
jal _dePressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent Mode Mode.In&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent PressureExternal Ext.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
move rTarPressure Ext.Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 1&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Yellow&amp;lt;br&amp;gt;&lt;br /&gt;
jal _pressurize&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight Color Color.Green&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Vent On 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Open 1&amp;lt;br&amp;gt;&lt;br /&gt;
s Int.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
s Ext.Door Lock 0&amp;lt;br&amp;gt;&lt;br /&gt;
pop ra&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_dePressurize:&amp;lt;br&amp;gt;&lt;br /&gt;
l rT Sensor Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT dePressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
l rT LedLight On&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT dePressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
j _dePressurize&amp;lt;br&amp;gt;&lt;br /&gt;
dePressurize_end:&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_pressurize:&amp;lt;br&amp;gt;&lt;br /&gt;
l rT Sensor Pressure&amp;lt;br&amp;gt;&lt;br /&gt;
bge rT rTarPressure pressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
l rT LedLight On&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT pressurize_end&amp;lt;br&amp;gt;&lt;br /&gt;
j _pressurize&amp;lt;br&amp;gt;&lt;br /&gt;
pressurize_end:&amp;lt;br&amp;gt;&lt;br /&gt;
s LedLight On 1&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
_monitorTrigger:&amp;lt;br&amp;gt;&lt;br /&gt;
l rT Int.Door Setting&amp;lt;br&amp;gt;&lt;br /&gt;
l rT2 Ext.Door Setting&amp;lt;br&amp;gt;&lt;br /&gt;
beq rT rT2 monitorTrigger_end&amp;lt;br&amp;gt;&lt;br /&gt;
l rT LedLight On&amp;lt;br&amp;gt;&lt;br /&gt;
beqz rT monitorTrigger_end&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j _monitorTrigger&amp;lt;br&amp;gt;&lt;br /&gt;
monitorTrigger_end:&amp;lt;br&amp;gt;&lt;br /&gt;
yield&amp;lt;br&amp;gt;&lt;br /&gt;
j ra&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25752</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25752"/>
		<updated>2026-02-20T08:52:40Z</updated>

		<summary type="html">&lt;p&gt;TK421: tweaking colours - comments grey&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#7f8c8d;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25751</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25751"/>
		<updated>2026-02-20T08:49:39Z</updated>

		<summary type="html">&lt;p&gt;TK421: remove word boundary at start of hex detection&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25750</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25750"/>
		<updated>2026-02-20T08:47:40Z</updated>

		<summary type="html">&lt;p&gt;TK421: fixed hex to use correct $ instead of 0x&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%$[%da-fA-F]+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25749</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25749"/>
		<updated>2026-02-20T07:43:39Z</updated>

		<summary type="html">&lt;p&gt;TK421: full green was too intense&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#3BD14F;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25748</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25748"/>
		<updated>2026-02-20T07:40:48Z</updated>

		<summary type="html">&lt;p&gt;TK421: fixing device highlight&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#00ff00;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;
        &#039;&amp;lt;span style=&amp;quot;color:#00ff00;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25747</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25747"/>
		<updated>2026-02-20T07:36:59Z</updated>

		<summary type="html">&lt;p&gt;TK421: tweaking colours&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#00ff00;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25746</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25746"/>
		<updated>2026-02-20T07:35:16Z</updated>

		<summary type="html">&lt;p&gt;TK421: tweaking colours&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4dd0e1;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25745</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25745"/>
		<updated>2026-02-20T07:33:16Z</updated>

		<summary type="html">&lt;p&gt;TK421: tweaking colours&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#0d1b2a;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25744</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25744"/>
		<updated>2026-02-20T07:28:57Z</updated>

		<summary type="html">&lt;p&gt;TK421: tweaking colours&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color: #b58900; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&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;&#039;&lt;br /&gt;
    .. table.concat(lines, &amp;quot;\n&amp;quot;) .. &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25743</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25743"/>
		<updated>2026-02-20T07:23:40Z</updated>

		<summary type="html">&lt;p&gt;TK421: oops... deleted a 0 by mistake...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy because adding lines might break them if you don&#039;t adjust the relative jump. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;789&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Indexing With Comparison ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;sub&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;select&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 456&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;sub&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;select&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 789&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In most programming languages, you can do the same thing in different ways. A third way would be to use the stack.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 3&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Manipulate dCurrentDevice&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
WaitForDevices:&lt;br /&gt;
yield&lt;br /&gt;
ls rBusy dSorter 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 2 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
&lt;br /&gt;
== Detecting devices on a network ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to use code to detect the devices connected to the data network, instead of using pins on the housing, or via usage of the batch commands (such as &amp;lt;code&amp;gt;lbn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sbn&amp;lt;/code&amp;gt;). The current way to detect attached devices is via a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, passing in a network id: &amp;lt;code&amp;gt;get r0 db:0 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What the above snippet does is to run the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, addressed to the network connection (network &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;db:0&amp;lt;/code&amp;gt;) attached to the housing of the chip (&amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command normally accesses the stack of the device being addressed (such as the chip itself, or a sorter), but if the address being passed to the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command is a network reference (with the colon and number indicating which connection), then the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;command will return the &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; of the device at the given index (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; in the example above - if there is no such a device at the index, then &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; is returned). The order is not determined by anything specific (even though it seems to remain the same until the network itself is changed, so write your code accordingly). &lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; being returned (in the example above it is saved in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt;), this can be used in a later command to obtain information about the device - such as their &amp;lt;code&amp;gt;PrefabHash&amp;lt;/code&amp;gt; to detect the device type (and/or any other LogicProperty it has available). &lt;br /&gt;
&lt;br /&gt;
One scenario where this is useful is in dynamically detecting newly attached structures without a priori having their device name(s), or even a count of how many, and being able to control them individually (rather than as a batch like one would for solar tracking) - centrifuges is one such type of device where this is helpful, since their cycle times are not synced up, you cannot use a batch command to control them (without losing efficiency). Below is reproduced some code from [https://old.reddit.com/r/Stationeers/comments/1r7k148/ic10_control_centrifuges_via_data_connection/ various] [https://old.reddit.com/r/Stationeers/comments/1r6uer7/ic10_is_there_a_way_to_dynamically_adress_all/ reddit] [https://old.reddit.com/r/Stationeers/comments/1q30e9z/coal_power_plant_math_check/nxy1g7n/ posts] that discuss this scenario:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias refid r14&lt;br /&gt;
alias index r15&lt;br /&gt;
alias devicecount r13&lt;br /&gt;
alias ticks r12&lt;br /&gt;
define centrifuge HASH(&amp;quot;StructureCentrifuge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
discoveryinit:&lt;br /&gt;
yield&lt;br /&gt;
move sp 0&lt;br /&gt;
lb r0 centrifuge PrefabHash Sum&lt;br /&gt;
div devicecount r0 centrifuge&lt;br /&gt;
move index 0&lt;br /&gt;
&lt;br /&gt;
discovery:&lt;br /&gt;
get refid db:0 index&lt;br /&gt;
l r0 refid PrefabHash&lt;br /&gt;
bne r0 centrifuge wrongid&lt;br /&gt;
push refid&lt;br /&gt;
s refid On 1&lt;br /&gt;
&lt;br /&gt;
wrongid:&lt;br /&gt;
beq devicecount sp maininit&lt;br /&gt;
add index index 1&lt;br /&gt;
j discovery&lt;br /&gt;
&lt;br /&gt;
maininit:&lt;br /&gt;
move ticks 0&lt;br /&gt;
beqz sp discoveryinit&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
bge ticks 120 discoveryinit&lt;br /&gt;
add ticks ticks 1&lt;br /&gt;
move sp devicecount&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
beqz sp main&lt;br /&gt;
pop refid&lt;br /&gt;
bdns refid discoveryinit&lt;br /&gt;
l r0 refid Error&lt;br /&gt;
beqz r0 loop                  &lt;br /&gt;
l r0 refid Reagents&lt;br /&gt;
sge r0 r0 5&lt;br /&gt;
s refid Open r0&lt;br /&gt;
j loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25742</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=25742"/>
		<updated>2026-02-20T07:21:52Z</updated>

		<summary type="html">&lt;p&gt;TK421: Used ICCode template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;4&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy because adding lines might break them if you don&#039;t adjust the relative jump. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;789&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Indexing With Comparison ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 0&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;sub&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;select&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 456&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;sub&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;select&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; 789&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt; #Index 2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
In most programming languages, you can do the same thing in different ways. A third way would be to use the stack.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 3&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Manipulate dCurrentDevice&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
WaitForDevices:&lt;br /&gt;
yield&lt;br /&gt;
ls rBusy dSorter  Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dSorter 2 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 0 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
ls rBusy dVender 1 Occupied&lt;br /&gt;
bgtz rBusy WaitForDevices&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
&lt;br /&gt;
== Detecting devices on a network ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it is convenient to use code to detect the devices connected to the data network, instead of using pins on the housing, or via usage of the batch commands (such as &amp;lt;code&amp;gt;lbn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sbn&amp;lt;/code&amp;gt;). The current way to detect attached devices is via a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, passing in a network id: &amp;lt;code&amp;gt;get r0 db:0 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
What the above snippet does is to run the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command, addressed to the network connection (network &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;db:0&amp;lt;/code&amp;gt;) attached to the housing of the chip (&amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command normally accesses the stack of the device being addressed (such as the chip itself, or a sorter), but if the address being passed to the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; command is a network reference (with the colon and number indicating which connection), then the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;command will return the &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; of the device at the given index (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; in the example above - if there is no such a device at the index, then &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; is returned). The order is not determined by anything specific (even though it seems to remain the same until the network itself is changed, so write your code accordingly). &lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;code&amp;gt;ReferenceId&amp;lt;/code&amp;gt; being returned (in the example above it is saved in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt;), this can be used in a later command to obtain information about the device - such as their &amp;lt;code&amp;gt;PrefabHash&amp;lt;/code&amp;gt; to detect the device type (and/or any other LogicProperty it has available). &lt;br /&gt;
&lt;br /&gt;
One scenario where this is useful is in dynamically detecting newly attached structures without a priori having their device name(s), or even a count of how many, and being able to control them individually (rather than as a batch like one would for solar tracking) - centrifuges is one such type of device where this is helpful, since their cycle times are not synced up, you cannot use a batch command to control them (without losing efficiency). Below is reproduced some code from [https://old.reddit.com/r/Stationeers/comments/1r7k148/ic10_control_centrifuges_via_data_connection/ various] [https://old.reddit.com/r/Stationeers/comments/1r6uer7/ic10_is_there_a_way_to_dynamically_adress_all/ reddit] [https://old.reddit.com/r/Stationeers/comments/1q30e9z/coal_power_plant_math_check/nxy1g7n/ posts] that discuss this scenario:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias refid r14&lt;br /&gt;
alias index r15&lt;br /&gt;
alias devicecount r13&lt;br /&gt;
alias ticks r12&lt;br /&gt;
define centrifuge HASH(&amp;quot;StructureCentrifuge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
discoveryinit:&lt;br /&gt;
yield&lt;br /&gt;
move sp 0&lt;br /&gt;
lb r0 centrifuge PrefabHash Sum&lt;br /&gt;
div devicecount r0 centrifuge&lt;br /&gt;
move index 0&lt;br /&gt;
&lt;br /&gt;
discovery:&lt;br /&gt;
get refid db:0 index&lt;br /&gt;
l r0 refid PrefabHash&lt;br /&gt;
bne r0 centrifuge wrongid&lt;br /&gt;
push refid&lt;br /&gt;
s refid On 1&lt;br /&gt;
&lt;br /&gt;
wrongid:&lt;br /&gt;
beq devicecount sp maininit&lt;br /&gt;
add index index 1&lt;br /&gt;
j discovery&lt;br /&gt;
&lt;br /&gt;
maininit:&lt;br /&gt;
move ticks 0&lt;br /&gt;
beqz sp discoveryinit&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
bge ticks 120 discoveryinit&lt;br /&gt;
add ticks ticks 1&lt;br /&gt;
move sp devicecount&lt;br /&gt;
yield&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
beqz sp main&lt;br /&gt;
pop refid&lt;br /&gt;
bdns refid discoveryinit&lt;br /&gt;
l r0 refid Error&lt;br /&gt;
beqz r0 loop                  &lt;br /&gt;
l r0 refid Reagents&lt;br /&gt;
sge r0 r0 5&lt;br /&gt;
s refid Open r0&lt;br /&gt;
j loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25741</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25741"/>
		<updated>2026-02-20T06:53:53Z</updated>

		<summary type="html">&lt;p&gt;TK421: fixing register highlighting&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&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;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25740</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25740"/>
		<updated>2026-02-20T06:51:35Z</updated>

		<summary type="html">&lt;p&gt;TK421: fixing register highlighting&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- real registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r([0-9]|1[0-5]))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w]r%?&amp;quot;, &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25739</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25739"/>
		<updated>2026-02-20T06:47:58Z</updated>

		<summary type="html">&lt;p&gt;TK421: fixing register highlighting&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- real registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r(0?[0-9]|1[0-5]))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- placeholder r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r%?)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25738</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25738"/>
		<updated>2026-02-20T06:43:01Z</updated>

		<summary type="html">&lt;p&gt;TK421: second attempt to match placeholder registers&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15 plus r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r(%d%d?|[0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25737</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25737"/>
		<updated>2026-02-20T06:32:32Z</updated>

		<summary type="html">&lt;p&gt;TK421: highlight placeholder registers/devices as well.&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15 plus r?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r([0-9]|1[0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5 plus d?&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d([0-5]|%?))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=IC10&amp;diff=25736</id>
		<title>IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=IC10&amp;diff=25736"/>
		<updated>2026-02-20T06:28:14Z</updated>

		<summary type="html">&lt;p&gt;TK421: using iccode template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:IC10 Programming]]&lt;br /&gt;
=Scripting language for IC10 housings / chips=&lt;br /&gt;
MIPS is [[Stationeers]]&#039; inspiration for the in-game scripting language called IC10. It runs on [[Integrated Circuit (IC10)|IC10 chips]] crafted at the [[Electronics Printer]]. &lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
Internal registers &#039;&#039;&#039;r?&#039;&#039;&#039;: The IC contains 16 CPU registers, numbered &#039;&#039;&#039;r0&#039;&#039;&#039; to &#039;&#039;&#039;r15&#039;&#039;&#039;. From now on referred to as &#039;&#039;&#039;r?&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Device registers &#039;&#039;&#039;d? logicType&#039;&#039;&#039;: Device registers are written to and from the IC. A device register is numbered &#039;&#039;&#039;d0&#039;&#039;&#039; to &#039;&#039;&#039;d5&#039;&#039;&#039; (select via screw), or &#039;&#039;&#039;db&#039;&#039;&#039; (connected device). From now on referred to as &#039;&#039;&#039;d?&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Logic and algorithmic with &#039;&#039;&#039;Internal registers&#039;&#039;&#039; ===&lt;br /&gt;
All calculations are exclusively performed to and from &#039;&#039;&#039;r?&#039;&#039;&#039; registers, or generally more understood as variables in programming. You can use aliases to give convenient names with the &amp;lt;code&amp;gt;alias string r?|d?&amp;lt;/code&amp;gt;command (see below). &lt;br /&gt;
&lt;br /&gt;
Internal registers can be manipulated in various ways. &lt;br /&gt;
* Write constant values &amp;lt;code&amp;gt;move r? (r?|num)&amp;lt;/code&amp;gt;: Example: &amp;lt;code&amp;gt;move r0 2&amp;lt;/code&amp;gt; sets r0 to the number 2.&lt;br /&gt;
* Calculate: Calculations are done to- and from these registers, like &amp;lt;code&amp;gt;add r? a(r?|num) b(r?|num)&amp;lt;/code&amp;gt;. Example: &amp;lt;code&amp;gt;add r1 r0 3&amp;lt;/code&amp;gt; adds 3 to r0, and writes to r1.&lt;br /&gt;
&lt;br /&gt;
Note, for any kind of if statements or loop behaviours, knowing about labels, branching, and jumps is essential knowledge. See below.&lt;br /&gt;
&lt;br /&gt;
=== IO to &#039;&#039;&#039;Device registers&#039;&#039;&#039; ===&lt;br /&gt;
Acronym &#039;&#039;&#039;d?&#039;&#039;&#039; stands for device, where ? is a number corresponding to the screw device selector on the socket.&lt;br /&gt;
You can also read/write to the device where the IC is planted in using device &#039;&#039;&#039;db&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generally, there are up to 6 devices which can be set using the screwdriver &#039;&#039;&#039;d0&#039;&#039;&#039; to &#039;&#039;&#039;d5&#039;&#039;&#039;. A special device register &#039;&#039;&#039;db&#039;&#039;&#039; is the device wherever the IC is mounted upon. Very convenient for atmospheric devices where no separate IC socket is required.&lt;br /&gt;
&lt;br /&gt;
Note, the IC is completely unaware where d? is actually connected to. So if you get a logicType error, check d? number, or check if the screw has been set on the socket. An alias is only convenient to convey what is expected to be set on the d? screw, it does not actually set or program the screw.&lt;br /&gt;
&lt;br /&gt;
* Read from device (load) &amp;lt;code&amp;gt;l r? d? logicType&amp;lt;/code&amp;gt;: Reads logicType, like Pressure from a [[Sensors|gas sensor]], from device d? to register r?. Values can be read from connected devices and put into the register using the &#039;&#039;&#039;l&#039;&#039;&#039; (load) command. For example, if you want to load the state of a door. &amp;lt;br&amp;gt; Example: &amp;lt;code&amp;gt;l r0 Door Open&amp;lt;/code&amp;gt; reads the &#039;Open&#039; field of an object named &#039;Door&#039;, that would be connected to the IC housing of the chip.&lt;br /&gt;
* Write to a device (set) &amp;lt;code&amp;gt;s d? logicType r?&amp;lt;/code&amp;gt;: Write a value from a register back to a device using the command &amp;lt;code&amp;gt;s d? logicType r?&amp;lt;/code&amp;gt;. For example, if d0 is set to a door using the screwdriver, &amp;lt;code&amp;gt;s d0 Open 0&amp;lt;/code&amp;gt; sets the &#039;Open&#039; status of the d0 (a door) to 0, effectively closing the door.&lt;br /&gt;
&lt;br /&gt;
=== batch IO to - &#039;&#039;&#039;Device registers&#039;&#039;&#039; ===&lt;br /&gt;
&#039;&#039;&#039;Batch writing&#039;&#039;&#039; needs to be done to a specific &#039;&#039;&#039;deviceHash&#039;&#039;&#039; instead of d?. Is unique per device type, which you can find in the [[Stationpedia]] entries.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
lb r? deviceHash logicType batchMode &lt;br /&gt;
sb deviceHash logicType r?&lt;br /&gt;
}}&lt;br /&gt;
Additionally, using the following batch commands, a &#039;&#039;&#039;nameHash&#039;&#039;&#039; can be provided to only modify devices with a certain name.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
lbn r? deviceHash nameHash logicType batchMode&lt;br /&gt;
sbn deviceHash nameHash logicType r?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
All hashes used in the game are CRC-32 checksums computed from the strings they represent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;batchMode&#039;&#039;&#039; is a parameter equal to 0, 1, 2, or 3. These are also defined as the constants &#039;&#039;&#039;Average&#039;&#039;&#039;, &#039;&#039;&#039;Sum&#039;&#039;&#039;, &#039;&#039;&#039;Minimum&#039;&#039;&#039;, and &#039;&#039;&#039;Maximum&#039;&#039;&#039; respectively. The word or number can be used.&lt;br /&gt;
&lt;br /&gt;
Combining one of these functions with the &amp;lt;code&amp;gt;HASH()&amp;lt;/code&amp;gt; function can be advantageous:&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureGasSensor&amp;quot;) &lt;br /&gt;
HASH(&amp;quot;Sensor 1&amp;quot;) Temperature Average&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This code will load the average temperature of all gas sensors on the network named &amp;quot;Sensor 1&amp;quot; onto register &#039;&#039;&#039;r0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If the batch read (lb/lbn) is done on a network without any matching devices the results will be as specified in the table:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Batch read with no devices&lt;br /&gt;
|-&lt;br /&gt;
! Batch Mode !! Result&lt;br /&gt;
|-&lt;br /&gt;
| Average (0) || nan&lt;br /&gt;
|-&lt;br /&gt;
| Sum (1) || 0&lt;br /&gt;
|-&lt;br /&gt;
| Minimum (2) || 0*&lt;br /&gt;
|-&lt;br /&gt;
| Maximum (3) || ninf&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; This apparently used to result in pinf, but in version 0.2.6091.26702 both lb and lbn are returning 0.&lt;br /&gt;
&lt;br /&gt;
pinf and ninf are the IC10 constants for &amp;quot;positive infinity&amp;quot; and &amp;quot;negative infinity&amp;quot; respectively, and work much like other numerical constants.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
Here are some examples demonstrating all three operations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 10&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Sets register &#039;&#039;&#039;r0&#039;&#039;&#039; to the value 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 r1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Copies the value of register &#039;&#039;&#039;r1&#039;&#039;&#039; to register &#039;&#039;&#039;r0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Temperature&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Reads the Temperature parameter from device &#039;&#039;&#039;d0&#039;&#039;&#039; and places the value in register &#039;&#039;&#039;r0&#039;&#039;&#039;.&lt;br /&gt;
Note: not all devices have a Temperature parameter, check the in-game stationpedia.&lt;br /&gt;
&lt;br /&gt;
To set a device specific value (like &#039;&#039;&#039;On&#039;&#039;&#039;), you can write into this value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d0 On r0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Writes the value from register &#039;&#039;&#039;r0&#039;&#039;&#039; out to &#039;&#039;&#039;On&#039;&#039;&#039; parameter of device &#039;&#039;&#039;d0&#039;&#039;&#039;. In this example the device will be turned On, if valve of register r0 equals 1, otherwise (register r0 equals 0) it will turned off. See section [[IC10#Device_Variables|Device Variables]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s recommended to use labels (like: &#039;&#039;someVariable&#039;&#039;) instead of a direct reference to the register. See &#039;&#039;&#039;alias&#039;&#039;&#039; in section [[IC10#Instructions|Instructions]].&lt;br /&gt;
&lt;br /&gt;
=== Special registers ===&lt;br /&gt;
There are two more registers. One called &#039;&#039;&#039;ra&#039;&#039;&#039; (return address) and one called &#039;&#039;&#039;sp&#039;&#039;&#039; (stack pointer). The &#039;&#039;&#039;ra&#039;&#039;&#039; is used by certain jump and branching instructions (those ending with &#039;&#039;&#039;-al&#039;&#039;&#039;) to remember which line in the script it should return to. The &#039;&#039;&#039;sp&#039;&#039;&#039; tracks the next index within the stack (a memory that can store up to 512 values) to be pushed (written) to or popped (read) from. Neither &#039;&#039;&#039;ra&#039;&#039;&#039; nor &#039;&#039;&#039;sp&#039;&#039;&#039; is protected, their values can be changed by instructions like any other register.&lt;br /&gt;
&lt;br /&gt;
==Stack Memory==&lt;br /&gt;
The Stack is a memory that can hold 512 different values. Each IC10 has its own Stack, and some devices (like the Logical Sorter) also have a Stack.&lt;br /&gt;
;push r?: adds the value  &#039;&#039;&#039;r?&#039;&#039;&#039; and increments the &#039;&#039;&#039;sp&#039;&#039;&#039; by 1.&lt;br /&gt;
;pop r?: loads the value in the stack memory at index &amp;lt;code&amp;gt;sp-1&amp;lt;/code&amp;gt; into register &#039;&#039;&#039;r?&#039;&#039;&#039; and decrements the &#039;&#039;&#039;sp&#039;&#039;&#039; by 1.&lt;br /&gt;
;peek r?: loads the value in the stack memory at index &amp;lt;code&amp;gt;sp-1&amp;lt;/code&amp;gt; into register &#039;&#039;&#039;r?&#039;&#039;&#039;.&lt;br /&gt;
;poke address(r?|num) value(r?|num): Stores the provided value at the provided address in the stack.&lt;br /&gt;
;get r? d? address(r?|num): loads the value in the stack memory at index &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; on provided device into register &#039;&#039;&#039;r?&#039;&#039;&#039;.&lt;br /&gt;
;getd r? id(r?|num) address(r?|num): loads the value in the stack memory at index &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; on provided device id into register &#039;&#039;&#039;r?&#039;&#039;&#039;.&lt;br /&gt;
;put d? address(r?|num) value(r?|num): adds the value to the stack memory off the provided device at index &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;.&lt;br /&gt;
;putd id(r?|num) address(r?|num) value(r?|num) : adds the value to the stack memory off the provided device id at index &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As mentioned previously, &#039;&#039;&#039;sp&#039;&#039;&#039; can be both written to and read from any time. When reading (&#039;&#039;&#039;peek&#039;&#039;&#039; or &#039;&#039;&#039;pop&#039;&#039;&#039;), &#039;&#039;&#039;sp&#039;&#039;&#039; must be between 1 and 512, inclusive. While writing (&#039;&#039;&#039;push&#039;&#039;&#039;), &#039;&#039;&#039;sp&#039;&#039;&#039; must be between 0 and 511, inclusive.&lt;br /&gt;
&lt;br /&gt;
Stack memory is persistent on logic chips. This means that if you have a logic chip and push values to the stack, the code that pushes those values can be removed and the stack will retain those values.&lt;br /&gt;
&lt;br /&gt;
Note that this does not carry over to any other logic chips which receive the program of the original; They will need to have their stack memories programmed individually.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stack Traversing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Traversing the stack can be done similarly to how an array would be traversed in some other languages:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
#this will traverse indices {min value} through {max value}-1&lt;br /&gt;
move sp {min value}&lt;br /&gt;
loop:&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0&lt;br /&gt;
&lt;br /&gt;
#do something here with your stack values (loaded into r0)&lt;br /&gt;
&lt;br /&gt;
blt sp {max value} loop&lt;br /&gt;
&lt;br /&gt;
#continue on&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the pop function&#039;s decrementing to make a more efficient loop:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
move sp {max value}&lt;br /&gt;
add sp sp 1&lt;br /&gt;
loop:&lt;br /&gt;
pop r0&lt;br /&gt;
&lt;br /&gt;
#do something here with your stack values (loaded into r0)&lt;br /&gt;
&lt;br /&gt;
bgt sp {min value} loop&lt;br /&gt;
&lt;br /&gt;
#continue on&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
Comments can be placed using a &#039;&#039;&#039;#&#039;&#039;&#039; symbol. All comments are ignored by the game when it reads commands. Below is an example of valid code with two comments.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias MyAlias r0 # Text after the hash tag will be ignored to the end of the line.&lt;br /&gt;
# You can also write comments on their own lines, like this.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Device Ports==&lt;br /&gt;
ICs can interact with up to 6 other devices via d0 - d5, as well as the device it&#039;s attached to via db. To change or set a device, use a screwdriver and adjust the device in the IC housing. You can read or set any of the device&#039;s properties, so it is possible to do things like read the pressure or oxygen content of a room on the same Device port. &lt;br /&gt;
&lt;br /&gt;
Additionally, it&#039;s possible to set other IC housings as devices, allowing you to create programs that run across multiple ICs together. For example, an Gas Mixing IC could check the &#039;&#039;&#039; Setting&#039;&#039;&#039;  field of a Atmosphere Sensor IC and act based on the value of the sensor chip.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;l&#039;&#039;&#039; (load) or &#039;&#039;&#039;s&#039;&#039;&#039; (set) instructions you have to read or set these values to your device. Examples:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
#Reads the &#039;Temperature&#039; from an atmosphere sensor&lt;br /&gt;
# at device port &#039;d0&#039; into register &#039;r0&#039;.&lt;br /&gt;
l r0 d0 Temperature&lt;br /&gt;
}} &lt;br /&gt;
{{ICCode|&lt;br /&gt;
# Writes the value of the register &#039;r0&#039; to the&lt;br /&gt;
# device on port &#039;d1&#039; into the variable &#039;Setting&#039;.&lt;br /&gt;
s d1 Setting r0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Labels==&lt;br /&gt;
Labels are used to make it easier to jump between lines in the script. The label will have a numerical value that is the same as its line number. Even though it&#039;s possible to use a labels value for calculations, doing so is a bad idea since any changes to the code can change the line numbers of the labels.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
main: # define a jump mark with label &#039;main&#039;&lt;br /&gt;
j main # jumps back to &#039;main&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
Instead of using a register to store a fixed value, a constant can be made. Using this name will refer to the assigned value. With the help of Constants you can save register places.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# defines a Constant with name &#039;pi&#039;&lt;br /&gt;
# and set its value to 3.14159&lt;br /&gt;
define pi 3.14159&lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
You can use these constants like any other variables (see: alias in section [[IC10#Instructions|Instructions]]). Example:&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# set the value of register &#039;r0&#039; to the value of constant named &#039;pi&#039;.&lt;br /&gt;
move r0 pi &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Numeric values==&lt;br /&gt;
Registers and constants are usually decimal values using double-precision floating point (confirmed?).&lt;br /&gt;
&lt;br /&gt;
Unlike real CPU architectures, integers are not supported as a distinct type, but double FP can represent integers up to about 54 bits before rounding causes problems (the exact number depending what bit patterns you happen to have).&lt;br /&gt;
&lt;br /&gt;
Numbers can be written in hexadecimal by preceding the value with a $ symbol. Values larger than 54 bits might get corrupted. Hex numbers are typically used for ReferenceId values.&lt;br /&gt;
&lt;br /&gt;
Examples: &lt;br /&gt;
{{ICCode|&lt;br /&gt;
move r0 12345&lt;br /&gt;
move r1 123.456&lt;br /&gt;
move r2 $E1B2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Indirect referencing==&lt;br /&gt;
This is a way of accessing a register by using another register as a pointer. Adding an additional r in front of the register turns on this behaviour. The value stored in the register being used as the pointer must be between 0 to 15, this will then point to a register from r0 to r15, higher or lower values will cause an error.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
move r0 5 # stores the value 5 in r0&lt;br /&gt;
move rr0 10 &lt;br /&gt;
# is now the same as &#039;move r5 10&#039; &lt;br /&gt;
# since r0 has the value 5, rr0 points at the register r5&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Additional r&#039;s can be added to do indirect referencing multiple times in a row.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
move r1 2&lt;br /&gt;
move r2 3&lt;br /&gt;
move rrr1 4&lt;br /&gt;
# is now the same as &#039;move r3 4&#039;&lt;br /&gt;
# since r1 points at r2 which points at r3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This also works with devices&lt;br /&gt;
{{ICCode|&lt;br /&gt;
move r0 2 # stores the value 2 in r0&lt;br /&gt;
s dr0 On 1 &lt;br /&gt;
# is now the same as &#039;s d2 On 1&#039;&lt;br /&gt;
# r0 has the value 2 so dr0 points at d2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Dynamically changing LogicType when interacting with Device Registers ==&lt;br /&gt;
When the &amp;lt;code&amp;gt;l&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; instructions are used to read from or write to a Device Register, the LogicType is the variable that will be interacted with (example: in &amp;lt;code&amp;gt;l r0 myDevice Temperature&amp;lt;/code&amp;gt; the LogicType is the Temperature). In most scripts the LogicType will be hardcoded. But it&#039;s also possible to change the LogicType dynamically. The LogicType is an enum, where each type is identified by a unique integer value. This makes it possible to cycle through them in various ways, either as a list placed on the Stack, or by increasing the LogicType value via addition in each loop.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
#loop through a list of LogicTypes&lt;br /&gt;
push LogicType.RatioOxygen&lt;br /&gt;
push LogicType.RatioVolatiles&lt;br /&gt;
push LogicType.Temperature&lt;br /&gt;
loop:&lt;br /&gt;
pop r1&lt;br /&gt;
l r0 myDevice r1&lt;br /&gt;
...&lt;br /&gt;
bgtz sp loop #loop until the Stack is empty}}&lt;br /&gt;
&lt;br /&gt;
==Network Referencing / Channels==&lt;br /&gt;
&lt;br /&gt;
All cable networks have 8 Channels which can have data loaded from/stored to via a device and connection reference. Connections for each supported device are listed in the stationpedia. All &#039;connections&#039; a device can make are a connection (pipe, chute, cable), but only cable networks have channels.&lt;br /&gt;
&lt;br /&gt;
The 8 channels (Channel0 to Channel7) are however volatile, in that data is destroyed if any part of the cable network is changed, removed, or added to, and also whenever the world is exited. All these channels default to NaN. Strictly speaking, they default to what we would call &amp;quot;quiet NaN&amp;quot;, in that its not an error it simply means its not a number yet. Recommend you use these channels for reading and writing between networks, rather than as a data store. This effectively means an IC can read all the networks for all devices to connected to it, so not just their own local network, but any networks any device they can reference is connected to.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# d0 is device zero, and the :0 refers&lt;br /&gt;
# to that device&#039;s 0 connection&lt;br /&gt;
l r0 d0:0 Channel0}}&lt;br /&gt;
&lt;br /&gt;
For example: on an IC Housing, the 0 connection is the data port and 1 is power, so you could write out r0 to Channel0 of the power network of the Housing using &amp;lt;code&amp;gt;s db:1 Channel0 r0&amp;lt;/code&amp;gt;&lt;br /&gt;
{{ICCode|&lt;br /&gt;
#read all 8 channels with a loop and&lt;br /&gt;
#place the values in r0 to r7&lt;br /&gt;
move r15 LogicType.Channel0 #LogicType integer&lt;br /&gt;
move r14 0 #pointer for indirect referencing&lt;br /&gt;
loop:&lt;br /&gt;
l rr14 db:0 r15&lt;br /&gt;
add r15 r15 1 #next channel&lt;br /&gt;
add r14 r14 1 #next register&lt;br /&gt;
ble r15 LogicType.Channel7 loop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Logic gates, Bitwise and Logical==&lt;br /&gt;
&lt;br /&gt;
All logic gates in MIPS have a bitwise behavior. The available gates are NOT, AND, OR, XOR and NOR (XNOR and NAND are missing).&lt;br /&gt;
&lt;br /&gt;
In Bitwise operations, each bit is matched separately, which includes the sign bit.&lt;br /&gt;
&lt;br /&gt;
To understand what is going on with bitwise operations, a little bit of computer theory is needed. In Stationeers each register uses 64 bits for integer values (a number without decimals), where the 64th bit is the sign-bit (0 for positive and 1 for negative). Since the number 0 is counted as a positive value, this gives each register a range of (2^63 - 1) to -2^63. Negative numbers also behave according to Two&#039;s complement (https://en.wikipedia.org/wiki/Two%27s_complement). Which means that a number with a sign-bit of 1 will have all of its number bits flipped as well, so that the decimal value of -1 is represented by a binary value of sixtyfour 1&#039;s (this is the smallest possible negative integer since zero counts as a positive integer).&lt;br /&gt;
&lt;br /&gt;
MIPS have binary notation (https://en.wikipedia.org/wiki/Binary_number) that is activated by placing a % in front of the number. The _ characters are ignored and only used for readability.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;not r0 0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# 0 = %00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# flip all bits&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# -1 = %11111111_11111111_11111111_11111111_11111111_11111111_11111111_11111111&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# r0 equals -1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;and r0 3 6&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# 3 = %011&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# 6 = %110&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# only the bits in the &amp;quot;2&amp;quot; position are matching&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# r0 equals %010 = 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logical operations can still be performed via alternative instructions. But these are not perfect substitutes, they treat negative values differently, and some can produce non-binary outputs. When using these, keep in mind that devices that wants a binary value will treat any non-binary values like this: &amp;gt;= 1 counts as &amp;quot;1&amp;quot; and &amp;lt;1 counts as &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# r0 = result&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# r1 = input A&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# r2 = input B&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Logical NOT = seqz r0 r1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Logical AND = min r0 r1 r2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Logical OR = max r0 r1 r2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Logical XOR = sne r0 r1 r2 (only for binary inputs)&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Logical NAND = not and&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Logical NOR = not or&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Logical XNOR = not xor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Debugging advices==&lt;br /&gt;
The value stored in a register or variable can easily be displayed by writing it to the Setting parameter of the IC housing. This has no side effects unless the housing is an [[Air Conditioner]]. To see the value, just stand close to the IC housing and look directly at the housing.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;s db Setting r0&amp;lt;/code&amp;gt;. # sets/writes the value of register &#039;&#039;&#039;r0&#039;&#039;&#039; into the parameter &#039;&#039;&#039;Setting&#039;&#039;&#039; of the IC Housing(&#039;&#039;&#039;db&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
To check if a certain block of code is executed, use the above trick but with a random number that you choose, like the line number.&amp;lt;br&amp;gt; This example will display the number 137 on the IC housing.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;s db Setting 137&amp;lt;/code&amp;gt;  # sets/writes the number 137 into the parameter &#039;&#039;&#039;Setting&#039;&#039;&#039; of the IC Housing(&#039;&#039;&#039;db&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Always use unique names for labels. When a label is named after a IC10 keyword like &amp;quot;Temperature:&amp;quot; or &amp;quot;Setting:&amp;quot; the original meaning of the keyword is overwritten, so when an instruction tries to use it an error will occur.&lt;br /&gt;
&lt;br /&gt;
A [[Cartridge#Configuration|configuration cartridge]] installed in a [[Handheld_Tablet|tablet]]  can be used to see all available values and configuration parameter for all devices you focus on.&lt;br /&gt;
&lt;br /&gt;
==Learning IC10==&lt;br /&gt;
IC10 can be difficult to get started with. So here is a list of instructions that are useful for beginners. These can be used to write many different scripts.&lt;br /&gt;
&lt;br /&gt;
General:&lt;br /&gt;
* &amp;lt;code&amp;gt;alias&amp;lt;/code&amp;gt; make the script easier to read by assigning a name to a register or device, example: &amp;lt;code&amp;gt;alias rTemperature r15&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;label:&amp;lt;/code&amp;gt; where &amp;quot;label&amp;quot; can be replaced with almost any word, jump and branch instructions can use these in place of line numbers, example: &amp;lt;code&amp;gt;start:&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; pause for 1-tick and then resume, if not used the script will automatically pause for 1-tick after 128 lines&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Jumps:&lt;br /&gt;
*&amp;lt;code&amp;gt;j someLabelName&amp;lt;/code&amp;gt; jump to line with &#039;&#039;&#039;someLabelName&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;code&amp;gt;jal someLabelName&amp;lt;/code&amp;gt; stores the next line number into the register ra (return address) and then jump to &#039;&#039;&#039;someLabelName&#039;&#039;&#039;&lt;br /&gt;
*&amp;lt;code&amp;gt;j ra&amp;lt;/code&amp;gt; jump to register ra (return address)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Branching (jump-if):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;beq a(r?|num) b(r?|num) c(r?|num)&amp;lt;/code&amp;gt; if &#039;&#039;&#039;a&#039;&#039;&#039; is equal to &#039;&#039;&#039;b&#039;&#039;&#039; goto &#039;&#039;&#039;c&#039;&#039;&#039;  (label or linenumber) &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bne a(r?|num) b(r?|num) c(r?|num)&amp;lt;/code&amp;gt; if  &#039;&#039;&#039;a&#039;&#039;&#039; not-equal &#039;&#039;&#039;b&#039;&#039;&#039; goto  &#039;&#039;&#039;c&#039;&#039;&#039; (label or linenumber) &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bgt a(r?|num) b(r?|num) c(r?|num)&amp;lt;/code&amp;gt; if  &#039;&#039;&#039;a&#039;&#039;&#039; greater than &#039;&#039;&#039;b&#039;&#039;&#039; goto   &#039;&#039;&#039;c&#039;&#039;&#039; (label or linenumber) &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;blt a(r?|num) b(r?|num) c(r?|num)&amp;lt;/code&amp;gt; if  &#039;&#039;&#039;a&#039;&#039;&#039; less than &#039;&#039;&#039;b&#039;&#039;&#039; goto &#039;&#039;&#039;c&#039;&#039;&#039; (label or linenumber) &amp;lt;br&amp;gt;&lt;br /&gt;
The suffix -al can be added to each of these (example: beqal) to save the &#039;&#039;&#039;next&#039;&#039;&#039; line number into the &amp;quot;return address&amp;quot; register. this is called using &amp;lt;code&amp;gt;j ra&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Device interactions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l (load)&lt;br /&gt;
lb (load batch, requires one of the following: 0(Average) / 1(Sum) / 2(Minimum) / 3(Maximum))&lt;br /&gt;
ls (load slot)&lt;br /&gt;
s (store)&lt;br /&gt;
sb (store batch)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Logic and Math:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
seqz (common NOT-gate: turns 0 into 1, and all other values into 0)&lt;br /&gt;
move&lt;br /&gt;
add (addition)&lt;br /&gt;
sub (subtraction)&lt;br /&gt;
mul (multiplication)&lt;br /&gt;
div (division)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Common device variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
On (1 is on, 0 is off)&lt;br /&gt;
Open (1 is open, 0 is closed)&lt;br /&gt;
Setting (meaning varies between devices, example: a LED display(console) will show this value)&lt;br /&gt;
Activate (1 usually means running, example: a Daylight sensor is 1 when the sun shines on it)&lt;br /&gt;
Temperature (in Kelvin, Celsius - 273.15)&lt;br /&gt;
Pressure (in kPa)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Notes:&lt;br /&gt;
&amp;lt;br&amp;gt;-All instructions and variables can be seen in-game in the IC editor window by clicking the &amp;quot;f&amp;quot;, &amp;quot;x&amp;quot; and &amp;quot;s(x)&amp;quot; buttons on the top right.&lt;br /&gt;
&amp;lt;br&amp;gt;-The stationpedia is the best source to see which variables are available to each device.&lt;br /&gt;
&amp;lt;br&amp;gt;-Most scripts are loops, they end with a jump instruction that leads back up to the start. Otherwise they will just run once and then stop.&lt;br /&gt;
&lt;br /&gt;
Two practice scripts:&lt;br /&gt;
&amp;lt;br&amp;gt;Automatic Night Light: Load &amp;quot;Activate&amp;quot; from a Daylight sensor, flip the value with a NOT-gate, store the value to the &amp;quot;On&amp;quot; variable of one or more lights.&lt;br /&gt;
&amp;lt;br&amp;gt;Automatic Wall Cooler: Read &amp;quot;Temperature&amp;quot; from a Gas Sensor. Branch if the value is greater than X, turn on the cooler. Branch if the value is less than Y, turn off the cooler. (Wall coolers need a minimum of 12.5 kPa pressure in the connected pipe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Accessing devices via batch or ReferenceId ==&lt;br /&gt;
&lt;br /&gt;
The IC housing has 6 pins you can use to configure the devices it&lt;br /&gt;
uses.  This provides flexibility to let the installer configure which&lt;br /&gt;
devices will be controlled by the IC.&lt;br /&gt;
&lt;br /&gt;
Alternatives for accessing devices include the batch load/store and&lt;br /&gt;
the ReferenceId load/store instructions.&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# get the average charge ratio across station batteries&lt;br /&gt;
lb r0 HASH(&amp;quot;StructureBattery&amp;quot;) Ratio Average&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# get the ReferenceId for the sorter named &amp;quot;Sorter Corn&amp;quot;&lt;br /&gt;
lbn r1 HASH(&amp;quot;StructureLogicSorter&amp;quot;) HASH(&amp;quot;Sorter Corn&amp;quot;) ReferenceId Maximum&lt;br /&gt;
ble r1 ninf ra&lt;br /&gt;
#use the ReferenceId to set that sorter&#039;s mode.&lt;br /&gt;
sd r1 Mode 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Using the 6 configuration pins makes it easy to write reusable MIPS&lt;br /&gt;
scripts where the installer uses the pins to select the devices that&lt;br /&gt;
will be managed.&lt;br /&gt;
&lt;br /&gt;
Using batch-name instructions frees you from the hassle of adjusting&lt;br /&gt;
the pins, but requires you to name the devices via the [[Labeller]].  It&lt;br /&gt;
can also allow you to control more than 6 devices.&lt;br /&gt;
&lt;br /&gt;
=== Batch instructions ===&lt;br /&gt;
&lt;br /&gt;
The batch instructions can address multiple devices only via their &#039;&#039;&#039;PrefabHash&#039;&#039;&#039; generated from the prefab name using the `HASH(&amp;quot;Name&amp;quot;)` macro or copied directly from the [[Stationpedia]]. A prefab hash is always an integer. All devices that can be read with logic contain the logic value &#039;&#039;&#039;PrefabHash&#039;&#039;&#039; and &#039;&#039;&#039;NameHash&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
See [[#Slot.2FLogic_.2F_Batched|Batched instructions]] for a comprehensive list of all batch instructions.&lt;br /&gt;
&lt;br /&gt;
[[#sb|sb]], [[#sbn|sbn]], [[#sbs|sbs]], (no sbns)&amp;lt;br&amp;gt;&lt;br /&gt;
[[#lb|lb]], [[#lbs|lbs]], [[#lbn|lbn]], [[#lbns|lbns]]&lt;br /&gt;
&lt;br /&gt;
=== Direct reference instructions ===&lt;br /&gt;
&lt;br /&gt;
Direct reference instructions can address a specific device via its &#039;&#039;&#039;ReferenceId&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[#clrd|clrd]], [[#getd|getd]], [[#putd|putd]],&amp;lt;br&amp;gt;&lt;br /&gt;
[[#ld|ld]], [[#sd|sd]], (no slot access via reference ID)&lt;br /&gt;
&lt;br /&gt;
=Instructions=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
See [[IC10/instructions]]&lt;br /&gt;
&lt;br /&gt;
{{:IC10/instructions}}&lt;br /&gt;
&lt;br /&gt;
[https://www.cs.tufts.edu/comp/140/lectures/Day_3/mips_summary.pdf Other examples]&lt;br /&gt;
&lt;br /&gt;
== Conditional functions cheatsheet ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! suffix !! description !! branch to line !! branch and store return address !! relative jump to line !! set register&lt;br /&gt;
|-&lt;br /&gt;
| prefix: ||  || b- || b-al || br- || s-&lt;br /&gt;
|-&lt;br /&gt;
|  || unconditional || j    || jal    || jr    || &lt;br /&gt;
|-&lt;br /&gt;
| -eq  || if a == b || beq  || beqal  || breq  || seq&lt;br /&gt;
|-&lt;br /&gt;
| -eqz || if a == 0 || beqz || beqzal || breqz || seqz&lt;br /&gt;
|-&lt;br /&gt;
| -ge  || if a &amp;gt;= b || bge  || bgeal  || brge  || sge&lt;br /&gt;
|-&lt;br /&gt;
| -gez || if a &amp;gt;= 0 || bgez || bgezal || brgez || sgez&lt;br /&gt;
|-&lt;br /&gt;
| -gt  || if a &amp;gt; b  || bgt  || bgtal  || brgt  || sgt&lt;br /&gt;
|-&lt;br /&gt;
| -gtz || if a &amp;gt; 0  || bgtz || bgtzal || brgtz || sgtz&lt;br /&gt;
|-&lt;br /&gt;
| -le  || if a &amp;lt;= b || ble  || bleal  || brle  || sle&lt;br /&gt;
|-&lt;br /&gt;
| -lez || if a &amp;lt;= 0 || blez || blezal || brlez || slez&lt;br /&gt;
|-&lt;br /&gt;
| -lt  || if a &amp;lt; b  || blt  || bltal  || brlt  || slt&lt;br /&gt;
|-&lt;br /&gt;
| -ltz || if a &amp;lt; 0  || bltz || bltzal || brltz || sltz&lt;br /&gt;
|-&lt;br /&gt;
| -ne  || if a != b || bne  || bneal  || brne  || sne&lt;br /&gt;
|-&lt;br /&gt;
| -nez || if a != 0 || bnez || bnezal || brnez || snez&lt;br /&gt;
|-&lt;br /&gt;
| -nan || if a == NaN || bnan ||  || brnan || snan&lt;br /&gt;
|-&lt;br /&gt;
| -nanz || if a != NaN ||  ||  || || snanz&lt;br /&gt;
|-&lt;br /&gt;
| -dns || if device d is not set          || bdns || bdnsal || brdns || sdns&lt;br /&gt;
|-&lt;br /&gt;
| -dse || if device d is set              || bdse || bdseal || brdse || sdse&lt;br /&gt;
|-&lt;br /&gt;
| -ap  || if a approximately equals b     || bap  || bapal  || brap  || sap&lt;br /&gt;
|-&lt;br /&gt;
| -apz || if a approximately equals 0     || bapz || bapzal || brapz || sapz&lt;br /&gt;
|-&lt;br /&gt;
| -na  || if a not approximately equals b || bna  || bnaal  || brna  || sna&lt;br /&gt;
|-&lt;br /&gt;
| -naz || if a not approximately equals 0 || bnaz || bnazal || brnaz || snaz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;code&amp;gt;b-&amp;lt;/code&amp;gt; commands require target line as last argument, all &amp;lt;code&amp;gt;s-&amp;lt;/code&amp;gt; commands require register to store result as first argument. All &amp;lt;code&amp;gt;br-&amp;lt;/code&amp;gt; commands require number to jump relatively as last argument. e.g. &amp;lt;code&amp;gt;breq a b 3&amp;lt;/code&amp;gt; means if a=b then jump to 3 lines after.&lt;br /&gt;
&lt;br /&gt;
All approximate functions require additional argument denoting how close two numbers need to be considered equal. E.g.: &amp;lt;code&amp;gt;sap r0 100 101 0.01&amp;lt;/code&amp;gt; will consider 100 and 101 almost equal (not more than 1%=0.01 different) and will set r0 to 1. The exact formula is &amp;lt;code&amp;gt;if abs(a - b) &amp;lt;= max(c * max(abs(a), abs(b)), float.epsilon * 8)&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;-ap&amp;lt;/code&amp;gt; and is similar for other approximate functions.&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Machine_epsilon&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
  FLT_EPSILON = 2^(−23) ≈ 1.19e−07;        &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;float (32 bit)&amp;lt;/span&amp;gt;&lt;br /&gt;
  DBL_EPSILON = 2^(−52) ≈ 2.20e−16;        &amp;lt;span style=&amp;quot;color:#4c9700;&amp;quot;&amp;gt;double (64 bit)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;if abs(100 - 101) &amp;lt;= max(0.01 * max(abs(100), abs(101)), float.epsilon * 8)&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;if abs(-1) &amp;lt;= max(0.01 * 101, float.epsilon * 8)&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;if 1 &amp;lt;= max(0.01 * 101, float.epsilon * 8)&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;if 1 &amp;lt;= max(1.01, FLT_EPSILON * 8)&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#4c9700;&amp;quot;&amp;gt;if 1 &amp;lt;= max(1.01, DBL_EPSILON * 8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;if 1 &amp;lt;= max(1.01, 1.19e−07 * 8)&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#4c9700;&amp;quot;&amp;gt;if 1 &amp;lt;= max(1.01, 2.20e−16 * 8)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;if 1 &amp;lt;= max(1.01, 0.000000952)&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#4c9700;&amp;quot;&amp;gt;if 1 &amp;lt;= max(1.01, 0.00000000000000176)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;if 1 &amp;lt;= 1.01   TRUE   1&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:#4c9700;&amp;quot;&amp;gt;if 1 &amp;lt;= 1.01   TRUE   1&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Device Variables==&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Activate&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Activate&lt;br /&gt;
:1 if device is activated (usually means running), otherwise 0&lt;br /&gt;
:&amp;lt;code&amp;gt;l r0 d0 Activate # sets r0 to 1 if on or 0 if off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;AirRelease&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;AirRelease&lt;br /&gt;
&amp;lt;div id=&amp;quot;Charge&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Charge&lt;br /&gt;
:    The current charge the device has.&lt;br /&gt;
&amp;lt;div id=&amp;quot;CLearMemory&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ClearMemory&lt;br /&gt;
:    When set to 1, clears the counter memory (e.g. ExportCount).  Will set itself back to 0 when triggered.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Color&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Color&lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#212AA5;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;0 (or lower) = Blue&lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#7B7B7B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;1 = Grey &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#3F9B39;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;2 = Green &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#FF662B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;3 = Orange &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#E70200;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;4 = Red &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#FFBC1B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;5 = Yellow &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#E7E7E7;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;6 = White &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#080908;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;7 = Black &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#633C2B;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;8 = Brown &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#63633F;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;9 = Khaki &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#E41C99;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;10 = Pink &lt;br /&gt;
:    &amp;lt;div style=&amp;quot;display: inline-block; vertical-align: top; height: 20px; width: 20px; border: 1px solid black; margin-right: 5px; background-color:#732CA7;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;amp;nbsp;11 (or higher) = Purple &lt;br /&gt;
&amp;lt;div id=&amp;quot;CompletionRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;CompletionRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;ElevatorLevel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ElevatorLevel&lt;br /&gt;
&amp;lt;div id=&amp;quot;ElevatorSpeed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ElevatorSpeed&lt;br /&gt;
&amp;lt;div id=&amp;quot;Error&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Error&lt;br /&gt;
:	1 if device is in error state, otherwise 0&lt;br /&gt;
&amp;lt;div id=&amp;quot;ExportCount&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ExportCount&lt;br /&gt;
:    How many items exporfted since last ClearMemory.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Filtration&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Filtration&lt;br /&gt;
:	The current state of the filtration system.  For example filtration = 1 for a Hardsuit when filtration is On.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Harvest&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Harvest&lt;br /&gt;
:	Performs the harvesting action for any plant based machinery.&lt;br /&gt;
:  &amp;lt;code&amp;gt;s d0 Harvest 1 # Performs 1 harvest action on device d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Horizontal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Horizontal&lt;br /&gt;
&amp;lt;div id=&amp;quot;HorizontalRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;HorizontalRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;Idle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Idle&lt;br /&gt;
&amp;lt;div id=&amp;quot;ImportCount&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ImportCount&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lock&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Lock&lt;br /&gt;
&amp;lt;div id=&amp;quot;Maximum&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Maximum&lt;br /&gt;
&amp;lt;div id=&amp;quot;Mode&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Mode&lt;br /&gt;
&amp;lt;div id=&amp;quot;On&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;On&lt;br /&gt;
&amp;lt;div id=&amp;quot;Open&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Open&lt;br /&gt;
&amp;lt;div id=&amp;quot;Output&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Output&lt;br /&gt;
&amp;lt;div id=&amp;quot;Plant&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Plant&lt;br /&gt;
:    Performs the planting operation for any plant based machinery.&lt;br /&gt;
:  &amp;lt;code&amp;gt;s d0 Plant 1 # Plants one crop in device d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionX&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionX&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionY&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionY&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionZ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionZ&lt;br /&gt;
&amp;lt;div id=&amp;quot;Power&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Power&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerActual&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerActual&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerPotential&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerPotential&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerRequired&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerRequired&lt;br /&gt;
&amp;lt;div id=&amp;quot;Pressure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Pressure&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureExternal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureExternal&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureInteral&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureInteral&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureSetting&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureSetting&lt;br /&gt;
&amp;lt;div id=&amp;quot;Quantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Quantity&lt;br /&gt;
:	Total quantity in the device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Ratio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Ratio&lt;br /&gt;
:	Context specific value depending on device, 0 to 1 based ratio.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioCarbonDioxide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioCarbonDioxide&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioNitrogen&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioNitrogen&lt;br /&gt;
:	The ratio of nitrogen in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioOxygen&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioOxygen&lt;br /&gt;
:	The ratio of oxygen in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioPollutant&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioPollutant&lt;br /&gt;
:	The ratio of pollutant in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioVolatiles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioVolatiles&lt;br /&gt;
:	The ratio of volatiles in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioWater&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioWater&lt;br /&gt;
:	The ratio of water in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Reagents&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Reagents&lt;br /&gt;
&amp;lt;div id=&amp;quot;RecipeHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RecipeHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;RequestHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ReferenceId&lt;br /&gt;
:    Unique Identifier of a Device, this value is different for every device in a save.&lt;br /&gt;
&amp;lt;div id=&amp;quot;ReferenceId&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RequestHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;RequiredPower&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RequiredPower&lt;br /&gt;
&amp;lt;div id=&amp;quot;Setting&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Setting&lt;br /&gt;
&amp;lt;div id=&amp;quot;SolarAngle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;SolarAngle&lt;br /&gt;
:    Solar angle of the device.&lt;br /&gt;
:  &amp;lt;code&amp;gt;l r0 d0 SolarAngle # Sets r0 to the solar angle of d0.&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Temperature&lt;br /&gt;
&amp;lt;div id=&amp;quot;TemperatureSettings&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;TemperatureSettings&lt;br /&gt;
&amp;lt;div id=&amp;quot;TotalMoles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;TotalMoles&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityMagnitude&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityMagnitude&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeX&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeX&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeY&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeY&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeZ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeZ&lt;br /&gt;
&amp;lt;div id=&amp;quot;Vertical&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Vertical&lt;br /&gt;
:	Vertical setting of the device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;VerticalRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VerticalRatio&lt;br /&gt;
:	Ratio of vertical setting for device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Volume&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Volume&lt;br /&gt;
:	Returns the device atmosphere volume&lt;br /&gt;
&lt;br /&gt;
==Slot Variables==&lt;br /&gt;
In general (exceptions exist such as filtration units) slots are assigned as follows.&lt;br /&gt;
:Slot 0: Import&lt;br /&gt;
:Slot 1: Export&lt;br /&gt;
:Slot 2: Inside Machine&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Occupied&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Occupied&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 2 Occupied #Stores 1 in r0 if d0 has more seeds&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ls vOccupied dThisVictim 2 Occupied #stores 1 in vOccupied if dThisVictim has more seeds&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OccupantHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;OccupantHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;Quantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Quantity&lt;br /&gt;
&amp;lt;div id=&amp;quot;Damage&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Damage&lt;br /&gt;
&amp;lt;div id=&amp;quot;Efficiency&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Efficiency&lt;br /&gt;
&amp;lt;div id=&amp;quot;FilterType&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;FilterType&lt;br /&gt;
Reports the type of filter installed in the slot (e.g. in a Filtration unit).&lt;br /&gt;
:Return Values: 1: Oxygen, 2: Nitrogen, 4: Carbon Dioxide, 8: Volatiles, 16: Pollutants, 32: Water, 64: Nitrous Oxide&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 db 0 FilterType&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Health&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Health&lt;br /&gt;
&amp;lt;div id=&amp;quot;Growth&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Growth&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 0 Growth # Store the numerical growth stage of d0 in r0&amp;lt;/code&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;Pressure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Pressure&lt;br /&gt;
&amp;lt;div id=&amp;quot;Temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Temperature&lt;br /&gt;
&amp;lt;div id=&amp;quot;Charge&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Charge&lt;br /&gt;
&amp;lt;div id=&amp;quot;ChargeRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ChargeRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;Class&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Class&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureWaste&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureWaste&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureAir&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureAir&lt;br /&gt;
&amp;lt;div id=&amp;quot;MaxQuantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;MaxQuantity&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Mature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Mature&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 0 Mature # Store 1 in r0 if d0 has a mature crop&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ls vMature dThisVictim 0 Mature # Store 1 in vMature if dThisVictim has a mature crop&amp;lt;/code&amp;gt;&lt;br /&gt;
;ReferenceId&lt;br /&gt;
:    Unique Identifier of a Device, this value is different for every device in a save.&lt;br /&gt;
&amp;lt;div id=&amp;quot;ReferenceId&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
Previous examples were obsolete due to game changes, or confusing, they have been moved into the Discussions section&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Harvie automation===&lt;br /&gt;
This script uses the batch instruction &amp;lt;code&amp;gt;sb ...&amp;lt;/code&amp;gt; to control all Harvie devices on the network. But only one Harvie and one Tray will be the &#039;&#039;master&#039;&#039; and have their values read, the rest of the Harvies will repeat exactly what this unit does. Some problems with this design is that different types of crops mature at different speeds, and if seeds were manually planted and the master unit recieved the first seed, the harvesting action will be performed too early on all the other plants since they are growing a few seconds slower.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, Automated Harvie Script}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, Automated Harvie Script}}&amp;quot;&amp;gt;&lt;br /&gt;
{{ICCode|&lt;br /&gt;
alias dHarvie d0&lt;br /&gt;
alias dTray d1&lt;br /&gt;
&lt;br /&gt;
alias rHarvieHash r8&lt;br /&gt;
alias rTrayHash r9&lt;br /&gt;
l rHarvieHash dHarvie PrefabHash&lt;br /&gt;
l rTrayHash dTray PrefabHash&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
yield&lt;br /&gt;
#read plant data from the Tray&lt;br /&gt;
ls r0 dTray 0 Mature&lt;br /&gt;
#harvestable plants return 1, young plants return 0&lt;br /&gt;
#nothing planted returns -1&lt;br /&gt;
beq r0 -1 plantCrop&lt;br /&gt;
beq r0 1 harvestCrop&lt;br /&gt;
ls r0 dTray 0 Seeding&lt;br /&gt;
#seeds available returns 1, all seeds picked returns 0&lt;br /&gt;
#plants too young or old for seeds returns -1&lt;br /&gt;
beq r0 1 harvestCrop&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
plantCrop:&lt;br /&gt;
#stop the planting if no seeds available&lt;br /&gt;
#otherwise it will plant nothing repeatedly&lt;br /&gt;
ls r0 dHarvie 0 Occupied&lt;br /&gt;
beq r0 0 main&lt;br /&gt;
sb rHarvieHash Plant 1&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
harvestCrop:&lt;br /&gt;
sb rHarvieHash Harvest 1&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
### End Script ###&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Solar Panel 2-axis tracking===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, Solar Panel 2-axis tracking}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, Solar Panel 2-axis tracking}}&amp;quot;&amp;gt;&lt;br /&gt;
{{ICCode|&lt;br /&gt;
#2 Axis Solar Tracking adapted from CowsAreEvil.&lt;br /&gt;
#Place all panels in uniform manner.&lt;br /&gt;
#Set one to 15 Vertical(Min value). 0 Horizontal.&lt;br /&gt;
#Take note direction panel faces.&lt;br /&gt;
#Place daylight sensor flat pointing in the direction&lt;br /&gt;
#the panel now faces. (Cable port facing opposite)&lt;br /&gt;
&lt;br /&gt;
#Alias the sensor to d0&lt;br /&gt;
alias sensor d0&lt;br /&gt;
&lt;br /&gt;
# define the Panel variants&lt;br /&gt;
define Heavy -934345724&lt;br /&gt;
define HeavyDual -1545574413&lt;br /&gt;
define Solar -2045627372&lt;br /&gt;
define SolarDual -539224550&lt;br /&gt;
&lt;br /&gt;
start:&lt;br /&gt;
yield&lt;br /&gt;
#Check for daylight.&lt;br /&gt;
l r0 sensor Activate&lt;br /&gt;
beqz r0 reset&lt;br /&gt;
#Read the Horizontal data.&lt;br /&gt;
l r0 sensor Horizontal&lt;br /&gt;
#Set batch to the panels.&lt;br /&gt;
sb Heavy Horizontal r0&lt;br /&gt;
sb HeavyDual Horizontal r0&lt;br /&gt;
sb Solar Horizontal r0&lt;br /&gt;
sb SolarDual Horizontal r0&lt;br /&gt;
#Read the Vertical data and subtract 90&lt;br /&gt;
l r0 sensor Vertical&lt;br /&gt;
sub r0 90 r0&lt;br /&gt;
#Set batch to the panels.&lt;br /&gt;
sb Heavy Vertical r0&lt;br /&gt;
sb HeavyDual Vertical r0&lt;br /&gt;
sb Solar Vertical r0&lt;br /&gt;
sb SolarDual Vertical r0&lt;br /&gt;
j start&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
yield&lt;br /&gt;
sb Heavy Horizontal 270 #Edit this to face sunrise.&lt;br /&gt;
sb HeavyDual Horizontal 270 #Edit this&lt;br /&gt;
sb Solar Horizontal 270 #Edit this&lt;br /&gt;
sb SolarDual Horizontal 270 #Edit this&lt;br /&gt;
sb Heavy Vertical 0&lt;br /&gt;
sb HeavyDual Vertical 0&lt;br /&gt;
sb Solar Vertical 0&lt;br /&gt;
sb SolarDual Vertical 0&lt;br /&gt;
sleep 10&lt;br /&gt;
j start&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===IC10 Schmitt Trigger - Sensor Range Based Device Toggle===&lt;br /&gt;
This script demonstrates the IC10 style Schmitt Trigger Pattern in basic examples using the &amp;lt;code&amp;gt;select&amp;lt;/code&amp;gt; instruction with its ternary condition to toggle a device &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; state based on a range of sensor readings.  Examples for both styles are provided below, i.e. &#039;cooling&#039; or &#039;heating&#039;, for &#039;below min&#039; or &#039;greater than max&#039; style range-based toggle.  A temperature based control is shown in the examples, but any sensor reading could be used to dynamically toggle a device &amp;lt;code&amp;gt;On&amp;lt;/code&amp;gt; state such pressure, charge ratio, solar angle, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, IC10 Schmitt Trigger Pattern}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, IC10 Schmitt Trigger Pattern}}&amp;quot;&amp;gt;&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# ---- IC10 Schmitt Trigger ----&lt;br /&gt;
# -- Standard - i.e. &amp;quot;cooling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#When the temperature sensor device reports a value&lt;br /&gt;
# higher than TempMax and the valve is not On, the&lt;br /&gt;
# valve will turn On.&lt;br /&gt;
&lt;br /&gt;
#When the valve is On, and the sensor device reports&lt;br /&gt;
# higher than TempMin, the valve will remain on.&lt;br /&gt;
&lt;br /&gt;
#Once that sensor reports a temperature lower than&lt;br /&gt;
# TempMin, the valve will once again shut off and&lt;br /&gt;
# this cycle will continue indefinitely:&lt;br /&gt;
&lt;br /&gt;
define TempMax 296.15 #23C&lt;br /&gt;
define TempMin 283.15 #10C&lt;br /&gt;
&lt;br /&gt;
alias Valve d0&lt;br /&gt;
alias Sensor d1&lt;br /&gt;
&lt;br /&gt;
example1:&lt;br /&gt;
 yield&lt;br /&gt;
 l r0 Valve On&lt;br /&gt;
 select r0 r0 TempMin TempMax&lt;br /&gt;
 l r1 Sensor Temperature&lt;br /&gt;
 sgt r0 r1 r0&lt;br /&gt;
 s Valve On r0&lt;br /&gt;
j example1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- IC10 Schmitt Trigger ----&lt;br /&gt;
# -- Inverted - i.e. &amp;quot;heating&amp;quot;&lt;br /&gt;
#When the temperature sensor device reports a value&lt;br /&gt;
# lower than TempMin and the valve is not On, the&lt;br /&gt;
# valve will turn On.&lt;br /&gt;
&lt;br /&gt;
#When the valve is On, and the sensor device reports&lt;br /&gt;
# lower than TempMax, the valve will remain on.&lt;br /&gt;
&lt;br /&gt;
#Once that sensor reports a temperature higher than&lt;br /&gt;
# TempMax, the valve will once again shut off and&lt;br /&gt;
# this cycle will continue indefinitely:&lt;br /&gt;
&lt;br /&gt;
define TempMax 296.15 #23C&lt;br /&gt;
define TempMin 283.15 #10C&lt;br /&gt;
&lt;br /&gt;
alias Valve d0&lt;br /&gt;
alias Sensor d1&lt;br /&gt;
&lt;br /&gt;
example2:&lt;br /&gt;
 yield&lt;br /&gt;
 l r0 Valve On&lt;br /&gt;
 select r0 r0 TempMax TempMin&lt;br /&gt;
 l r1 Sensor Temperature&lt;br /&gt;
 slt r0 r1 r0&lt;br /&gt;
 s Valve On r0&lt;br /&gt;
j example2&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Example experiment: how many lines of code are executed each tick?===&lt;br /&gt;
To determine this, a script without &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; will be used. It should have as few lines as possible (so no labels are used, but a reset value at the top will be needed) and count the number of lines, the IC Housing will be used to display the result.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
move r0 1   #the first line has number 0&lt;br /&gt;
add r0 r0 3&lt;br /&gt;
s db Setting r0&lt;br /&gt;
j 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Result (the numbers appears every 0.5 seconds):&lt;br /&gt;
&amp;lt;br&amp;gt;127&lt;br /&gt;
&amp;lt;br&amp;gt;256 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;385 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;511 (+126)&lt;br /&gt;
&amp;lt;br&amp;gt;640 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;769 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;895 (+126)&lt;br /&gt;
&amp;lt;br&amp;gt;1024 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;1153 (+129)&lt;br /&gt;
&lt;br /&gt;
There is a repeating +129, +129, +126 sequence, a hint that the real value is 128. Which also happens to be the number of lines in a script, which makes sense. A variation of this experiment will show that empty rows are also counted towards this number.&lt;br /&gt;
&lt;br /&gt;
===Push &amp;amp; Pop return address when calling multiple levels of functions===&lt;br /&gt;
More advanced scripts, or scripts that wish to be more generic, may want to allow calling more than one level of function. Allowing this requires pushing the current &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; register before calling the function, then popping &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; back afterward.&lt;br /&gt;
&lt;br /&gt;
For example, imagine that the main loop of the code wants to call function &amp;lt;code&amp;gt;orientPanelsToStar&amp;lt;/code&amp;gt;, which would calculate the panels&#039; orientations, then place them in &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;r1&amp;lt;/code&amp;gt;, and then in turn itself call &amp;lt;code&amp;gt;orientPanelsTo&amp;lt;/code&amp;gt;, which would set the orientations of all panels based on the precomputed values of &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;r1&amp;lt;/code&amp;gt;. Doing so requires &amp;lt;code&amp;gt;orientPanelsToStar&amp;lt;/code&amp;gt; to push &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; before calling &amp;lt;code&amp;gt;orientPanelsTo&amp;lt;/code&amp;gt;, as show in the code below.&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
orientPanelsToStar:&lt;br /&gt;
# Save return address set by the &#039;jal&#039; instruction&lt;br /&gt;
push ra&lt;br /&gt;
&lt;br /&gt;
# ...Calculate panels&#039; orientation, for example leaving the results in r0 and r1...&lt;br /&gt;
&lt;br /&gt;
# Now call orientPanelsTo to actually set the panels&#039; orientation&lt;br /&gt;
# based on the computed values of r0 and r1.&lt;br /&gt;
jal orientPanelsTo&lt;br /&gt;
&lt;br /&gt;
# ...Call other functions here if desired...&lt;br /&gt;
&lt;br /&gt;
# Restore the return address of orientPanelsToStar itself&lt;br /&gt;
pop ra&lt;br /&gt;
# Return to caller&lt;br /&gt;
j ra&lt;br /&gt;
&lt;br /&gt;
##########&lt;br /&gt;
&lt;br /&gt;
orientPanelsTo:&lt;br /&gt;
# ...Actually set panels&#039; orientation...&lt;br /&gt;
&lt;br /&gt;
# Return to caller&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This code would behave incorrectly if &amp;lt;code&amp;gt;push ra&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pop ra&amp;lt;/code&amp;gt; were not present: within &amp;lt;code&amp;gt;orientPanelsToStar&amp;lt;/code&amp;gt;, doing &amp;lt;code&amp;gt;jal orientPanelsTo&amp;lt;/code&amp;gt; would replace the current value of the &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; register, permanently erasing where &amp;lt;code&amp;gt;orientPanelsToStar&amp;lt;/code&amp;gt; itself should jump back to once done. Pushing and popping &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; effectively saves its value until we need it again.&lt;br /&gt;
&lt;br /&gt;
(A tempting but wrong approach to &#039;saving&#039; &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; would be to &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; it within a different register (e.g. &amp;lt;code&amp;gt;r15&amp;lt;/code&amp;gt;) before calling &amp;lt;code&amp;gt;orientPanelsTo&amp;lt;/code&amp;gt;, however that only permits two levels of functions, since if &amp;lt;code&amp;gt;orientPanelsTo&amp;lt;/code&amp;gt; itself wants to call another function, it would not be able to use &amp;lt;code&amp;gt;r15&amp;lt;/code&amp;gt; to save its &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; register since &amp;lt;code&amp;gt;r15&amp;lt;/code&amp;gt; already saves &amp;lt;code&amp;gt;orientPanelsToStar&amp;lt;/code&amp;gt;&#039;s return address. Just pushing/popping &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt; fixes all issues, allowing for a ginormous maximum function call depth of 512!)&lt;br /&gt;
&lt;br /&gt;
As a last note, if the script will push/pop values like &amp;lt;code&amp;gt;ra&amp;lt;/code&amp;gt;, starting the script by clearing the stack (which where push/pop move the data to) by running &amp;lt;code&amp;gt;clr db&amp;lt;/code&amp;gt; is advisable, unless the IC10 chip is not inserted inside an IC Housing (e.g. inserted in the slot of an Air Conditioner), since &amp;lt;code&amp;gt;clr db&amp;lt;/code&amp;gt; will cause an error in this case. To do so, run &amp;lt;code&amp;gt;clr db&amp;lt;/code&amp;gt; before the script&#039;s main loop.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
----&lt;br /&gt;
* Stationeers online IC10 Emulators so you can develop your code without repeatedly dying in game&lt;br /&gt;
** [https://ic10.dev/] Stationeers Code Simulator&lt;br /&gt;
** [https://ic10emu.dev] Stationeers IC10 Editor &amp;amp; Emulator - A feature packed code editor for Stationeers IC10 code, paired with a robust debugger and emulator. Edit, test, and share code.&lt;br /&gt;
** [https://stationeering.com/tools/ic] Stationeering provides a simulation of the IC10 chip inside Stationeers. IDE with error checking, full visibility of stack and registers.&lt;br /&gt;
* [http://www.easy68k.com/] EASy68K is a 68000 Structured Assembly Language IDE.&lt;br /&gt;
* [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10] syntax highlighting for IC10 MIPS for Visual Studio Code (updated Feb 10th 2022)&lt;br /&gt;
* [https://pastebin.com/6Uw1KSRN] syntax highlighting for IC10 MIPS for KDE kwrite/kate text editor&lt;br /&gt;
* [https://drive.google.com/file/d/1yEsJ-u94OkuMQ8K6fY7Ja1HNpLcAdjo_/view] syntax highlighting for IC10 MIPS for Notepad++&lt;br /&gt;
* [https://drive.google.com/file/d/1Xrv5U0ZI5jDcPv7yX7EAAxaGk5hKP0xO/view?usp=sharing] syntax highlighting for IC10 MIPS for Notepad++ (updated: 11/08/2022)&lt;br /&gt;
* [https://pastebin.com/3kmGy0NN] syntax highlighting for IC10 MIPS for Notepad++ (updated: 23/03/2024)&lt;br /&gt;
* [https://github.com/SnorreSelmer/stationeers_ic10/blob/main/README.md] Repo with a lot of code examples&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Index=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+Functions &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#abs|abs]]&lt;br /&gt;
*[[#add|add]]&lt;br /&gt;
*[[#alias|alias]]&lt;br /&gt;
*[[#and|and]]&lt;br /&gt;
*[[#beq|beq]]&lt;br /&gt;
*[[#bgez|bgez]]&lt;br /&gt;
*[[#bgtz|bgtz]]&lt;br /&gt;
*[[#blez|blez]]&lt;br /&gt;
*[[#bltz|bltz]]&lt;br /&gt;
*[[#bne|bne]]&lt;br /&gt;
*[[#breq|breq]]&lt;br /&gt;
*[[#brgez|brgez]]&lt;br /&gt;
*[[#brgtz|brgtz]]&lt;br /&gt;
*[[#brlez|brlez]]&lt;br /&gt;
*[[#brltz|brltz]]&lt;br /&gt;
*[[#brne|brne]]&lt;br /&gt;
*[[#ceil|cell]]&lt;br /&gt;
*[[#div|div]]&lt;br /&gt;
*[[#exp|exp]]&lt;br /&gt;
*[[#floor|floor]]&lt;br /&gt;
*[[#j|j]]&lt;br /&gt;
*[[#jr|jr]]&lt;br /&gt;
*[[#l|l]]&lt;br /&gt;
*[[#log|log]]&lt;br /&gt;
*[[#ls|ls]]&lt;br /&gt;
*[[#max|max]]&lt;br /&gt;
*[[#min|min]]&lt;br /&gt;
*[[#mod|mod]]&lt;br /&gt;
*[[#move|move]]&lt;br /&gt;
*[[#mul|mul]]&lt;br /&gt;
*[[#nor|nor]]&lt;br /&gt;
*[[#or|or]]&lt;br /&gt;
*[[#rand|rand]]&lt;br /&gt;
*[[#round|round]]&lt;br /&gt;
*[[#s|s]]&lt;br /&gt;
*[[#slt|slt]]&lt;br /&gt;
*[[#sqrt|sqrt]]&lt;br /&gt;
*[[#sub|sub]]&lt;br /&gt;
*[[#trunc|trunc]]&lt;br /&gt;
*[[#xor|xor]]xor&lt;br /&gt;
*[[#yield|yield]]&lt;br /&gt;
*[[##|#]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|+Device Variables &lt;br /&gt;
&amp;lt;div  class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#Activate|Activate]]&lt;br /&gt;
*[[#AirRelease|AirRelease]]&lt;br /&gt;
*[[#Charge|Charge]]&lt;br /&gt;
*[[#CLearMemory|CLearMemory]]&lt;br /&gt;
*[[#Color|Color]]&lt;br /&gt;
*[[#CompletionRatio|CompletionRatio]]&lt;br /&gt;
*[[#ElevatorLevel|ElevatorLevel]]&lt;br /&gt;
*[[#ElevatorSpeed|ElevatorSpeed]]&lt;br /&gt;
*[[#Error|Error]]&lt;br /&gt;
*[[#ExportCount|ExportCount]]&lt;br /&gt;
*[[#Filtration|Filtration]]&lt;br /&gt;
*[[#Harvest|Harvest]]&lt;br /&gt;
*[[#Horizontal|Horizontal]]&lt;br /&gt;
*[[#HorizontalRatio|HorizontalRatio]]&lt;br /&gt;
*[[#Idle|Idle]]&lt;br /&gt;
*[[#ImportCount|ImportCount]]&lt;br /&gt;
*[[#Lock|Lock]]&lt;br /&gt;
*[[#Maximum|Maximum]]&lt;br /&gt;
*[[#Mode|Mode]]&lt;br /&gt;
*[[#On|On]]&lt;br /&gt;
*[[#Open|Open]]&lt;br /&gt;
*[[#Output|Output]]&lt;br /&gt;
*[[#Plant|Plant]]&lt;br /&gt;
*[[#PositionX|PositionX]]&lt;br /&gt;
*[[#PositionY|PositionY]]&lt;br /&gt;
*[[#PositionZ|PositionZ]]&lt;br /&gt;
*[[#Power|Power]]&lt;br /&gt;
*[[#PowerActual|PowerActual]]&lt;br /&gt;
*[[#PowerPotential|PowerPotential]]&lt;br /&gt;
*[[#PowerRequired|PowerRequired]]&lt;br /&gt;
*[[#Pressure|Pressure]]&lt;br /&gt;
*[[#PressureExternal|PressureExternal]]&lt;br /&gt;
*[[#PressureInteral|PressureInteral]]&lt;br /&gt;
*[[#PressureSetting|PressureSetting]]&lt;br /&gt;
*[[#Quantity|Quantity]]&lt;br /&gt;
*[[#Ratio|Ratio]]&lt;br /&gt;
*[[#RatioCarbonDioxide|RatioCarbonDioxide]]&lt;br /&gt;
*[[#RatioNitrogen|RatioNitrogen]]&lt;br /&gt;
*[[#RatioOxygen|RatioOxygen]]&lt;br /&gt;
*[[#RatioPollutant|RatioPollutant]]&lt;br /&gt;
*[[#RatioVolatiles|RatioVolatiles]]&lt;br /&gt;
*[[#RatioWater|RatioWater]]&lt;br /&gt;
*[[#Reagents|Reagents]]&lt;br /&gt;
*[[#RecipeHash|RecipeHash]]&lt;br /&gt;
*[[#RequestHash|RequestHash]]&lt;br /&gt;
*[[#RequiredPower|RequiredPower]]&lt;br /&gt;
*[[#Setting|Setting]]&lt;br /&gt;
*[[#SolarAngle|SolarAngle]]&lt;br /&gt;
*[[#Temperature|Temperature]]&lt;br /&gt;
*[[#TemperatureSettings|TemperatureSettings]]&lt;br /&gt;
*[[#TotalMoles|TotalMoles]]&lt;br /&gt;
*[[#VelocityMagnitude|VelocityMagnitude]]&lt;br /&gt;
*[[#VelocityRelativeX|VelocityRelativeX]]&lt;br /&gt;
*[[#VelocityRelativeY|VelocityRelativeY]]&lt;br /&gt;
*[[#VelocityRelativeZ|VelocityRelativeZ]]&lt;br /&gt;
*[[#Vertical|Vertical]]&lt;br /&gt;
*[[#VerticalRatio|VerticalRatio]]&lt;br /&gt;
*[[#Volume|Volume]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|+Slot Variables &lt;br /&gt;
&amp;lt;div  class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#Occupied|Occupied]]&lt;br /&gt;
*[[#OccupantHash|OccupantHash]]&lt;br /&gt;
*[[#Quantity|Quantity]]&lt;br /&gt;
*[[#Damage|Damage]]&lt;br /&gt;
*[[#Efficiency|Efficiency]]&lt;br /&gt;
*[[#Health|Health]]&lt;br /&gt;
*[[#Growth|Growth]]&lt;br /&gt;
*[[#Pressure|Pressure]]&lt;br /&gt;
*[[#Temperature|Temperature]]&lt;br /&gt;
*[[#Charge|Charge]]&lt;br /&gt;
*[[#ChargeRatio|ChargeRatio]]&lt;br /&gt;
*[[#Class|Class]]&lt;br /&gt;
*[[#PressureWaste|PressureWaste]]&lt;br /&gt;
*[[#PressureAir|PressureAir]]&lt;br /&gt;
*[[#MaxQuantity|MaxQuantity]]&lt;br /&gt;
*[[#Mature|Mature]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25735</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25735"/>
		<updated>2026-02-20T06:27:35Z</updated>

		<summary type="html">&lt;p&gt;TK421: fixing broken strings in IC10&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&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;
local function highlight_line(line)&lt;br /&gt;
    -- breaks strings in IC10 as it escapes &amp;quot;&amp;quot; line = mw.text.nowiki(line)&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;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r([0-9]|1[0-5]))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25734</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25734"/>
		<updated>2026-02-20T06:18:56Z</updated>

		<summary type="html">&lt;p&gt;TK421: I think I got all opcodes from https://stationeers-wiki.com/IC10/instructions now...&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&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;
local function highlight_line(line)&lt;br /&gt;
    line = mw.text.nowiki(line)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r([0-9]|1[0-5]))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25733</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25733"/>
		<updated>2026-02-20T05:51:39Z</updated>

		<summary type="html">&lt;p&gt;TK421: added a bunch more opcodes&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;abs&amp;quot;,&amp;quot;add&amp;quot;,&amp;quot;alias&amp;quot;,&amp;quot;and&amp;quot;,&lt;br /&gt;
    &amp;quot;b&amp;quot;,&amp;quot;beq&amp;quot;,&amp;quot;beqz&amp;quot;,&amp;quot;bge&amp;quot;,&amp;quot;bgez&amp;quot;,&amp;quot;bgt&amp;quot;,&amp;quot;blt&amp;quot;,&amp;quot;bne&amp;quot;,&lt;br /&gt;
    &amp;quot;ceil&amp;quot;,&amp;quot;clrd&amp;quot;,&amp;quot;clr&amp;quot;,&amp;quot;define&amp;quot;,&amp;quot;div&amp;quot;,&amp;quot;exp&amp;quot;,&amp;quot;floor&amp;quot;,&lt;br /&gt;
    &amp;quot;get&amp;quot;,&amp;quot;getd&amp;quot;,&amp;quot;hcf&amp;quot;,&amp;quot;ins&amp;quot;,&amp;quot;jr&amp;quot;,&amp;quot;jal&amp;quot;,&amp;quot;j&amp;quot;,&amp;quot;lerp&amp;quot;,&lt;br /&gt;
    &amp;quot;l&amp;quot;,&amp;quot;lb&amp;quot;,&amp;quot;lbn&amp;quot;,&amp;quot;lbs&amp;quot;,&amp;quot;log&amp;quot;,&amp;quot;ls&amp;quot;,&amp;quot;lr&amp;quot;,&amp;quot;max&amp;quot;,&amp;quot;min&amp;quot;,&lt;br /&gt;
    &amp;quot;mod&amp;quot;,&amp;quot;move&amp;quot;,&amp;quot;mul&amp;quot;,&amp;quot;not&amp;quot;,&amp;quot;nor&amp;quot;,&amp;quot;or&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;poke&amp;quot;,&lt;br /&gt;
    &amp;quot;pow&amp;quot;,&amp;quot;put&amp;quot;,&amp;quot;putd&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;peek&amp;quot;,&amp;quot;rand&amp;quot;,&amp;quot;round&amp;quot;,&lt;br /&gt;
    &amp;quot;rmap&amp;quot;,&amp;quot;s&amp;quot;,&amp;quot;sb&amp;quot;,&amp;quot;sbn&amp;quot;,&amp;quot;sbs&amp;quot;,&amp;quot;select&amp;quot;,&amp;quot;sla&amp;quot;,&amp;quot;sll&amp;quot;,&lt;br /&gt;
    &amp;quot;sra&amp;quot;,&amp;quot;srl&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;sqrt&amp;quot;,&amp;quot;trunc&amp;quot;,&amp;quot;yield&amp;quot;,&lt;br /&gt;
    &amp;quot;sap&amp;quot;,&amp;quot;sapz&amp;quot;,&amp;quot;seq&amp;quot;,&amp;quot;seqz&amp;quot;,&lt;br /&gt;
    &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;,&lt;br /&gt;
    &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;
}&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table&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;
local function highlight_line(line)&lt;br /&gt;
    line = mw.text.nowiki(line)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r([0-9]|1[0-5]))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25732</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25732"/>
		<updated>2026-02-20T05:43:39Z</updated>

		<summary type="html">&lt;p&gt;TK421: added device highlighting and fixed r6-r9&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;add&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;mul&amp;quot;,&amp;quot;div&amp;quot;,&lt;br /&gt;
    &amp;quot;and&amp;quot;,&amp;quot;or&amp;quot;,&amp;quot;xor&amp;quot;,&amp;quot;not&amp;quot;,&lt;br /&gt;
    &amp;quot;beq&amp;quot;,&amp;quot;bne&amp;quot;,&amp;quot;j&amp;quot;,&amp;quot;jal&amp;quot;,&lt;br /&gt;
    &amp;quot;move&amp;quot;,&amp;quot;slt&amp;quot;,&amp;quot;sgt&amp;quot;,&lt;br /&gt;
    &amp;quot;l&amp;quot;,&amp;quot;lb&amp;quot;,&lt;br /&gt;
    &amp;quot;s&amp;quot;,&amp;quot;sb&amp;quot;,&lt;br /&gt;
    &amp;quot;yield&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table&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;
local function highlight_line(line)&lt;br /&gt;
    line = mw.text.nowiki(line)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r([0-9]|1[0-5]))%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- devices d0–d5&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](d[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25731</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25731"/>
		<updated>2026-02-20T05:34:07Z</updated>

		<summary type="html">&lt;p&gt;TK421: adding a couple more opcodes&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;add&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;mul&amp;quot;,&amp;quot;div&amp;quot;,&lt;br /&gt;
    &amp;quot;and&amp;quot;,&amp;quot;or&amp;quot;,&amp;quot;xor&amp;quot;,&amp;quot;not&amp;quot;,&lt;br /&gt;
    &amp;quot;beq&amp;quot;,&amp;quot;bne&amp;quot;,&amp;quot;j&amp;quot;,&amp;quot;jal&amp;quot;,&lt;br /&gt;
    &amp;quot;move&amp;quot;,&amp;quot;slt&amp;quot;,&amp;quot;sgt&amp;quot;,&lt;br /&gt;
    &amp;quot;l&amp;quot;,&amp;quot;lb&amp;quot;,&lt;br /&gt;
    &amp;quot;s&amp;quot;,&amp;quot;sb&amp;quot;,&lt;br /&gt;
    &amp;quot;yield&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table&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;
local function highlight_line(line)&lt;br /&gt;
    line = mw.text.nowiki(line)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r1?[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25730</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25730"/>
		<updated>2026-02-20T05:25:33Z</updated>

		<summary type="html">&lt;p&gt;TK421: replace mw.text.gsub with string.gsub&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;add&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;mul&amp;quot;,&amp;quot;div&amp;quot;,&lt;br /&gt;
    &amp;quot;and&amp;quot;,&amp;quot;or&amp;quot;,&amp;quot;xor&amp;quot;,&amp;quot;not&amp;quot;,&lt;br /&gt;
    &amp;quot;beq&amp;quot;,&amp;quot;bne&amp;quot;,&amp;quot;j&amp;quot;,&amp;quot;jal&amp;quot;,&lt;br /&gt;
    &amp;quot;move&amp;quot;,&amp;quot;slt&amp;quot;,&amp;quot;sgt&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table&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;
local function highlight_line(line)&lt;br /&gt;
    line = mw.text.nowiki(line)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = string.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = string.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](r1?[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = string.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Template:ICCode&amp;diff=25729</id>
		<title>Template:ICCode</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Template:ICCode&amp;diff=25729"/>
		<updated>2026-02-20T05:21:31Z</updated>

		<summary type="html">&lt;p&gt;TK421: Using syntax highlighting module instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:IC10|highlight|{{{1|}}}}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25728</id>
		<title>Module:IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:IC10&amp;diff=25728"/>
		<updated>2026-02-20T05:17:41Z</updated>

		<summary type="html">&lt;p&gt;TK421: Trying to get syntax highlighting working&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;add&amp;quot;,&amp;quot;sub&amp;quot;,&amp;quot;mul&amp;quot;,&amp;quot;div&amp;quot;,&lt;br /&gt;
    &amp;quot;and&amp;quot;,&amp;quot;or&amp;quot;,&amp;quot;xor&amp;quot;,&amp;quot;not&amp;quot;,&lt;br /&gt;
    &amp;quot;beq&amp;quot;,&amp;quot;bne&amp;quot;,&amp;quot;j&amp;quot;,&amp;quot;jal&amp;quot;,&lt;br /&gt;
    &amp;quot;move&amp;quot;,&amp;quot;slt&amp;quot;,&amp;quot;sgt&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Build lookup table&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;
local function highlight_line(line)&lt;br /&gt;
    line = mw.text.nowiki(line)&lt;br /&gt;
&lt;br /&gt;
    -- comments&lt;br /&gt;
    line = mw.text.gsub(line, &amp;quot;(#.*)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#6a9955;font-style:italic;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- labels&lt;br /&gt;
    line = mw.text.gsub(line, &amp;quot;^(%w+:)&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#dcdcaa;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- registers r0–r15&lt;br /&gt;
    line = mw.text.gsub(line, &amp;quot;%f[%w](r1?[0-5])%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#4fc1ff;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- numbers hex&lt;br /&gt;
    line = mw.text.gsub(line, &amp;quot;%f[%w](%-?0x%x+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
    -- numbers decimal&lt;br /&gt;
    line = mw.text.gsub(line, &amp;quot;%f[%w](%-?%d+)%f[%W]&amp;quot;,&lt;br /&gt;
        &#039;&amp;lt;span style=&amp;quot;color:#b5cea8;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- opcodes&lt;br /&gt;
    for op,_ in pairs(opcode_lookup) do&lt;br /&gt;
        line = mw.text.gsub(line,&lt;br /&gt;
            &amp;quot;%f[%w](&amp;quot;..op..&amp;quot;)%f[%W]&amp;quot;,&lt;br /&gt;
            &#039;&amp;lt;span style=&amp;quot;color:#c586c0;font-weight:bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&#039;)&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 &#039;&amp;lt;pre style=&amp;quot;font-family:monospace; background-color:#f8f9fa; border:1px solid #eaecf0; white-space:pre; display:block; padding:8px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. table.concat(lines, &amp;quot;\n&amp;quot;) ..&lt;br /&gt;
        &#039;&amp;lt;/pre&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25702</id>
		<title>Kit (Landing Pad)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25702"/>
		<updated>2026-02-09T05:38:14Z</updated>

		<summary type="html">&lt;p&gt;TK421: Mention landing pad sections are not airtight&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;
&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Machines]]&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Landing Pad Basic)&lt;br /&gt;
 | image       = [[File:ItemKitLandingPad.png]]&lt;br /&gt;
 | recipe_machine1 = Electronics Printer&lt;br /&gt;
 | recipe_cost1 = 1g [[Copper]], 5g [[Steel]]&lt;br /&gt;
 | constructs  = [[Landing Pad]],[[Landingpad Data And Power]]&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Landing Pad&lt;br /&gt;
 | image            = [[File:ItemLandingPad.png|thumb|Smallest Landing Pad needed for a [[Trader]] to land]]&lt;br /&gt;
 | placed_with_item = [[Kit(Landing Pad Basic)]]&lt;br /&gt;
 | placed_on_grid   = Large Grid&lt;br /&gt;
 | const_with_item1 = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool1 = [[Angle Grinder]]&lt;br /&gt;
 | item_rec1        = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool2 = [[Wrench]]&lt;br /&gt;
 | item_rec2        = 1x [[Steel Sheets]]&lt;br /&gt;
 | const_with_tool1 = [[Welding Torch]]&lt;br /&gt;
 | const_with_item1 = 1 x [[Steel Sheets]]&lt;br /&gt;
 | requires_frames  = True&lt;br /&gt;
 | airtight         = False&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
==Note==&lt;br /&gt;
&#039;&#039;&#039;This page is out of date including the recipe, and under revision. For now please refer to the ingame stationpedia.&#039;&#039;&#039;&lt;br /&gt;
==Purpose==&lt;br /&gt;
The [[Landing Pad]] provides a place for [[Trader]] shuttles to land.  It can be placed on any support structures and must be outside.&lt;br /&gt;
&lt;br /&gt;
The smallest Landing Pad that works is a 3x3 square, and it needs a centrepiece in the middle. When a Trader shuttle arrives, it lands right in the middle of the centrepiece. The centrepiece has an arrow showing which way the shuttles come and go. It&#039;s really important to make sure nothing blocks the arrow&#039;s path. That way, the shuttles can move smoothly without any problems. The shuttles usually land and take off at an angle of about 30 degrees.&lt;br /&gt;
&lt;br /&gt;
Once your Landing Pad is ready, you can check the computer terminal to see what size landing pad each available shuttle needs.&lt;br /&gt;
&lt;br /&gt;
There are six types of shuttles, including small, medium, and large ones, with normal and gas options. Shuttles can either use a runway or make a vertical descent to land. Small shuttles need a 3x3 pad, medium shuttles need a 5x5 pad, and larger shuttles needing up to a 9x9 pad. Having different pad sizes lets you trade with more Traders who visit your station.&lt;br /&gt;
&lt;br /&gt;
The [[Trader Waypoint]] allow the Trader&#039;s planes to not crash while landing. It can be configured so that planes do not crash into buildings or mountains while descending or ascending.&lt;br /&gt;
&lt;br /&gt;
If you want to trade with human Traders, you&#039;ll need to create a hangar with air they can breathe. Large shuttles and planes sometimes have human Traders inside. These Traders won&#039;t come out and trade unless there&#039;s air in the hangar. So, make sure you build a pressurized hangar to accommodate them. Landing pad sections are not airtight, so need to be built on a sealed frame floor. A landing pad needs to be one contiguous structure, and walls cannot separate them. However, Hangar doors across extra &#039;bridging&#039; landing pad pieces can be used to have ancillary equipment such as storage tanks, power and data, and gas/liquid input/output, outside of the pressurised space.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;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;
| Activate || Boolean || Activates the Landing Pad when set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Turns the Landing Pad on when set to 1. Turns the Landing Pad off when set to 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;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 Landing Pad is turned on and receiving power. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Returns whether the Landing Pad is turned on. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| RequiredPower || Integer || Returns the current watts of power required by the Landing Pad.&lt;br /&gt;
|-&lt;br /&gt;
| Error || Boolean || Returns whether the Landing Pad is currently flashing an error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25701</id>
		<title>Kit (Landing Pad)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25701"/>
		<updated>2026-02-09T05:28:52Z</updated>

		<summary type="html">&lt;p&gt;TK421: Remove mention of shuttles landing on players as this doesn&amp;#039;t seem to cause any problems anymore.&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;
&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Machines]]&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Landing Pad Basic)&lt;br /&gt;
 | image       = [[File:ItemKitLandingPad.png]]&lt;br /&gt;
 | recipe_machine1 = Electronics Printer&lt;br /&gt;
 | recipe_cost1 = 1g [[Copper]], 5g [[Steel]]&lt;br /&gt;
 | constructs  = [[Landing Pad]],[[Landingpad Data And Power]]&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Landing Pad&lt;br /&gt;
 | image            = [[File:ItemLandingPad.png|thumb|Smallest Landing Pad needed for a [[Trader]] to land]]&lt;br /&gt;
 | placed_with_item = [[Kit(Landing Pad Basic)]]&lt;br /&gt;
 | placed_on_grid   = Large Grid&lt;br /&gt;
 | const_with_item1 = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool1 = [[Angle Grinder]]&lt;br /&gt;
 | item_rec1        = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool2 = [[Wrench]]&lt;br /&gt;
 | item_rec2        = 1x [[Steel Sheets]]&lt;br /&gt;
 | const_with_tool1 = [[Welding Torch]]&lt;br /&gt;
 | const_with_item1 = 1 x [[Steel Sheets]]&lt;br /&gt;
 | requires_frames  = True&lt;br /&gt;
 | airtight         = False&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
==Note==&lt;br /&gt;
&#039;&#039;&#039;This page is out of date including the recipe, and under revision. For now please refer to the ingame stationpedia.&#039;&#039;&#039;&lt;br /&gt;
==Purpose==&lt;br /&gt;
The [[Landing Pad]] provides a place for [[Trader]] shuttles to land.  It can be placed on any support structures and must be outside.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Since trading update 5, Landing Pads in Stationeers have changed to give you more choices. Now you can place them on different tiles with different options. The smallest Landing Pad that works is a 3x3 square, and it needs a centrepiece in the middle. When a Trader shuttle arrives, it lands right in the middle of the centrepiece. The centrepiece has an arrow showing which way the shuttles come and go. It&#039;s really important to make sure nothing blocks the arrow&#039;s path. That way, the shuttles can move smoothly without any problems. The shuttles usually land and take off at an angle of about 30 degrees.&lt;br /&gt;
&lt;br /&gt;
Once your Landing Pad is ready, you can check the computer terminal to see what size landing pad each available shuttle needs.&lt;br /&gt;
&lt;br /&gt;
There are six types of shuttles, including small, medium, and large ones, with normal and gas options. Shuttles can either use a runway or make a vertical descent to land. Small shuttles need a 3x3 pad, medium shuttles need a 5x5 pad, and larger shuttles needing up to a 9x9 pad. Having different pad sizes lets you trade with more Traders who visit your station.&lt;br /&gt;
&lt;br /&gt;
The [[Trader Waypoint]] allow the Trader&#039;s planes to not crash while landing. It can be configured so that planes do not crash into buildings or mountains while descending or ascending.&lt;br /&gt;
&lt;br /&gt;
If you want to trade with human Traders, you&#039;ll need to create a hangar with air they can breathe. Large shuttles and planes sometimes have human Traders inside. These Traders won&#039;t come out and trade unless there&#039;s air in the hangar. So, make sure you build a pressurized hangar to accommodate them. Hangar doors across extra landing pad pieces can be used to have ancillary equipment such as storage tanks, power and data, and gas/liquid input/output etc., outside of the pressurised space.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;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;
| Activate || Boolean || Activates the Landing Pad when set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Turns the Landing Pad on when set to 1. Turns the Landing Pad off when set to 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;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 Landing Pad is turned on and receiving power. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Returns whether the Landing Pad is turned on. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| RequiredPower || Integer || Returns the current watts of power required by the Landing Pad.&lt;br /&gt;
|-&lt;br /&gt;
| Error || Boolean || Returns whether the Landing Pad is currently flashing an error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25700</id>
		<title>Kit (Landing Pad)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25700"/>
		<updated>2026-02-09T05:27:03Z</updated>

		<summary type="html">&lt;p&gt;TK421: mentionbeing able to segment ancillary equipment out of the pressurised hangar.&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;
&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Machines]]&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Landing Pad Basic)&lt;br /&gt;
 | image       = [[File:ItemKitLandingPad.png]]&lt;br /&gt;
 | recipe_machine1 = Electronics Printer&lt;br /&gt;
 | recipe_cost1 = 1g [[Copper]], 5g [[Steel]]&lt;br /&gt;
 | constructs  = [[Landing Pad]],[[Landingpad Data And Power]]&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Landing Pad&lt;br /&gt;
 | image            = [[File:ItemLandingPad.png|thumb|Smallest Landing Pad needed for a [[Trader]] to land]]&lt;br /&gt;
 | placed_with_item = [[Kit(Landing Pad Basic)]]&lt;br /&gt;
 | placed_on_grid   = Large Grid&lt;br /&gt;
 | const_with_item1 = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool1 = [[Angle Grinder]]&lt;br /&gt;
 | item_rec1        = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool2 = [[Wrench]]&lt;br /&gt;
 | item_rec2        = 1x [[Steel Sheets]]&lt;br /&gt;
 | const_with_tool1 = [[Welding Torch]]&lt;br /&gt;
 | const_with_item1 = 1 x [[Steel Sheets]]&lt;br /&gt;
 | requires_frames  = True&lt;br /&gt;
 | airtight         = False&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
==Note==&lt;br /&gt;
&#039;&#039;&#039;This page is out of date including the recipe, and under revision. For now please refer to the ingame stationpedia.&#039;&#039;&#039;&lt;br /&gt;
==Purpose==&lt;br /&gt;
The [[Landing Pad]] provides a place for [[Trader]] shuttles to land.  It can be placed on any support structures and must be outside.&lt;br /&gt;
&#039;&#039;&#039;If a character stays near the centre of the [[Landing Pad]] during a landing, the character suit will be broken and will be unable to move until the [[Trader]] leaves the planet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Since trading update 5, Landing Pads in Stationeers have changed to give you more choices. Now you can place them on different tiles with different options. The smallest Landing Pad that works is a 3x3 square, and it needs a centrepiece in the middle. When a Trader shuttle arrives, it lands right in the middle of the centrepiece. The centrepiece has an arrow showing which way the shuttles come and go. It&#039;s really important to make sure nothing blocks the arrow&#039;s path. That way, the shuttles can move smoothly without any problems. The shuttles usually land and take off at an angle of about 30 degrees.&lt;br /&gt;
&lt;br /&gt;
Once your Landing Pad is ready, you can check the computer terminal to see what size landing pad each available shuttle needs.&lt;br /&gt;
&lt;br /&gt;
There are six types of shuttles, including small, medium, and large ones, with normal and gas options. Shuttles can either use a runway or make a vertical descent to land. Small shuttles need a 3x3 pad, medium shuttles need a 5x5 pad, and larger shuttles needing up to a 9x9 pad. Having different pad sizes lets you trade with more Traders who visit your station.&lt;br /&gt;
&lt;br /&gt;
The [[Trader Waypoint]] allow the Trader&#039;s planes to not crash while landing. It can be configured so that planes do not crash into buildings or mountains while descending or ascending.&lt;br /&gt;
&lt;br /&gt;
If you want to trade with human Traders, you&#039;ll need to create a hangar with air they can breathe. Large shuttles and planes sometimes have human Traders inside. These Traders won&#039;t come out and trade unless there&#039;s air in the hangar. So, make sure you build a pressurized hangar to accommodate them. Hangar doors across extra landing pad pieces can be used to have ancillary equipment such as storage tanks, power and data, and gas/liquid input/output etc., outside of the pressurised space.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;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;
| Activate || Boolean || Activates the Landing Pad when set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Turns the Landing Pad on when set to 1. Turns the Landing Pad off when set to 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;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 Landing Pad is turned on and receiving power. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Returns whether the Landing Pad is turned on. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| RequiredPower || Integer || Returns the current watts of power required by the Landing Pad.&lt;br /&gt;
|-&lt;br /&gt;
| Error || Boolean || Returns whether the Landing Pad is currently flashing an error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Template:Structurebox&amp;diff=25692</id>
		<title>Template:Structurebox</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Template:Structurebox&amp;diff=25692"/>
		<updated>2026-02-07T08:16:51Z</updated>

		<summary type="html">&lt;p&gt;TK421: adding airtight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Infobox&lt;br /&gt;
 | name     = Structurebox&lt;br /&gt;
&lt;br /&gt;
 | title    = {{{name}}}&lt;br /&gt;
 | image1   = {{{image|}}}&lt;br /&gt;
 | data2    = {{{other|}}}&lt;br /&gt;
 | label4 = Paintable&lt;br /&gt;
 | data4  = {{{paintable|}}}&lt;br /&gt;
 | label5 = Constructable in Rockets&lt;br /&gt;
 | data5  = {{{constructable_in_rockets|}}}&lt;br /&gt;
 | label6 = Rocket Mass Contribution&lt;br /&gt;
 | data6  = {{{rocket_mass_contribution|}}}&lt;br /&gt;
&lt;br /&gt;
 | header10 = {{ #if: {{{power_usage|}}}{{{burst_pressure|volume|convection|radiation|solar_heating}}} | Operation }}&lt;br /&gt;
 | label11 = Power Usage&lt;br /&gt;
 | data11  = {{{power_usage|}}}&lt;br /&gt;
 | label12 = Burst Pressure&lt;br /&gt;
 | data12  = {{{burst_pressure|}}}&lt;br /&gt;
 | label13 = Volume&lt;br /&gt;
 | data13  = {{{volume|}}}&lt;br /&gt;
 | label14 = Thermal Convection&lt;br /&gt;
 | data14  = {{{convection|}}}&lt;br /&gt;
 | label15 = Thermal Radiation&lt;br /&gt;
 | data15  = {{{radiation|}}}&lt;br /&gt;
 | label16 = Solar Heating&lt;br /&gt;
 | data16  = {{{solar_heating|}}}&lt;br /&gt;
 | label17 = Prefab Hash&lt;br /&gt;
 | data17 = {{#if: {{{prefab_hash|}}} | &amp;lt;span style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;{{{prefab_hash|}}}&amp;lt;/span&amp;gt;}}&lt;br /&gt;
 | label18 = Prefab Name&lt;br /&gt;
 | data18 = {{#if: {{{prefab_name|}}} | &amp;lt;span style=&amp;quot;font-family: monospace;&amp;quot;&amp;gt;{{{prefab_name|}}}&amp;lt;/span&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
 | header20 = Construction&lt;br /&gt;
 |  label21 = Placed with&lt;br /&gt;
 |  data21  = {{{placed_with_item}}}&lt;br /&gt;
 |  label22 = Placed on&lt;br /&gt;
 |  data22  = {{{placed_on_grid}}}&lt;br /&gt;
 |  label23 = Paintable&lt;br /&gt;
 |   data23 = {{{paintable|}}}&lt;br /&gt;
 |  label24 = Requires Frame&lt;br /&gt;
 |   data24 = {{{requires_frames|}}}&lt;br /&gt;
 |  label25 = Is Airtight?&lt;br /&gt;
 |   data25 = {{{airtight|}}}&lt;br /&gt;
&lt;br /&gt;
 | header30 = {{ #if: {{{slot_1|}}}{{{slot_2|}}} | Slots }}&lt;br /&gt;
 |  label31 = Slot 0&lt;br /&gt;
 |  data31 = {{{slot_0|}}}&lt;br /&gt;
 |  label32 = Slot 1&lt;br /&gt;
 |  data32 = {{{slot_1|}}}&lt;br /&gt;
 |  label33 = Slot 2&lt;br /&gt;
 |  data33 = {{{slot_2|}}}&lt;br /&gt;
 |  label34 = Slot 3&lt;br /&gt;
 | data34 = {{{slot_3|}}}&lt;br /&gt;
&lt;br /&gt;
 | header40 = {{ #if: {{{stage_image1|}}}{{{const_with_tool1|}}}{{{const_with_item1|}}}{{{decon_with_tool1|}}}{{{item_rec1|}}}&lt;br /&gt;
               | {{Construction stage&lt;br /&gt;
                  | number          = 1&lt;br /&gt;
                  | image           = {{{stage_image1|}}}&lt;br /&gt;
                  | const_with_tool = {{{const_with_tool1|}}}&lt;br /&gt;
                  | const_with_item = {{{const_with_item1|}}}&lt;br /&gt;
                  | decon_with_tool = {{{decon_with_tool1|}}}&lt;br /&gt;
                  | item_rec        = {{{item_rec1|}}}&lt;br /&gt;
                 }}&lt;br /&gt;
              }}&lt;br /&gt;
&lt;br /&gt;
 | header50 = {{ #if: {{{stage_image2|}}}{{{const_with_tool2|}}}{{{const_with_item2|}}}{{{decon_with_tool2|}}}{{{item_rec2|}}}&lt;br /&gt;
               | {{Construction stage&lt;br /&gt;
                  | number          = 2&lt;br /&gt;
                  | image           = {{{stage_image2|}}}&lt;br /&gt;
                  | const_with_tool = {{{const_with_tool2|}}}&lt;br /&gt;
                  | const_with_item = {{{const_with_item2|}}}&lt;br /&gt;
                  | decon_with_tool = {{{decon_with_tool2|}}}&lt;br /&gt;
                  | item_rec        = {{{item_rec2|}}}&lt;br /&gt;
                 }}&lt;br /&gt;
              }}&lt;br /&gt;
&lt;br /&gt;
 | header60 = {{ #if: {{{stage_image3|}}}{{{const_with_tool3|}}}{{{const_with_item3|}}}{{{decon_with_tool3|}}}{{{item_rec3|}}}&lt;br /&gt;
               | {{Construction stage&lt;br /&gt;
                  | number          = 3&lt;br /&gt;
                  | image           = {{{stage_image3|}}}&lt;br /&gt;
                  | const_with_tool = {{{const_with_tool3|}}}&lt;br /&gt;
                  | const_with_item = {{{const_with_item3|}}}&lt;br /&gt;
                  | decon_with_tool = {{{decon_with_tool3|}}}&lt;br /&gt;
                  | item_rec        = {{{item_rec3|}}}&lt;br /&gt;
                 }}&lt;br /&gt;
              }}&lt;br /&gt;
&lt;br /&gt;
 | header70 = {{ #if: {{{stage_image4|}}}{{{const_with_tool4|}}}{{{const_with_item4|}}}{{{decon_with_tool4|}}}{{{item_rec4|}}}&lt;br /&gt;
               | {{Construction stage&lt;br /&gt;
                  | number          = 4&lt;br /&gt;
                  | image           = {{{stage_image4|}}}&lt;br /&gt;
                  | const_with_tool = {{{const_with_tool4|}}}&lt;br /&gt;
                  | const_with_item = {{{const_with_item4|}}}&lt;br /&gt;
                  | decon_with_tool = {{{decon_with_tool4|}}}&lt;br /&gt;
                  | item_rec        = {{{item_rec4|}}}&lt;br /&gt;
                 }}&lt;br /&gt;
              }}&lt;br /&gt;
&lt;br /&gt;
 | header80 = {{ #if: {{{stage_image5|}}}{{{const_with_tool5|}}}{{{const_with_item5|}}}{{{decon_with_tool5|}}}{{{item_rec5|}}}&lt;br /&gt;
               | {{Construction stage&lt;br /&gt;
                  | number          = 5&lt;br /&gt;
                  | image           = {{{stage_image5|}}}&lt;br /&gt;
                  | const_with_tool = {{{const_with_tool5|}}}&lt;br /&gt;
                  | const_with_item = {{{const_with_item5|}}}&lt;br /&gt;
                  | decon_with_tool = {{{decon_with_tool5|}}}&lt;br /&gt;
                  | item_rec        = {{{item_rec5|}}}&lt;br /&gt;
                 }}&lt;br /&gt;
              }}&lt;br /&gt;
 | header90 = {{ #if: {{{stage_image6|}}}{{{const_with_tool6|}}}{{{const_with_item6|}}}{{{decon_with_tool6|}}}{{{item_rec6|}}}&lt;br /&gt;
               | {{Construction stage&lt;br /&gt;
                  | number          = 6&lt;br /&gt;
                  | image           = {{{stage_image6|}}}&lt;br /&gt;
                  | const_with_tool = {{{const_with_tool6|}}}&lt;br /&gt;
                  | const_with_item = {{{const_with_item6|}}}&lt;br /&gt;
                  | decon_with_tool = {{{decon_with_tool6|}}}&lt;br /&gt;
                  | item_rec        = {{{item_rec6|}}}&lt;br /&gt;
                 }}&lt;br /&gt;
              }}&lt;br /&gt;
}} [[Category:Structures]] {{ #if: {{{prefab_hash|}}} | | [[Category:Infobox without prefab data]] }} {{ #if: {{{prefab_name|}}} | | [[Category:Infobox without prefab data]] }} &amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25691</id>
		<title>Kit (Landing Pad)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Kit_(Landing_Pad)&amp;diff=25691"/>
		<updated>2026-02-07T08:12:56Z</updated>

		<summary type="html">&lt;p&gt;TK421: adding airtight&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;
&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Machines]]&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Landing Pad Basic)&lt;br /&gt;
 | image       = [[File:ItemKitLandingPad.png]]&lt;br /&gt;
 | recipe_machine1 = Electronics Printer&lt;br /&gt;
 | recipe_cost1 = 1g [[Copper]], 5g [[Steel]]&lt;br /&gt;
 | constructs  = [[Landing Pad]],[[Landingpad Data And Power]]&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Landing Pad&lt;br /&gt;
 | image            = [[File:ItemLandingPad.png|thumb|Smallest Landing Pad needed for a [[Trader]] to land]]&lt;br /&gt;
 | placed_with_item = [[Kit(Landing Pad Basic)]]&lt;br /&gt;
 | placed_on_grid   = Large Grid&lt;br /&gt;
 | const_with_item1 = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool1 = [[Angle Grinder]]&lt;br /&gt;
 | item_rec1        = [[Kit (Landing Pad Basic)]]&lt;br /&gt;
 | decon_with_tool2 = [[Wrench]]&lt;br /&gt;
 | item_rec2        = 1x [[Steel Sheets]]&lt;br /&gt;
 | const_with_tool1 = [[Welding Torch]]&lt;br /&gt;
 | const_with_item1 = 1 x [[Steel Sheets]]&lt;br /&gt;
 | requires_frames  = True&lt;br /&gt;
 | airtight         = False&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
==Note==&lt;br /&gt;
&#039;&#039;&#039;This page is out of date including the recipe, and under revision. For now please refer to the ingame stationpedia.&#039;&#039;&#039;&lt;br /&gt;
==Purpose==&lt;br /&gt;
The [[Landing Pad]] provides a place for [[Trader]] shuttles to land.  It can be placed on any support structures and must be outside.&lt;br /&gt;
&#039;&#039;&#039;If a character stays near the centre of the [[Landing Pad]] during a landing, the character suit will be broken and will be unable to move until the [[Trader]] leaves the planet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
Since trading update 5, Landing Pads in Stationeers have changed to give you more choices. Now you can place them on different tiles with different options. The smallest Landing Pad that works is a 3x3 square, and it needs a centrepiece in the middle. When a Trader shuttle arrives, it lands right in the middle of the centrepiece. The centrepiece has an arrow showing which way the shuttles come and go. It&#039;s really important to make sure nothing blocks the arrow&#039;s path. That way, the shuttles can move smoothly without any problems. The shuttles usually land and take off at an angle of about 30 degrees.&lt;br /&gt;
&lt;br /&gt;
Once your Landing Pad is ready, you can check the computer terminal to see what size landing pad each available shuttle needs.&lt;br /&gt;
&lt;br /&gt;
There are six types of shuttles, including small, medium, and large ones, with normal and gas options. Shuttles can either use a runway or make a vertical descent to land. Small shuttles need a 3x3 pad, medium shuttles need a 5x5 pad, and large shuttles need a 7x7 pad. Having different pad sizes lets you trade with more Traders who visit your station.&lt;br /&gt;
&lt;br /&gt;
The [[Trader Waypoint]] allow the Trader&#039;s planes to not crash while landing. It can be configured so that planes do not crash into buildings or mountains while descending or ascending.&lt;br /&gt;
&lt;br /&gt;
If you want to trade with human Traders, you&#039;ll need to create a hangar with air they can breathe. Large shuttles and planes sometimes have human Traders inside. These Traders won&#039;t come out and trade unless there&#039;s air in the hangar. So, make sure you build a pressurized hangar to accommodate them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;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;
| Activate || Boolean || Activates the Landing Pad when set to 1.&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Turns the Landing Pad on when set to 1. Turns the Landing Pad off when set to 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;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 Landing Pad is turned on and receiving power. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| On || Boolean || Returns whether the Landing Pad is turned on. (0 for no, 1 for yes)&lt;br /&gt;
|-&lt;br /&gt;
| RequiredPower || Integer || Returns the current watts of power required by the Landing Pad.&lt;br /&gt;
|-&lt;br /&gt;
| Error || Boolean || Returns whether the Landing Pad is currently flashing an error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Template:Structurebox/doc&amp;diff=25690</id>
		<title>Template:Structurebox/doc</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Template:Structurebox/doc&amp;diff=25690"/>
		<updated>2026-02-07T08:11:11Z</updated>

		<summary type="html">&lt;p&gt;TK421: adding airtight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --&amp;gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
This template should be used for placed structures.&lt;br /&gt;
&lt;br /&gt;
It will create an Infobox on the right hand side, at the top of the article.&lt;br /&gt;
It has some parameters, that are useful for documenting the most important features of a [[:Category:Structures|Structure]].&lt;br /&gt;
&lt;br /&gt;
When included, it will also add the page, it is included in, to [[:Category:Structures]].&lt;br /&gt;
&lt;br /&gt;
== Template data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the structure&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Active Vent&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;image&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An image of the completely built structure.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;other&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Other&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Any other remarks, that can be placed before the subsections.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;paintable&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Paintable&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether the structure is paitable.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;constructable_in_rockets&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Constructable in rockets&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether the structure can be constructed inside a rocket.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;rocket_mass_contribution&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Rocket Mass Contribution&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Mass in kg added to the Rocket&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;30 kg&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;power_usage&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Power usage&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The power required to operate the structure.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;burst_pressure&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Burst pressure&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The maximum pressure the structure can withstand before breaking.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;volume&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Volume&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Volume of the Container.&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;250L&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;convection&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Thermal Convection&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Thermal Convection Factor&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;0.625&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;radiation&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Thermal Radiation&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Thermal Radiation Factor&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;0.025&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;solar_heating&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Solar Heating&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Solar Heating Factor&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;1.25&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;prefab_hash&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Prefab Hash&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The prefab hash for the structure&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;prefab_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Prefab name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The prefab name for the structure&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;placed_with_item&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place with item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that is used to place the initial stage of the structure.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;placed_on_grid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place on grid&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The grid size, the structure is placed on. This should be either \&amp;quot;Small Grid\&amp;quot;, \&amp;quot;Large Grid\&amp;quot; or \&amp;quot;Dynamic\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Small Grid, Large Grid, Dynamic&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;requires_frames&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Requires Frame beneath&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether or not the structure requires a frame underneath for support.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;airtight&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Is Airtight&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether or not the structure is airtight.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;slot_0&amp;quot;: {},&lt;br /&gt;
		&amp;quot;slot_1&amp;quot;: {},&lt;br /&gt;
		&amp;quot;slot_2&amp;quot;: {},&lt;br /&gt;
		&amp;quot;slot_3&amp;quot;: {},&lt;br /&gt;
		&amp;quot;stage_image1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Data valid for the Structurebox template&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Editing ==&lt;br /&gt;
&lt;br /&gt;
Most of the template can be edited on the [[Template:Structurebox]] page.&lt;br /&gt;
&lt;br /&gt;
The stage sections need to be edited on the [[Template:Construction stage]] page.&lt;br /&gt;
&lt;br /&gt;
== Blank ==&lt;br /&gt;
This is the blank template code, that can be copy-pasted into a page to use it there.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow: auto;&amp;quot; pad=&amp;quot;yes&amp;quot;&amp;gt;{{Structurebox&lt;br /&gt;
| name                     = &lt;br /&gt;
| image                    = &lt;br /&gt;
| prefab_hash              = &lt;br /&gt;
| prefab_name              = &lt;br /&gt;
| other                    = &lt;br /&gt;
| power_usage              = &lt;br /&gt;
| burst_pressure           = &lt;br /&gt;
| volume                   = &lt;br /&gt;
| convection               = &lt;br /&gt;
| radiation                = &lt;br /&gt;
| solar_heating            = &lt;br /&gt;
| placed_with_item         = &lt;br /&gt;
| placed_on_grid           = &lt;br /&gt;
| requires_frames          =&lt;br /&gt;
| airtight                 =&lt;br /&gt;
| paintable                = &lt;br /&gt;
| constructable_in_rockets = &lt;br /&gt;
| rocket_mass_contribution = &lt;br /&gt;
| stage_image1             = &lt;br /&gt;
| const_with_tool1         = &lt;br /&gt;
| const_with_item1         = &lt;br /&gt;
| decon_with_tool1         = &lt;br /&gt;
| item_rec1                = &lt;br /&gt;
| stage_image2             = &lt;br /&gt;
| const_with_tool2         = &lt;br /&gt;
| const_with_item2         = &lt;br /&gt;
| decon_with_tool2         = &lt;br /&gt;
| item_rec2                = &lt;br /&gt;
| stage_image3             = &lt;br /&gt;
| const_with_tool3         = &lt;br /&gt;
| const_with_item3         = &lt;br /&gt;
| decon_with_tool3         = &lt;br /&gt;
| item_rec4                = &lt;br /&gt;
| stage_image4             = &lt;br /&gt;
| const_with_tool4         = &lt;br /&gt;
| const_with_item4         = &lt;br /&gt;
| decon_with_tool4         = &lt;br /&gt;
| item_rec4                = &lt;br /&gt;
| stage_image5             = &lt;br /&gt;
| const_with_tool5         = &lt;br /&gt;
| const_with_item5         = &lt;br /&gt;
| decon_with_tool5         = &lt;br /&gt;
| item_rec5                = &lt;br /&gt;
| stage_image6             = &lt;br /&gt;
| const_with_tool6         = &lt;br /&gt;
| const_with_item6         = &lt;br /&gt;
| decon_with_tool6         = &lt;br /&gt;
| item_rec6                = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Template Documentation]]&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line, please; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Template:Structurebox/doc&amp;diff=25689</id>
		<title>Template:Structurebox/doc</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Template:Structurebox/doc&amp;diff=25689"/>
		<updated>2026-02-07T08:10:23Z</updated>

		<summary type="html">&lt;p&gt;TK421: adding airtight&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --&amp;gt;&lt;br /&gt;
== Summary ==&lt;br /&gt;
This template should be used for placed structures.&lt;br /&gt;
&lt;br /&gt;
It will create an Infobox on the right hand side, at the top of the article.&lt;br /&gt;
It has some parameters, that are useful for documenting the most important features of a [[:Category:Structures|Structure]].&lt;br /&gt;
&lt;br /&gt;
When included, it will also add the page, it is included in, to [[:Category:Structures]].&lt;br /&gt;
&lt;br /&gt;
== Template data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the structure&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Active Vent&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;image&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An image of the completely built structure.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;other&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Other&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Any other remarks, that can be placed before the subsections.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;paintable&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Paintable&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether the structure is paitable.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;constructable_in_rockets&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Constructable in rockets&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether the structure can be constructed inside a rocket.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;rocket_mass_contribution&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Rocket Mass Contribution&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Mass in kg added to the Rocket&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;30 kg&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;power_usage&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Power usage&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The power required to operate the structure.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;burst_pressure&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Burst pressure&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The maximum pressure the structure can withstand before breaking.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;volume&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Volume&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Volume of the Container.&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;250L&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;convection&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Thermal Convection&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Thermal Convection Factor&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;0.625&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;radiation&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Thermal Radiation&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Thermal Radiation Factor&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;0.025&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;solar_heating&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Solar Heating&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Solar Heating Factor&amp;quot;,&lt;br /&gt;
                        &amp;quot;example&amp;quot;: &amp;quot;1.25&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;prefab_hash&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Prefab Hash&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The prefab hash for the structure&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;prefab_name&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Prefab name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The prefab name for the structure&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;placed_with_item&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place with item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that is used to place the initial stage of the structure.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;placed_on_grid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place on grid&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The grid size, the structure is placed on. This should be either \&amp;quot;Small Grid\&amp;quot;, \&amp;quot;Large Grid\&amp;quot; or \&amp;quot;Dynamic\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Small Grid, Large Grid, Dynamic&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;requires_frames&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Requires Frame beneath&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether or not the structure requires a frame underneath for support.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;airtight&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Is Airtight&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether or not the structure is airtight.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Yes, No&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;slot_0&amp;quot;: {},&lt;br /&gt;
		&amp;quot;slot_1&amp;quot;: {},&lt;br /&gt;
		&amp;quot;slot_2&amp;quot;: {},&lt;br /&gt;
		&amp;quot;slot_3&amp;quot;: {},&lt;br /&gt;
		&amp;quot;stage_image1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 1 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 2 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 3 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 4 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 5 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;stage_image6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 image&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The image for the construction stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_tool6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which the stage is constructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;const_with_item6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item required to construct this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;decon_with_tool6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 deconstruction tool&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The tool which this stage is deconstructed with.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;item_rec6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Stage 6 deconstruction item&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The item that the player receives when deconstructing this stage.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Data valid for the Structurebox template&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Editing ==&lt;br /&gt;
&lt;br /&gt;
Most of the template can be edited on the [[Template:Structurebox]] page.&lt;br /&gt;
&lt;br /&gt;
The stage sections need to be edited on the [[Template:Construction stage]] page.&lt;br /&gt;
&lt;br /&gt;
== Blank ==&lt;br /&gt;
This is the blank template code, that can be copy-pasted into a page to use it there.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;overflow: auto;&amp;quot; pad=&amp;quot;yes&amp;quot;&amp;gt;{{Structurebox&lt;br /&gt;
| name                     = &lt;br /&gt;
| image                    = &lt;br /&gt;
| prefab_hash              = &lt;br /&gt;
| prefab_name              = &lt;br /&gt;
| other                    = &lt;br /&gt;
| power_usage              = &lt;br /&gt;
| burst_pressure           = &lt;br /&gt;
| volume                   = &lt;br /&gt;
| convection               = &lt;br /&gt;
| radiation                = &lt;br /&gt;
| solar_heating            = &lt;br /&gt;
| placed_with_item         = &lt;br /&gt;
| placed_on_grid           = &lt;br /&gt;
| requires_frames          =&lt;br /&gt;
| paintable                = &lt;br /&gt;
| constructable_in_rockets = &lt;br /&gt;
| rocket_mass_contribution = &lt;br /&gt;
| stage_image1             = &lt;br /&gt;
| const_with_tool1         = &lt;br /&gt;
| const_with_item1         = &lt;br /&gt;
| decon_with_tool1         = &lt;br /&gt;
| item_rec1                = &lt;br /&gt;
| stage_image2             = &lt;br /&gt;
| const_with_tool2         = &lt;br /&gt;
| const_with_item2         = &lt;br /&gt;
| decon_with_tool2         = &lt;br /&gt;
| item_rec2                = &lt;br /&gt;
| stage_image3             = &lt;br /&gt;
| const_with_tool3         = &lt;br /&gt;
| const_with_item3         = &lt;br /&gt;
| decon_with_tool3         = &lt;br /&gt;
| item_rec4                = &lt;br /&gt;
| stage_image4             = &lt;br /&gt;
| const_with_tool4         = &lt;br /&gt;
| const_with_item4         = &lt;br /&gt;
| decon_with_tool4         = &lt;br /&gt;
| item_rec4                = &lt;br /&gt;
| stage_image5             = &lt;br /&gt;
| const_with_tool5         = &lt;br /&gt;
| const_with_item5         = &lt;br /&gt;
| decon_with_tool5         = &lt;br /&gt;
| item_rec5                = &lt;br /&gt;
| stage_image6             = &lt;br /&gt;
| const_with_tool6         = &lt;br /&gt;
| const_with_item6         = &lt;br /&gt;
| decon_with_tool6         = &lt;br /&gt;
| item_rec6                = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Template Documentation]]&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line, please; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Worlds&amp;diff=25651</id>
		<title>Worlds</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Worlds&amp;diff=25651"/>
		<updated>2026-01-29T04:59:46Z</updated>

		<summary type="html">&lt;p&gt;TK421: Minor change to wording regarding beginner players.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Worlds]]&lt;br /&gt;
= [[Moon]] =&lt;br /&gt;
Difficulty: Intermediate&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;While the presence of coal isn&#039;t typical of Earth&#039;s Moon, the relatively flat terrain full of various sizable craters and lack of atmosphere may be more familiar in this grey landscape. A great location for the budding Stationeer to begin their journey, with fewer of the hazards and complexities offered on more exotic worlds&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Despite the change to the Moon being classed as &#039;intermediate, as an inert stellar body the Moon is perfect for the introduction to the Stationeers basic mechanics. The lack of atmosphere presents the only environmental hazard for the player. Frozen gases and water are readily available for supplying pressure and fuel. The Earth, to which the Moon is tidally locked to, floats permanently above the horizon to the west, providing a fixed reference point for navigation, as the Sun traverses almost directly through the zenith, making solar power reliable and easy to set up. Moon features a relatively flat, cratered terrain with occassional chasms and can be mined to a great depth through its loose regolith.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 17% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || None&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || None&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 1315-1407 W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 0°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || Solar Storms&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period || 20.3 minutes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vacuum&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= [[Mars]] =&lt;br /&gt;
Difficulty: Beginner&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A desolate dusty red ball, Mars features more varied terrain that can reach into the sky, and a chilly atmosphere that&#039;s no good for breathing, but maybe it can be used for something ...&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Having only a semblance of an atmopshere, Mars challenges the player with the introduction of occassional dust [[storm]]s, which puts the time limit for player to unload and stow away the supplies provided with the Drop Pod, makes it necessary to regularly maintain [[Solar Panel]]s, and time long mining excursions wisely. The thin atmosphere contains useful gasses for growing plants and base pressurization, as long as they&#039;re collected and purified. It is possible to combine wind and solar energy generation, as neither source would be exclusively reliable. Mars features more varied terrain elevation, which is harder to traverse, but easier to navigate around. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 38% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || -53 to 19°C (220K to 292K)&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || 2-3 kPa&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 495-720W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 78°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || Dust Storms&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period|| 2,3 Weeks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element !! Concentration || mol&lt;br /&gt;
|-&lt;br /&gt;
| [[Carbon Dioxide]] || 95% || 9&lt;br /&gt;
|-&lt;br /&gt;
| [[Nitrogen]] || 3% || 0.3&lt;br /&gt;
|-&lt;br /&gt;
| [[Oxygen]] || 1% || 0.1&lt;br /&gt;
|-&lt;br /&gt;
| [[Pollutant]] || 1% || 0.06&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= [[Europa]] =&lt;br /&gt;
Difficulty: Challenging&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;﻿Melting some of the ice on this cold world has finally given it an atmosphere, but its extremely frigid environment presents a serious challenge for the stationeers.The extreme cold will cause batteries to rapidly lose power, so getting a steady power source and warm location are your priorities.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Europa features a substantial, reliably cold atmosphere. Just as stated in the description, any type of a battery will gradually lose charge when exposed to it, and no living thing would survive it for long either despite being breathable. The player will have to leverage the waste heat produced by various processes to maintain living conditions on their station, primarily from smelting. Proper use of &#039;&#039;&#039;Insulated&#039;&#039;&#039; pipes and storage modules is paramount to screen both the extreme cold and heat until they&#039;re balanced to achieve the comfortable temperatures. Wind is a highly preferential power source, as the distance from the Sun and frequent storms makes use of solar panels impractical. Terrain features extreme elevations, easily obstructing the station&#039;s location, so careful navigation and optional use of [[Beacon]]s is advised.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 13% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || -149 to -140 °C (124K to 133K)&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || 44-47 kPa&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 46-56 W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 54°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || Snow Storms&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period || 4 hours&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Atmosphere ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element !! Concentration !! mol&lt;br /&gt;
|-&lt;br /&gt;
| [[Oxygen]] || 100% || 340 &amp;lt;strike&amp;gt;640&amp;lt;/strike&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Europa]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Mimas =&lt;br /&gt;
Difficulty: Intermediate&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;﻿A barren rock nestled under the wing of Saturn&#039;s spectacular rings. Mimas tiny stature is reflected in its extremely low gravity, and the Mimantean surface is saturated with impact craters from wayward ring occupants. It&#039;s distance from the sun provides little power from solar devices. Be very careful when walking or jumping, as you can travel a long way and gain a lot of speed due to the extremely low gravity.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mimas is a barren satellite with no atmosphere, that is generally similar to the Moon. However, due to its great distance from the Sun, neither solar nor wind power is feasible, meaning that the player will have to rely exclusively on the fuel-based generators. Gravity is is extremely weak here, thus making it easier to traverse the world using the Jetpack, but rather awkward without it. The world features short days and almost pitch-black nights, so it is advised to have charged light-sources to find one&#039;s way around the treacherously rugged and potholed terrain.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 10% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || None&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || None&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 13-17 W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 30°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || No&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period || 10 hours&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vacuum&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= [[Vulcan]] =&lt;br /&gt;
Difficulty: Extreme&lt;br /&gt;
&lt;br /&gt;
&amp;quot;﻿A world torn apart due to massive tidal forces from the supermassive black hole it orbits. Vulcan offers little hope for any organism that ends up here, but it&#039;s fractured surface and rich mineral deposits make it a risky but profitable venture for enterprising traders. Watch out for the deep crevasses that lead to deadly magma flows beneath the surface!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Vulcan is a small terrestrial planet suspended in a perpetual half-molten state. It has a wispy, but extremely hot atmosphere made primarily of [[Volatiles]] constantly above their autoignition temperature - that means, that any oxygen released into the atmosphere will immediately combust. Leaking oxygen from suit damage or releasing it from the waste tank will result in a player being set ablaze to their untimely demise. Vulcan is the only world start, which begins in the evening rather than morning, as it gives the player more time for initial setup, before the Janus (a black hole acting as its orbital parent) would pass over Vulcan&#039;s skies, resulting in a spike of pressure, temperature and solar irradiance. This spike may result in elevated production of waste gas for isolating the convected heat, which should be taken into account when being EVA.&lt;br /&gt;
&lt;br /&gt;
Vulcan has a plane of deadly magma at its lowest level with deep cracks on the surface - landing into it will almost immediately destroy player&#039;s suit, followed by the player themselves and all of their carried belongings. As such, Vulcan is the only world that consists of islands of ground separated by the obstacles impassable by foot, requiring an attention to suit&#039;s propellant reserves. Islands themselves feature extreme elevations of rough basaltic rock shredded by deep cracks and fissures, making traversal difficult and deceptively dangerous. Mineable layer presents abundant and obvious ore deposits, menacing irradiation of Janus provide excessive solar power, and the hot atmosphere can be used to smelt the majority of metals and alloys all by itself. Everything else on this hellscape is poised to kill a careless player at any moment.&lt;br /&gt;
&lt;br /&gt;
As Vulcan is a hot planet, no deposits of ice are present anywhere on its surface. On &amp;quot;Standard&amp;quot; start conditions, Players start on with a full [[Hardsuit]] equipped and Mark II toolset provided to survive and develop in its hostile environment. &amp;quot;Brutal (Hot Planet)&amp;quot; start condition only provide a regular [[EVA Suit]], which limits the available time outside (&amp;quot;Extra Stational Activity&amp;quot;) due to worse insulation, especially at daytime.&lt;br /&gt;
&lt;br /&gt;
Starting farming kit and redundancies are completely removed and replaced by a basic trading assembly kit, initial credit deposit, an ample supply of preserved food and water, and additional building supplies. This is necessary as the only alternative path to acquire gases and fuel for early processing and habitation, which takes precedence over sustained food production.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 56% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || 127 to 1452 °C (400K to 1725.15)&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || 24-56 kPa&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 987-3404 W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 41°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || Ash Storms&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period || 2,4 days&lt;br /&gt;
|-&lt;br /&gt;
| Year length|| Circa 160 Days (Player spawns in early Winter. Spring starts around day 40 with a slow rise, hitting peek summer at day 80.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element !! Concentration !! mol&lt;br /&gt;
|-&lt;br /&gt;
| [[Volatiles]] || 53% || 30&lt;br /&gt;
|-&lt;br /&gt;
| [[Carbon Dioxide]] || 21% || 12&lt;br /&gt;
|-&lt;br /&gt;
| [[Pollutant]] || 26% || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= [[Venus]] =&lt;br /&gt;
Difficulty: Extreme&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Unvarying extreme temperatures and ultra-high pressures make Venus no place for the faint-hearted.  Only the most accomplished Stationeers will survive on this hellscape a barren rock. Dig deep, or go home.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Venus has one and only hazard - an atmosphere that is both immensely dense (~2.5 times Earth&#039;s pressure, equivalent to a ~15 meter dive into the ocean) and consistently hot (slightly above the melting point of Zinc). High pressure makes [[Kit (Iron Wall)]] practically useless, as iron walls are too weak to endure the differential even around a fully-pressurized habitat, and the creeping heat locks the player in a perpetual struggle to insulate against, isolate, and eventually over-convect or radiate it away, as not to get cooked inside of their own station.&lt;br /&gt;
&lt;br /&gt;
Venus orbits the Sun much closer than Earth, resulting in efficient solar irradiance, while dense atmosphere with occassional storms grants strong winds, making renewable energy readily available, and fuel-based generation largely superfluous. On top of that, it also has a shallow mineable layer, but a gentle and friendly elevations with abundant ore deposits scattered across the surface. All of these resources has to be leveraged to fight the unrelenting heat by any of the principles and devices the Stationeers has to offer.&lt;br /&gt;
&lt;br /&gt;
As Venus is a hot planet, no deposits of ice are present anywhere on its surface. Players start with a full Hardsuit equipped and Mark II toolset provided to survive and develop in its hostile environment. Starting farming kit and redundancies are completely removed and replaced by a basic Trading assembly kit, initial credit deposit, an ample supply of preserved food and water, and additional building supplies. This is necessary as the only alternative path to acquire gases and fuel for early processing and habitation, which takes presedence over sustained food production.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 91% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || 464 °C (737K)&lt;br /&gt;
|-&lt;br /&gt;
| Temperature (Storm) || 365.9 °C&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || 239 kPa&lt;br /&gt;
|-&lt;br /&gt;
| Pressure (Storm) || 206.9 kPa&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 2601-2673 W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || -43°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || Dust Storms&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period || 36,6 minutes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element !! Concentration !! mol&lt;br /&gt;
|-&lt;br /&gt;
| [[Carbon Dioxide]] || 93.1% || 290&lt;br /&gt;
|-&lt;br /&gt;
| [[Nitrogen]] || 6.9% || 21.5&lt;br /&gt;
|-&lt;br /&gt;
| [[Pollutant]] || 0.016% || 0.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Asteroid Belt =&lt;br /&gt;
&lt;br /&gt;
DISCONTINUED&lt;br /&gt;
&lt;br /&gt;
Difficulty: Challenging&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;&amp;quot;﻿While there&#039;s no gravity or atmosphere, at least there&#039;s a lot of space to build! You&#039;ll find yourself among several asteroids that may contain various ores and ices you can use to survive out here.&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Asteroid Belt lies in between the orbits of Mars and Jupiter. A location primarily consisting of empty space without gravity puts a great emphasis on player&#039;s ability to efficiently explore the area in search from ores and ices  and managing their suit&#039;s Propellant. This might be better or worse based on the random generator producing the asteroids, as travel distances may vary greatly based on that. Since there&#039;s very little terrain, a player should use the Beacon to navigate away and back to your station and not getting lost in the dark.&lt;br /&gt;
&lt;br /&gt;
As stated by the description, there&#039;s all the open space one would ever want, and the Sun crossing across the horizon can be exploited as perpetual energy source using the articulated solar panels, though the distance from it provide a rather mediocre level of power output. Player&#039;s [[Lander]] hovers about the starting location with no physical support, meaning that it might drift away if pushed inadveredly. It&#039;s advisable to clear its cargo as soon as the station location is chosen to avoid losing the sight of it, preferably pushing the Lander closer to it to reduce propellant expense.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 0% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || None&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || None&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 152-342 W/m²&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || NaN (Possibly 0)° &lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || No&lt;br /&gt;
|-&lt;br /&gt;
| Orbital Period || 2,3 months&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vacuum&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Loulan =&lt;br /&gt;
&lt;br /&gt;
DISCONTINUED&lt;br /&gt;
&lt;br /&gt;
Loulan has a breathable atmosphere and the temperature range is not hazardous.  It has ruined structures scattered across the terrain which can be scavenged for building supplies.  The player starts with a [[Hardsuit_Backpack|Hardsuit Backpack]], and a [[Headlamp]], but without a helmet or suit and this is not a serious handicap.  A Jetpack is not part of the starting equipment.  Battery charging is not a matter of life and death, but without batteries the headlamp will not light your way at night.  &lt;br /&gt;
&lt;br /&gt;
The greatest challenge is food since seeds are not part of the starting equipment.  The player must either scavenge some seeds from ruins or trade.  While the gas mix is compatible with farming, the low night temperature is not, so a greenhouse must be operated at the right temperature. The easiest way is to open up the airlock during the day with warm 20 degrees air, and close it at night.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 38% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || -9 to 20C (264K to 293K)&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || 162 kPa&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 91% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 8°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || Yes (Unknown Type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Element !! Concentration !! mol&lt;br /&gt;
|-&lt;br /&gt;
| [[Oxygen]] || 62% || 350&lt;br /&gt;
|-&lt;br /&gt;
| [[Nitrogen]] || 27% || 150&lt;br /&gt;
|-&lt;br /&gt;
| [[Carbon Dioxide]] || 11% || 60&lt;br /&gt;
|-&lt;br /&gt;
| [[Pollutant]] || 0% || 0.05&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Space =&lt;br /&gt;
&lt;br /&gt;
DISCONTINUED&lt;br /&gt;
&lt;br /&gt;
Very similar to the moon, instead of a single body there are scattered  Asteroids the challenge in addition to collecting gases is maintaining jetpack fuel needed to move between Asteroids.&lt;br /&gt;
&lt;br /&gt;
This starting world is an original &amp;quot;creative&amp;quot; scenario, which was eventually replaced by the Asteroid Belt world, as the creative mode became available for all worlds as a global Difficulty setting. Space start therefore has been removed and is &#039;&#039;obsolete&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Gravity || 0% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Temperature || None&lt;br /&gt;
|-&lt;br /&gt;
| Pressure || None&lt;br /&gt;
|-&lt;br /&gt;
| Solar Energy || 100% Earth&lt;br /&gt;
|-&lt;br /&gt;
| Solar Angle || 0°&lt;br /&gt;
|-&lt;br /&gt;
| [[Storm|Storms]] || No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Atmosphere&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vacuum&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Fuel&amp;diff=25638</id>
		<title>Fuel</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Fuel&amp;diff=25638"/>
		<updated>2026-01-24T02:11:38Z</updated>

		<summary type="html">&lt;p&gt;TK421: Remove more references of vol as h2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
{{Fluidbox&lt;br /&gt;
 | name         = Fuel&lt;br /&gt;
 | image        = [[File:Icon-fuel.png]]&lt;br /&gt;
 | heatCapacity = 20.86 Joule / mol&lt;br /&gt;
}}&lt;br /&gt;
{{Fluidbox&lt;br /&gt;
 | name         = Superfuel&lt;br /&gt;
 | image        = [[File:Icon-nitro.png]]&lt;br /&gt;
 | heatCapacity = 21.7 Joule / mol&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description ==&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
There are two types of fuel, solid fuel and gas mixtures. &lt;br /&gt;
===Solid fuel===&lt;br /&gt;
There are currently only two solid fuel available in the game [[Special:MyLanguage/Ore (Coal)|Coal]], and [[Charcoal|Charcoal]].  Both can be used to fuel the [[Solid Fuel Generator]].&lt;br /&gt;
When burning coal and charcoal they produce the following gases. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !!Pollutant !!CO2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCoalOre.png|link=Ore_(Coal)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore_(Coal)|Coal]] || &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-pollutant.png|link=Pollutant]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;3 mol||  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;10 mol&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCharcoal.png|link=Charcoal]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Charcoal|Charcoal]] ||&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-pollutant.png|link=Pollutant]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;3 mol || &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;3 mol&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Gas Fuel===&lt;br /&gt;
In order to use gases for fuel you need a combustible gas combined with an oxidizer. The only flammable gas in the game is [[Volatiles]], the two oxygen sources are [[Oxygen]] (2:1 mix simply called fuel) and [[Nitrous Oxide]] (1:1 mix called superfuel or NOS). This is best done using a [[Gas Mixer]] which requires that both gasses have equal temperature for a correct ratio of gasses in the output.&lt;br /&gt;
&lt;br /&gt;
When using liquid fuel some heat energy produced will be spent to evaporate liquid fuel components.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;| Volatiles &lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;| Oxidizer &lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;| Fuel &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; rowspan=&amp;quot;1&amp;quot;| Combustion products &lt;br /&gt;
|- &lt;br /&gt;
! Pollutants&lt;br /&gt;
! Nitrogen&lt;br /&gt;
! CO2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;2 Volatiles&#039;&#039;&#039; ||  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;1 Oxygen&#039;&#039;&#039;||&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-fuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-pollutant.png|link=Pollutant]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;3 Pollutants&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;6 Carbon Dioxide&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;1 Volatile&#039;&#039;&#039; || &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-nitrousoxide.png|link=Nitrous_Oxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;1 Nitrous Oxide&#039;&#039;&#039; |||&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-nitro.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-nitrogen.png|link=Nitrogen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;2 Nitrogen&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;2 Carbon Dioxide&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Using Fuels ==&lt;br /&gt;
&lt;br /&gt;
=== Fuel Combustion ===&lt;br /&gt;
Autoignition Temperature: 300℃&amp;lt;br&amp;gt;&lt;br /&gt;
2 Volatiles + 1 O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 3 Pollutant + 6 CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 572kJ&lt;br /&gt;
&lt;br /&gt;
=== Fuel Combustion Using a H2 Combustor ===&lt;br /&gt;
Water combustion is achieved for 66% of the reagents:&lt;br /&gt;
&amp;lt;br&amp;gt;2 Volatiles + 1 O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 2 H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O + 429kJ&lt;br /&gt;
&amp;lt;br&amp;gt;The remaining 34% undergo the regular fuel combustion reaction:&lt;br /&gt;
&amp;lt;br&amp;gt;2 Volatiles + 1 O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 3 Pollutant + 6 CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 572kJ&lt;br /&gt;
&amp;lt;!-- the 66% and also 90% of those 34% happen immediately, the remaining 3.4% is left as waste products that get immediately ignited. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Superfuel Combustion ===&lt;br /&gt;
Autoignition Temperature: 50℃&amp;lt;br&amp;gt;&lt;br /&gt;
1 Volatiles + 1 N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O -&amp;gt; 2 N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 2 CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 572kJ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that staying below autoignition temperature means condensation for Nitrous Oxide at more than about 1MPa pressure, making it hard to store the fuel mix in large quantities without liquid management as the latent heat of condensation can result in enough heating for autoignition to occur. While this reaction releases the same amount of energy as the classic fuel combustion above, it does so using half the volatiles and heating waste gases with less thermal mass resulting in higher temperatures.&lt;br /&gt;
&lt;br /&gt;
== Collecting gases == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
Gases can be collected from a number for sources.  On some planets Oxygen may be collected directly from the atmosphere. This can be accomplished with an [[Active_Vent|active vent]], some [[Pipes|pipe]] and a [[Gas Tank Storage|gas tank storage]]. On other planets the oxygen will have to be filtered out from the other gases. A [[Filtration|filtration unit]] and a [[filter]] will be needed for this.  Some planets, however, have no atmosphere at all. In these cases the gases needed can be obtained by melting or crushing ices. This is by far the most common source for gases early in the game. &lt;br /&gt;
A basic [[Ice Crusher]] setup will provide most of your gas collection and mixing needs. &lt;br /&gt;
===Basic Ice Crusher Setup===&lt;br /&gt;
====Parts required====&lt;br /&gt;
* 1 x [[Ice Crusher]]&lt;br /&gt;
* 5 x [[Pipes]]&lt;br /&gt;
* 1 x [[Pipe_Volume_Pump|Volume Pump]]&lt;br /&gt;
* 1 x [[Pressure Regulator]]&lt;br /&gt;
Optional&lt;br /&gt;
* 1 x [[Active Vent]]&lt;br /&gt;
With this setup you can collect gases from ices to mix later. You can also pre-mix the gases by adding Volatile ice and Oxite at a 2:1 ratio. You can then load the pre-mixed fuel  in canisters in pre-measured amounts using the pressure regulator.&lt;br /&gt;
====Setup====&lt;br /&gt;
[[File:ICE_CRUSHER.png|thumb|Combination Ice Crusher, Gas collection, and Gas measuring station, Front View (Caution: Be sure to turn of the pressure regulator, and pump al the gas out of the crusher when mixing gases)]]&lt;br /&gt;
# Place the ice crusher &lt;br /&gt;
# Place a pipe facing to the right&lt;br /&gt;
# Place a volume pump&lt;br /&gt;
# Place a pipe tee facing left,right, and down. &lt;br /&gt;
# Place a canister storage below the tee&lt;br /&gt;
# Place a regulator to the right of the tee&lt;br /&gt;
# Place a tee  facing left,right, and down, Or an elbow facing left and down.&lt;br /&gt;
# Place a second canister storage below the tee or elbow. &lt;br /&gt;
# (Optional) Place an active vent to the right of the last canister storage. &lt;br /&gt;
====Usage====&lt;br /&gt;
====Fuel mixing====&lt;br /&gt;
# Place Volatile Ice and Oxites in the ice crusher at a 2:1 ratio. &amp;lt;br&amp;gt; &amp;amp;ensp; &amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039; You can safely fit 8 Volatile to 4 Oxites in a canister. A Ratio of 10:5 will over fill a single canister &amp;lt;br&amp;gt; &amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;**&#039;&#039;&#039; Be sure to pump all the gases out of the crusher into a single canister, otherwise the mixture will fluxuate as the grinder processes and outs ices. &amp;lt;br&amp;gt; &amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;***&#039;&#039;&#039; Also be sure to turn off your regulator while you are collecting gases.&amp;lt;br&amp;gt;&lt;br /&gt;
# Pump the gases to your storage containers. &amp;lt;br&amp;gt;&lt;br /&gt;
# Set the regulator to the approximate pressure required to load the amount of fuel you need into the canister. &amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039; You can check the exact amount in the canister using the tablet and the gas analyzer &lt;br /&gt;
====Refiling oxygen tanks====&lt;br /&gt;
# Purge the pipe network of any spurious gases from previous operations. &lt;br /&gt;
# Crush Oxites in the the ice crusher&lt;br /&gt;
# Pump the Oxites into a canister. &amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039;A canister can hold approximately 12 Oxites.&amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039;You will need to use a nitrogen filter in additon to your regular CO2 filter when breathing crushed Oxites. &lt;br /&gt;
====Emptying Canisters====&lt;br /&gt;
# Place any canisters you want to empty into the far left canister storage&lt;br /&gt;
# Set the active vent to &amp;quot;outward&amp;quot; and turn it on. &lt;br /&gt;
====Collecting Atmospheric Gases====&lt;br /&gt;
# Place any canisters you want to fill in the far left slot. &lt;br /&gt;
# Set the active vent to &amp;quot;Inwards&amp;quot; and turn it on. &amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039;Be aware that the canister will fill very quickly, be careful not to over-pressurize the canister.&lt;br /&gt;
&lt;br /&gt;
== Mixing Fuel == &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
You can easily mix fuel by adding O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; and Volatiles to a pipe network in order to put it into canisters or pump into a furnace.&lt;br /&gt;
&lt;br /&gt;
Volatiles can be attained by melting the [[Ice (Volatiles)]] that can be found in some worlds while being part of the atmosphere of [[Worlds#Vulcan|Vulcan]]. O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; can be attained by melting the [[Ice (Oxite)]] or again from some atmospheres. N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O is part of [[Ice (Nitrice)]] or can be created by the [[Nitrolyzer]].&lt;br /&gt;
&lt;br /&gt;
Depending on how exact the proportions of your gas mixture are you will end up with different end temperatures and pressures after ignition.&lt;br /&gt;
&lt;br /&gt;
===Basic Canister Mixing Setup=== &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
====Parts required====&lt;br /&gt;
* 2 x [[Portables Connector]]&lt;br /&gt;
* 2 x [[Portable Gas Tank]]&lt;br /&gt;
* 1 x [[Pipe Gas Mixer]]&lt;br /&gt;
* 1 x [[Gas Tank Storage]]&lt;br /&gt;
* &#039;&#039;n&#039;&#039; x [[Pipes]]&lt;br /&gt;
* &#039;&#039;n&#039;&#039; x [[Cables]]&lt;br /&gt;
* &#039;&#039;n&#039;&#039; x [[Gas Canister]]&lt;br /&gt;
&lt;br /&gt;
====Setup==== &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
# Place both Portable Connectors&lt;br /&gt;
# Connect both Portable Connectors to the the inputs of the Pipe Gas Mixer&lt;br /&gt;
# Connect the Pipe Gas Mixer output to the Gas Tank Storage input&lt;br /&gt;
# Connect the Pipe Gas Mixer power input to power source.&lt;br /&gt;
&lt;br /&gt;
====Use==== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
# Put first Portable Gas Tank or scrubber filled with O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; on one Portables Connector.&lt;br /&gt;
# Put second Portable Gas Tank or scrubber filled with H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;/volatile on the other Portables Connector.&lt;br /&gt;
# Use a wrench to connect both Portable Gas Tanks to their places.&lt;br /&gt;
# Optional: for a perfect fuel mix, ensure the temperatures of both gases are exactly the same.&lt;br /&gt;
# Set the Pipe Gas Mixer to desired combination (34% O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 66% H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) Note: as the combination is a floating point number, you can also enter 0.333... or 0.666... with a [[Labeller]] to get a more precise mix.&lt;br /&gt;
# Turn on Pipe Gas Mixer&lt;br /&gt;
# Place an empty Gas Canister in Gas Tank Storage.&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;br /&gt;
[[Category:Gas]][[Category:Liquid]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Fuel&amp;diff=25637</id>
		<title>Fuel</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Fuel&amp;diff=25637"/>
		<updated>2026-01-24T01:43:41Z</updated>

		<summary type="html">&lt;p&gt;TK421: Remove oudated mention of volatiles as H2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
{{Fluidbox&lt;br /&gt;
 | name         = Fuel&lt;br /&gt;
 | image        = [[File:Icon-fuel.png]]&lt;br /&gt;
 | heatCapacity = 20.86 Joule / mol&lt;br /&gt;
}}&lt;br /&gt;
{{Fluidbox&lt;br /&gt;
 | name         = Superfuel&lt;br /&gt;
 | image        = [[File:Icon-nitro.png]]&lt;br /&gt;
 | heatCapacity = 21.7 Joule / mol&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description ==&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
There are two types of fuel, solid fuel and gas mixtures. &lt;br /&gt;
===Solid fuel===&lt;br /&gt;
There are currently only two solid fuel available in the game [[Special:MyLanguage/Ore (Coal)|Coal]], and [[Charcoal|Charcoal]].  Both can be used to fuel the [[Solid Fuel Generator]].&lt;br /&gt;
When burning coal and charcoal they produce the following gases. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source !!Pollutant !!CO2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCoalOre.png|link=Ore_(Coal)]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Ore_(Coal)|Coal]] || &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-pollutant.png|link=Pollutant]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;3 mol||  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;10 mol&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:ItemCharcoal.png|link=Charcoal]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;1&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; [[Charcoal|Charcoal]] ||&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-pollutant.png|link=Pollutant]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;3 mol || &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;3 mol&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Gas Fuel===&lt;br /&gt;
In order to use gases for fuel you need a combustible gas combined with an oxidizer. The only flammable gas in the game is [[Volatiles]], the two oxygen sources are [[Oxygen]] (2:1 mix simply called fuel) and [[Nitrous Oxide]] (1:1 mix called superfuel or NOS). This is best done using a [[Gas Mixer]] which requires that both gasses have equal temperature for a correct ratio of gasses in the output.&lt;br /&gt;
&lt;br /&gt;
When using liquid fuel some heat energy produced will be spent to evaporate liquid fuel components.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;| Volatiles &lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;| Oxidizer &lt;br /&gt;
! colspan=&amp;quot;1&amp;quot; rowspan=&amp;quot;2&amp;quot;| Fuel &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; rowspan=&amp;quot;1&amp;quot;| Combustion products &lt;br /&gt;
|- &lt;br /&gt;
! Pollutants&lt;br /&gt;
! Nitrogen&lt;br /&gt;
! CO2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;2 Volatiles&#039;&#039;&#039; ||  &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-oxygen.png|link=Oxygen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;1 Oxygen&#039;&#039;&#039;||&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-fuel.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-pollutant.png|link=Pollutant]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;3 Pollutants&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;6 Carbon Dioxide&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-volatiles.png|link=Volatiles]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &#039;&#039;&#039;1 Volatile&#039;&#039;&#039; || &amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-nitrousoxide.png|link=Nitrous_Oxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;1 Nitrous Oxide&#039;&#039;&#039; |||&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-nitro.png|link=Fuel]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-nitrogen.png|link=Nitrogen]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;2 Nitrogen&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;div class=&amp;quot;stationeers-icon&amp;quot;&amp;gt;[[File:Icon-carbondioxide.png|link=Carbon_Dioxide]] &amp;lt;div class=&amp;quot;stationeers-icon-text&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&#039;2 Carbon Dioxide&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Using Fuels ==&lt;br /&gt;
&lt;br /&gt;
=== Fuel Combustion ===&lt;br /&gt;
Autoignition Temperature: 300℃&amp;lt;br&amp;gt;&lt;br /&gt;
2 Volatiles + 1 O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 3 Pollutant + 6 CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 572kJ&lt;br /&gt;
&lt;br /&gt;
=== Fuel Combustion Using a H2 Combustor ===&lt;br /&gt;
Water combustion is achieved for 66% of the reagents:&lt;br /&gt;
&amp;lt;br&amp;gt;2 Volatiles + 1 O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 2 H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O + 429kJ&lt;br /&gt;
&amp;lt;br&amp;gt;The remaining 34% undergo the regular fuel combustion reaction:&lt;br /&gt;
&amp;lt;br&amp;gt;2 Volatiles + 1 O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; -&amp;gt; 3 Pollutant + 6 CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 572kJ&lt;br /&gt;
&amp;lt;!-- the 66% and also 90% of those 34% happen immediately, the remaining 3.4% is left as waste products that get immediately ignited. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Superfuel Combustion ===&lt;br /&gt;
Autoignition Temperature: 50℃&amp;lt;br&amp;gt;&lt;br /&gt;
1 Volatiles + 1 N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O -&amp;gt; 2 N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 2 CO&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 572kJ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that staying below autoignition temperature means condensation for Nitrous Oxide at more than about 1MPa pressure, making it hard to store the fuel mix in large quantities without liquid management as the latent heat of condensation can result in enough heating for autoignition to occur. While this reaction releases the same amount of energy as the classic fuel combustion above, it does so using half the volatiles and heating waste gases with less thermal mass resulting in higher temperatures.&lt;br /&gt;
&lt;br /&gt;
== Collecting gases == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
Gases can be collected from a number for sources.  On some planets Oxygen may be collected directly from the atmosphere. This can be accomplished with an [[Active_Vent|active vent]], some [[Pipes|pipe]] and a [[Gas Tank Storage|gas tank storage]]. On other planets the oxygen will have to be filtered out from the other gases. A [[Filtration|filtration unit]] and a [[filter]] will be needed for this.  Some planets, however, have no atmosphere at all. In these cases the gases needed can be obtained by melting or crushing ices. This is by far the most common source for gases early in the game. &lt;br /&gt;
A basic [[Ice Crusher]] setup will provide most of your gas collection and mixing needs. &lt;br /&gt;
===Basic Ice Crusher Setup===&lt;br /&gt;
====Parts required====&lt;br /&gt;
* 1 x [[Ice Crusher]]&lt;br /&gt;
* 5 x [[Pipes]]&lt;br /&gt;
* 1 x [[Pipe_Volume_Pump|Volume Pump]]&lt;br /&gt;
* 1 x [[Pressure Regulator]]&lt;br /&gt;
Optional&lt;br /&gt;
* 1 x [[Active Vent]]&lt;br /&gt;
With this setup you can collect gases from ices to mix later. You can also pre-mix the gases by adding Volatile ice and Oxite at a 2:1 ratio. You can then load the pre-mixed fuel  in canisters in pre-measured amounts using the pressure regulator.&lt;br /&gt;
====Setup====&lt;br /&gt;
[[File:ICE_CRUSHER.png|thumb|Combination Ice Crusher, Gas collection, and Gas measuring station, Front View (Caution: Be sure to turn of the pressure regulator, and pump al the gas out of the crusher when mixing gases)]]&lt;br /&gt;
# Place the ice crusher &lt;br /&gt;
# Place a pipe facing to the right&lt;br /&gt;
# Place a volume pump&lt;br /&gt;
# Place a pipe tee facing left,right, and down. &lt;br /&gt;
# Place a canister storage below the tee&lt;br /&gt;
# Place a regulator to the right of the tee&lt;br /&gt;
# Place a tee  facing left,right, and down, Or an elbow facing left and down.&lt;br /&gt;
# Place a second canister storage below the tee or elbow. &lt;br /&gt;
# (Optional) Place an active vent to the right of the last canister storage. &lt;br /&gt;
====Usage====&lt;br /&gt;
====Fuel mixing====&lt;br /&gt;
# Place Volatile Ice and Oxites in the ice crusher at a 2:1 ratio. &amp;lt;br&amp;gt; &amp;amp;ensp; &amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039; You can safely fit 8 Volatile to 4 Oxites in a canister. A Ratio of 10:5 will over fill a single canister &amp;lt;br&amp;gt; &amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;**&#039;&#039;&#039; Be sure to pump all the gases out of the crusher into a single canister, otherwise the mixture will fluxuate as the grinder processes and outs ices. &amp;lt;br&amp;gt; &amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;***&#039;&#039;&#039; Also be sure to turn off your regulator while you are collecting gases.&amp;lt;br&amp;gt;&lt;br /&gt;
# Pump the gases to your storage containers. &amp;lt;br&amp;gt;&lt;br /&gt;
# Set the regulator to the approximate pressure required to load the amount of fuel you need into the canister. &amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039; You can check the exact amount in the canister using the tablet and the gas analyzer &lt;br /&gt;
====Refiling oxygen tanks====&lt;br /&gt;
# Purge the pipe network of any spurious gases from previous operations. &lt;br /&gt;
# Crush Oxites in the the ice crusher&lt;br /&gt;
# Pump the Oxites into a canister. &amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039;A canister can hold approximately 12 Oxites.&amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039;You will need to use a nitrogen filter in additon to your regular CO2 filter when breathing crushed Oxites. &lt;br /&gt;
====Emptying Canisters====&lt;br /&gt;
# Place any canisters you want to empty into the far left canister storage&lt;br /&gt;
# Set the active vent to &amp;quot;outward&amp;quot; and turn it on. &lt;br /&gt;
====Collecting Atmospheric Gases====&lt;br /&gt;
# Place any canisters you want to fill in the far left slot. &lt;br /&gt;
# Set the active vent to &amp;quot;Inwards&amp;quot; and turn it on. &amp;lt;br&amp;gt;&amp;amp;ensp;&amp;amp;emsp;&#039;&#039;&#039;*&#039;&#039;&#039;Be aware that the canister will fill very quickly, be careful not to over-pressurize the canister.&lt;br /&gt;
&lt;br /&gt;
== Mixing Fuel == &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
You can easily mix fuel by adding O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; and H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; to a pipe network in order to put it into canisters or pump into a furnace.&lt;br /&gt;
&lt;br /&gt;
H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; can be attained by melting the [[Ice (Volatiles)]] that can be found in some worlds while being part of the atmosphere of [[Worlds#Vulcan|Vulcan]]. O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; can be attained by melting the [[Ice (Oxite)]] or again from some atmospheres. N&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O is part of [[Ice (Nitrice)]] or can be created by the [[Nitrolyzer]].&lt;br /&gt;
&lt;br /&gt;
Depending on how exact the proportions of your gas mixture are you will end up with different end temperatures and pressures after ignition.&lt;br /&gt;
&lt;br /&gt;
===Basic Canister Mixing Setup=== &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
====Parts required====&lt;br /&gt;
* 2 x [[Portables Connector]]&lt;br /&gt;
* 2 x [[Portable Gas Tank]]&lt;br /&gt;
* 1 x [[Pipe Gas Mixer]]&lt;br /&gt;
* 1 x [[Gas Tank Storage]]&lt;br /&gt;
* &#039;&#039;n&#039;&#039; x [[Pipes]]&lt;br /&gt;
* &#039;&#039;n&#039;&#039; x [[Cables]]&lt;br /&gt;
* &#039;&#039;n&#039;&#039; x [[Gas Canister]]&lt;br /&gt;
&lt;br /&gt;
====Setup==== &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
# Place both Portable Connectors&lt;br /&gt;
# Connect both Portable Connectors to the the inputs of the Pipe Gas Mixer&lt;br /&gt;
# Connect the Pipe Gas Mixer output to the Gas Tank Storage input&lt;br /&gt;
# Connect the Pipe Gas Mixer power input to power source.&lt;br /&gt;
&lt;br /&gt;
====Use==== &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
# Put first Portable Gas Tank or scrubber filled with O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; on one Portables Connector.&lt;br /&gt;
# Put second Portable Gas Tank or scrubber filled with H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;/volatile on the other Portables Connector.&lt;br /&gt;
# Use a wrench to connect both Portable Gas Tanks to their places.&lt;br /&gt;
# Optional: for a perfect fuel mix, ensure the temperatures of both gases are exactly the same.&lt;br /&gt;
# Set the Pipe Gas Mixer to desired combination (34% O&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 66% H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;) Note: as the combination is a floating point number, you can also enter 0.333... or 0.666... with a [[Labeller]] to get a more precise mix.&lt;br /&gt;
# Turn on Pipe Gas Mixer&lt;br /&gt;
# Place an empty Gas Canister in Gas Tank Storage.&lt;br /&gt;
{{:Gases and Liquids/Menu}}&lt;br /&gt;
[[Category:Gas]][[Category:Liquid]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Kit_(Satellite_Dish)&amp;diff=25591</id>
		<title>Kit (Satellite Dish)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Kit_(Satellite_Dish)&amp;diff=25591"/>
		<updated>2026-01-21T05:39:02Z</updated>

		<summary type="html">&lt;p&gt;TK421: Corrected base power usage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Machines]]&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Satellite Dish)&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
 | image       = [[File:ItemKitSatelliteDish.png]]&lt;br /&gt;
 | createdwith = [[Electronics Printer]]&lt;br /&gt;
 | cost        = 5g [[Gold]], 10g [[Copper]], 20g [[Steel]], 5g [[Nickel]], 10g [[Solder]]&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Medium Satellite Dish&lt;br /&gt;
 | image            = [[File:StructureSatelliteDish.png]]&lt;br /&gt;
 | power_usage      = 50W&lt;br /&gt;
 | placed_with_item = [[Satellite Dish|Kit (Satellite Dish)]]&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        = [[Satellite Dish|Kit (Satellite Dish)]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{outdated}} &lt;br /&gt;
==Description==&lt;br /&gt;
Small Satellite Dish&lt;br /&gt;
{{Description|The small communications unit can be used to communicate with nearby trade vessels.}}&lt;br /&gt;
Medium Satellite Dish&lt;br /&gt;
{{Description|The medium communications unit can be used to communicate with nearby trade vessels.}}&lt;br /&gt;
Either the small or medium Satellite Dish, or even the [[Large Satellite Dish]] are used together with a [[Computer]] fitted with a [[Motherboard (Communications)]] to allow Interstellar Communications.&lt;br /&gt;
&lt;br /&gt;
The Satellite Dish must be guided by [[Satellite Tracking]] onto a signal and communications may be established once the signal strength is greater than 94%&lt;br /&gt;
&lt;br /&gt;
== Medium Satellite Dish ==&lt;br /&gt;
=== Data Network Properties ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-customtoggle-datanetworkproperties&amp;quot; style=&amp;quot;width:auto; overflow:auto; text-indent:10px; border: 2px solid #253C60; border-radius:10px;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Click here to see/hide all the &amp;lt;span style=&amp;quot;color:#E57125;&amp;quot;&amp;gt;data network properties&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-datanetworkproperties&amp;quot;&amp;gt;&amp;lt;br&amp;gt;{{:Kit_(Satellite_Dish)/Data_Network}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stack Usage ==&lt;br /&gt;
After &amp;quot;Big Changes Coming: Terrain Preview, Melting Ice, Modding, &amp;amp; Localization&amp;quot; update, Medium Satellite Dish has internal stack like Autolathe, which user can utilize it to give instructions to.&lt;br /&gt;
The Medium Satellite Dish currently have 256Bytes(32 Addresses) stack memory.&lt;br /&gt;
&lt;br /&gt;
Pro tips:&lt;br /&gt;
* Everyday there will be only 3 vessels, one for each shuttle tier, in addition to special trader types.&lt;br /&gt;
* Everyday the 3 vessels will be refreshed, the algorithm for which type of vessel to appear is random, but strictly 1 for each tier, in addition to special trader types.&lt;br /&gt;
* It&#039;s best to use 500 watts if you are using medium satellite dish to scan, 500 watts is just large enough for the FAR tier to appear on the radar, but small enough for it&#039;s signal being masked by lower tier shuttles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Warning:&lt;br /&gt;
Internally every tick the stack data will be cleared and regenerated,&lt;br /&gt;
so don&#039;t OVERWRITE any TraderInstruction.Write* instructions when setting the WRITE_INDEX and WRITE_COUNT.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:50%;&amp;quot;&lt;br /&gt;
! Op_code&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Name&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Valid Address&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Bits&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Bits Description&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 1&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.WriteTraderData&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | The dish will write out metadata(24 Bytes, in continuous of 3 addresses) to the specified starting index. E.g.: if set WRITE_INDEX to 1, then the metadata will span address 1-3. See [[#Metadata_Payloads|Metadata Payload]]s.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| WRITE_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 2&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.StrongestContactIdHash&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderData payload segment 1.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| TRADER_ID_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;5&amp;quot; | 3&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | TraderInstruction.StrongestContactMetaData&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderData payload segment 2.&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| [[#Metadata_Payloads|SHUTTLE_TYPE]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-23&lt;br /&gt;
| [[#Metadata_Payloads|CONTACT_TIER]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-31&lt;br /&gt;
| [[#Metadata_Payloads|CONTACTED]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 4&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.StrongestContactSignalData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderData payload segment 3.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-23&lt;br /&gt;
| WATTS_TO_RESOLVE&amp;lt;br/&amp;gt;See [[Trader#Trader_Tier |WattsToResolve]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-39&lt;br /&gt;
| LIFETIME&amp;lt;br/&amp;gt;See [[Trader#Trader_Tier|LifeTime]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 5&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.WriteTraderBuyData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | The dish will write out trader buy metadatas from the starting address WRITE_INDEX, and write WRITE_COUNT continuous addresses total.&amp;lt;br/&amp;gt;If an item contains child items, then it will be expaned inplace.&amp;lt;br/&amp;gt;E.g.: &amp;lt;BuyPayload&amp;gt;&amp;lt;BuyPayload&amp;gt;&amp;lt;BuyChildPayload&amp;gt;&amp;lt;BuyPayload&amp;gt;.&amp;lt;br/&amp;gt;See [[#Buy.2FSell_Payloads|Buy/Sell Payloads]], [[#Buy.2FSell_Child_Payloads|Buy/Sell Child Payloads]].&amp;lt;br/&amp;gt;WRITE_COUNT=0 means WRITE_COUNT=1.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| WRITE_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-23&lt;br /&gt;
| WRITE_COUNT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 6&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.WriteTraderSellData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | The dish will write out trader sell metadatas from the starting address WRITE_INDEX, and write WRITE_COUNT continuous addresses total.&amp;lt;br/&amp;gt;If an item contains child items, then it will be expaned inplace.&amp;lt;br/&amp;gt;E.g.: &amp;lt;SellPayload&amp;gt;&amp;lt;SellPayload&amp;gt;&amp;lt;SellChildPayload&amp;gt;&amp;lt;SellPayload&amp;gt;.&amp;lt;br/&amp;gt;See [[#Buy.2FSell_Payloads |Buy/Sell Payloads]], [[#Buy.2FSell_Child_Payloads|Buy/Sell Child Payloads]].&amp;lt;br/&amp;gt;WRITE_COUNT=0 means WRITE_COUNT=1.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| WRITE_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-23&lt;br /&gt;
| WRITE_COUNT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 7&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderBuyThingData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderBuyData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 8&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderBuyThingChildData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderBuyData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 9&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderBuyGasData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderBuyData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| GAS_TYPES_BITFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 10&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderSellThingData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderSellData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 11&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderSellGasData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderSellData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| GAS_TYPES_BIGFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 12&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderSellThingChildData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderSellData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 13&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterPrefabHashEquals&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching PrefabHash.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 14&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterPrefabHashNotEquals&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only not matching PrefabHash.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 15&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.FilterSortingClassCompare&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching SortingClass.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| CONDITION_OPERATION&amp;lt;br/&amp;gt;0: Equals&amp;lt;br/&amp;gt;1: Greater&amp;lt;br/&amp;gt;2: Less&amp;lt;br/&amp;gt;3: Not Equals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-31&lt;br /&gt;
| SORTING_CLASS&amp;lt;br/&amp;gt;See [[Sorting_Class]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 16&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.FilterQuantityCompare&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching Quantity Condition.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| CONDITION_OPERATION&amp;lt;br/&amp;gt;0: Equals&amp;lt;br/&amp;gt;1: Greater&amp;lt;br/&amp;gt;2: Less&amp;lt;br/&amp;gt;3: Not Equals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-31&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 17&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterGasContains&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching Gases.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| GAS_TYPES_BITFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 18&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterGasNotContains&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only not matching Gases.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| GAS_TYPES_BITFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Metadata Payloads ===&lt;br /&gt;
&lt;br /&gt;
Since Metadata has 3 addresses, so it&#039;s referenced here as a 24 bytes(192 bits) payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:80%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-40&lt;br /&gt;
| 39-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Segment 1&lt;br /&gt;
| All bits value in this section is the deplicate of bit 39.&lt;br /&gt;
| TraderIdHash&lt;br /&gt;
| OpCode of TraderInstruction.StrongestContactIdHash.&lt;br /&gt;
|-&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-32&lt;br /&gt;
| 31-24&lt;br /&gt;
| 23-16&lt;br /&gt;
| 15-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Segment 2&lt;br /&gt;
| All bits 0.&lt;br /&gt;
| Contacted&amp;lt;br/&amp;gt;0: false&amp;lt;br/&amp;gt; 1: true&lt;br /&gt;
| Contact Tier: &amp;lt;br/&amp;gt;0: Close&amp;lt;br/&amp;gt;1: Medium&amp;lt;br/&amp;gt;2: Far&lt;br /&gt;
| Shuttle Type: &amp;lt;br/&amp;gt;0:None&amp;lt;br/&amp;gt;1: Small(3x3)&amp;lt;br/&amp;gt;2: SmallGas(3x3)&amp;lt;br/&amp;gt;3: Medium(5x5)&amp;lt;br/&amp;gt;4: MediumGas(5x5)&amp;lt;br/&amp;gt;5: Large(6x6)&amp;lt;br/&amp;gt;6: LargeGas(6x6)&amp;lt;br/&amp;gt;7: MediumPlane(7x7, runway:15)&amp;lt;br/&amp;gt;8: LargePlane(9x9, runway:20)&lt;br /&gt;
| OpCode of TraderInstruction.StrongestContactMetaData.&lt;br /&gt;
|-&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-40&lt;br /&gt;
| 39-24&lt;br /&gt;
| 23-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Segment 3&lt;br /&gt;
| ALl bits 0.&lt;br /&gt;
| [[Trader#Trader_Tier|LifeTime]]&lt;br /&gt;
| [[Trader#Trader_Tier|WattsToResolve]]&lt;br /&gt;
| OpCode of TraderInstruction.StrongestContactSignalData.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Buy/Sell Payloads ===&lt;br /&gt;
&lt;br /&gt;
Buy/Sell Payloads are 1 address each, so it&#039;s referenced here as a 8 bytes(64 bit) payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:60%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-48&lt;br /&gt;
| 47-16&lt;br /&gt;
| 15-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Contents&lt;br /&gt;
| Every bit&#039;s value is the same as bit 47.&lt;br /&gt;
| PrefabHash/GasTypeBitFlag&lt;br /&gt;
| Quantity&amp;lt;br/&amp;gt;This value is truncated so it won&#039;t be greater than 255 although the trader&#039;s Request/Stock is more than 255.&lt;br /&gt;
| OpCode&amp;lt;br/&amp;gt;Data type represented as OpCode, one of the OpCode 7, 9, 10, 11.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Buy/Sell Child Payloads ===&lt;br /&gt;
&lt;br /&gt;
Buy/Sell Payloads are 1 address each, so it&#039;s referenced here as a 8 bytes(64 bit) payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:60%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-48&lt;br /&gt;
| 47-16&lt;br /&gt;
| 15-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Contents&lt;br /&gt;
| Every bit&#039;s value is the same as bit 47.&lt;br /&gt;
| PrefabHash/GasTypeBitFlag&lt;br /&gt;
| ChildCount&amp;lt;br/&amp;gt;Counts how many instances of this item appeared as a child item.&amp;lt;br/&amp;gt;Beware it&#039;s not quantity, it&#039;s just a prefab type count.&lt;br /&gt;
| OpCode&amp;lt;br/&amp;gt;If this data is requested by TraderInstruction.WriteTraderBuyData, then it&#039;s value is the OpCode of TraderInstruction.TraderBuyThingChildData.&amp;lt;br/&amp;gt;If this data is requested by TraderInstruction.WriteTraderSellData, then it&#039;s value is the OpCode of TraderInstruction.TraderSellThingChildData.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gas Type BitFlags ===&lt;br /&gt;
&lt;br /&gt;
If the BitFlag equals 0, it&#039;s undefined. If the bit at specific offset is 1, it means the gas contains that component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:60%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 16&lt;br /&gt;
| 15&lt;br /&gt;
| 14&lt;br /&gt;
| 13&lt;br /&gt;
| 12&lt;br /&gt;
| 11&lt;br /&gt;
| 10&lt;br /&gt;
| 9&lt;br /&gt;
| 8&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
! Contents&lt;br /&gt;
| PollutedWater&lt;br /&gt;
| LiquidHydrogen&lt;br /&gt;
| Hydrogen&lt;br /&gt;
| LiquidNitrousOxide&lt;br /&gt;
| LiquidPollutant&lt;br /&gt;
| LiquidCarbonDioxide&lt;br /&gt;
| Steam&lt;br /&gt;
| LiquidVolatiles&lt;br /&gt;
| LiquidOxygen&lt;br /&gt;
| LiquidNitrogen&lt;br /&gt;
| NitrousOxide&lt;br /&gt;
| Water&lt;br /&gt;
| Pollutant&lt;br /&gt;
| Volatiles&lt;br /&gt;
| CarbonDioxide&lt;br /&gt;
| Nitrogen&lt;br /&gt;
| Oxygen&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Special Gas:&lt;br /&gt;
# Bit 0,1 both set to 1, which is Air.&lt;br /&gt;
# Bit 0,3 both set to 1, which is Fuel.&lt;br /&gt;
&lt;br /&gt;
==Stack Programming Reference Implementation==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Warning:&lt;br /&gt;
The following code is a reference implementation, it only serve the purpose to&lt;br /&gt;
assist you to observe the possibility and help you write your own code.&lt;br /&gt;
You must write your own code to fully enjoy the game.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shuttle Cargoes Looking Glasses ===&lt;br /&gt;
&lt;br /&gt;
The Looking Glasses are purely for cargo inspection, no filter, no auto negotiate and call-down.&lt;br /&gt;
&lt;br /&gt;
Materials to prepare:&lt;br /&gt;
* A Medium Satellite Dish.&lt;br /&gt;
* Any number of [[Kit_(Logic_Memory)|Logic Memories]] for &#039;&#039;&#039;Prefab&#039;&#039;&#039; [[Console|Console]] display (if there are more Prefabs to display than your number of [[Kit_(Logic_Memory)|Logic Memories]], they will be ignored).&lt;br /&gt;
* Corresponding number of [[Circuitboard|Hash Displays]] and [[Console|Consoles]].&lt;br /&gt;
* Any number of [[Kit_(Logic_Memory)|Logic Memories]] for &#039;&#039;&#039;Gas&#039;&#039;&#039; [[Console|Console]] display, (if there are more GasLiquid to display than your number of [[Kit_(Logic_Memory)|Logic Memories]], they will be ignored).&lt;br /&gt;
* Corresponding number of [[Circuitboard|Hash Displays]] and [[Console|Consoles]].&lt;br /&gt;
* 1 [[Kit_(Switch)#Switch|Logic Switch]] for switch trader&#039;s sell/buy data.&lt;br /&gt;
* 6 [[Console|Console]] for Small LED installation (all will show metadata).&lt;br /&gt;
* 1 [[Kit_(IC_Housing)|Kit (IC Housing)]] and 1 [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]].&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
* Install all of the [[Kit_(Logic_Memory)|Logic Memories]].&lt;br /&gt;
* Install corresponding &#039;&#039;&#039;Prefab&#039;&#039;&#039; [[Console|Consoles]], insert [[Circuitboard|Hash Displays]], and make sure the [[Circuitboard|Hash Displays]] are set to &#039;&#039;&#039;Prefab&#039;&#039;&#039; display mode: &amp;lt;code&amp;gt;Mode=0&amp;lt;/code&amp;gt;&lt;br /&gt;
* Install corresponding &#039;&#039;&#039;Gas&#039;&#039;&#039; [[Console|Consoles]], insert [[Circuitboard|Hash Displays]], and make sure the [[Circuitboard|Hash Displays]] are set to &#039;&#039;&#039;GasLiquid&#039;&#039;&#039; display mode: &amp;lt;code&amp;gt;Mode=1&amp;lt;/code&amp;gt;&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# example for setup GasLiquid mode&lt;br /&gt;
ss d0 0 Mode 1 # d0 is console pin&lt;br /&gt;
# or configure all the Consoles in the IcHousing&#039;s subnetwork&lt;br /&gt;
sbs StructureConsole 0 Mode 1&lt;br /&gt;
}}&lt;br /&gt;
* Naming each [[Kit_(Logic_Memory)|Logic Memory]] sequentially for two display types, for example: &amp;lt;code&amp;gt;SLMP1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SLMP2&amp;lt;/code&amp;gt; for &#039;&#039;&#039;Prefab&#039;&#039;&#039; display, and &amp;lt;code&amp;gt;SLMG1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SLMG2&amp;lt;/code&amp;gt; for &#039;&#039;&#039;GasLiquid&#039;&#039;&#039; display.&lt;br /&gt;
* Manually configure all [[Console|Consoles]] to link to their corresponding [[Kit_(Logic_Memory)|Logic Memories]] with [[Data_Disk|Data Disk]].&lt;br /&gt;
* Install 1 [[Kit_(Switch)#Switch|Logic Switch]] for switch trader&#039;s sell/buy data, &amp;lt;code&amp;gt;Open&amp;lt;/code&amp;gt; shows trader&#039;s Buy data, &amp;lt;code&amp;gt;Close&amp;lt;/code&amp;gt; shows trader&#039;s Sell data. Label it &amp;lt;code&amp;gt;TRADER_SELL_BUY_SWITCH&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Install 1 [[Kit_(IC_Housing)|Kit (IC Housing)]] in the same subnetwork and label it &amp;lt;code&amp;gt;Cargo LG IC Housing&amp;lt;/code&amp;gt;, insert a [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]].&lt;br /&gt;
* Install 6 LED and labeling them: &amp;lt;code&amp;gt;LED_SIGID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_CON_TYPE_ID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_TIER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_SHUTTLE_TYPE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_WATT_TO_RESOLVE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_CONTACTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Reference Implementation:&lt;br /&gt;
&lt;br /&gt;
Next are the code snippets for a setup of 20 &#039;&#039;&#039;Prefab&#039;&#039;&#039; Console and 11 &#039;&#039;&#039;GasLiquid&#039;&#039;&#039; Console looking glass.&lt;br /&gt;
&lt;br /&gt;
First snippet is the initialization/configuration code, which should be write to the [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]] for the first time, add/remove the [[Kit_(Logic_Memory)|Logic Memories]] stack entries that you actually used in your setup, then install the chip to housing.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# Shuttle Cargoes Looking Glasses IC Stack Initializer&lt;br /&gt;
&lt;br /&gt;
clr db&lt;br /&gt;
move sp 0&lt;br /&gt;
# Prefab display Logic Memories, add/remove according to your setup.&lt;br /&gt;
push HASH(&amp;quot;SLMP1&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP2&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP3&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP4&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP5&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP6&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP7&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP8&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP9&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP10&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP11&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP12&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP13&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP14&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP15&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP16&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP17&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP18&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP19&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP20&amp;quot;)&lt;br /&gt;
move r13 sp&lt;br /&gt;
&lt;br /&gt;
# GasLiquid display Logic Memories, add/remove according to your setup.&lt;br /&gt;
push HASH(&amp;quot;SLMG1&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG2&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG3&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG4&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG5&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG6&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG7&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG8&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG9&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG10&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG11&amp;quot;)&lt;br /&gt;
move r12 sp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Second snippet is for the same [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]], take your IC10 chip out re-put it into the laptop, clear and paste in the new second code snippet.&lt;br /&gt;
&lt;br /&gt;
There are a few user variables need to modify, please check the in-line comments. Mostly that&#039;s for LEDs to display metadata. Change the variables accordingly then insert the IC10 chip into the housing.&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# Shuttle Cargoes Looking Glasses Runtime IC10&lt;br /&gt;
#&lt;br /&gt;
# User variable:&lt;br /&gt;
#&lt;br /&gt;
# DishM:              The Medium Dish hash.&lt;br /&gt;
# LED_SIGID:          The LED name, show SignalID.&lt;br /&gt;
# LED_CON_TYPE_ID:    The LED name, show ContactTypeID.&lt;br /&gt;
# LED_TIER:           The LED name, show Tier.&lt;br /&gt;
# LED_SHUTTLE_TYPE:   The LED name, show Shuttle Type.&lt;br /&gt;
# LED_CONTACTED:      The LED name, show if the shuttle has been contacted already.&lt;br /&gt;
define DishM HASH(&amp;quot;Medium Satellite Dish 1&amp;quot;)&lt;br /&gt;
define LED_SIGID HASH(&amp;quot;LED_SIGID&amp;quot;)&lt;br /&gt;
define LED_CON_TYPE_ID HASH(&amp;quot;LED_CON_TYPE_ID&amp;quot;)&lt;br /&gt;
define LED_TIER HASH(&amp;quot;LED_TIER&amp;quot;)&lt;br /&gt;
define LED_SHUTTLE_TYPE HASH(&amp;quot;LED_SHUTTLE_TYPE&amp;quot;)&lt;br /&gt;
define LED_WATT_TO_RESOLVE HASH(&amp;quot;LED_WATT_TO_RESOLVE&amp;quot;)&lt;br /&gt;
define LED_CONTACTED HASH(&amp;quot;LED_CONTACTED&amp;quot;)&lt;br /&gt;
define TRADER_BUY_SEEL_SWITCH HASH(&amp;quot;TRADER_SELL_BUY_SWITCH&amp;quot;)&lt;br /&gt;
###############################################################################&lt;br /&gt;
define SSD HASH(&amp;quot;StructureSatelliteDish&amp;quot;)&lt;br /&gt;
define SLM HASH(&amp;quot;StructureLogicMemory&amp;quot;)&lt;br /&gt;
define OpcodeMask %11111111&lt;br /&gt;
alias dishMID r15&lt;br /&gt;
alias dishEntryCount r14&lt;br /&gt;
alias prefabMemCount r13&lt;br /&gt;
alias totalMemCount r12&lt;br /&gt;
alias prefabMemCursor r11&lt;br /&gt;
alias gasMemCursor r10&lt;br /&gt;
alias sellOrBuy r9&lt;br /&gt;
&lt;br /&gt;
mainloop:&lt;br /&gt;
jal WriteStack&lt;br /&gt;
jal Display&lt;br /&gt;
jal ClearPrefabMem&lt;br /&gt;
jal ClearGasMem&lt;br /&gt;
sleep 1&lt;br /&gt;
j mainloop&lt;br /&gt;
WriteStack:&lt;br /&gt;
lbn dishMID SSD DishM ReferenceId Average&lt;br /&gt;
bnan dishMID ra&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureLogicSwitch2&amp;quot;) TRADER_BUY_SEEL_SWITCH Open Average&lt;br /&gt;
brgtz r0 3&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderSellData&lt;br /&gt;
jr 2&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderBuyData&lt;br /&gt;
clrd dishMID&lt;br /&gt;
sll r0 1 8&lt;br /&gt;
or r0 r0 TraderInstruction.WriteTraderData&lt;br /&gt;
putd dishMID 0 r0&lt;br /&gt;
sll r0 30 16&lt;br /&gt;
sll r1 5 8&lt;br /&gt;
or r0 r0 r1&lt;br /&gt;
or r0 r0 sellOrBuy&lt;br /&gt;
putd dishMID 4 r0&lt;br /&gt;
sleep 1&lt;br /&gt;
j ra&lt;br /&gt;
Display:&lt;br /&gt;
lbn r1 SSD DishM SignalID Average&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_SIGID Setting r1&lt;br /&gt;
move dishEntryCount 0&lt;br /&gt;
move prefabMemCursor 0&lt;br /&gt;
move gasMemCursor prefabMemCount&lt;br /&gt;
DisplayLoop:&lt;br /&gt;
beq dishEntryCount 31 ra&lt;br /&gt;
add dishEntryCount dishEntryCount 1&lt;br /&gt;
getd r0 dishMID dishEntryCount&lt;br /&gt;
and r1 r0 OpcodeMask&lt;br /&gt;
beq r1 2 MetaData1&lt;br /&gt;
beq r1 3 MetaData2&lt;br /&gt;
beq r1 4 MetaData3&lt;br /&gt;
beq r1 7 ThingData&lt;br /&gt;
beq r1 8 ThingData&lt;br /&gt;
beq r1 9 GasData&lt;br /&gt;
beq r1 10 ThingData&lt;br /&gt;
beq r1 11 GasData&lt;br /&gt;
beq r1 12 ThingData&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData1:&lt;br /&gt;
sra r2 r0 8 # trader contact type id&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_CON_TYPE_ID Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData2:&lt;br /&gt;
and r2 r0 %11111111_00000000_00000000_00000000&lt;br /&gt;
sra r2 r2 24 # contacted&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_CONTACTED Setting r2&lt;br /&gt;
and r2 r0 %11111111_00000000_00000000&lt;br /&gt;
sra r2 r2 16 # tier&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_TIER Setting r2&lt;br /&gt;
and r2 r0 %11111111_00000000&lt;br /&gt;
sra r2 r2 8 # shuttle type&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_SHUTTLE_TYPE Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData3:&lt;br /&gt;
and r2 r0 %11111111_11111111_00000000&lt;br /&gt;
sra r2 r2 8 # watts to resolve&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_WATT_TO_RESOLVE Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
ThingData:&lt;br /&gt;
get r2 db prefabMemCursor # memory chip&lt;br /&gt;
sra r3 r0 16 # prefab hash&lt;br /&gt;
sbn SLM r2 Setting r3&lt;br /&gt;
add prefabMemCursor prefabMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
GasData:&lt;br /&gt;
get r2 db gasMemCursor # memory chip&lt;br /&gt;
sra r3 r0 16&lt;br /&gt;
sbn SLM r2 Setting r3&lt;br /&gt;
add gasMemCursor gasMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
ClearPrefabMem:&lt;br /&gt;
move sp prefabMemCursor&lt;br /&gt;
ClearPrefabMemLoop:&lt;br /&gt;
bge sp prefabMemCount ra&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn SLM r0 Setting -1&lt;br /&gt;
j ClearPrefabMemLoop&lt;br /&gt;
ClearGasMem:&lt;br /&gt;
move sp gasMemCursor&lt;br /&gt;
ClearGasMemLoop:&lt;br /&gt;
bge sp totalMemCount ra&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn SLM r0 Setting -1&lt;br /&gt;
j ClearGasMemLoop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Final: Now enable the Medium Satellite Dish, enable the Cargo LG IC Housing(the 2nd script should be running), add some power to the dish and rotate it somehow, then check the monitors and LEDs, you will see the items you can shop(trader will sell) from this trader if the logic switch is &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt;, and you will see the items you can sell(trader will buy) from the best trader if the logic switch is &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The total setup feels like this &lt;br /&gt;
[[File:2025-04-18-1049x333-scrot.png|Overview of Looking Glass Setup]]&lt;br /&gt;
&lt;br /&gt;
=== Shuttle Cargoes Auto Filtration/Interrogation and Call Down ===&lt;br /&gt;
&lt;br /&gt;
To add Auto Filtration/Interrogation ability, prepare following materials in advance. It&#039;s build on top of Looking Glass structure of the previous section, take caution.&lt;br /&gt;
&lt;br /&gt;
* Repurpose the IC Housing of the Looking Glass section, label it &amp;lt;code&amp;gt;Trader Filtration IC Housing&amp;lt;/code&amp;gt; or a name you like.&lt;br /&gt;
* 1 [[Kit_(Logic_Memory)|Logic Memory]], install it and label it &amp;lt;code&amp;gt;SLM_ITEM_FILTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 1 [[Kit_(Switch)#Switch|Logic Switch]] for switching filter prefab/gas data, label it &amp;lt;code&amp;gt;FILTER_GAS_SWITCH&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 1 [[Console|Console]], install it as Small LED and label it &amp;lt;code&amp;gt;LED_LOCKED_SIGID&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 1 [[Kit_(IC_Housing)|Kit (IC Housing)]], install it and label it &amp;lt;code&amp;gt;Dish Control IC Housing&amp;lt;/code&amp;gt; or a name you like.&lt;br /&gt;
* 1 [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]] ready for use.&lt;br /&gt;
* 1 [[Kit_(Logic_Transmitter)|Logic Transmitter]] for sending audio message to your Hardsuit when trader is landing, label it &amp;lt;code&amp;gt;Hardsuit LT 1&amp;lt;/code&amp;gt;, pair it with your [[Hardsuit|hardsuit]] in passive mode.&lt;br /&gt;
* 1 Small Satellite Dish for faster Close/Medium shuttle scanning, optional. If you set it up, the power port must face the same direction as the Medium Dish. If you don&#039;t, it just take a few more time to scan with the default Medium Satellite Dish for Close/Medium tier shuttles.&lt;br /&gt;
* 1 Large Satellite Dish for faster Far tier shuttle interrogation, optional. If you set it up, the power port must face the same direction as the Medium Dish. If you don&#039;t, it just take a few more time to interrogate with the default Medium Satellite Dish for Far tier shuttles.&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
&lt;br /&gt;
Install all things above and power on. For the repurposed &amp;lt;code&amp;gt;Trader Filtration IC Housing&amp;lt;/code&amp;gt; code, paste in following code, replacing Looking Glass code(the Lookging Glass&#039;s function is still in the code, plus the filtration function), change the &amp;lt;code&amp;gt;DishM&amp;lt;/code&amp;gt;&#039;s name as you like. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Warning:&lt;br /&gt;
If you use a brand new IC10 chip for the Trader Filtration IC Housing,&lt;br /&gt;
you still need to initialize the IC10 chip with the code of Shuttle Cargoes Looking Glasses IC Stack Initializer,&lt;br /&gt;
or the stack will be empty as a stack is an IC10 CHIP property.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define DishM HASH(&amp;quot;Medium Satellite Dish 1&amp;quot;)&lt;br /&gt;
alias dishMID r15&lt;br /&gt;
alias filterGas r14&lt;br /&gt;
alias prefabMemCount r13&lt;br /&gt;
alias totalMemCount r12&lt;br /&gt;
alias prefabMemCursor r11&lt;br /&gt;
alias gasMemCursor r10&lt;br /&gt;
alias sellOrBuy r9&lt;br /&gt;
alias filterItem r7&lt;br /&gt;
alias signalID r6&lt;br /&gt;
move r5 0 # lastSignalID&lt;br /&gt;
mainloop:&lt;br /&gt;
move r8 0 # nextAddress&lt;br /&gt;
WriteStack:&lt;br /&gt;
lbn dishMID HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM ReferenceId Average&lt;br /&gt;
bnan dishMID mainloop&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureLogicSwitch2&amp;quot;) HASH(&amp;quot;TRADER_SELL_BUY_SWITCH&amp;quot;) Open Average&lt;br /&gt;
brgtz r0 3&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderSellData&lt;br /&gt;
jr 2&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderBuyData&lt;br /&gt;
clrd dishMID&lt;br /&gt;
sll r0 1 8&lt;br /&gt;
or r0 r0 TraderInstruction.WriteTraderData&lt;br /&gt;
putd dishMID r8 r0&lt;br /&gt;
add r8 r8 4&lt;br /&gt;
lbn filterGas HASH(&amp;quot;StructureLogicSwitch2&amp;quot;) HASH(&amp;quot;FILTER_GAS_SWITCH&amp;quot;) Setting Average&lt;br /&gt;
lbn filterItem HASH(&amp;quot;StructureLogicMemory&amp;quot;) HASH(&amp;quot;SLM_ITEM_FILTER&amp;quot;) Setting Average&lt;br /&gt;
breqz filterItem 8 # skip if filter value is 0&lt;br /&gt;
sll r0 filterItem 8&lt;br /&gt;
breqz filterGas 3&lt;br /&gt;
or r0 r0 TraderInstruction.FilterGasContains&lt;br /&gt;
jr 2&lt;br /&gt;
or r0 r0 TraderInstruction.FilterPrefabHashEquals&lt;br /&gt;
putd dishMID r8 r0&lt;br /&gt;
add r8 r8 1&lt;br /&gt;
sll r0 30 16&lt;br /&gt;
add r1 r8 1&lt;br /&gt;
sll r1 r1 8&lt;br /&gt;
or r0 r0 r1&lt;br /&gt;
or r0 r0 sellOrBuy&lt;br /&gt;
putd dishMID r8 r0&lt;br /&gt;
yield&lt;br /&gt;
Display:&lt;br /&gt;
lbn signalID HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM SignalID Average&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_SIGID&amp;quot;) Setting signalID&lt;br /&gt;
move r0 0&lt;br /&gt;
move prefabMemCursor 0&lt;br /&gt;
move gasMemCursor prefabMemCount&lt;br /&gt;
DisplayLoop:&lt;br /&gt;
beq r0 31 ClearMem&lt;br /&gt;
add r0 r0 1&lt;br /&gt;
getd r1 dishMID r0&lt;br /&gt;
and r2 r1 %11111111&lt;br /&gt;
beq r2 2 MetaData1&lt;br /&gt;
beq r2 3 MetaData2&lt;br /&gt;
beq r2 4 MetaData3&lt;br /&gt;
beq r2 7 ThingData&lt;br /&gt;
beq r2 8 ThingData&lt;br /&gt;
beq r2 9 GasData&lt;br /&gt;
beq r2 10 ThingData&lt;br /&gt;
beq r2 11 GasData&lt;br /&gt;
beq r2 12 ThingData&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData1:&lt;br /&gt;
sra r2 r1 8 # trader contact type id&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_CON_TYPE_ID&amp;quot;) Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData2:&lt;br /&gt;
and r2 r1 %11111111_00000000_00000000_00000000&lt;br /&gt;
sra r2 r2 24 # contacted&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_CONTACTED&amp;quot;) Setting r2&lt;br /&gt;
and r2 r1 %11111111_00000000_00000000&lt;br /&gt;
sra r2 r2 16 # tier&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_TIER&amp;quot;) Setting r2&lt;br /&gt;
and r2 r1 %11111111_00000000&lt;br /&gt;
sra r2 r2 8 # shuttle type&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_SHUTTLE_TYPE&amp;quot;) Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData3:&lt;br /&gt;
and r2 r1 %11111111_11111111_00000000&lt;br /&gt;
sra r2 r2 8 # watts to resolve&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_WATT_TO_RESOLVE&amp;quot;) Setting r2&lt;br /&gt;
and r2 r1 $FFFF_000000&lt;br /&gt;
sra r2 r2 24 # lifetime&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LIFETIME&amp;quot;) Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
ThingData:&lt;br /&gt;
get r2 db prefabMemCursor # memory chip&lt;br /&gt;
sra r3 r1 16 # prefab hash&lt;br /&gt;
breqz filterItem 3&lt;br /&gt;
bne filterItem r3 DisplayLoop&lt;br /&gt;
jal LockSignalID&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r2 Setting r3&lt;br /&gt;
add prefabMemCursor prefabMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
GasData:&lt;br /&gt;
get r2 db gasMemCursor # memory chip&lt;br /&gt;
sra r3 r1 16&lt;br /&gt;
sgtz r4 filterItem&lt;br /&gt;
and r4 r4 filterGas&lt;br /&gt;
breqz r4 4&lt;br /&gt;
and r4 filterItem r3&lt;br /&gt;
beqz r4 DisplayLoop&lt;br /&gt;
jal LockSignalID&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r2 Setting r3&lt;br /&gt;
add gasMemCursor gasMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
LockSignalID:&lt;br /&gt;
lbn r4 HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting Average&lt;br /&gt;
bgtz r4 ra&lt;br /&gt;
beq signalID r5 ra&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting signalID&lt;br /&gt;
move r5 signalID&lt;br /&gt;
j ra&lt;br /&gt;
ClearMem:&lt;br /&gt;
move sp prefabMemCursor&lt;br /&gt;
brge sp prefabMemCount 5&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r0 Setting -1&lt;br /&gt;
jr -4&lt;br /&gt;
move sp gasMemCursor&lt;br /&gt;
bge sp totalMemCount mainloop&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r0 Setting -1&lt;br /&gt;
jr -4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;code&amp;gt;Dish Control IC Housing&amp;lt;/code&amp;gt; code, paste in following code, change the hash of &amp;lt;code&amp;gt;DishS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DishL&amp;lt;/code&amp;gt; names as you have then setted up or not. Search and change the name of &amp;lt;code&amp;gt;Hardsuit LT 1&amp;lt;/code&amp;gt; line if you want to send notification to other devices.&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define DishM HASH(&amp;quot;Medium Satellite Dish 1&amp;quot;)&lt;br /&gt;
define DishS 0 # if you have small dish, set hash to HASH(&amp;quot;NAME&amp;quot;)&lt;br /&gt;
define DishL 0 # if you have large dish, set hash to HASH(&amp;quot;NAME&amp;quot;)&lt;br /&gt;
move r0 0&lt;br /&gt;
reset:&lt;br /&gt;
move r15 r0 # lockedSigID&lt;br /&gt;
move r14 0 # horizontal&lt;br /&gt;
move r13 0 # vertical&lt;br /&gt;
move r12 0 # horizontalEdge1&lt;br /&gt;
move r11 0 # horizontalEdge2&lt;br /&gt;
move r10 0 # verticalEdge1&lt;br /&gt;
move r9 0 # verticalEdge2&lt;br /&gt;
move r8 DishM # commDish&lt;br /&gt;
move r7 HASH(&amp;quot;StructureSatelliteDish&amp;quot;) # commDishType&lt;br /&gt;
move r6 DishM # scanDish&lt;br /&gt;
move r5 r7 # scanDishType&lt;br /&gt;
sbn r5 r6 Vertical 60&lt;br /&gt;
sbn r5 r6 BestContactFilter -1&lt;br /&gt;
sbn r5 r6 Setting 500&lt;br /&gt;
mainloop:&lt;br /&gt;
yield&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting Average&lt;br /&gt;
lbn r1 r5 r6 SignalID Average&lt;br /&gt;
lbn r2 r5 r6 Horizontal Average&lt;br /&gt;
lbn r3 r5 r6 Vertical Average&lt;br /&gt;
breqz r0 34&lt;br /&gt;
  bne r0 r15 reset&lt;br /&gt;
  lbn r4 HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_TIER&amp;quot;) Setting Average&lt;br /&gt;
  brnez r14 10&lt;br /&gt;
  brge r4 2 5&lt;br /&gt;
    breqz DishS 4&lt;br /&gt;
      move r6 DishS&lt;br /&gt;
      move r5 HASH(&amp;quot;StructureSmallSatelliteDish&amp;quot;)&lt;br /&gt;
      sbn r5 r6 Setting 200&lt;br /&gt;
    breqz DishL 3&lt;br /&gt;
      move r8 DishL&lt;br /&gt;
      move r7 HASH(&amp;quot;StructureLargeSatelliteDish&amp;quot;)&lt;br /&gt;
  sbn r5 r6 BestContactFilter r15&lt;br /&gt;
  sbn r5 r6 On 1&lt;br /&gt;
  beqz r12 ScanHorizontal&lt;br /&gt;
  beqz r11 ScanReverseHorizontal&lt;br /&gt;
  beqz r10 ScanVertical&lt;br /&gt;
  beqz r9 ScanReverseVertical&lt;br /&gt;
  brne r1 -1 3&lt;br /&gt;
    sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting 0&lt;br /&gt;
    j reset&lt;br /&gt;
  yield&lt;br /&gt;
  lbn r0 r7 r8 Idle Average&lt;br /&gt;
  breqz r0 -2&lt;br /&gt;
  sbn r7 r8 BestContactFilter r15&lt;br /&gt;
  sbn r7 r8 Setting 50000&lt;br /&gt;
  sbn r7 r8 Activate 1&lt;br /&gt;
  lbn r0 r7 r8 InterrogationProgress Average&lt;br /&gt;
  brlt r0 1 4&lt;br /&gt;
    sleep 2&lt;br /&gt;
    sbn HASH(&amp;quot;StructureLogicTransmitter&amp;quot;) HASH(&amp;quot;Hardsuit LT 1&amp;quot;) SoundAlert 37&lt;br /&gt;
    sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting 0&lt;br /&gt;
  j mainloop&lt;br /&gt;
bnez r15 reset&lt;br /&gt;
breq r6 DishM 2 # enter roaming mode&lt;br /&gt;
sbn r5 r6 On 0&lt;br /&gt;
breq r8 DishM 2&lt;br /&gt;
sbn r7 r8 On 0&lt;br /&gt;
sbn HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM On 1&lt;br /&gt;
add r2 r2 2&lt;br /&gt;
mod r2 r2 360&lt;br /&gt;
sbn HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM Horizontal r2&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanHorizontal:&lt;br /&gt;
brne r1 -1 4&lt;br /&gt;
  move r12 r14&lt;br /&gt;
  sbn r5 r6 Horizontal r14&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r14 r2&lt;br /&gt;
sub r4 r2 5&lt;br /&gt;
mod r4 r4 360&lt;br /&gt;
sbn r5 r6 Horizontal r4&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanReverseHorizontal:&lt;br /&gt;
brne r1 -1 14&lt;br /&gt;
  beq r14 r12 13&lt;br /&gt;
  move r11 r14&lt;br /&gt;
  slt r4 r11 r12&lt;br /&gt;
  breqz r4 2&lt;br /&gt;
  add r11 r11 360&lt;br /&gt;
  add r4 r11 r12&lt;br /&gt;
  div r4 r4 2&lt;br /&gt;
  mod r4 r4 360&lt;br /&gt;
  sbn r5 r6 Horizontal r4&lt;br /&gt;
  sbn r7 r8 On 1&lt;br /&gt;
  sbn r7 r8 Horizontal r4&lt;br /&gt;
  jal 124&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r14 r2&lt;br /&gt;
add r4 r2 5&lt;br /&gt;
mod r4 r4 360&lt;br /&gt;
sbn r5 r6 Horizontal r4&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanVertical:&lt;br /&gt;
brne r1 -1 4&lt;br /&gt;
  move r10 r13&lt;br /&gt;
  sbn r5 r6 Vertical r13&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r13 r3&lt;br /&gt;
brge r3 89.9 -4&lt;br /&gt;
add r4 r3 5&lt;br /&gt;
sbn r5 r6 Vertical r4&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanReverseVertical:&lt;br /&gt;
brne r1 -1 10&lt;br /&gt;
  beq r13 r10 9&lt;br /&gt;
  move r9 r13&lt;br /&gt;
  select r9 r9 r9 0.01&lt;br /&gt;
  add r4 r9 r10&lt;br /&gt;
  div r4 r4 2&lt;br /&gt;
  sbn r5 r6 Vertical r4&lt;br /&gt;
  sbn r7 r8 Vertical r4&lt;br /&gt;
  jal 124&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r13 r3&lt;br /&gt;
brle r3 0.1 -8&lt;br /&gt;
sub r4 r3 5&lt;br /&gt;
sbn r5 r6 Vertical r4&lt;br /&gt;
j mainloop&lt;br /&gt;
yield&lt;br /&gt;
lbn r0 r5 r6 Idle Average&lt;br /&gt;
breqz r0 -2&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The last step is to set the item prefab hash you want. First set the &amp;lt;code&amp;gt;FILTER_GAS_SWITCH&amp;lt;/code&amp;gt; to indicate the type of the filter(&amp;lt;code&amp;gt;Open&amp;lt;/code&amp;gt; is filtering Gas, &amp;lt;code&amp;gt;Close&amp;lt;/code&amp;gt; is filtering Prefab), then set the content of [[Kit_(Logic_Memory)|Logic Memory]] named &amp;lt;code&amp;gt;SLM_ITEM_FILTER&amp;lt;/code&amp;gt; using labeler or any other means, then power both IC Housing on. Then wait for the trader to arrive, there will be a notification send to your Hardsuit or your custom device. The codes will auto locate the shuttle and filter shuttle cargoes and interrogate with it and call it down to your default landing pad.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to reset the content of &amp;lt;code&amp;gt;SLM_ITEM_FILTER&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; or something else after trading.&lt;br /&gt;
&lt;br /&gt;
The logic behind the Dish Control is that it scan the signal edge of the filtered out SignalID, instead of inspecting signal strength, so it kind of fast and non-stop rotating. When no filter is specified, it enters roaming mode which rotate clock-wise until filter is specficied and matching shuttle is found.&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Kit_(Satellite_Dish)&amp;diff=25588</id>
		<title>Kit (Satellite Dish)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Kit_(Satellite_Dish)&amp;diff=25588"/>
		<updated>2026-01-21T04:36:40Z</updated>

		<summary type="html">&lt;p&gt;TK421: Added new &amp;#039;requires frame&amp;#039; to medium dish infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Machines]]&lt;br /&gt;
[[Category:Items]]&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Kit (Satellite Dish)&lt;br /&gt;
 | stacks      = 10&lt;br /&gt;
 | image       = [[File:ItemKitSatelliteDish.png]]&lt;br /&gt;
 | createdwith = [[Electronics Printer]]&lt;br /&gt;
 | cost        = 5g [[Gold]], 10g [[Copper]], 20g [[Steel]], 5g [[Nickel]], 10g [[Solder]]&lt;br /&gt;
}}&lt;br /&gt;
{{Structurebox&lt;br /&gt;
 | name             = Medium Satellite Dish&lt;br /&gt;
 | image            = [[File:StructureSatelliteDish.png]]&lt;br /&gt;
 | power_usage      = 200W&lt;br /&gt;
 | placed_with_item = [[Satellite Dish|Kit (Satellite Dish)]]&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        = [[Satellite Dish|Kit (Satellite Dish)]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{outdated}} &lt;br /&gt;
==Description==&lt;br /&gt;
Small Satellite Dish&lt;br /&gt;
{{Description|The small communications unit can be used to communicate with nearby trade vessels.}}&lt;br /&gt;
Medium Satellite Dish&lt;br /&gt;
{{Description|The medium communications unit can be used to communicate with nearby trade vessels.}}&lt;br /&gt;
Either the small or medium Satellite Dish, or even the [[Large Satellite Dish]] are used together with a [[Computer]] fitted with a [[Motherboard (Communications)]] to allow Interstellar Communications.&lt;br /&gt;
&lt;br /&gt;
The Satellite Dish must be guided by [[Satellite Tracking]] onto a signal and communications may be established once the signal strength is greater than 94%&lt;br /&gt;
&lt;br /&gt;
== Medium Satellite Dish ==&lt;br /&gt;
=== Data Network Properties ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-customtoggle-datanetworkproperties&amp;quot; style=&amp;quot;width:auto; overflow:auto; text-indent:10px; border: 2px solid #253C60; border-radius:10px;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Click here to see/hide all the &amp;lt;span style=&amp;quot;color:#E57125;&amp;quot;&amp;gt;data network properties&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customcollapsible-datanetworkproperties&amp;quot;&amp;gt;&amp;lt;br&amp;gt;{{:Kit_(Satellite_Dish)/Data_Network}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stack Usage ==&lt;br /&gt;
After &amp;quot;Big Changes Coming: Terrain Preview, Melting Ice, Modding, &amp;amp; Localization&amp;quot; update, Medium Satellite Dish has internal stack like Autolathe, which user can utilize it to give instructions to.&lt;br /&gt;
The Medium Satellite Dish currently have 256Bytes(32 Addresses) stack memory.&lt;br /&gt;
&lt;br /&gt;
Pro tips:&lt;br /&gt;
* Everyday there will be only 3 vessels, one for each shuttle tier, in addition to special trader types.&lt;br /&gt;
* Everyday the 3 vessels will be refreshed, the algorithm for which type of vessel to appear is random, but strictly 1 for each tier, in addition to special trader types.&lt;br /&gt;
* It&#039;s best to use 500 watts if you are using medium satellite dish to scan, 500 watts is just large enough for the FAR tier to appear on the radar, but small enough for it&#039;s signal being masked by lower tier shuttles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Warning:&lt;br /&gt;
Internally every tick the stack data will be cleared and regenerated,&lt;br /&gt;
so don&#039;t OVERWRITE any TraderInstruction.Write* instructions when setting the WRITE_INDEX and WRITE_COUNT.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:50%;&amp;quot;&lt;br /&gt;
! Op_code&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Name&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Valid Address&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Bits&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | Bits Description&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 1&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.WriteTraderData&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | The dish will write out metadata(24 Bytes, in continuous of 3 addresses) to the specified starting index. E.g.: if set WRITE_INDEX to 1, then the metadata will span address 1-3. See [[#Metadata_Payloads|Metadata Payload]]s.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| WRITE_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 2&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.StrongestContactIdHash&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderData payload segment 1.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| TRADER_ID_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;5&amp;quot; | 3&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | TraderInstruction.StrongestContactMetaData&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderData payload segment 2.&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| [[#Metadata_Payloads|SHUTTLE_TYPE]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-23&lt;br /&gt;
| [[#Metadata_Payloads|CONTACT_TIER]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-31&lt;br /&gt;
| [[#Metadata_Payloads|CONTACTED]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 4&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.StrongestContactSignalData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderData payload segment 3.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-23&lt;br /&gt;
| WATTS_TO_RESOLVE&amp;lt;br/&amp;gt;See [[Trader#Trader_Tier |WattsToResolve]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-39&lt;br /&gt;
| LIFETIME&amp;lt;br/&amp;gt;See [[Trader#Trader_Tier|LifeTime]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 5&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.WriteTraderBuyData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | The dish will write out trader buy metadatas from the starting address WRITE_INDEX, and write WRITE_COUNT continuous addresses total.&amp;lt;br/&amp;gt;If an item contains child items, then it will be expaned inplace.&amp;lt;br/&amp;gt;E.g.: &amp;lt;BuyPayload&amp;gt;&amp;lt;BuyPayload&amp;gt;&amp;lt;BuyChildPayload&amp;gt;&amp;lt;BuyPayload&amp;gt;.&amp;lt;br/&amp;gt;See [[#Buy.2FSell_Payloads|Buy/Sell Payloads]], [[#Buy.2FSell_Child_Payloads|Buy/Sell Child Payloads]].&amp;lt;br/&amp;gt;WRITE_COUNT=0 means WRITE_COUNT=1.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| WRITE_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-23&lt;br /&gt;
| WRITE_COUNT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 6&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.WriteTraderSellData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | The dish will write out trader sell metadatas from the starting address WRITE_INDEX, and write WRITE_COUNT continuous addresses total.&amp;lt;br/&amp;gt;If an item contains child items, then it will be expaned inplace.&amp;lt;br/&amp;gt;E.g.: &amp;lt;SellPayload&amp;gt;&amp;lt;SellPayload&amp;gt;&amp;lt;SellChildPayload&amp;gt;&amp;lt;SellPayload&amp;gt;.&amp;lt;br/&amp;gt;See [[#Buy.2FSell_Payloads |Buy/Sell Payloads]], [[#Buy.2FSell_Child_Payloads|Buy/Sell Child Payloads]].&amp;lt;br/&amp;gt;WRITE_COUNT=0 means WRITE_COUNT=1.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| WRITE_INDEX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-23&lt;br /&gt;
| WRITE_COUNT&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 24-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 7&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderBuyThingData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderBuyData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 8&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderBuyThingChildData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderBuyData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 9&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderBuyGasData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderBuyData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| GAS_TYPES_BITFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 10&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderSellThingData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderSellData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 11&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderSellGasData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderSellData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| GAS_TYPES_BIGFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 12&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.TraderSellThingChildData&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | This OpCode indicates the data generated by TraderInstruction.WriteTraderSellData.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 0-31&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-47&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 48-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 13&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterPrefabHashEquals&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching PrefabHash.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 14&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterPrefabHashNotEquals&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only not matching PrefabHash.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| PREFAB_HASH&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 15&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.FilterSortingClassCompare&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching SortingClass.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| CONDITION_OPERATION&amp;lt;br/&amp;gt;0: Equals&amp;lt;br/&amp;gt;1: Greater&amp;lt;br/&amp;gt;2: Less&amp;lt;br/&amp;gt;3: Not Equals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-31&lt;br /&gt;
| SORTING_CLASS&amp;lt;br/&amp;gt;See [[Sorting_Class]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;4&amp;quot; | 16&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | TraderInstruction.FilterQuantityCompare&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching Quantity Condition.&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-15&lt;br /&gt;
| CONDITION_OPERATION&amp;lt;br/&amp;gt;0: Equals&amp;lt;br/&amp;gt;1: Greater&amp;lt;br/&amp;gt;2: Less&amp;lt;br/&amp;gt;3: Not Equals&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 16-31&lt;br /&gt;
| QUANTITY&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 32-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 17&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterGasContains&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only matching Gases.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| GAS_TYPES_BITFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;3&amp;quot; | 18&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | TraderInstruction.FilterGasNotContains&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | Filter Operation.&amp;lt;br/&amp;gt;User can prepend this OP before any TraderInstruction.Write* OP to filter writer&#039;s output.&amp;lt;br/&amp;gt;Multple filter OP can be written to the addresses before a Write* OP to group as a &amp;quot;AND&amp;quot; condition.&amp;lt;br/&amp;gt;This Filter narrows Write* OP&#039;s output to only not matching Gases.&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | 1-30&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 0-7&lt;br /&gt;
| Op_code&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 8-39&lt;br /&gt;
| GAS_TYPES_BITFLAG&amp;lt;br/&amp;gt;See [[#Gas_Type_BitFlags|Gas_Type_BitFlags]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot; | 40-63&lt;br /&gt;
| Unused&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Metadata Payloads ===&lt;br /&gt;
&lt;br /&gt;
Since Metadata has 3 addresses, so it&#039;s referenced here as a 24 bytes(192 bits) payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:80%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-40&lt;br /&gt;
| 39-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Segment 1&lt;br /&gt;
| All bits value in this section is the deplicate of bit 39.&lt;br /&gt;
| TraderIdHash&lt;br /&gt;
| OpCode of TraderInstruction.StrongestContactIdHash.&lt;br /&gt;
|-&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-32&lt;br /&gt;
| 31-24&lt;br /&gt;
| 23-16&lt;br /&gt;
| 15-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Segment 2&lt;br /&gt;
| All bits 0.&lt;br /&gt;
| Contacted&amp;lt;br/&amp;gt;0: false&amp;lt;br/&amp;gt; 1: true&lt;br /&gt;
| Contact Tier: &amp;lt;br/&amp;gt;0: Close&amp;lt;br/&amp;gt;1: Medium&amp;lt;br/&amp;gt;2: Far&lt;br /&gt;
| Shuttle Type: &amp;lt;br/&amp;gt;0:None&amp;lt;br/&amp;gt;1: Small(3x3)&amp;lt;br/&amp;gt;2: SmallGas(3x3)&amp;lt;br/&amp;gt;3: Medium(5x5)&amp;lt;br/&amp;gt;4: MediumGas(5x5)&amp;lt;br/&amp;gt;5: Large(6x6)&amp;lt;br/&amp;gt;6: LargeGas(6x6)&amp;lt;br/&amp;gt;7: MediumPlane(7x7, runway:15)&amp;lt;br/&amp;gt;8: LargePlane(9x9, runway:20)&lt;br /&gt;
| OpCode of TraderInstruction.StrongestContactMetaData.&lt;br /&gt;
|-&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-40&lt;br /&gt;
| 39-24&lt;br /&gt;
| 23-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Segment 3&lt;br /&gt;
| ALl bits 0.&lt;br /&gt;
| [[Trader#Trader_Tier|LifeTime]]&lt;br /&gt;
| [[Trader#Trader_Tier|WattsToResolve]]&lt;br /&gt;
| OpCode of TraderInstruction.StrongestContactSignalData.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Buy/Sell Payloads ===&lt;br /&gt;
&lt;br /&gt;
Buy/Sell Payloads are 1 address each, so it&#039;s referenced here as a 8 bytes(64 bit) payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:60%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-48&lt;br /&gt;
| 47-16&lt;br /&gt;
| 15-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Contents&lt;br /&gt;
| Every bit&#039;s value is the same as bit 47.&lt;br /&gt;
| PrefabHash/GasTypeBitFlag&lt;br /&gt;
| Quantity&amp;lt;br/&amp;gt;This value is truncated so it won&#039;t be greater than 255 although the trader&#039;s Request/Stock is more than 255.&lt;br /&gt;
| OpCode&amp;lt;br/&amp;gt;Data type represented as OpCode, one of the OpCode 7, 9, 10, 11.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Buy/Sell Child Payloads ===&lt;br /&gt;
&lt;br /&gt;
Buy/Sell Payloads are 1 address each, so it&#039;s referenced here as a 8 bytes(64 bit) payload.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:60%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 63-48&lt;br /&gt;
| 47-16&lt;br /&gt;
| 15-8&lt;br /&gt;
| 7-0&lt;br /&gt;
|-&lt;br /&gt;
! Contents&lt;br /&gt;
| Every bit&#039;s value is the same as bit 47.&lt;br /&gt;
| PrefabHash/GasTypeBitFlag&lt;br /&gt;
| ChildCount&amp;lt;br/&amp;gt;Counts how many instances of this item appeared as a child item.&amp;lt;br/&amp;gt;Beware it&#039;s not quantity, it&#039;s just a prefab type count.&lt;br /&gt;
| OpCode&amp;lt;br/&amp;gt;If this data is requested by TraderInstruction.WriteTraderBuyData, then it&#039;s value is the OpCode of TraderInstruction.TraderBuyThingChildData.&amp;lt;br/&amp;gt;If this data is requested by TraderInstruction.WriteTraderSellData, then it&#039;s value is the OpCode of TraderInstruction.TraderSellThingChildData.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gas Type BitFlags ===&lt;br /&gt;
&lt;br /&gt;
If the BitFlag equals 0, it&#039;s undefined. If the bit at specific offset is 1, it means the gas contains that component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overflowbugx&amp;quot; style=&amp;quot;overflow-x:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:60%;&amp;quot;&lt;br /&gt;
! BitsOffset&lt;br /&gt;
| 16&lt;br /&gt;
| 15&lt;br /&gt;
| 14&lt;br /&gt;
| 13&lt;br /&gt;
| 12&lt;br /&gt;
| 11&lt;br /&gt;
| 10&lt;br /&gt;
| 9&lt;br /&gt;
| 8&lt;br /&gt;
| 7&lt;br /&gt;
| 6&lt;br /&gt;
| 5&lt;br /&gt;
| 4&lt;br /&gt;
| 3&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
! Contents&lt;br /&gt;
| PollutedWater&lt;br /&gt;
| LiquidHydrogen&lt;br /&gt;
| Hydrogen&lt;br /&gt;
| LiquidNitrousOxide&lt;br /&gt;
| LiquidPollutant&lt;br /&gt;
| LiquidCarbonDioxide&lt;br /&gt;
| Steam&lt;br /&gt;
| LiquidVolatiles&lt;br /&gt;
| LiquidOxygen&lt;br /&gt;
| LiquidNitrogen&lt;br /&gt;
| NitrousOxide&lt;br /&gt;
| Water&lt;br /&gt;
| Pollutant&lt;br /&gt;
| Volatiles&lt;br /&gt;
| CarbonDioxide&lt;br /&gt;
| Nitrogen&lt;br /&gt;
| Oxygen&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Special Gas:&lt;br /&gt;
# Bit 0,1 both set to 1, which is Air.&lt;br /&gt;
# Bit 0,3 both set to 1, which is Fuel.&lt;br /&gt;
&lt;br /&gt;
==Stack Programming Reference Implementation==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Warning:&lt;br /&gt;
The following code is a reference implementation, it only serve the purpose to&lt;br /&gt;
assist you to observe the possibility and help you write your own code.&lt;br /&gt;
You must write your own code to fully enjoy the game.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shuttle Cargoes Looking Glasses ===&lt;br /&gt;
&lt;br /&gt;
The Looking Glasses are purely for cargo inspection, no filter, no auto negotiate and call-down.&lt;br /&gt;
&lt;br /&gt;
Materials to prepare:&lt;br /&gt;
* A Medium Satellite Dish.&lt;br /&gt;
* Any number of [[Kit_(Logic_Memory)|Logic Memories]] for &#039;&#039;&#039;Prefab&#039;&#039;&#039; [[Console|Console]] display (if there are more Prefabs to display than your number of [[Kit_(Logic_Memory)|Logic Memories]], they will be ignored).&lt;br /&gt;
* Corresponding number of [[Circuitboard|Hash Displays]] and [[Console|Consoles]].&lt;br /&gt;
* Any number of [[Kit_(Logic_Memory)|Logic Memories]] for &#039;&#039;&#039;Gas&#039;&#039;&#039; [[Console|Console]] display, (if there are more GasLiquid to display than your number of [[Kit_(Logic_Memory)|Logic Memories]], they will be ignored).&lt;br /&gt;
* Corresponding number of [[Circuitboard|Hash Displays]] and [[Console|Consoles]].&lt;br /&gt;
* 1 [[Kit_(Switch)#Switch|Logic Switch]] for switch trader&#039;s sell/buy data.&lt;br /&gt;
* 6 [[Console|Console]] for Small LED installation (all will show metadata).&lt;br /&gt;
* 1 [[Kit_(IC_Housing)|Kit (IC Housing)]] and 1 [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]].&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
* Install all of the [[Kit_(Logic_Memory)|Logic Memories]].&lt;br /&gt;
* Install corresponding &#039;&#039;&#039;Prefab&#039;&#039;&#039; [[Console|Consoles]], insert [[Circuitboard|Hash Displays]], and make sure the [[Circuitboard|Hash Displays]] are set to &#039;&#039;&#039;Prefab&#039;&#039;&#039; display mode: &amp;lt;code&amp;gt;Mode=0&amp;lt;/code&amp;gt;&lt;br /&gt;
* Install corresponding &#039;&#039;&#039;Gas&#039;&#039;&#039; [[Console|Consoles]], insert [[Circuitboard|Hash Displays]], and make sure the [[Circuitboard|Hash Displays]] are set to &#039;&#039;&#039;GasLiquid&#039;&#039;&#039; display mode: &amp;lt;code&amp;gt;Mode=1&amp;lt;/code&amp;gt;&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# example for setup GasLiquid mode&lt;br /&gt;
ss d0 0 Mode 1 # d0 is console pin&lt;br /&gt;
# or configure all the Consoles in the IcHousing&#039;s subnetwork&lt;br /&gt;
sbs StructureConsole 0 Mode 1&lt;br /&gt;
}}&lt;br /&gt;
* Naming each [[Kit_(Logic_Memory)|Logic Memory]] sequentially for two display types, for example: &amp;lt;code&amp;gt;SLMP1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SLMP2&amp;lt;/code&amp;gt; for &#039;&#039;&#039;Prefab&#039;&#039;&#039; display, and &amp;lt;code&amp;gt;SLMG1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SLMG2&amp;lt;/code&amp;gt; for &#039;&#039;&#039;GasLiquid&#039;&#039;&#039; display.&lt;br /&gt;
* Manually configure all [[Console|Consoles]] to link to their corresponding [[Kit_(Logic_Memory)|Logic Memories]] with [[Data_Disk|Data Disk]].&lt;br /&gt;
* Install 1 [[Kit_(Switch)#Switch|Logic Switch]] for switch trader&#039;s sell/buy data, &amp;lt;code&amp;gt;Open&amp;lt;/code&amp;gt; shows trader&#039;s Buy data, &amp;lt;code&amp;gt;Close&amp;lt;/code&amp;gt; shows trader&#039;s Sell data. Label it &amp;lt;code&amp;gt;TRADER_SELL_BUY_SWITCH&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Install 1 [[Kit_(IC_Housing)|Kit (IC Housing)]] in the same subnetwork and label it &amp;lt;code&amp;gt;Cargo LG IC Housing&amp;lt;/code&amp;gt;, insert a [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]].&lt;br /&gt;
* Install 6 LED and labeling them: &amp;lt;code&amp;gt;LED_SIGID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_CON_TYPE_ID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_TIER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_SHUTTLE_TYPE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_WATT_TO_RESOLVE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LED_CONTACTED&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Reference Implementation:&lt;br /&gt;
&lt;br /&gt;
Next are the code snippets for a setup of 20 &#039;&#039;&#039;Prefab&#039;&#039;&#039; Console and 11 &#039;&#039;&#039;GasLiquid&#039;&#039;&#039; Console looking glass.&lt;br /&gt;
&lt;br /&gt;
First snippet is the initialization/configuration code, which should be write to the [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]] for the first time, add/remove the [[Kit_(Logic_Memory)|Logic Memories]] stack entries that you actually used in your setup, then install the chip to housing.&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# Shuttle Cargoes Looking Glasses IC Stack Initializer&lt;br /&gt;
&lt;br /&gt;
clr db&lt;br /&gt;
move sp 0&lt;br /&gt;
# Prefab display Logic Memories, add/remove according to your setup.&lt;br /&gt;
push HASH(&amp;quot;SLMP1&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP2&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP3&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP4&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP5&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP6&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP7&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP8&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP9&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP10&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP11&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP12&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP13&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP14&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP15&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP16&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP17&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP18&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP19&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMP20&amp;quot;)&lt;br /&gt;
move r13 sp&lt;br /&gt;
&lt;br /&gt;
# GasLiquid display Logic Memories, add/remove according to your setup.&lt;br /&gt;
push HASH(&amp;quot;SLMG1&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG2&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG3&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG4&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG5&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG6&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG7&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG8&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG9&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG10&amp;quot;)&lt;br /&gt;
push HASH(&amp;quot;SLMG11&amp;quot;)&lt;br /&gt;
move r12 sp&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Second snippet is for the same [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]], take your IC10 chip out re-put it into the laptop, clear and paste in the new second code snippet.&lt;br /&gt;
&lt;br /&gt;
There are a few user variables need to modify, please check the in-line comments. Mostly that&#039;s for LEDs to display metadata. Change the variables accordingly then insert the IC10 chip into the housing.&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
# Shuttle Cargoes Looking Glasses Runtime IC10&lt;br /&gt;
#&lt;br /&gt;
# User variable:&lt;br /&gt;
#&lt;br /&gt;
# DishM:              The Medium Dish hash.&lt;br /&gt;
# LED_SIGID:          The LED name, show SignalID.&lt;br /&gt;
# LED_CON_TYPE_ID:    The LED name, show ContactTypeID.&lt;br /&gt;
# LED_TIER:           The LED name, show Tier.&lt;br /&gt;
# LED_SHUTTLE_TYPE:   The LED name, show Shuttle Type.&lt;br /&gt;
# LED_CONTACTED:      The LED name, show if the shuttle has been contacted already.&lt;br /&gt;
define DishM HASH(&amp;quot;Medium Satellite Dish 1&amp;quot;)&lt;br /&gt;
define LED_SIGID HASH(&amp;quot;LED_SIGID&amp;quot;)&lt;br /&gt;
define LED_CON_TYPE_ID HASH(&amp;quot;LED_CON_TYPE_ID&amp;quot;)&lt;br /&gt;
define LED_TIER HASH(&amp;quot;LED_TIER&amp;quot;)&lt;br /&gt;
define LED_SHUTTLE_TYPE HASH(&amp;quot;LED_SHUTTLE_TYPE&amp;quot;)&lt;br /&gt;
define LED_WATT_TO_RESOLVE HASH(&amp;quot;LED_WATT_TO_RESOLVE&amp;quot;)&lt;br /&gt;
define LED_CONTACTED HASH(&amp;quot;LED_CONTACTED&amp;quot;)&lt;br /&gt;
define TRADER_BUY_SEEL_SWITCH HASH(&amp;quot;TRADER_SELL_BUY_SWITCH&amp;quot;)&lt;br /&gt;
###############################################################################&lt;br /&gt;
define SSD HASH(&amp;quot;StructureSatelliteDish&amp;quot;)&lt;br /&gt;
define SLM HASH(&amp;quot;StructureLogicMemory&amp;quot;)&lt;br /&gt;
define OpcodeMask %11111111&lt;br /&gt;
alias dishMID r15&lt;br /&gt;
alias dishEntryCount r14&lt;br /&gt;
alias prefabMemCount r13&lt;br /&gt;
alias totalMemCount r12&lt;br /&gt;
alias prefabMemCursor r11&lt;br /&gt;
alias gasMemCursor r10&lt;br /&gt;
alias sellOrBuy r9&lt;br /&gt;
&lt;br /&gt;
mainloop:&lt;br /&gt;
jal WriteStack&lt;br /&gt;
jal Display&lt;br /&gt;
jal ClearPrefabMem&lt;br /&gt;
jal ClearGasMem&lt;br /&gt;
sleep 1&lt;br /&gt;
j mainloop&lt;br /&gt;
WriteStack:&lt;br /&gt;
lbn dishMID SSD DishM ReferenceId Average&lt;br /&gt;
bnan dishMID ra&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureLogicSwitch2&amp;quot;) TRADER_BUY_SEEL_SWITCH Open Average&lt;br /&gt;
brgtz r0 3&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderSellData&lt;br /&gt;
jr 2&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderBuyData&lt;br /&gt;
clrd dishMID&lt;br /&gt;
sll r0 1 8&lt;br /&gt;
or r0 r0 TraderInstruction.WriteTraderData&lt;br /&gt;
putd dishMID 0 r0&lt;br /&gt;
sll r0 30 16&lt;br /&gt;
sll r1 5 8&lt;br /&gt;
or r0 r0 r1&lt;br /&gt;
or r0 r0 sellOrBuy&lt;br /&gt;
putd dishMID 4 r0&lt;br /&gt;
sleep 1&lt;br /&gt;
j ra&lt;br /&gt;
Display:&lt;br /&gt;
lbn r1 SSD DishM SignalID Average&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_SIGID Setting r1&lt;br /&gt;
move dishEntryCount 0&lt;br /&gt;
move prefabMemCursor 0&lt;br /&gt;
move gasMemCursor prefabMemCount&lt;br /&gt;
DisplayLoop:&lt;br /&gt;
beq dishEntryCount 31 ra&lt;br /&gt;
add dishEntryCount dishEntryCount 1&lt;br /&gt;
getd r0 dishMID dishEntryCount&lt;br /&gt;
and r1 r0 OpcodeMask&lt;br /&gt;
beq r1 2 MetaData1&lt;br /&gt;
beq r1 3 MetaData2&lt;br /&gt;
beq r1 4 MetaData3&lt;br /&gt;
beq r1 7 ThingData&lt;br /&gt;
beq r1 8 ThingData&lt;br /&gt;
beq r1 9 GasData&lt;br /&gt;
beq r1 10 ThingData&lt;br /&gt;
beq r1 11 GasData&lt;br /&gt;
beq r1 12 ThingData&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData1:&lt;br /&gt;
sra r2 r0 8 # trader contact type id&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_CON_TYPE_ID Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData2:&lt;br /&gt;
and r2 r0 %11111111_00000000_00000000_00000000&lt;br /&gt;
sra r2 r2 24 # contacted&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_CONTACTED Setting r2&lt;br /&gt;
and r2 r0 %11111111_00000000_00000000&lt;br /&gt;
sra r2 r2 16 # tier&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_TIER Setting r2&lt;br /&gt;
and r2 r0 %11111111_00000000&lt;br /&gt;
sra r2 r2 8 # shuttle type&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_SHUTTLE_TYPE Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData3:&lt;br /&gt;
and r2 r0 %11111111_11111111_00000000&lt;br /&gt;
sra r2 r2 8 # watts to resolve&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) LED_WATT_TO_RESOLVE Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
ThingData:&lt;br /&gt;
get r2 db prefabMemCursor # memory chip&lt;br /&gt;
sra r3 r0 16 # prefab hash&lt;br /&gt;
sbn SLM r2 Setting r3&lt;br /&gt;
add prefabMemCursor prefabMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
GasData:&lt;br /&gt;
get r2 db gasMemCursor # memory chip&lt;br /&gt;
sra r3 r0 16&lt;br /&gt;
sbn SLM r2 Setting r3&lt;br /&gt;
add gasMemCursor gasMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
ClearPrefabMem:&lt;br /&gt;
move sp prefabMemCursor&lt;br /&gt;
ClearPrefabMemLoop:&lt;br /&gt;
bge sp prefabMemCount ra&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn SLM r0 Setting -1&lt;br /&gt;
j ClearPrefabMemLoop&lt;br /&gt;
ClearGasMem:&lt;br /&gt;
move sp gasMemCursor&lt;br /&gt;
ClearGasMemLoop:&lt;br /&gt;
bge sp totalMemCount ra&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn SLM r0 Setting -1&lt;br /&gt;
j ClearGasMemLoop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Final: Now enable the Medium Satellite Dish, enable the Cargo LG IC Housing(the 2nd script should be running), add some power to the dish and rotate it somehow, then check the monitors and LEDs, you will see the items you can shop(trader will sell) from this trader if the logic switch is &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt;, and you will see the items you can sell(trader will buy) from the best trader if the logic switch is &amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The total setup feels like this &lt;br /&gt;
[[File:2025-04-18-1049x333-scrot.png|Overview of Looking Glass Setup]]&lt;br /&gt;
&lt;br /&gt;
=== Shuttle Cargoes Auto Filtration/Interrogation and Call Down ===&lt;br /&gt;
&lt;br /&gt;
To add Auto Filtration/Interrogation ability, prepare following materials in advance. It&#039;s build on top of Looking Glass structure of the previous section, take caution.&lt;br /&gt;
&lt;br /&gt;
* Repurpose the IC Housing of the Looking Glass section, label it &amp;lt;code&amp;gt;Trader Filtration IC Housing&amp;lt;/code&amp;gt; or a name you like.&lt;br /&gt;
* 1 [[Kit_(Logic_Memory)|Logic Memory]], install it and label it &amp;lt;code&amp;gt;SLM_ITEM_FILTER&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 1 [[Kit_(Switch)#Switch|Logic Switch]] for switching filter prefab/gas data, label it &amp;lt;code&amp;gt;FILTER_GAS_SWITCH&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 1 [[Console|Console]], install it as Small LED and label it &amp;lt;code&amp;gt;LED_LOCKED_SIGID&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 1 [[Kit_(IC_Housing)|Kit (IC Housing)]], install it and label it &amp;lt;code&amp;gt;Dish Control IC Housing&amp;lt;/code&amp;gt; or a name you like.&lt;br /&gt;
* 1 [[Integrated_Circuit_(IC10)|Integrated Circuit (IC10)]] ready for use.&lt;br /&gt;
* 1 [[Kit_(Logic_Transmitter)|Logic Transmitter]] for sending audio message to your Hardsuit when trader is landing, label it &amp;lt;code&amp;gt;Hardsuit LT 1&amp;lt;/code&amp;gt;, pair it with your [[Hardsuit|hardsuit]] in passive mode.&lt;br /&gt;
* 1 Small Satellite Dish for faster Close/Medium shuttle scanning, optional. If you set it up, the power port must face the same direction as the Medium Dish. If you don&#039;t, it just take a few more time to scan with the default Medium Satellite Dish for Close/Medium tier shuttles.&lt;br /&gt;
* 1 Large Satellite Dish for faster Far tier shuttle interrogation, optional. If you set it up, the power port must face the same direction as the Medium Dish. If you don&#039;t, it just take a few more time to interrogate with the default Medium Satellite Dish for Far tier shuttles.&lt;br /&gt;
&lt;br /&gt;
Installation:&lt;br /&gt;
&lt;br /&gt;
Install all things above and power on. For the repurposed &amp;lt;code&amp;gt;Trader Filtration IC Housing&amp;lt;/code&amp;gt; code, paste in following code, replacing Looking Glass code(the Lookging Glass&#039;s function is still in the code, plus the filtration function), change the &amp;lt;code&amp;gt;DishM&amp;lt;/code&amp;gt;&#039;s name as you like. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;&lt;br /&gt;
Warning:&lt;br /&gt;
If you use a brand new IC10 chip for the Trader Filtration IC Housing,&lt;br /&gt;
you still need to initialize the IC10 chip with the code of Shuttle Cargoes Looking Glasses IC Stack Initializer,&lt;br /&gt;
or the stack will be empty as a stack is an IC10 CHIP property.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define DishM HASH(&amp;quot;Medium Satellite Dish 1&amp;quot;)&lt;br /&gt;
alias dishMID r15&lt;br /&gt;
alias filterGas r14&lt;br /&gt;
alias prefabMemCount r13&lt;br /&gt;
alias totalMemCount r12&lt;br /&gt;
alias prefabMemCursor r11&lt;br /&gt;
alias gasMemCursor r10&lt;br /&gt;
alias sellOrBuy r9&lt;br /&gt;
alias filterItem r7&lt;br /&gt;
alias signalID r6&lt;br /&gt;
move r5 0 # lastSignalID&lt;br /&gt;
mainloop:&lt;br /&gt;
move r8 0 # nextAddress&lt;br /&gt;
WriteStack:&lt;br /&gt;
lbn dishMID HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM ReferenceId Average&lt;br /&gt;
bnan dishMID mainloop&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureLogicSwitch2&amp;quot;) HASH(&amp;quot;TRADER_SELL_BUY_SWITCH&amp;quot;) Open Average&lt;br /&gt;
brgtz r0 3&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderSellData&lt;br /&gt;
jr 2&lt;br /&gt;
move sellOrBuy TraderInstruction.WriteTraderBuyData&lt;br /&gt;
clrd dishMID&lt;br /&gt;
sll r0 1 8&lt;br /&gt;
or r0 r0 TraderInstruction.WriteTraderData&lt;br /&gt;
putd dishMID r8 r0&lt;br /&gt;
add r8 r8 4&lt;br /&gt;
lbn filterGas HASH(&amp;quot;StructureLogicSwitch2&amp;quot;) HASH(&amp;quot;FILTER_GAS_SWITCH&amp;quot;) Setting Average&lt;br /&gt;
lbn filterItem HASH(&amp;quot;StructureLogicMemory&amp;quot;) HASH(&amp;quot;SLM_ITEM_FILTER&amp;quot;) Setting Average&lt;br /&gt;
breqz filterItem 8 # skip if filter value is 0&lt;br /&gt;
sll r0 filterItem 8&lt;br /&gt;
breqz filterGas 3&lt;br /&gt;
or r0 r0 TraderInstruction.FilterGasContains&lt;br /&gt;
jr 2&lt;br /&gt;
or r0 r0 TraderInstruction.FilterPrefabHashEquals&lt;br /&gt;
putd dishMID r8 r0&lt;br /&gt;
add r8 r8 1&lt;br /&gt;
sll r0 30 16&lt;br /&gt;
add r1 r8 1&lt;br /&gt;
sll r1 r1 8&lt;br /&gt;
or r0 r0 r1&lt;br /&gt;
or r0 r0 sellOrBuy&lt;br /&gt;
putd dishMID r8 r0&lt;br /&gt;
yield&lt;br /&gt;
Display:&lt;br /&gt;
lbn signalID HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM SignalID Average&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_SIGID&amp;quot;) Setting signalID&lt;br /&gt;
move r0 0&lt;br /&gt;
move prefabMemCursor 0&lt;br /&gt;
move gasMemCursor prefabMemCount&lt;br /&gt;
DisplayLoop:&lt;br /&gt;
beq r0 31 ClearMem&lt;br /&gt;
add r0 r0 1&lt;br /&gt;
getd r1 dishMID r0&lt;br /&gt;
and r2 r1 %11111111&lt;br /&gt;
beq r2 2 MetaData1&lt;br /&gt;
beq r2 3 MetaData2&lt;br /&gt;
beq r2 4 MetaData3&lt;br /&gt;
beq r2 7 ThingData&lt;br /&gt;
beq r2 8 ThingData&lt;br /&gt;
beq r2 9 GasData&lt;br /&gt;
beq r2 10 ThingData&lt;br /&gt;
beq r2 11 GasData&lt;br /&gt;
beq r2 12 ThingData&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData1:&lt;br /&gt;
sra r2 r1 8 # trader contact type id&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_CON_TYPE_ID&amp;quot;) Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData2:&lt;br /&gt;
and r2 r1 %11111111_00000000_00000000_00000000&lt;br /&gt;
sra r2 r2 24 # contacted&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_CONTACTED&amp;quot;) Setting r2&lt;br /&gt;
and r2 r1 %11111111_00000000_00000000&lt;br /&gt;
sra r2 r2 16 # tier&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_TIER&amp;quot;) Setting r2&lt;br /&gt;
and r2 r1 %11111111_00000000&lt;br /&gt;
sra r2 r2 8 # shuttle type&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_SHUTTLE_TYPE&amp;quot;) Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
MetaData3:&lt;br /&gt;
and r2 r1 %11111111_11111111_00000000&lt;br /&gt;
sra r2 r2 8 # watts to resolve&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_WATT_TO_RESOLVE&amp;quot;) Setting r2&lt;br /&gt;
and r2 r1 $FFFF_000000&lt;br /&gt;
sra r2 r2 24 # lifetime&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LIFETIME&amp;quot;) Setting r2&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
ThingData:&lt;br /&gt;
get r2 db prefabMemCursor # memory chip&lt;br /&gt;
sra r3 r1 16 # prefab hash&lt;br /&gt;
breqz filterItem 3&lt;br /&gt;
bne filterItem r3 DisplayLoop&lt;br /&gt;
jal LockSignalID&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r2 Setting r3&lt;br /&gt;
add prefabMemCursor prefabMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
GasData:&lt;br /&gt;
get r2 db gasMemCursor # memory chip&lt;br /&gt;
sra r3 r1 16&lt;br /&gt;
sgtz r4 filterItem&lt;br /&gt;
and r4 r4 filterGas&lt;br /&gt;
breqz r4 4&lt;br /&gt;
and r4 filterItem r3&lt;br /&gt;
beqz r4 DisplayLoop&lt;br /&gt;
jal LockSignalID&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r2 Setting r3&lt;br /&gt;
add gasMemCursor gasMemCursor 1&lt;br /&gt;
j DisplayLoop&lt;br /&gt;
LockSignalID:&lt;br /&gt;
lbn r4 HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting Average&lt;br /&gt;
bgtz r4 ra&lt;br /&gt;
beq signalID r5 ra&lt;br /&gt;
sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting signalID&lt;br /&gt;
move r5 signalID&lt;br /&gt;
j ra&lt;br /&gt;
ClearMem:&lt;br /&gt;
move sp prefabMemCursor&lt;br /&gt;
brge sp prefabMemCount 5&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r0 Setting -1&lt;br /&gt;
jr -4&lt;br /&gt;
move sp gasMemCursor&lt;br /&gt;
bge sp totalMemCount mainloop&lt;br /&gt;
add sp sp 1&lt;br /&gt;
peek r0 # memory chip&lt;br /&gt;
sbn HASH(&amp;quot;StructureLogicMemory&amp;quot;) r0 Setting -1&lt;br /&gt;
jr -4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;code&amp;gt;Dish Control IC Housing&amp;lt;/code&amp;gt; code, paste in following code, change the hash of &amp;lt;code&amp;gt;DishS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DishL&amp;lt;/code&amp;gt; names as you have then setted up or not. Search and change the name of &amp;lt;code&amp;gt;Hardsuit LT 1&amp;lt;/code&amp;gt; line if you want to send notification to other devices.&lt;br /&gt;
&lt;br /&gt;
{{ICCode|&lt;br /&gt;
define DishM HASH(&amp;quot;Medium Satellite Dish 1&amp;quot;)&lt;br /&gt;
define DishS 0 # if you have small dish, set hash to HASH(&amp;quot;NAME&amp;quot;)&lt;br /&gt;
define DishL 0 # if you have large dish, set hash to HASH(&amp;quot;NAME&amp;quot;)&lt;br /&gt;
move r0 0&lt;br /&gt;
reset:&lt;br /&gt;
move r15 r0 # lockedSigID&lt;br /&gt;
move r14 0 # horizontal&lt;br /&gt;
move r13 0 # vertical&lt;br /&gt;
move r12 0 # horizontalEdge1&lt;br /&gt;
move r11 0 # horizontalEdge2&lt;br /&gt;
move r10 0 # verticalEdge1&lt;br /&gt;
move r9 0 # verticalEdge2&lt;br /&gt;
move r8 DishM # commDish&lt;br /&gt;
move r7 HASH(&amp;quot;StructureSatelliteDish&amp;quot;) # commDishType&lt;br /&gt;
move r6 DishM # scanDish&lt;br /&gt;
move r5 r7 # scanDishType&lt;br /&gt;
sbn r5 r6 Vertical 60&lt;br /&gt;
sbn r5 r6 BestContactFilter -1&lt;br /&gt;
sbn r5 r6 Setting 500&lt;br /&gt;
mainloop:&lt;br /&gt;
yield&lt;br /&gt;
lbn r0 HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting Average&lt;br /&gt;
lbn r1 r5 r6 SignalID Average&lt;br /&gt;
lbn r2 r5 r6 Horizontal Average&lt;br /&gt;
lbn r3 r5 r6 Vertical Average&lt;br /&gt;
breqz r0 34&lt;br /&gt;
  bne r0 r15 reset&lt;br /&gt;
  lbn r4 HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_TIER&amp;quot;) Setting Average&lt;br /&gt;
  brnez r14 10&lt;br /&gt;
  brge r4 2 5&lt;br /&gt;
    breqz DishS 4&lt;br /&gt;
      move r6 DishS&lt;br /&gt;
      move r5 HASH(&amp;quot;StructureSmallSatelliteDish&amp;quot;)&lt;br /&gt;
      sbn r5 r6 Setting 200&lt;br /&gt;
    breqz DishL 3&lt;br /&gt;
      move r8 DishL&lt;br /&gt;
      move r7 HASH(&amp;quot;StructureLargeSatelliteDish&amp;quot;)&lt;br /&gt;
  sbn r5 r6 BestContactFilter r15&lt;br /&gt;
  sbn r5 r6 On 1&lt;br /&gt;
  beqz r12 ScanHorizontal&lt;br /&gt;
  beqz r11 ScanReverseHorizontal&lt;br /&gt;
  beqz r10 ScanVertical&lt;br /&gt;
  beqz r9 ScanReverseVertical&lt;br /&gt;
  brne r1 -1 3&lt;br /&gt;
    sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting 0&lt;br /&gt;
    j reset&lt;br /&gt;
  yield&lt;br /&gt;
  lbn r0 r7 r8 Idle Average&lt;br /&gt;
  breqz r0 -2&lt;br /&gt;
  sbn r7 r8 BestContactFilter r15&lt;br /&gt;
  sbn r7 r8 Setting 50000&lt;br /&gt;
  sbn r7 r8 Activate 1&lt;br /&gt;
  lbn r0 r7 r8 InterrogationProgress Average&lt;br /&gt;
  brlt r0 1 4&lt;br /&gt;
    sleep 2&lt;br /&gt;
    sbn HASH(&amp;quot;StructureLogicTransmitter&amp;quot;) HASH(&amp;quot;Hardsuit LT 1&amp;quot;) SoundAlert 37&lt;br /&gt;
    sbn HASH(&amp;quot;StructureConsoleLED5&amp;quot;) HASH(&amp;quot;LED_LOCKED_SIGID&amp;quot;) Setting 0&lt;br /&gt;
  j mainloop&lt;br /&gt;
bnez r15 reset&lt;br /&gt;
breq r6 DishM 2 # enter roaming mode&lt;br /&gt;
sbn r5 r6 On 0&lt;br /&gt;
breq r8 DishM 2&lt;br /&gt;
sbn r7 r8 On 0&lt;br /&gt;
sbn HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM On 1&lt;br /&gt;
add r2 r2 2&lt;br /&gt;
mod r2 r2 360&lt;br /&gt;
sbn HASH(&amp;quot;StructureSatelliteDish&amp;quot;) DishM Horizontal r2&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanHorizontal:&lt;br /&gt;
brne r1 -1 4&lt;br /&gt;
  move r12 r14&lt;br /&gt;
  sbn r5 r6 Horizontal r14&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r14 r2&lt;br /&gt;
sub r4 r2 5&lt;br /&gt;
mod r4 r4 360&lt;br /&gt;
sbn r5 r6 Horizontal r4&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanReverseHorizontal:&lt;br /&gt;
brne r1 -1 14&lt;br /&gt;
  beq r14 r12 13&lt;br /&gt;
  move r11 r14&lt;br /&gt;
  slt r4 r11 r12&lt;br /&gt;
  breqz r4 2&lt;br /&gt;
  add r11 r11 360&lt;br /&gt;
  add r4 r11 r12&lt;br /&gt;
  div r4 r4 2&lt;br /&gt;
  mod r4 r4 360&lt;br /&gt;
  sbn r5 r6 Horizontal r4&lt;br /&gt;
  sbn r7 r8 On 1&lt;br /&gt;
  sbn r7 r8 Horizontal r4&lt;br /&gt;
  jal 124&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r14 r2&lt;br /&gt;
add r4 r2 5&lt;br /&gt;
mod r4 r4 360&lt;br /&gt;
sbn r5 r6 Horizontal r4&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanVertical:&lt;br /&gt;
brne r1 -1 4&lt;br /&gt;
  move r10 r13&lt;br /&gt;
  sbn r5 r6 Vertical r13&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r13 r3&lt;br /&gt;
brge r3 89.9 -4&lt;br /&gt;
add r4 r3 5&lt;br /&gt;
sbn r5 r6 Vertical r4&lt;br /&gt;
j mainloop&lt;br /&gt;
ScanReverseVertical:&lt;br /&gt;
brne r1 -1 10&lt;br /&gt;
  beq r13 r10 9&lt;br /&gt;
  move r9 r13&lt;br /&gt;
  select r9 r9 r9 0.01&lt;br /&gt;
  add r4 r9 r10&lt;br /&gt;
  div r4 r4 2&lt;br /&gt;
  sbn r5 r6 Vertical r4&lt;br /&gt;
  sbn r7 r8 Vertical r4&lt;br /&gt;
  jal 124&lt;br /&gt;
  j mainloop&lt;br /&gt;
move r13 r3&lt;br /&gt;
brle r3 0.1 -8&lt;br /&gt;
sub r4 r3 5&lt;br /&gt;
sbn r5 r6 Vertical r4&lt;br /&gt;
j mainloop&lt;br /&gt;
yield&lt;br /&gt;
lbn r0 r5 r6 Idle Average&lt;br /&gt;
breqz r0 -2&lt;br /&gt;
j ra&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The last step is to set the item prefab hash you want. First set the &amp;lt;code&amp;gt;FILTER_GAS_SWITCH&amp;lt;/code&amp;gt; to indicate the type of the filter(&amp;lt;code&amp;gt;Open&amp;lt;/code&amp;gt; is filtering Gas, &amp;lt;code&amp;gt;Close&amp;lt;/code&amp;gt; is filtering Prefab), then set the content of [[Kit_(Logic_Memory)|Logic Memory]] named &amp;lt;code&amp;gt;SLM_ITEM_FILTER&amp;lt;/code&amp;gt; using labeler or any other means, then power both IC Housing on. Then wait for the trader to arrive, there will be a notification send to your Hardsuit or your custom device. The codes will auto locate the shuttle and filter shuttle cargoes and interrogate with it and call it down to your default landing pad.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to reset the content of &amp;lt;code&amp;gt;SLM_ITEM_FILTER&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; or something else after trading.&lt;br /&gt;
&lt;br /&gt;
The logic behind the Dish Control is that it scan the signal edge of the filtered out SignalID, instead of inspecting signal strength, so it kind of fast and non-stop rotating. When no filter is specified, it enters roaming mode which rotate clock-wise until filter is specficied and matching shuttle is found.&lt;/div&gt;</summary>
		<author><name>TK421</name></author>
	</entry>
</feed>