<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.starbasegame.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Scrapper+101</id>
	<title>Starbase wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.starbasegame.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Scrapper+101"/>
	<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=Special:Contributions/Scrapper_101"/>
	<updated>2026-04-21T17:28:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.starbasegame.com/index.php?title=Robotic_arms&amp;diff=32415</id>
		<title>Robotic arms</title>
		<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=Robotic_arms&amp;diff=32415"/>
		<updated>2024-07-03T22:12:02Z</updated>

		<summary type="html">&lt;p&gt;Scrapper 101: Added the ClosedAlphaContent tag, as it was missing beforehand.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ClosedAlphaContent}}&lt;br /&gt;
&lt;br /&gt;
{{Otherlang2&lt;br /&gt;
|de=Robot_arms:de&lt;br /&gt;
|fr=Robot_arms/fr&lt;br /&gt;
|zh-cn=机械臂&lt;br /&gt;
|ru=Роботизированные манипуляторы&lt;br /&gt;
|ua=Роботизовані маніпулятори&lt;br /&gt;
|jp=ロボットアーム&lt;br /&gt;
}}{{SB Infobox Begin&lt;br /&gt;
	|{{SB Infobox Header&lt;br /&gt;
	  |image=[[Image:Robot_arms.png]]&lt;br /&gt;
	  |factionLogo=&lt;br /&gt;
	  |caption=&lt;br /&gt;
	  |name=&lt;br /&gt;
	  |border=none&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	|{{SB Infobox Device General Information&lt;br /&gt;
	  |type=Utility machinery&lt;br /&gt;
	  |function=Automation&lt;br /&gt;
	  |availability=&lt;br /&gt;
	  |size=&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;156×156×432 cm ''(small)''&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;156×156×720 cm ''(med)''&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
	  |mass=&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;9,236.2 kg ''(small)''&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;14.382.2 kg ''(med)''&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
	  |volume=&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;928.26 kv ''(small)''&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;1445.45 kv ''(med)''&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
	  |corrosionResistance=300&lt;br /&gt;
	  |primaryMaterial=400&lt;br /&gt;
	  |suppressUnitsKg=1&lt;br /&gt;
	  |suppressUnitsKv=1&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	|{{SB Infobox Device IO&lt;br /&gt;
	  |electricIn=Approx. 5-10 e/s&lt;br /&gt;
	  |electricOut=&lt;br /&gt;
	  |coolantIn=&lt;br /&gt;
	  |coolantOut=&lt;br /&gt;
	  |propellantIn=&lt;br /&gt;
	  |propellantOut=&lt;br /&gt;
	  |fuelIn=&lt;br /&gt;
	  |fuelOut=&lt;br /&gt;
	  |sockets=&lt;br /&gt;
	  |YOLOLchips=&lt;br /&gt;
	  |modInterfaces=1&lt;br /&gt;
	  |deviceInterfaces=1&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	|{{SB Infobox Device Construction&lt;br /&gt;
	  |overrideHeader=&lt;br /&gt;
	  |aegisium=&lt;br /&gt;
	  |ajatite=&lt;br /&gt;
	  |arkanium=&lt;br /&gt;
	  |bastium=100%&lt;br /&gt;
	  |charodium=&lt;br /&gt;
	  |corazium=&lt;br /&gt;
	  |exorium=&lt;br /&gt;
	  |haderite=&lt;br /&gt;
	  |ice=&lt;br /&gt;
	  |ilmatrium=&lt;br /&gt;
	  |karnite=&lt;br /&gt;
	  |kutonium=&lt;br /&gt;
	  |lukium=&lt;br /&gt;
	  |merkerium=&lt;br /&gt;
	  |nhurgite=&lt;br /&gt;
	  |oninum=&lt;br /&gt;
	  |surtrite=&lt;br /&gt;
	  |tengium=&lt;br /&gt;
	  |ukonium=&lt;br /&gt;
	  |valkite=&lt;br /&gt;
	  |vokarium=&lt;br /&gt;
	  |xhalium=&lt;br /&gt;
	}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Robot arms are a series of mechanical joints that enable a wide variety of automated tasks, such as ship-building [[factories]] and assembly lines. Each segment can be controlled individually through a player's [[Universal tool|universal tool]], or by a device such as a [[Levers|lever]], but these movements can also be computed automatically. Robot arms have a special tool-head at their end, which allows a user to equip [[Tools|tools]] to perform specific tasks. They can also accept a standard [[Hardpoints|hardpoint]] onto the tool-head, which enables the use of such devices as a [[Range finder|rangefinder]] or any of a variety of weapons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Basic information ==&lt;br /&gt;
&lt;br /&gt;
* Robot arms consist of two types of joints, revolute and prismatic, which can be stacked together to form articulated arms of varying complexity.&lt;br /&gt;
** The basic arm configuration has one or two telescoping segments, and an end segment with a revolute joint. More arms or tool holders can be attached to this revolute joint.&lt;br /&gt;
* The base of any arm combination has to be attached to a special turret base joint.&lt;br /&gt;
** There are four different sizes of the basic arm.&lt;br /&gt;
&lt;br /&gt;
== Device fields ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! YOLOL field&lt;br /&gt;
! description&lt;br /&gt;
! range&lt;br /&gt;
|-&lt;br /&gt;
! '''TargetArmLength'''&lt;br /&gt;
| Telescoping arm target length&lt;br /&gt;
| [0,100]: percent of maximum extension&lt;br /&gt;
|-&lt;br /&gt;
! '''CurrentArmLength'''&lt;br /&gt;
| Current arm length updated during arm movement&lt;br /&gt;
| [0,100]: percent of maximum extension&lt;br /&gt;
|-&lt;br /&gt;
! '''EndPosition'''&lt;br /&gt;
| Extension at maximum arm length&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!'''StartPosition'''&lt;br /&gt;
| Extension at minimim arm length&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!'''TargetVelocity'''&lt;br /&gt;
| Target velocity of telescoping movement&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! YOLOL field&lt;br /&gt;
! description&lt;br /&gt;
! range&lt;br /&gt;
|-&lt;br /&gt;
! '''TargetArmAngle'''&lt;br /&gt;
| Rotating joint target angle&lt;br /&gt;
| [-180,180]: degrees&lt;br /&gt;
|-&lt;br /&gt;
! '''CurrentArmAngle'''&lt;br /&gt;
| Rotating joint current angle updated during arm rotation&lt;br /&gt;
| [-180,180]: degrees&lt;br /&gt;
|-&lt;br /&gt;
! '''MaxRotation'''&lt;br /&gt;
| Maximum rotation&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
!'''MinRotation'''&lt;br /&gt;
| Minimum rotation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!'''TargetVelocity'''&lt;br /&gt;
| Target velocity of rotation&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To learn more about how to use fields, consult these wiki pages:&lt;br /&gt;
* [[Universal tool|Universal Tool]]&lt;br /&gt;
* [[Data networks|Data networks]]&lt;br /&gt;
* [[YOLOL|YOLOL]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Videos ==&lt;br /&gt;
{{#evt:&lt;br /&gt;
service=youtube&lt;br /&gt;
|id=https://www.youtube.com/watch?v=LDy9Kt3KuGE&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#evt:&lt;br /&gt;
service=youtube&lt;br /&gt;
|id=https://www.youtube.com/watch?v=Borzb8ipqZ8&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- claw --&amp;gt;&lt;br /&gt;
&amp;lt;!-- grab --&amp;gt;&lt;br /&gt;
[[Category:Devices and machines|Robot arms]]&lt;/div&gt;</summary>
		<author><name>Scrapper 101</name></author>
	</entry>
	<entry>
		<id>https://wiki.starbasegame.com/index.php?title=Device_fields&amp;diff=32414</id>
		<title>Device fields</title>
		<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=Device_fields&amp;diff=32414"/>
		<updated>2024-07-03T22:06:53Z</updated>

		<summary type="html">&lt;p&gt;Scrapper 101: Robot arms are no longer in game, they have not been for a while now.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Otherlang2&lt;br /&gt;
|en=Device_fields&lt;br /&gt;
|de=Device_fields:de&lt;br /&gt;
|fr=Device_fields:fr&lt;br /&gt;
|zh-cn=设备参数&lt;br /&gt;
}}&lt;br /&gt;
Device fields are used to control and read the status of [[Devices_and_machines|devices]] connected to a [[Data_networks|data network]]. They can be read or set by the [[Universal tool]], [[YOLOL Chip]], or by other devices on the same network.&lt;br /&gt;
&lt;br /&gt;
= List of Device Fields =&lt;br /&gt;
== Base mounted devices ==&lt;br /&gt;
&lt;br /&gt;
===[[Battery]]===&lt;br /&gt;
{{#lsth:Battery|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Cargo beam|Cargo beam]]===&lt;br /&gt;
{{#lsth:Cargo beam|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Fixed mount|Fixed mount]]===&lt;br /&gt;
{{#lsth:Fixed mount|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Generator (Assembly)|Generator]]===&lt;br /&gt;
{{#lsth:Generator|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Hinges|Hinges]]===&lt;br /&gt;
{{#lsth:Hinges|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Mounted weapons]]===&lt;br /&gt;
{{#lsth:Mounted weapons|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Radio transmitters|Radio transmitters]]===&lt;br /&gt;
{{#lsth:Radio transmitters|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Range finder|Range finder]]===&lt;br /&gt;
{{#lsth:Range finder|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Robot arms|Robot arms (Outdated, no longer in game)]]===&lt;br /&gt;
{{#lsth:Robot arms|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Thrusters|Thrusters]]===&lt;br /&gt;
{{#lsth:Thrusters|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Turntable|Turntable]]===&lt;br /&gt;
{{#lsth:Turntable|Device fields}}&lt;br /&gt;
&lt;br /&gt;
== Interactables ==&lt;br /&gt;
&lt;br /&gt;
=== [[Buttons]] ===&lt;br /&gt;
{{#lsth:Buttons|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Lamps|Lamps]]===&lt;br /&gt;
{{#lsth:Lamps|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Levers|Levers]]===&lt;br /&gt;
{{#lsth:Levers|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Propellant tank|Propellant]]===&lt;br /&gt;
{{#lsth:Propellant tank|Device fields}}&lt;br /&gt;
&lt;br /&gt;
== Rail devices ==&lt;br /&gt;
&lt;br /&gt;
===[[Rail mover|Mover]]===&lt;br /&gt;
{{#lsth:Rail mover|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Rail relay|Relay]]===&lt;br /&gt;
{{#lsth:Rail relay|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Rail sensor strip|Sensor strip]]===&lt;br /&gt;
{{#lsth:Rail sensor strip|Device fields}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Rail trigger|Trigger]]===&lt;br /&gt;
{{#lsth:Rail trigger|Device fields}}&lt;br /&gt;
&lt;br /&gt;
== Screens ==&lt;br /&gt;
&lt;br /&gt;
=== [[Information screen]] ===&lt;br /&gt;
{{#lsth:Information screen|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Modular displays|Modular displays]]===&lt;br /&gt;
{{#lsth:Modular displays|Device fields}}&lt;br /&gt;
&lt;br /&gt;
== Utility Devices ==&lt;br /&gt;
&lt;br /&gt;
===[[Cargo lock frame (Assembly)]]===&lt;br /&gt;
{{#lsth:Cargo lock frame (Assembly)|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Flight control unit|Flight control unit]]===&lt;br /&gt;
{{#lsth:Flight control unit|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Main flight computer|Main flight computer]]===&lt;br /&gt;
{{#lsth:Main flight computer|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Mining laser (Assembly)|Mining laser]]===&lt;br /&gt;
{{#lsth:Mining laser|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Network relay]]===&lt;br /&gt;
{{#lsth:Network relay|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Tractor beam (Assembly)|Tractor beam]]===&lt;br /&gt;
{{#lsth:Tractor beam|Device fields}}&lt;br /&gt;
&lt;br /&gt;
== YOLOL devices ==&lt;br /&gt;
&lt;br /&gt;
===[[YOLOL Chip]]===&lt;br /&gt;
{{#lsth:YOLOL Chip|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Chip socket]]===&lt;br /&gt;
{{#lsth:Chip socket|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Memory chip]]===&lt;br /&gt;
{{#lsth:Memory chip|Device fields}}&lt;br /&gt;
&lt;br /&gt;
===[[Modular device rack]]===&lt;br /&gt;
{{#lsth:Modular device rack|Device fields}}&lt;/div&gt;</summary>
		<author><name>Scrapper 101</name></author>
	</entry>
	<entry>
		<id>https://wiki.starbasegame.com/index.php?title=YOLOL_Tricks&amp;diff=32413</id>
		<title>YOLOL Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=YOLOL_Tricks&amp;diff=32413"/>
		<updated>2024-07-03T22:00:50Z</updated>

		<summary type="html">&lt;p&gt;Scrapper 101: Talk about professional chips being impossible to obtain is outdated information, updated with new info.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Otherlang2&lt;br /&gt;
|ru=Фишки YOLOL&lt;br /&gt;
|ua=Особливості YOLOL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[YOLOL]] is a rather constrained language. The line and chip length limits and slow execution speed incentivize clever shortcuts. The small math library and limited operation space require building larger operations from smaller building blocks. To those ends, this page serves to catalog a variety of things you can accomplish with YOLOL that might not be obvious from the main [YOLOL] documentation.&lt;br /&gt;
&lt;br /&gt;
== General tips ==&lt;br /&gt;
Anything that accept numbers also accept something that represents a number. For example if you wanted to use a button to turn something on instead of doing&lt;br /&gt;
 if :Button then :Device=1 else :Device=0 end&lt;br /&gt;
You can achieve the same thing by simply doing&lt;br /&gt;
 :Device=:Button&lt;br /&gt;
&amp;quot;:Button&amp;quot; is actually just a value, most buttons are either 0 (not clicked) or 1 (clicked) so setting :Device to be :Button is really no different from setting it to 0 and 1, its just that our number is now &amp;quot;dynamic&amp;quot; in the sense that it is directly tied to the value of the :Button.&lt;br /&gt;
Understanding this can be used for many things, we can incorporate this into our goto# by simply doing something like &amp;quot;goto:Button+1&amp;quot; which will goto1 if :Button is 0 and goto2 if :Button is 1.&lt;br /&gt;
So that means we can both use something that has the value of a number instead of a number as well as carry out math to determine what the number actually should be.&lt;br /&gt;
Assume we want :Device to get the value 100 if :Button is pressed, and have the value 0 if it is not pressed. We can do that like this:&lt;br /&gt;
 :Device=:Button*100&lt;br /&gt;
It is also useful to know that if a line contains a runtime error then this line will be skipped entirely. This means you can skip lines by dividing by 0. Just directly dividing by 0 is of course not helpful but if we use a &amp;quot;dynamic value&amp;quot; in the sense that we are dividing by a variable, such as :Button, that means we sometimes will have a line containing no errors so it runs and sometimes it contains an error and will be skipped.&lt;br /&gt;
 goto2/:Button&lt;br /&gt;
If our :Button is 0 this is dividing by zero so the entire line is skipped, if :Button is 1 we are instead dividing 2 with 1 which returns 2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Need more decimals? ===&lt;br /&gt;
YOLOL supports 3 decimal places, 1.234, which may cause you some issues. If your final number however isn't the one that needs a higher amount of accuracy than this but rather the requirement for more than 3 decimals is somewhere in the equation giving you your number then you can solve this issue by multiplying your numbers used during the equation and then dividing the final number. For example if you need to multiply x with 1.2345 and .234 simply is not accurate enough you could instead multiply x with 12.345 and then divide the result by the same amount, in this case 10.&lt;br /&gt;
&lt;br /&gt;
=== Don't have professional chips? ===&lt;br /&gt;
Trigonometric functions are locked behind [[Professional YOLOL chip|professional chips]], which resources to build may be difficult to obtain. Here is a solution for those not wanting to use them:&lt;br /&gt;
&lt;br /&gt;
polynomial approximations for sin/cos functions '''''(!! for sin/cos make sure -180&amp;lt;:x&amp;lt;180 !!)'''&amp;lt;ref&amp;gt;[https://www.reddit.com/r/starbase/comments/puz32d/extremely_unprofessional_sinusoidal_approximations/ Extremely unprofessional sinusoidal approximations]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''sin(x):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i=:x/180 :sinx=4*i*(1-ABS i)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''cos(x):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i=:x/180 i+=.5-2*(i&amp;gt;.5) :cosx1=4*i*(1-ABS i)&amp;lt;/code&amp;gt; (using the cos(x)=sin(x+90) identity)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i=:x/180 :cosx2=i^2*(-6+4*ABS i)+1&amp;lt;/code&amp;gt; (standalone derivation; slightly shorter but different error bars so ymmv when using it with sin)&lt;br /&gt;
&lt;br /&gt;
'''asin(y):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;:asiny=40*:y^3+50*:y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''acos(y):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;:acosy=-40*:y^3-50*:y+90&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''atan(y):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;i=:y/SQRT(1+:y^2) :atany=40*i^3+50*i&amp;lt;/code&amp;gt; (using the asin identity)&lt;br /&gt;
&lt;br /&gt;
== String Manipulation ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nickname !! Code !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| If Empty || '''string-(string+otherstring)''' || If '''otherstring''' is empty then this evaluates to an empty string, else it evaluates to '''string''' &lt;br /&gt;
|-&lt;br /&gt;
| Select || '''a=&amp;quot;foo1&amp;quot; b=&amp;quot;bar2&amp;quot; c=&amp;quot;meh3&amp;quot;&amp;lt;br/&amp;gt;x=2&amp;lt;br/&amp;gt;s=a+b+c-x-a-b-c&amp;lt;br/&amp;gt;s==&amp;quot;bar&amp;quot;''' || One string from a set can be selected by concatenating them with indices, then removing an index, then removing all the strings which will fail for the un-indexed one. If one index is a substring of another then the order of the strings will matter.&lt;br /&gt;
|-&lt;br /&gt;
| Contains || '''s=&amp;quot;~meh~foo~bar~&amp;quot;&amp;lt;br/&amp;gt;t=&amp;quot;foo&amp;quot;&amp;lt;br/&amp;gt;c=s!=s-(&amp;quot;~&amp;quot;+t+&amp;quot;~&amp;quot;)''' || Evaluates to 1 if '''t''' is present in test set '''s''', and 0 if not&amp;lt;br/&amp;gt;Alternatively, if the values in the string to test ('''s''') are arranged in alphabetically descending order, '''s&amp;gt;s-(&amp;quot;~&amp;quot;+t+&amp;quot;~&amp;quot;)''' can also be used.&amp;lt;br/&amp;gt;For non-distinct values, (for example searching for '''&amp;quot;tin&amp;quot;''' in the string '''&amp;quot;non-distinct values&amp;quot;''') the delimiter ('''&amp;quot;~&amp;quot;''') can be omitted. &amp;lt;br/&amp;gt;Depending on the values that can occur in '''s''' and '''t''', some or all of the delimiters ('''&amp;quot;~&amp;quot;''') can be omitted, or changed into other values, such as numbers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Number tricks ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Nickname !! Code !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| Not || '''0^b'''&amp;lt;br/&amp;gt;'''1-b'''&amp;lt;br/&amp;gt;'''b==0''' || Used to negate a '''0''' or '''1''' value.&amp;lt;br/&amp;gt;'''0^b''': Does not need parenthesis when used in a multiplication. Works any non-negative input value, not only '''0''' and '''1'''. Requires an Advanced or Professional chip&amp;lt;br/&amp;gt;'''1-b''': Works '''only''' with '''0''' and '''1'''. Works on all chips.&amp;lt;br/&amp;gt;'''b==0''': Works with all input values, not only '''0''' and '''1'''. Works on all chips.&lt;br /&gt;
|-&lt;br /&gt;
| Select || '''a+(b-a)*s'''&amp;lt;br/&amp;gt;'''a*0^s+b*s''' || Select one of '''a''' or '''b''' based on a '''0''' or '''1''', '''s''' select signal.&amp;lt;br/&amp;gt;Equivalent to '''if s then result=b else result=a end'''&lt;br /&gt;
|-&lt;br /&gt;
| Hex || '''0xHEXDIGITS''' || write a number in base 16, digits from 0-9 and a,b,c,d,e,f; works only in [[YOLOL]]'''&lt;br /&gt;
|-&lt;br /&gt;
| Scientific || '''AeB''' || A*10^B; works in [[YOLOL]] and when written by the U-tool in device fields'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Skipping IF Statements==&lt;br /&gt;
If statements can in many cases be avoided which can save us a considerable amount of characters, as we will no longer waste characters on &amp;quot;if&amp;quot;, &amp;quot;then&amp;quot;, and &amp;quot;end&amp;quot;. Multiplication (*) works as a replacement for AND while addition (+) works as a replacement for OR in many scenarios.&lt;br /&gt;
&lt;br /&gt;
 if :ButtonState==1 and :DoorState==1 then :LampOn=1 end&lt;br /&gt;
&lt;br /&gt;
While this if statement could be made shorter by skipping out on unnecessary spaces and removing the unnecessary &amp;quot;==1&amp;quot; part of the comparison we could also skip out on using an if statement entirely.&lt;br /&gt;
&lt;br /&gt;
 :LampOn=:ButtonState*:DoorState&lt;br /&gt;
&lt;br /&gt;
This will assign LampOn the value of ButtonState multiplied with DoorState. if both are 1 that returns a 1, if either one (or both) of them is zero then it returns zero, making this a functional replacement for an if statement containing AND. We could do the same thing for OR by instead using addition.&lt;br /&gt;
&lt;br /&gt;
Using math to avoid the necessity of IF statements works in many cases and tend to be easy to do when the values involved are 0 and 1, such as for anything which is either on or off. If you need to shorten down your code for one reason or the other this is a good venue to explore. Lets finish this section with a slightly beefier example of this in use.&lt;br /&gt;
&lt;br /&gt;
 if :One and :Two then :LampOn=1 goto2 end if :One&amp;lt;1 and :Three then :LampOn=1 end &lt;br /&gt;
&lt;br /&gt;
Here we are checking if :One and :Two are true (equal to 1) and if they are we change :LampOn to 1 and move to line 2. IF they are not we check if One is False (0) and Three is true (1) and in that case we still turn on the lamp.&lt;br /&gt;
However if we skip out on using if statements to approach this we could shorten it to this:&lt;br /&gt;
&lt;br /&gt;
 :LampOn=(:One*:Two)+((1-:One)*:Three)&lt;br /&gt;
&lt;br /&gt;
Keep this in mind when writing your yolol and you will find yourself saving a lot of characters and fitting more things on the same line and even more things on the same chip!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you need to disable whole script with one button and squeeze-in some variables initialisation:&lt;br /&gt;
 if :Button != 1 then goto1 end a = 123 b = 456 c = 789&lt;br /&gt;
This can be shortened to:&lt;br /&gt;
 a=123 b=456 c=789 goto1+:Button&lt;br /&gt;
When '''Button''' disabled '''goto''' will jump to line 1, otherwise it will jump to line 2.&lt;br /&gt;
&lt;br /&gt;
== Code Golf ==&lt;br /&gt;
If you want to develop readable code and only shorten it for deployment, consider using [https://github.com/dbaumgarten/yodk yodk] or [https://github.com/martindevans/Yolol Yololc] which can minify your code for you.&lt;br /&gt;
&lt;br /&gt;
Shortening identifiers to one character saves bytes, use '''f=b''' rather than '''foo=bar'''.&lt;br /&gt;
&lt;br /&gt;
Reassigning fields to identifiers saves bytes if you use them more than a few times. '''f=:f f f f f f f f f''' is shorter than ''':f :f :f :f :f :f :f :f '''.&lt;br /&gt;
&lt;br /&gt;
Most whitespace is optional. You only actually need a space when code would be ambiguous without it. Spaces can almost always be omitted before ''':''', after '''if''' or '''then''' or '''end''', between a number or symbol and a letter, and in various other places.&lt;br /&gt;
&lt;br /&gt;
[[Category:Networks|YOLOL]]&lt;/div&gt;</summary>
		<author><name>Scrapper 101</name></author>
	</entry>
	<entry>
		<id>https://wiki.starbasegame.com/index.php?title=Common_YOLOL&amp;diff=32412</id>
		<title>Common YOLOL</title>
		<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=Common_YOLOL&amp;diff=32412"/>
		<updated>2024-07-03T21:58:49Z</updated>

		<summary type="html">&lt;p&gt;Scrapper 101: Edits a lot of the generator script information and examples to let new players ( and pre-exiting ones ) know that generator scripts may or may not work on ships anymore.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A collection of small common scripts meant to be easily copied and understood for the [[YOLOL|YOLOL]] beginners.&lt;br /&gt;
&lt;br /&gt;
''This page is a &amp;quot;Work In Progress&amp;quot;. Don't hesitate to contribute! Just make sure to respect the following rules:&lt;br /&gt;
* Avoid complex codes. As said, These must be easily understood by beginners. If you can't simplify your scripts, please add some comments to explain the most technical parts.&lt;br /&gt;
* Avoid as possible to modify the [[Device fields|device fields]]. If necessary, it must be specified which field has to be renamed (left column) and/or set to a given value (right column). ''&lt;br /&gt;
&lt;br /&gt;
==[[Flight control unit|Flight Control Unit]]==&lt;br /&gt;
&lt;br /&gt;
===Single Forward/Backward Lever===&lt;br /&gt;
Requires a center lever bound to '''&amp;quot;FcuForward&amp;quot;'''. ''Note: You can easily modify the default regular lever from most prebuilt ships and cockpit modules to be used as a center Lever. Just change the '''&amp;quot;LeverMinOutput&amp;quot;''' value from 0 to -100. Also don't forget to modify your control binds (&amp;quot;V&amp;quot; on keyboard by default).''&lt;br /&gt;
&lt;br /&gt;
 :FcuBackward=-:FcuForward goto1&lt;br /&gt;
&lt;br /&gt;
===Speed Limiter===&lt;br /&gt;
Requires to modify the lever bound to '''&amp;quot;FcuForward&amp;quot;''' which shall be renamed '''&amp;quot;Fwd&amp;quot;''' and another regular lever with '''&amp;quot;LeverState&amp;quot;''' renamed '''&amp;quot;Limiter&amp;quot;'''. This script allow you to set a maximum forward speed to your ship, which is useful when you need more accurate movements (e.g. while mining or docking).&lt;br /&gt;
&lt;br /&gt;
 :FcuForward=:Fwd/100*:Limiter goto1&lt;br /&gt;
&lt;br /&gt;
''Note: If you already modified your '''&amp;quot;FcuFoward&amp;quot;''' lever to be used as a '''&amp;quot;Single Forward/Backward Lever&amp;quot;''' (see above), you can use the '''&amp;quot;Backward&amp;quot;''' lever made useless as the '''&amp;quot;Limiter&amp;quot;''' lever. Just make sure you have '''&amp;quot;FcuForward&amp;quot;''' renamed '''&amp;quot;FwdBwd&amp;quot;''' instead so you can modify forward and backward thrust individually. This way your YOLOL scripts should be written as follows:''&lt;br /&gt;
&lt;br /&gt;
 :FcuForward=:FwdBwd/100*:Limiter goto1&lt;br /&gt;
&lt;br /&gt;
 :FcuBackward=-:FwdBwd goto1&lt;br /&gt;
&lt;br /&gt;
===Turtle Mode===&lt;br /&gt;
Similar to the previous script but with a button instead of a lever. '''&amp;quot;ButtonState&amp;quot;''' should be renamed '''&amp;quot;Turtle&amp;quot;''' and '''&amp;quot;ButtonStyle&amp;quot;''' set to '''&amp;quot;1&amp;quot;'''. In addition set the '''&amp;quot;ButtonOffStateValue&amp;quot;''' to '''&amp;quot;100&amp;quot;''' and the '''&amp;quot;ButtonOnStateValue&amp;quot;''' to the desired speed reduction. For example having '''&amp;quot;30&amp;quot;''' means 30% of maximum speed when the button is active.&lt;br /&gt;
&lt;br /&gt;
 :FcuForward=:Fwd/100*:Turtle goto1&lt;br /&gt;
&lt;br /&gt;
===Gradual Generator Script===&lt;br /&gt;
*Please Note That Due To Some Not So Recent Changes, Most Generator Scripts May Not Work Due To Generators Having To &amp;quot;Spool Up&amp;quot; Before Providing Enough Power To Not Drain The Battery(s) So Make Sure Your Ship Either Has Enough Batteries To Keep Running, Or The Script You Are Using Is Advanced Enough To Keep Your Ship Going.*&lt;br /&gt;
&lt;br /&gt;
This script makes the fuel rate limit of the fuel chamber inversely proportional to the charge level of the batteries.&lt;br /&gt;
&lt;br /&gt;
 :Generator=100-:Battery_1/100 goto1&lt;br /&gt;
&lt;br /&gt;
Alternatively, the script below will keep the batteries fuller by setting the fuel rate limit to its maximum when batteries are below 90% of charge.&lt;br /&gt;
&lt;br /&gt;
 :Generator=1000-:Battery_1/10 goto1&lt;br /&gt;
&lt;br /&gt;
===Flagged Generator Script===&lt;br /&gt;
This script set the fuel rate limit to 25% (just enough to supply 2 box thrusters with a bit of spare charge) if the level of the batteries is below 9999 and adding 50% if below 5000. 0.001% is enough fuel rate to let the generator &amp;quot;sleep&amp;quot; when the ship stand still and the batteries are full.&lt;br /&gt;
&lt;br /&gt;
 :Generator=25*(:Battery_1&amp;lt;9999)+50*(:Battery_1&amp;lt;5000)+0.001 goto1&lt;br /&gt;
&lt;br /&gt;
===Advanced Generator Script===&lt;br /&gt;
This script is tweakable to your ship configuration. Field names are those of the Laborer Module, except for the '''&amp;quot;Generator&amp;quot;''' button which should be renamed '''&amp;quot;PWR&amp;quot;''' so the script can control the fuel rate while the button still being functional. Optionally you can add an override lever with '''&amp;quot;LeverState&amp;quot;''' renamed '''&amp;quot;PWR&amp;quot;''' as well.&lt;br /&gt;
&lt;br /&gt;
 MaxBattery=20000           // total capacity&lt;br /&gt;
 LowBattery=0.99*MaxBattery // start charging below 99%&lt;br /&gt;
 MinBattery=0.20*MaxBattery // max charge rate below 20%&lt;br /&gt;
 MaxGenerator=100           // max fuel rate&lt;br /&gt;
 MinGenerator=2             // min fuel rate (near 100% charge)&lt;br /&gt;
 h=MaxGenerator c=MinGenerator          // auxiliary variables,&lt;br /&gt;
 f=MaxBattery l=LowBattery e=MinBattery // no need to change these&lt;br /&gt;
 r=(h-c)/(f-e) z=h-r*l a=r*(f-l)      // reboot: remove &amp;quot;goto9&amp;quot; briefly&lt;br /&gt;
 y=:PWR-z-r*(:Battery_1+:Battery_2)+c*(y&amp;gt;c)+a*(y&amp;gt;0) :Generator=y goto9&lt;br /&gt;
&lt;br /&gt;
It is assumed that the following device fields are set as explained (''Note: The &amp;quot;PWR&amp;quot; button is already set up in the Laborer Module''):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ship Part !! Field Name !! Set Field value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;PWR&amp;quot; Button || ButtonOnStateValue|| 100&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;PWR&amp;quot; Button || ButtonOffStateValue|| 0 &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;PWR&amp;quot; Button || ButtonStyle || 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;PWR&amp;quot; Lever (optional) || LeverMinOutput || 0 &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;PWR&amp;quot; Lever (optional) || LeverMaxOutput || 200 &lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;PWR&amp;quot; Lever (optional) || LeverCenteringSpeed || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==[[Material point scanner|Material Point Scanner]]==&lt;br /&gt;
&lt;br /&gt;
===Material Point Scanner Script===&lt;br /&gt;
Requires two displays for '''&amp;quot;Material&amp;quot;''' and '''&amp;quot;Volume&amp;quot;''', two buttons to toggle the '''&amp;quot;Active&amp;quot;''' and '''&amp;quot;Scan&amp;quot;''' fields of the scanner, and a third button with '''&amp;quot;ButtonState&amp;quot;''' renamed '''&amp;quot;Next&amp;quot;''' and '''&amp;quot;ButtonStyle&amp;quot;''' set to '''&amp;quot;1&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
 :Index=(:Index+:Next)*(:Index&amp;lt;:ScanResults) :Next=0&lt;br /&gt;
 :Material=:Material :Volume=:Volume goto1&lt;br /&gt;
&lt;br /&gt;
===Automatic Material Point Scanner Script===&lt;br /&gt;
This is a modified version of the above script so it can be used when the scanner is '''&amp;quot;Active&amp;quot;''' without the need of any additional buttons.&lt;br /&gt;
''Note: launching a new scan reinitialize the index to '''&amp;quot;0&amp;quot;'''.''&lt;br /&gt;
&lt;br /&gt;
 :Scan=1&lt;br /&gt;
 //Pause&lt;br /&gt;
 :Index=Next&lt;br /&gt;
 Next=(Next+1)*(Next&amp;lt;:ScanResults)&lt;br /&gt;
 :Material=:Material :Volume=:Volume goto1&lt;br /&gt;
&lt;br /&gt;
==[[Mining laser|Mining Laser]]==&lt;br /&gt;
''Note: [[Mining laser|Mining Lasers]] were updated to have an activation cost, which is why pulsing lasers is not economic anymore.''&lt;br /&gt;
===Pulsed Mining Laser===&lt;br /&gt;
Requires a button with '''&amp;quot;ButtonState&amp;quot;''' renamed '''&amp;quot;Mining&amp;quot;''' and '''&amp;quot;ButtonStyle&amp;quot;''' set to '''&amp;quot;1&amp;quot;'''. Reduces power consumption by continuously switching mining laser &amp;quot;On&amp;quot; and &amp;quot;Off&amp;quot; while the button is active.&lt;br /&gt;
&lt;br /&gt;
 :MiningLaserOn=(1-:MiningLaserOn)*:Mining goto1&lt;br /&gt;
&lt;br /&gt;
===Configurable Pulsed Mining Laser===&lt;br /&gt;
Similar to the previous script but with configurable timers for the &amp;quot;On&amp;quot; and &amp;quot;Off&amp;quot; phases of the laser.&lt;br /&gt;
''Note: Each phase is calculated in a number of YOLOL &amp;quot;tick&amp;quot; (0.2sec). So in the example, the &amp;quot;On&amp;quot; phase last 2*0.2=0.4sec and the &amp;quot;Off&amp;quot; phase 3*0.2=0.6 sec, which makes the power comsumption just a bit lower than the power production of a regular generator module (= one fuel chamber and three generator units, all in tier 1).''&lt;br /&gt;
&lt;br /&gt;
 On=2 Off=3 :MiningLaserOn=(T&amp;lt;On)*:Mining T++ T*=T&amp;lt;(On+Off) goto1&lt;br /&gt;
&lt;br /&gt;
==[[Navigation receivers|Navigation Receiver]]==&lt;br /&gt;
&lt;br /&gt;
===Received Signal Display===&lt;br /&gt;
Requires a text panel with '''&amp;quot;PanelValue&amp;quot;''' renamed '''&amp;quot;Nav&amp;quot;'''. &lt;br /&gt;
&lt;br /&gt;
 if :SignalStrength&amp;gt;0 then goto2 else :Nav=&amp;quot;No Signal&amp;quot; goto1 end&lt;br /&gt;
 :Nav=:Message+&amp;quot;\n&amp;quot;+(1000000-:SignalStrength)/1000+&amp;quot;km&amp;quot; goto1&lt;br /&gt;
&lt;br /&gt;
==[[Ore collector|Ore Collector]]==&lt;br /&gt;
&lt;br /&gt;
===Mining Laser/ Ore Collector Swapping Power===&lt;br /&gt;
Requires a button with '''&amp;quot;ButtonState&amp;quot;''' renamed '''&amp;quot;Collecting&amp;quot;''' and '''&amp;quot;ButtonStyle&amp;quot;''' set to '''&amp;quot;1&amp;quot;'''. Reduces power consumption by switching ore collector &amp;quot;On&amp;quot; only if the button is active And the mining laser is &amp;quot;Off&amp;quot;. ''Note: this script works best alongside the &amp;quot;Pulsed Mining Laser&amp;quot; scripts.''&lt;br /&gt;
&lt;br /&gt;
 :ToggleOn=(1-:MiningLaserOn)*:Collecting goto1&lt;br /&gt;
&lt;br /&gt;
==[[Ship transponder|Ship Transponder]]==&lt;br /&gt;
&lt;br /&gt;
===Outside Safezone Warning===&lt;br /&gt;
Requires an active transponder and either a warning button or a safety lid button. The button blink whenever you're outside of the safe zone. ''Note: the button needs to be active in order to blink.''&lt;br /&gt;
&lt;br /&gt;
 :ButtonEnableBlink=1-:InsideSafeZone goto1&lt;br /&gt;
&lt;br /&gt;
===Stations Building Availability===&lt;br /&gt;
Same as the previous one, but the button blink wherever you're allowed to build a station.&lt;br /&gt;
&lt;br /&gt;
 :ButtonEnableBlink=:StationsAllowed goto1&lt;br /&gt;
&lt;br /&gt;
[[Category:Networks|Common YOLOL]]&lt;/div&gt;</summary>
		<author><name>Scrapper 101</name></author>
	</entry>
	<entry>
		<id>https://wiki.starbasegame.com/index.php?title=YOLOL&amp;diff=32411</id>
		<title>YOLOL</title>
		<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=YOLOL&amp;diff=32411"/>
		<updated>2024-07-03T21:45:46Z</updated>

		<summary type="html">&lt;p&gt;Scrapper 101: Removal of a lot of &amp;quot;Runtime errors&amp;quot; as they work in game, some are left as I haven't tested them yet, no need to confuse players.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Otherlang2&lt;br /&gt;
|en=YOLOL&lt;br /&gt;
|de=YOLOL:de&lt;br /&gt;
|fr=YOLOL:fr&lt;br /&gt;
|ru=YOLOL:ru&lt;br /&gt;
|ua=YOLOL:ua&lt;br /&gt;
|jp=YOLOL:jp&lt;br /&gt;
|zh-cn=YOLOL语言&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
{{#evt:service=youtube|id=https://www.youtube.com/watch?v=7lXK6_bktUk|alignment=center}}&lt;br /&gt;
&lt;br /&gt;
YOLOL is a programming language used to control and manage electrical [[Devices and machines|devices]].&amp;lt;br&amp;gt;&lt;br /&gt;
The code is written on lines in [[YOLOL Chip|YOLOL chips]] which are then inserted into [[Chip socket|chip sockets]], that read and relay their messages.&amp;lt;br&amp;gt;&lt;br /&gt;
The programming language enables the programming and controlling of almost any device within the known universe.&lt;br /&gt;
&lt;br /&gt;
== Basic information ==&lt;br /&gt;
&lt;br /&gt;
=== How it works ===&lt;br /&gt;
The code is written to and executed from programmable chips, and can be used to both monitor and control electrical [[Devices and machines|devices]] connected to a [[Data networks|data network]].&amp;lt;br&amp;gt;&lt;br /&gt;
Lines of code are executed in sequence from top to bottom, repeating the cycle of the chip after the last line has been executed, unless the script includes programmed instructions for specific line changes or stopping the execution completely.&lt;br /&gt;
&lt;br /&gt;
To put it simply:&lt;br /&gt;
&lt;br /&gt;
# Code execution starts from line 1&lt;br /&gt;
# After reading line 1, it proceeds to the next line based on the chip's time interval&lt;br /&gt;
# The process is then repeated for the lines 2, 3, 4... etc.&lt;br /&gt;
# The chip will begin executing line 1 again after the last line has been executed (unless the last line contains a goto statement or execution has been paused)&lt;br /&gt;
&lt;br /&gt;
So blank lines still use 0.2 seconds and can be used as a brief execution delay. (lines with only a comment are effectively the same as a blank line.)&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
* Lines take 0.2 seconds to execute.&lt;br /&gt;
* A line can contain a maximum of 70 characters (comments and spaces included).*&lt;br /&gt;
* Some functions only work on specific YOLOL chips.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;*Note that because of this some examples shown below might not work in-game.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command references ==&lt;br /&gt;
&lt;br /&gt;
=== Case insensitive ===&lt;br /&gt;
&lt;br /&gt;
The programming language is fully case '''insensitive'''.&amp;lt;br&amp;gt;&lt;br /&gt;
This means that the following two example scripts function identically to each other:&lt;br /&gt;
&lt;br /&gt;
 if '''ButtonState''' == 1 then '''DoorState''' = 1 end&lt;br /&gt;
&lt;br /&gt;
 IF '''buttonstate''' == 1 THEN '''doorstate''' = 1 END&lt;br /&gt;
* Both scripts set the '''doorstate''' into 1, if '''buttonstate''' value is 1.&lt;br /&gt;
* The characters in the programming language can be written in either lowercase or uppercase letters.&lt;br /&gt;
** They are still parsed as case insensitive.&lt;br /&gt;
** This way it's possible to have the code look a bit more organized.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
* The variables in the programming language are weakly typed (don't enforce type validity), and support two data types: '''Fixed-point decimals''' (up to 0.001 precision) and '''Strings''' (up to 1024 characters long).&lt;br /&gt;
** To put it simply, the variables can either be introduced as strings or numbers, ignoring the earlier variable type if the previous type is not identical, without causing an error.&lt;br /&gt;
* Each variable is always of a single type, though it will be implicitly converted when required.&lt;br /&gt;
* The default value of an uninitialized variable is 0, and null values are not supported.&lt;br /&gt;
* True/False are numerical values of non-0 and 0.&lt;br /&gt;
** True != 0&lt;br /&gt;
** False == 0&lt;br /&gt;
&lt;br /&gt;
Assigning a value to a variable always converts the variable to the newly assigned value's type.&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&lt;br /&gt;
 ultimateAutopilot= 128.643&lt;br /&gt;
* This results in the variable '''ultimateAutopilot''' containing a numeric value of 128.643&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ultimateAutopilot= &amp;quot;Error prone&amp;quot;&lt;br /&gt;
* This results in the variable '''ultimateAutopilot''' to be a string variable &amp;quot;''Error prone''&amp;quot;, and numeric value of 128.643 is removed.&lt;br /&gt;
&lt;br /&gt;
==== Decimals ====&lt;br /&gt;
&lt;br /&gt;
Numeric values in the programming language are 64-bit fixed-point decimals.&amp;lt;br&amp;gt;&lt;br /&gt;
The variables hold decimal numbers up to three decimal accuracy.&amp;lt;br&amp;gt;&lt;br /&gt;
As a result, the maximum value range (even during operations) is [-9223372036854775.808, 9223372036854775.807]&lt;br /&gt;
&lt;br /&gt;
 pieVariable= 3.142&lt;br /&gt;
* The above script assigns a numeric value of 3.142 to the variable '''pieVariable'''.&lt;br /&gt;
** Supplying more precise values than the variables can store works, but doesn't affect the end result.&lt;br /&gt;
&lt;br /&gt;
 notPieVariable= 0.5772156649&lt;br /&gt;
* The above script attempts to assign a numeric value of 0.5772156649 to the variable '''notPieVariable'''.&lt;br /&gt;
* The end result however is notPieVariable == 0.577&lt;br /&gt;
** Here, the more precise values are cut, leaving only three decimals behind.&lt;br /&gt;
&lt;br /&gt;
==== Strings ====&lt;br /&gt;
&lt;br /&gt;
To specify a string literal in the programming language, the desired string value must be surrounded with double quotation marks.&lt;br /&gt;
Strings can hold up to 127 characters.&lt;br /&gt;
&lt;br /&gt;
 badRobots= &amp;quot;saltberia&amp;quot; &lt;br /&gt;
* This script assigns the string value of &amp;quot;''saltberia''&amp;quot; to the variable '''badRobots'''.&lt;br /&gt;
&lt;br /&gt;
==== Device fields / External variables ====&lt;br /&gt;
&lt;br /&gt;
External variables and device fields can be used in the programming language with the following syntax:&amp;lt;br&amp;gt;&lt;br /&gt;
* ''':variableName'''&lt;br /&gt;
**'''variableName''' being the configured device field id.&lt;br /&gt;
A colon prefix  ''':'''  is used to tell the script that an external variable is being accessed, instead of using one that may or may not be declared or used in the script.&amp;lt;br&amp;gt;&lt;br /&gt;
A programmable [[YOLOL Chip|chip]] that is connected to a [[Devices and machines|device]] has access to all the devices in the same [[Data networks|network]].&amp;lt;br&amp;gt;&lt;br /&gt;
It can then modify and listen to any device fields it has access to.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 if ''':ButtonState''' == 1 then ''':DoorState''' = 1 end&lt;br /&gt;
* The script above will send the value of 1 to any devices listening to the device field '''DoorState''' if the value of '''ButtonState''' is 1 in the data network.&lt;br /&gt;
&lt;br /&gt;
==== Naming Limitations ====&lt;br /&gt;
Currently variables containing keywords such as '''if''' or '''end''' can be parsed incorrectly, and must be avoided.&lt;br /&gt;
&lt;br /&gt;
==== Memory Chips and Relays ====&lt;br /&gt;
&lt;br /&gt;
[[YOLOL memory chip|Memory Chips]] provide 10 device fields that aren't tied to the function of devices and can be used to share variables and their values between multiple [[YOLOL_Chip|YOLOL Chips]]. &amp;lt;/br&amp;gt;&lt;br /&gt;
In a [[Memory_relay|Memory Relay]] they can also be used to copy data from one device field to another, which allows&lt;br /&gt;
* separation of networks e.g. for keeping the data networks less noisy and smaller&lt;br /&gt;
* a combination of shortened variable names in yolol and long variable names in displays e.g. for cockpit interfaces&lt;br /&gt;
&lt;br /&gt;
== Operators and commands ==&lt;br /&gt;
&lt;br /&gt;
Note that the available operators may be limited by the type of the programmable [[YOLOL Chip|chip]].&amp;lt;br&amp;gt;&lt;br /&gt;
Basic chips have a limited selection of functions while more advanced ones can perform more complex operations natively.&lt;br /&gt;
&lt;br /&gt;
=== Basic arithmetic and assignment operators ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operation || Numeric operation || String operation || Chip availability&lt;br /&gt;
|-&lt;br /&gt;
| A + B || Addition || String A is appended by String B. || All&lt;br /&gt;
|-&lt;br /&gt;
| A - B || Subtraction || The last appearance of String B in String A is removed from String A. || All&lt;br /&gt;
|-&lt;br /&gt;
| A * B || Multiplication || String A is multiplied by String B. || All&lt;br /&gt;
|-&lt;br /&gt;
| A / B || Division || Divides String A by String B. || All&lt;br /&gt;
|-&lt;br /&gt;
| A ++ || PostIncrement (A=A+1) || Appends a space to String A. Evaluates to the original value. || All&lt;br /&gt;
|-&lt;br /&gt;
| A -- || PostDecrement (A=A-1) || Removes the last character of the string. Results in runtime error when trying to remove &amp;quot;&amp;quot;. Evaluates to the original value. || All&lt;br /&gt;
|-&lt;br /&gt;
| ++ A  || PreIncrement (A=A+1) || Appends a space to String A. Evaluates to the modified value. || All&lt;br /&gt;
|-&lt;br /&gt;
| -- A || PreDecrement (A=A-1) || Removes the last character of the string. Results in runtime error when trying to remove &amp;quot;&amp;quot;. Evaluates to the modified value. || All&lt;br /&gt;
|-&lt;br /&gt;
| A = B || Assignment (Variable A is set to the value of variable B) || Assignment || All&lt;br /&gt;
|-&lt;br /&gt;
| A += B || Addition-assignment (A=A+B) || A is assigned the value of string-operation A+B || All&lt;br /&gt;
|-&lt;br /&gt;
| A -= B || Subtraction-assignment (A=A-B) || A is assigned the value of string-operation A-B || All&lt;br /&gt;
|-&lt;br /&gt;
| A *= B || Multiplication-assignment (A=A*B) || Runtime error. The rest of the line is skipped. || All&lt;br /&gt;
|-&lt;br /&gt;
| A /= B || Division-assignment (A=A/B) || Runtime error. The rest of the line is skipped. || All&lt;br /&gt;
|-&lt;br /&gt;
| A ^= B || Exponentiation-assignment (A=A^B) || Runtime error. The rest of the line is skipped. || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| A %= B || Modulo-assignment (A=A%B) || Runtime error. The rest of the line is skipped. || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| A ^ B || Exponentiation || Runtime error. The rest of the line is skipped. || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| A % B || Modulo || Runtime error. The rest of the line is skipped. || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| ABS A || Modulus (absol value) (A=A if A&amp;gt;=0, else A=-A) || Runtime error. The rest of the line is skipped. || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| A! || Factorial ||  || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| SQRT A || Square root of A ||  || Advanced, Professional&lt;br /&gt;
|-&lt;br /&gt;
| SIN A || Sine of A (degrees) ||  || Professional&lt;br /&gt;
|-&lt;br /&gt;
| COS A || Cosine of A (degrees) ||  || Professional&lt;br /&gt;
|-&lt;br /&gt;
| TAN A || Tangent of A (degrees) ||  || Professional&lt;br /&gt;
|-&lt;br /&gt;
| ASIN A || Inverse sine of A (degrees) ||  || Professional&lt;br /&gt;
|-&lt;br /&gt;
| ACOS A || Inverse cosine of A (degrees) ||  || Professional&lt;br /&gt;
|-&lt;br /&gt;
| ATAN A || Inverse tangent of A (degrees) ||  || Professional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Logical operators ===&lt;br /&gt;
&lt;br /&gt;
Logical operators are checks that identify if the statement is true or false.&amp;lt;br&amp;gt;&lt;br /&gt;
All logical operations return either '''&amp;quot;0 for False&amp;quot;''' or '''&amp;quot;1 for True&amp;quot;'''. &lt;br /&gt;
The '''NOT''', '''AND''', and '''OR''' keywords consider 0 to be falsy and anything not 0 to be truthy.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operation || Numeric operation || String operation || Chip availability&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt; B || Less than || returns 1 if String A is first in alphabetical order, returns 0 if not. || All&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;gt; B || Greater than || returns 0 if String A is first in alphabetical order, returns 1 if not. || All&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;= B ||Less than or equal to || returns 1 if String A is first in alphabetical order or identical to String B, returns 0 if not. || All&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;gt;= B || Greater than or equal to || returns 0 if String A is first in alphabetical order or identical to String B, returns 1 if not. || All&lt;br /&gt;
|-&lt;br /&gt;
| A != B || Not equal to || returns 1 if String A is not equal to String B, 0 if it is. || All&lt;br /&gt;
|-&lt;br /&gt;
| A == B || Equal to || returns 1 if String A is equal to String B, 0 if not. || All&lt;br /&gt;
|-&lt;br /&gt;
| NOT A || Not || Returns 1 if A is 0, otherwise returns 0. || All&lt;br /&gt;
|-&lt;br /&gt;
| A AND B || And || Returns 1 if neither A nor B are 0, otherwise returns 0. || All&lt;br /&gt;
|-&lt;br /&gt;
| A OR B || Or || Returns 1 if either A or B is not 0, otherwise returns 0. || All&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mixing variable types in operations ===&lt;br /&gt;
&lt;br /&gt;
Mixing variable types in an operation handles the operation using all parameters as ''strings''.&lt;br /&gt;
&lt;br /&gt;
 previouslyNumber= &amp;quot;10&amp;quot; + 15&lt;br /&gt;
* The above script results in '''previouslyNumber''' containing the string value &amp;quot;1015&amp;quot;.&lt;br /&gt;
** Note that the involved parameters themselves don't change types, their values are just cast as strings for the purpose of the operation:&lt;br /&gt;
 &lt;br /&gt;
 purelyNumber = 15&lt;br /&gt;
 purelyString = &amp;quot;10&amp;quot; + purelyNumber&lt;br /&gt;
* When this script has executed, '''purelyString''' contains the string value of &amp;quot;1015&amp;quot;, while '''purelyNumber''' still contains the numeric value of 15.&lt;br /&gt;
&lt;br /&gt;
=== Goto ===&lt;br /&gt;
&lt;br /&gt;
Goto syntax is used when the normal script reading order from 1-&amp;gt;20 is not desired, or needs to be altered.&lt;br /&gt;
&lt;br /&gt;
Goto is used with the following syntax:&lt;br /&gt;
*'''goto lineNumber'''&lt;br /&gt;
** lineNumber is the line which this command will take the script execution.&amp;lt;br&amp;gt;&lt;br /&gt;
** Any remaining script that is on the same line after the goto-command will not be executed.&lt;br /&gt;
*** using if statements before goto ignores goto syntax, assuming the if-statement is false&lt;br /&gt;
** Multiple goto commands can be added on the same line using conditionals, as '''False''' goto commands are skipped.&lt;br /&gt;
** Numeric values outside the [1,20] range are clamped to this range.&lt;br /&gt;
** Non-integer values are floored.&lt;br /&gt;
** String values will result in a Runtime Error.&lt;br /&gt;
&lt;br /&gt;
 if variable == 5 then '''goto 4''' end '''goto 6'''&lt;br /&gt;
&lt;br /&gt;
The script above will go to line number 4, if '''variable''' has a value of 5.&amp;lt;br&amp;gt;&lt;br /&gt;
Otherwise it will go to line number 6. Numerical operations can also be done &amp;quot;inside&amp;quot; the goto, e.g. &lt;br /&gt;
&lt;br /&gt;
  goto 4+1&lt;br /&gt;
&lt;br /&gt;
=== If-else conditional ===&lt;br /&gt;
&lt;br /&gt;
If-else statements are used to branch out the script into different paths.&amp;lt;br&amp;gt;&lt;br /&gt;
They use the following syntax:&lt;br /&gt;
* '''if ''condition'' then ''statement'' else ''statement'' end'''&lt;br /&gt;
** Condition is a statement that results in a numeric value (where 0 is parsed as False, anything else as True), and statements are pieces of script that are run.&lt;br /&gt;
** All If-else conditional stations must have '''end''' syntax written after statement is complete.&lt;br /&gt;
** The statement has to be on one line. The if, then, else and end cannot be on different lines.&lt;br /&gt;
&lt;br /&gt;
If can be used to branch script execution into two possible outcomes temporarily based on variable value(s).&amp;lt;br&amp;gt;&lt;br /&gt;
'''Example:'''&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; variable != 2 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''then'''&amp;lt;/font&amp;gt; endResult = 3 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''else'''&amp;lt;/font&amp;gt; endResult = 4 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''end'''&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script sets the value of '''endResult''' to 3 if '''variable''' does not have the value of 2.&lt;br /&gt;
* If '''variable''''s value is 2, '''endResult''' is set to the value of 4.&lt;br /&gt;
&lt;br /&gt;
Note that the else statement -part can be left out if not needed. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; variable != 2 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''then'''&amp;lt;/font&amp;gt; endResult = 3 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''end'''&amp;lt;/font&amp;gt;&lt;br /&gt;
*This script only sets the value of 3 to '''endResult''' if '''variable''' does not have a value of 2, and doesn't do anything else.&lt;br /&gt;
&lt;br /&gt;
==== Nesting if statements ====&lt;br /&gt;
&lt;br /&gt;
It is possible to place if-conditionals inside the true/false statement blocks to achieve further branching of execution.&amp;lt;br&amp;gt;&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; variable == 0 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''then'''&amp;lt;/font&amp;gt; endResult = 1 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''else'''&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;cyan&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; variable == 1 &amp;lt;font color=&amp;quot;cyan&amp;quot;&amp;gt;'''then'''&amp;lt;/font&amp;gt; endResult = 2 &amp;lt;font color=&amp;quot;cyan&amp;quot;&amp;gt;'''end'''&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''end'''&amp;lt;/font&amp;gt; &lt;br /&gt;
* This script sets '''endResult''' to 1 if '''variable''' equals 0.&lt;br /&gt;
* If '''variable''' doesn't equal 0, but it equals 1, '''endResult''' is set to 2.&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; variable == 0 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''then'''&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;cyan&amp;quot;&amp;gt;'''if'''&amp;lt;/font&amp;gt; endResult == 1 &amp;lt;font color=&amp;quot;cyan&amp;quot;&amp;gt;'''then'''&amp;lt;/font&amp;gt; endResult = 2 &amp;lt;font color=&amp;quot;cyan&amp;quot;&amp;gt;'''end'''&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''else'''&amp;lt;/font&amp;gt; endResult = 1 &amp;lt;font color=&amp;quot;orangered&amp;quot;&amp;gt;'''end'''&amp;lt;/font&amp;gt;&lt;br /&gt;
* This script sets '''endResult''' to 2 if '''variable''' has a value of 0, and '''endResult''' equals to 1.&lt;br /&gt;
* Otherwise it sets '''endResult''' to 1.&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Comments are useful when writing code that is used by a lot of programmers.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that comments also use up space from the pre-determined 70 character line limit and are not excluded from it.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commenting is used with the following syntax:&lt;br /&gt;
*// '''text'''&lt;br /&gt;
** Text can be any single-line set of characters.&lt;br /&gt;
&lt;br /&gt;
 '''//''' This is a comment. It will explain how other lines of script work.&lt;br /&gt;
* An example of a possible comment syntax&lt;br /&gt;
&lt;br /&gt;
== Order of Operations ==&lt;br /&gt;
&lt;br /&gt;
Operations are conducted in the following order, when operators have the same precedence, left to right.&amp;lt;br&amp;gt;&lt;br /&gt;
To change order of operations, use ( ): e.g. 3*2+1=6+1=7 is the same as (3*2)+1=6+1=7 but is different from 3*(2+1)=3*3=9.&amp;lt;/br&amp;gt;&lt;br /&gt;
Where a line has multiple statements, they are executed left to right.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Operators &lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ++ --&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;!&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| operators &lt;br /&gt;
| sqrt, abs, sin etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| negate&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| */%&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt; &amp;gt; == != &amp;lt;= &amp;gt;=&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Surprise!&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;+-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| not (logical negation)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| or&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| and&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
There are two types of errors that can happen with the programming language.&lt;br /&gt;
# Syntax errors&lt;br /&gt;
# Runtime errors&lt;br /&gt;
&lt;br /&gt;
* Syntax errors come from invalid and unparseable script and will result in the whole line not being executed.&lt;br /&gt;
* Runtime errors are only catchable while the script is being executed. They result in the execution of the line being interrupted, but any effects until the error will remain.&lt;br /&gt;
&lt;br /&gt;
== Known Bugs/Unintended Behavior ==&lt;br /&gt;
This is a list of known problems regarding yolol:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* variablenames including keywords like &amp;quot;if&amp;quot; in them will parse with the keyword in mind, resulting in a syntax error. Example: :life would be parsed as :l if e&lt;br /&gt;
&lt;br /&gt;
==YOLOL Tips &amp;amp; Tricks==&lt;br /&gt;
* [[Common YOLOL|Common YOLOL scripts]]&lt;br /&gt;
* [[YOLOL Tricks]]&lt;br /&gt;
&lt;br /&gt;
== Related Pages ==&lt;br /&gt;
* [[Data networks]]&lt;br /&gt;
* [[Devices and machines]]&lt;br /&gt;
* [[Device fields]]&lt;br /&gt;
* [[Universal tool|Universal tool]]&lt;br /&gt;
* [[YOLOL Chip]]&lt;br /&gt;
* [[Memory chip]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Networks|YOLOL]]&lt;/div&gt;</summary>
		<author><name>Scrapper 101</name></author>
	</entry>
	<entry>
		<id>https://wiki.starbasegame.com/index.php?title=Towing_beam&amp;diff=31692</id>
		<title>Towing beam</title>
		<link rel="alternate" type="text/html" href="https://wiki.starbasegame.com/index.php?title=Towing_beam&amp;diff=31692"/>
		<updated>2022-08-06T06:34:03Z</updated>

		<summary type="html">&lt;p&gt;Scrapper 101: Changed Energy input value to be what stated in Starbase Video Game.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Otherlang2&lt;br /&gt;
|ru=Буксировочный_луч&lt;br /&gt;
}}{{SB Infobox Begin&lt;br /&gt;
	|{{SB Infobox Header&lt;br /&gt;
	  |image=[[Image:Towing beam.png]]&lt;br /&gt;
	  |factionLogo=&lt;br /&gt;
	  |caption=&lt;br /&gt;
	  |name=&lt;br /&gt;
	  |border=none&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	|{{SB Infobox Device General Information&lt;br /&gt;
	  |type=Utility device&lt;br /&gt;
	  |function=Towing other ships&lt;br /&gt;
	  &lt;br /&gt;
	  |size=204×72×72 cm&lt;br /&gt;
	  |mass=3,198.9&lt;br /&gt;
	  |volume=395.9&lt;br /&gt;
	  |corrosionResistance=400&lt;br /&gt;
	  |primaryMaterial=Bastium&lt;br /&gt;
	  |suppressUnitsKg&lt;br /&gt;
	  |suppressUnitsKv&lt;br /&gt;
	  |subComponents=&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	|{{SB Infobox Device IO&lt;br /&gt;
	  |electricIn=5 e/s per ton towed&lt;br /&gt;
	  |electricOut=&lt;br /&gt;
	  |energyCapacity=&lt;br /&gt;
	  |coolantIn=&lt;br /&gt;
	  |coolantOut=&lt;br /&gt;
	  |coolantCapacity=&lt;br /&gt;
	  |coolantRefresh=&lt;br /&gt;
	  |heatGeneration=&lt;br /&gt;
	  |heatDissipation&lt;br /&gt;
	  |propellantIn=&lt;br /&gt;
	  |propellantOut=&lt;br /&gt;
	  |propellantCapacity&lt;br /&gt;
	  |fuelIn=&lt;br /&gt;
	  |fuelOut=&lt;br /&gt;
	  |fuelCapacity&lt;br /&gt;
	  |sockets=&lt;br /&gt;
	  |YOLOLchips=&lt;br /&gt;
	  |modInterfaces=&lt;br /&gt;
	  |deviceInterfaces=&lt;br /&gt;
	  |enhancement=&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
	|{{SB Infobox Device Construction&lt;br /&gt;
	  |headerOverride=&lt;br /&gt;
	  |aegisium=&lt;br /&gt;
	  |ajatite=&lt;br /&gt;
	  |arkanium=&lt;br /&gt;
	  |bastium=10%&lt;br /&gt;
	  |charodium=&lt;br /&gt;
	  |corazium=&lt;br /&gt;
	  |exorium=25%&lt;br /&gt;
	  |haderite=&lt;br /&gt;
	  |ice=&lt;br /&gt;
	  |ilmatrium=&lt;br /&gt;
	  |karnite=&lt;br /&gt;
	  |kutonium=35%&lt;br /&gt;
	  |lukium=&lt;br /&gt;
	  |merkerium=&lt;br /&gt;
	  |nhurgite=&lt;br /&gt;
	  |oninum=&lt;br /&gt;
	  |surtrite=&lt;br /&gt;
	  |tengium=&lt;br /&gt;
	  |ukonium=&lt;br /&gt;
	  |valkite=&lt;br /&gt;
	  |vokarium=30%&lt;br /&gt;
	  |xhalium=&lt;br /&gt;
	}}&lt;br /&gt;
}}&amp;lt;section begin=summary/&amp;gt;The towing beam is a device that can be used to tow other ships.&lt;br /&gt;
&lt;br /&gt;
The towing beam uses power relative to the mass of the ship being towed (5e/s per ton), this mass is also added to the ship's mass, slowing the towing ship, but not adding any stress.&lt;br /&gt;
&lt;br /&gt;
Outside of a safezone any ship can be towed, inside a safezone only un-owned ships are able to be towed.&amp;lt;section end=summary/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Device fields ==&lt;br /&gt;
&amp;lt;section begin=deviceFields/&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! YOLOL field&lt;br /&gt;
! description&lt;br /&gt;
! range&lt;br /&gt;
|-&lt;br /&gt;
! '''TowBeamOnState'''&lt;br /&gt;
| The towing beam turns off when this is set to 0 and on when set to anything else&lt;br /&gt;
| 0 - 1&lt;br /&gt;
|-&lt;br /&gt;
! '''TowBeamSearchLength'''&lt;br /&gt;
| The distance the beam will try extend to, and try to grab ships from.&lt;br /&gt;
| 200&lt;br /&gt;
|-&lt;br /&gt;
! '''TowBeamStatus'''&lt;br /&gt;
| 0 if off, 1 if on, 2 if a ship is being towed.&lt;br /&gt;
| 0 - 2&lt;br /&gt;
|-&lt;br /&gt;
! '''LockedMass'''&lt;br /&gt;
| The mass of the towed ship, in kg.&lt;br /&gt;
| 0 -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=deviceFields/&amp;gt;&lt;br /&gt;
To learn more about how to use fields, consult these wiki pages:&lt;br /&gt;
* [[Universal tool|Universal Tool]]&lt;br /&gt;
* [[Data networks|Data networks]]&lt;br /&gt;
* [[YOLOL|YOLOL]]&lt;br /&gt;
&lt;br /&gt;
== Related Pages ==&lt;br /&gt;
&lt;br /&gt;
[[Towing beam (Assembly)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Devices and machines]]&lt;/div&gt;</summary>
		<author><name>Scrapper 101</name></author>
	</entry>
</feed>