<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://springrts-wiki.p2004a.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JK</id>
	<title>Spring - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://springrts-wiki.p2004a.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JK"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/JK"/>
	<updated>2026-11-08T19:12:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11866</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11866"/>
		<updated>2008-09-07T13:28:20Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Game ==&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(those special TeamIDs are not supported by all functions)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number index | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; nil | number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID, boolean onlyActive] ) -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,  &amp;lt;font color=darkgreen&amp;gt;(in synced code this is &amp;quot;SYNCED_NONAME&amp;quot;!)&amp;lt;/font&amp;gt;&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamNum,&lt;br /&gt;
          number  leader,&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number startTime, number endTime ) -&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage, boolean lineageRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean dead&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponNum] ) -&amp;gt; nil | &lt;br /&gt;
  boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number allyTeamID ] ) -&amp;gt; nil |&lt;br /&gt;
    { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of&lt;br /&gt;
   ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which &lt;br /&gt;
   is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece).&lt;br /&gt;
   So if you get via Cob2Lua a pieceID you have to translate it with this function.&lt;br /&gt;
   Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition&lt;br /&gt;
   in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureList&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;// NOTE: this is not really required, now all FeatureDefs are pre-loaded&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y |&lt;br /&gt;
    number x1, number y1, number x2, number y2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean visible, boolean inLos, boolean inAirLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11865</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11865"/>
		<updated>2008-09-07T13:27:57Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Game ==&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(except those special TeamIDs are not supported by all functions)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number index | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; nil | number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID, boolean onlyActive] ) -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,  &amp;lt;font color=darkgreen&amp;gt;(in synced code this is &amp;quot;SYNCED_NONAME&amp;quot;!)&amp;lt;/font&amp;gt;&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamNum,&lt;br /&gt;
          number  leader,&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number startTime, number endTime ) -&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage, boolean lineageRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean dead&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponNum] ) -&amp;gt; nil | &lt;br /&gt;
  boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number allyTeamID ] ) -&amp;gt; nil |&lt;br /&gt;
    { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of&lt;br /&gt;
   ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which &lt;br /&gt;
   is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece).&lt;br /&gt;
   So if you get via Cob2Lua a pieceID you have to translate it with this function.&lt;br /&gt;
   Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition&lt;br /&gt;
   in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureList&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;// NOTE: this is not really required, now all FeatureDefs are pre-loaded&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y |&lt;br /&gt;
    number x1, number y1, number x2, number y2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean visible, boolean inLos, boolean inAirLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12166</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12166"/>
		<updated>2008-08-28T10:28:42Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (number unitID,  int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; [[Lua_UnitRendering#Material_UserData|userdata Material]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, s[[Lua_UnitRendering#MaterialType|string MaterialType]], int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_OpenGL_Api#Display_Lists|preDisplayList]], [[Lua_OpenGL_Api#Display_Lists|postDisplayList]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [[Lua_UnitRendering#MaterialType|string MaterialType]], int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
==MaterialTypes==&lt;br /&gt;
 &amp;quot;alpha&amp;quot;&lt;br /&gt;
 &amp;quot;opaque&amp;quot;&lt;br /&gt;
 &amp;quot;alpha_reflect&amp;quot;&lt;br /&gt;
 &amp;quot;opaque_reflect&amp;quot;&lt;br /&gt;
 &amp;quot;shadow&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;none user accessible methods (yet)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12165</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12165"/>
		<updated>2008-08-28T08:07:30Z</updated>

		<summary type="html">&lt;p&gt;JK: /* MaterialTypes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (number unitID,  int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; [[Lua_UnitRendering#Material_UserData|userdata Material]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, s[[Lua_UnitRendering#MaterialType|string MaterialType]], int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_OpenGL_Api#Display_Lists|preDisplayList]], [[Lua_OpenGL_Api#Display_Lists|postDisplayList]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [[Lua_UnitRendering#MaterialType|string MaterialType]], int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MaterialTypes==&lt;br /&gt;
 &amp;quot;alpha&amp;quot;&lt;br /&gt;
 &amp;quot;opaque&amp;quot;&lt;br /&gt;
 &amp;quot;alpha_reflect&amp;quot;&lt;br /&gt;
 &amp;quot;opaque_reflect&amp;quot;&lt;br /&gt;
 &amp;quot;shadow&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;none user accessible methods (yet)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12164</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12164"/>
		<updated>2008-08-28T08:07:00Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (number unitID,  int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; [[Lua_UnitRendering#Material_UserData|userdata Material]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, s[[Lua_UnitRendering#MaterialType|string MaterialType]], int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, [[Lua_UnitRendering#MaterialType|string MaterialType]], [[Lua_OpenGL_Api#Display_Lists|preDisplayList]], [[Lua_OpenGL_Api#Display_Lists|postDisplayList]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [[Lua_UnitRendering#MaterialType|string MaterialType]], int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MaterialTypes===&lt;br /&gt;
&amp;quot;alpha&amp;quot;&lt;br /&gt;
&amp;quot;opaque&amp;quot;&lt;br /&gt;
&amp;quot;alpha_reflect&amp;quot;&lt;br /&gt;
&amp;quot;opaque_reflect&amp;quot;&lt;br /&gt;
&amp;quot;shadow&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;none user accessible methods (yet)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11449</id>
		<title>Lua OpenGL Api</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11449"/>
		<updated>2008-08-20T22:03:10Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Textures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spring ==&lt;br /&gt;
&#039;&#039;&#039;gl.GetSun&#039;&#039;&#039;&lt;br /&gt;
  ()        -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;pos&amp;quot; ) -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;shadowDensity&amp;quot; [, &amp;quot;unit&amp;quot;] ) -&amp;gt; number shadowDensity&lt;br /&gt;
  ( &amp;quot;diffuse&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;ambient&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;specular&amp;quot; )                 -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigScreen&#039;&#039;&#039;&lt;br /&gt;
  ( number screenWidth, number screenDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawMiniMap&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SlaveMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( boolean mode ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( int px, int py, int sx, int sy ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetViewSizes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number x, number y&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;gl.Translate&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scale&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rotate&#039;&#039;&#039;&lt;br /&gt;
  (number angle, number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Color&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b[, number a] } |&lt;br /&gt;
      number r, number g, number b[, number a] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineWidth&#039;&#039;&#039;&lt;br /&gt;
  ( number width ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSize&#039;&#039;&#039;&lt;br /&gt;
  ( number size ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Billboard&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;use this to draw 2d primitives in DrawWorld&amp;lt;/font&amp;gt;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetState&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  ShadeModel = GL_SMOOTH&lt;br /&gt;
  Scissor    = false&lt;br /&gt;
  Texture    = false&lt;br /&gt;
  ColorMask  = true, true, true, true&lt;br /&gt;
  DepthMask  = false&lt;br /&gt;
  DepthTest  = false  (GL_LEQUAL)&lt;br /&gt;
  Culling    = false  (GL_BACK)&lt;br /&gt;
  LogicOp    = false  (GL_INVERT)&lt;br /&gt;
  AlphaTest  = false  (GL_GREATER, 0.5f)&lt;br /&gt;
  Blending   = GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetMatrices&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  Resets GL_TEXTURE matrix stack&lt;br /&gt;
  Resets GL_MODELVIEW matrix stack&lt;br /&gt;
  Resets GL_PROJECTION matrix stack&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Clear&#039;&#039;&#039;&lt;br /&gt;
  ( GL.DEPTH_BUFFER_BIT, number cleardepth ) -&amp;gt; nil&lt;br /&gt;
  ( GL.STENCIL_BUFFER_BIT, int clearstencil ) -&amp;gt; nil&lt;br /&gt;
  ( GL.COLOR_BUFFER_BIT | GL.ACCUM_BUFFER_BIT, number r, number g, number b, number a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Draw Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BeginEnd&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Drawing_Primitives|GLType]], function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Vertex&#039;&#039;&#039;&lt;br /&gt;
  ( { number x, number y [, number z [, number w ]] } |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Normal&#039;&#039;&#039;&lt;br /&gt;
  (  number x, number y, number z |&lt;br /&gt;
   { number x, number y, number z } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rect&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexRect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;texture rect&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2,&lt;br /&gt;
  [ boolean flip_s, boolean flip_t | number s1, number t1, number s2, number t2 ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Shape&#039;&#039;&#039;&lt;br /&gt;
 ( number [[Lua_ConstGL#Drawing_Primitives|GLtype]],&lt;br /&gt;
   elements = {&lt;br /&gt;
     [1] = { v | vertex   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;required&amp;lt;/font&amp;gt;&lt;br /&gt;
             n | normal   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             t | texcoord = { number x, number y },                     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             c | color    = { number r, number g, number b, number a }  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
     },&lt;br /&gt;
     etc ...&lt;br /&gt;
   }&lt;br /&gt;
 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Text&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;, number x, number y, number size [, string &amp;quot;options&amp;quot;] )&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  options:&lt;br /&gt;
  &#039;c&#039; = center&lt;br /&gt;
  &#039;r&#039; = right&lt;br /&gt;
  &#039;n&#039; = deactives colorCodes (so you can use gl.Color() to write transparent text etc.)&lt;br /&gt;
  &#039;o&#039; = black outline&lt;br /&gt;
  &#039;O&#039; = white outline&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetTextWidth&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;) -&amp;gt; number width  --  in pixels, with a font size of 1.0&lt;br /&gt;
&lt;br /&gt;
== Unit/Feature Draw Functions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Unit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws an unit; on default it uses LOD, with lod&amp;lt;0 it is turned off, else it defines a specific level)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitRaw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(redundant -&amp;gt; use gl.Unit instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitShape&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Feature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FeatureShape&#039;&#039;&#039;&lt;br /&gt;
  ( number featureDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(world space -&amp;gt; unit space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(unit space -&amp;gt; piece space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPiece&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws the unit piece)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(use gl.UnitPieceMultMatrix instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawListAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number listID, [ boolean midPos,&lt;br /&gt;
      number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
      number degrees, number rotX, number rotX, number rotZ ] ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawFuncAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean midPos, function [, arg1,... ]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Switches ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Blending&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#BlendingFactorSrc|srcmode]], number [[Lua_ConstGL#BlendingFactorDest|dstmode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.AlphaTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]], number threshold ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Culling&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#Culling|face]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ColorMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( boolean r, boolean g, boolean b, boolean a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LogicOp&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#LogicOp|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Fog&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Smoothing&#039;&#039;&#039;&lt;br /&gt;
 ( (boolean enable | number POINT), &lt;br /&gt;
   (boolean enable | number LINE),&lt;br /&gt;
   (boolean enable | number POLYGON) ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.EdgeFlag&#039;&#039;&#039;&lt;br /&gt;
 ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scissor&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( int x, int y, int w, int h ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineStipple&#039;&#039;&#039;&lt;br /&gt;
  ( string any ) -&amp;gt; nil &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(use springs default line stipple)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
  ( int factor, number pattern ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number [[Lua_ConstGL#PolygonMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonOffset&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number factor, number units ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Textures ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Texture&#039;&#039;&#039;&lt;br /&gt;
  ( [ number texNum, ] boolean enable | string name ) -&amp;gt; nil | boolean loaded&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
                           current formats:&lt;br /&gt;
  :${opt}:/LuaUI/images/image.png = filename&lt;br /&gt;
                              #12 = unitDef 12 buildpic&lt;br /&gt;
                            %34:1 = unitDef 34 s3o tex2 (:0-&amp;gt;tex1,:1-&amp;gt;tex2)&lt;br /&gt;
                              !56 = lua generated texture 56&lt;br /&gt;
                           $units = 3do textureatlas&lt;br /&gt;
                          $shadow = shadowmap&lt;br /&gt;
                        $specular = specular cube map&lt;br /&gt;
                      $reflection = reflection cube map&lt;br /&gt;
&lt;br /&gt;
                         possible ${opt}&#039;s are:&lt;br /&gt;
                              &#039;n&#039; = nearest&lt;br /&gt;
                              &#039;l&#039; = linear&lt;br /&gt;
                              &#039;a&#039; = aniso&lt;br /&gt;
                              &#039;i&#039; = invert&lt;br /&gt;
                              &#039;g&#039; = greyed&lt;br /&gt;
                              &#039;c&#039; = clamped&lt;br /&gt;
                              &#039;b&#039; = border&lt;br /&gt;
                              &#039;t%r,%g,%b&#039; = tint&lt;br /&gt;
&lt;br /&gt;
                 example: &amp;quot;:iac:/LuaUI/images/image.png&amp;quot;&lt;br /&gt;
                 example2: &amp;quot;:t1.0,0.5,0:/LuaUI/images/image.png&amp;quot;  (orange tint)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int xsize, int ysize,&lt;br /&gt;
  [ { &lt;br /&gt;
    [target     = number,] &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(like GL_TEXTURE_1D,GL_TEXTURE_2D,...)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [format     = number,]&lt;br /&gt;
    [min_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [mag_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [wrap_s     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_t     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_r     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [aniso      = number,]&lt;br /&gt;
    [border     = boolean,]&lt;br /&gt;
    [fbo        = boolean,] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [fboDepth   = boolean] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  } ]&lt;br /&gt;
  ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTexture&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTextureFBO&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TextureInfo&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; nil | {&lt;br /&gt;
      xsize = number,&lt;br /&gt;
      ysize = number,&lt;br /&gt;
      alpha = boolean, //not used yet&lt;br /&gt;
      type  = number,  //not used yet&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
   the format of the texture string is the same as in gl.Texture()&lt;br /&gt;
&amp;lt;/font&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number x | &lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum,&lt;br /&gt;
    number x |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexGen&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexGen&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CopyToTexture&#039;&#039;&#039;&lt;br /&gt;
  (string texture, int xoff, int yoff, int x, int y, int w, int h &lt;br /&gt;
  [,number target,number level])-&amp;gt;nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.RenderToTexture&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string fbotexture, lua_func ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GenerateMipmap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs glGenerateMipmapEXT!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Lighting&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ShadeModel&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#ShadeModel|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Light&#039;&#039;&#039;&lt;br /&gt;
  ( int light, &lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param1, number param2, number param3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Material&#039;&#039;&#039;&lt;br /&gt;
  ({&lt;br /&gt;
    ambient   = {number r, number g, number b[, number a]},&lt;br /&gt;
    diffuse   = {number r, number g, number b[, number a]},&lt;br /&gt;
    ambidiff  = {number r, number g, number b[, number a]},&lt;br /&gt;
    emission  = {number r, number g, number b[, number a]},&lt;br /&gt;
    specular  = {number r, number g, number b[, number a]},&lt;br /&gt;
    shininess = number specularExponent&lt;br /&gt;
  }) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Display Lists ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Display Lists save given vertex attributes in a static buffer, so the GPU can directly read them (without the CPU). Display Lists are a lot faster (10-60x) than standard drawing with glShape/glBeginEnd, so try to use them when ever you can. If you want to learn more about them, g00gle is your friend ;)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateList&#039;&#039;&#039;&lt;br /&gt;
  ( function [,arg1 [,arg2...]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CallList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Hardware relevant ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.HasExtension&#039;&#039;&#039;&lt;br /&gt;
  ( string extname ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetNumber&#039;&#039;&#039;&lt;br /&gt;
  ( number ext, int count ) -&amp;gt; number [, number, number, ... #count ]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetString&#039;&#039;&#039;&lt;br /&gt;
  ( number ext ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
== DrawGroundPrimitives ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundCircle&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius, number divs [, number slope ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundQuad&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Note: x1,z1,x2 &amp;amp; z2 are rounded, so don&#039;t use it for very small or moving objects&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number z1, number x2, number z2,&lt;br /&gt;
    [ boolean useNorm,&lt;br /&gt;
      [ number tu1, number tv1, number tu2, number tv2 |&lt;br /&gt;
        boolean useTextureCoord ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Extended ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ActiveTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexNames&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; { [1] = string texture, etc ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexCoords&#039;&#039;&#039;&lt;br /&gt;
  ( string tatexture ) -&amp;gt; number xstart, number ystart, number xend, number yend&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetShadowMapParams&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; number xmid, number ymid, number p17, number p18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetMatrixData&#039;&#039;&#039;&lt;br /&gt;
  ( GL.PROJECTION [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( GL.MODELVIEW  [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i] &lt;br /&gt;
  ( GL.TEXTURE    [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( &amp;quot;shadow&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camera&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;caminv&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camprj&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;billboard&amp;quot; )             -&amp;gt; nil | number, etc.. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSprite&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable, [boolean coord_replace, boolean coord_origin_upper] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointParameter&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number v1, number v2, number v3, &lt;br /&gt;
    [ number sizeMin, number sizeMax, number sizeFade ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SecondaryColor&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b } |&lt;br /&gt;
      number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FogCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number value ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ClipPlane&#039;&#039;&#039;&lt;br /&gt;
  ( int plane, &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;note: $plane can only be 1 or 2&amp;lt;/font&amp;gt;&lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number A, number B, number C, number D ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MatrixMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#MatrixMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadIdentity&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Ortho&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Frustum&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushPopMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushAttrib&#039;&#039;&#039;&lt;br /&gt;
  ( [ number [[Lua_ConstGL#glPushAttrib.28.29_bits|attrib]] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopAttrib&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Flush&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Finish&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Shaders (GLSL) ==&lt;br /&gt;
  [[Lua_GLSL_Api]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11152</id>
		<title>Lua CMDs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11152"/>
		<updated>2008-08-15T01:39:38Z</updated>

		<summary type="html">&lt;p&gt;JK: added local links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Options ==&lt;br /&gt;
&amp;lt;b id=CMD.OPT_ALT&amp;gt;CMD.OPT_ALT&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.OPT_CTRL&amp;gt;CMD.OPT_CTRL&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.OPT_SHIFT&amp;gt;CMD.OPT_SHIFT&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.OPT_RIGHT&amp;gt;CMD.OPT_RIGHT&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.OPT_INTERNAL&amp;gt;CMD.OPT_INTERNAL&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Waitcodes ==&lt;br /&gt;
&amp;lt;b id=CMD.WAITCODE_TIME&amp;gt;CMD.WAITCODE_TIME&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.WAITCODE_DEATH&amp;gt;CMD.WAITCODE_DEATH&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.WAITCODE_SQUAD&amp;gt;CMD.WAITCODE_SQUAD&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.WAITCODE_GATHER&amp;gt;CMD.WAITCODE_GATHER&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Insert/Remove Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;First, said &amp;quot;tags&amp;quot; are unique command identifiers, so each command that gets inserted into a unit&#039;s command &lt;br /&gt;
queue gets its unique &amp;quot;tag&amp;quot; number. (It is used to &#039;&#039;sync&#039;&#039; command queue operations, also it makes things much easier.)&amp;lt;br&amp;gt;&lt;br /&gt;
To receive those &amp;quot;tags&amp;quot; you can do the following:&lt;br /&gt;
   local cmdQueue = Spring.GetUnitCommands(unitID);&lt;br /&gt;
   if (#cmdQueue&amp;gt;0) then &lt;br /&gt;
      local cmdTag = cmdQueue[1].tag&lt;br /&gt;
      ..&lt;br /&gt;
   end&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b id=CMD.INSERT&amp;gt;CMD.INSERT&amp;lt;/b&amp;gt;&lt;br /&gt;
  options.ALT     -&amp;gt; treat param0 as a position instead of a tag &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0] = command tag or position (negative numbers to reference the back of the queue)&lt;br /&gt;
  params[1] = insertCmd id &lt;br /&gt;
  params[2] = insertCmd options (shift,alt,right click,etc.)&lt;br /&gt;
  params[3 ... N+2] = insertCmd params[0 ... N-1]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;example:&lt;br /&gt;
    Spring.GiveOrderToUnit(unitID,&lt;br /&gt;
      CMD.INSERT,&lt;br /&gt;
      {-1,CMD.ATTACK,&#039;&#039;CMD.OPT_SHIFT&#039;&#039;,&#039;&#039;unitID2&#039;&#039;},&lt;br /&gt;
      {&amp;quot;alt&amp;quot;}&lt;br /&gt;
    );&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note: If you didn&#039;t already notice, the command params and&lt;br /&gt;
        the command options are twisted in the array (compared to GiverOrder)!&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note2: The command options in the array/table is a number value!&lt;br /&gt;
         You have to use CMD.OPT_* in this case.&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;b id=CMD.REMOVE&amp;gt;CMD.REMOVE&amp;lt;/b&amp;gt;&lt;br /&gt;
  options.ALT     -&amp;gt; use the parameters as commandIDs &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0 ... N-1] = tags or commandIDs to remove&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMD[] table is bidirectional. That means: CMD[CMD.STOP] := &amp;quot;CMD_STOP&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b id=CMD.STOP&amp;gt;CMD.STOP&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.WAIT&amp;gt;CMD.WAIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.TIMEWAIT&amp;gt;CMD.TIMEWAIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.NUMBER|CMDTYPE.NUMBER]]&lt;br /&gt;
&amp;lt;b id=CMD.DEATHWAIT&amp;gt;CMD.DEATHWAIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_OR_RECTANGLE|CMDTYPE.ICON_UNIT_OR_RECTANGLE]]&lt;br /&gt;
&amp;lt;b id=CMD.SQUADWAIT&amp;gt;CMD.SQUADWAIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.NUMBER|CMDTYPE.NUMBER]]&lt;br /&gt;
&amp;lt;b id=CMD.GATHERWAIT&amp;gt;CMD.GATHERWAIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.MOVE&amp;gt;CMD.MOVE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MAP|CMDTYPE.ICON_MAP]]&lt;br /&gt;
&amp;lt;b id=CMD.PATROL&amp;gt;CMD.PATROL&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MAP|CMDTYPE.ICON_MAP]]&lt;br /&gt;
&amp;lt;b id=CMD.FIGHT&amp;gt;CMD.FIGHT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MAP|CMDTYPE.ICON_MAP]]&lt;br /&gt;
&amp;lt;b id=CMD.ATTACK&amp;gt;CMD.ATTACK&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_OR_MAP|CMDTYPE.ICON_UNIT_OR_MAP]]&lt;br /&gt;
&amp;lt;b id=CMD.AREA_ATTACK&amp;gt;CMD.AREA_ATTACK&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_AREA|CMDTYPE.ICON_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.GUARD&amp;gt;CMD.GUARD&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT|CMDTYPE.ICON_UNIT]]&lt;br /&gt;
&amp;lt;b id=CMD.AISELECT&amp;gt;CMD.AISELECT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.COMBO_BOX|CMDTYPE.COMBO_BOX]]&lt;br /&gt;
&amp;lt;b id=CMD.GROUPSELECT&amp;gt;CMD.GROUPSELECT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.GROUPADD&amp;gt;CMD.GROUPADD&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.GROUPCLEAR&amp;gt;CMD.GROUPCLEAR&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.REPAIR&amp;gt;CMD.REPAIR&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_OR_AREA|CMDTYPE.ICON_UNIT_OR_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.FIRE_STATE&amp;gt;CMD.FIRE_STATE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.MOVE_STATE&amp;gt;CMD.MOVE_STATE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.SELFD&amp;gt;CMD.SELFD&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.LOAD_UNITS&amp;gt;CMD.LOAD_UNITS&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_OR_AREA|CMDTYPE.ICON_UNIT_OR_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.LOAD_ONTO&amp;gt;CMD.LOAD_ONTO&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT|CMDTYPE.ICON_UNIT]]&lt;br /&gt;
&amp;lt;b id=CMD.UNLOAD_UNITS&amp;gt;CMD.UNLOAD_UNITS&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_OR_AREA|CMDTYPE.ICON_UNIT_OR_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.UNLOAD_UNIT&amp;gt;CMD.UNLOAD_UNIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MAP|CMDTYPE.ICON_MAP]]&lt;br /&gt;
&amp;lt;b id=CMD.ONOFF&amp;gt;CMD.ONOFF&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.RECLAIM&amp;gt;CMD.RECLAIM&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_FEATURE_OR_AREA|CMDTYPE.ICON_UNIT_FEATURE_OR_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.CLOAK&amp;gt;CMD.CLOAK&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.STOCKPILE&amp;gt;CMD.STOCKPILE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON|CMDTYPE.ICON]]&lt;br /&gt;
&amp;lt;b id=CMD.DGUN&amp;gt;CMD.DGUN&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MAP|CMDTYPE.ICON_MAP]]&lt;br /&gt;
&amp;lt;b id=CMD.RESTORE&amp;gt;CMD.RESTORE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_AREA|CMDTYPE.ICON_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.REPEAT&amp;gt;CMD.REPEAT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.TRAJECTORY&amp;gt;CMD.TRAJECTORY&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.RESURRECT&amp;gt;CMD.RESURRECT&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_FEATURE_OR_AREA|CMDTYPE.ICON_UNIT_FEATURE_OR_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.CAPTURE&amp;gt;CMD.CAPTURE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_OR_AREA|CMDTYPE.ICON_UNIT_OR_AREA]]&lt;br /&gt;
&amp;lt;b id=CMD.AUTOREPAIRLEVEL&amp;gt;CMD.AUTOREPAIRLEVEL&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.LOOPBACKATTACK&amp;gt;CMD.LOOPBACKATTACK&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.IDLEMODE&amp;gt;CMD.IDLEMODE&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_MODE|CMDTYPE.ICON_MODE]]&lt;br /&gt;
&amp;lt;b id=CMD.SET_WANTED_MAX_SPEED&amp;gt;CMD.SET_WANTED_MAX_SPEED&amp;lt;/b&amp;gt;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.NUMBER|CMDTYPE.NUMBER]]&lt;br /&gt;
&amp;lt;b id=CMD.SETBASE&amp;gt;CMD.SETBASE&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b id=CMD.INTERNAL&amp;gt;CMD.INTERNAL&amp;lt;/b&amp;gt;&lt;br /&gt;
  used in different ways&lt;br /&gt;
&lt;br /&gt;
== CommandTypes ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMDTYPE[] table is bidirectional. That means: CMDTYPE[CMDTYPE.ICON] := &amp;quot;CMDTYPE_ICON&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON&amp;gt;CMDTYPE.ICON&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 0 parameters in return&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_MODE&amp;gt;CMDTYPE.ICON_MODE&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (number selected mode)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_MAP&amp;gt;CMDTYPE.ICON_MAP&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_AREA&amp;gt;CMDTYPE.ICON_AREA&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 4 parameters in return (mappos+radius)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_UNIT&amp;gt;CMDTYPE.ICON_UNIT&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameters in return (unitid)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_UNIT_OR_MAP&amp;gt;CMDTYPE.ICON_UNIT_OR_MAP&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameters in return (unitid) or 3 parameters in return (mappos)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_FRONT&amp;gt;CMDTYPE.ICON_FRONT&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 3 or 6 parameters in return (middle and right side of front if a front was defined)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.COMBO_BOX&amp;gt;CMDTYPE.COMBO_BOX&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (number selected option)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_UNIT_OR_AREA&amp;gt;CMDTYPE.ICON_UNIT_OR_AREA&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (unitid) or 4 parameters in return (mappos+radius)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&amp;gt;CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (unitid or [[Lua_ConstGame#Engine|Game.maxUnits]]+featureid)&lt;br /&gt;
      or 4 parameters in return (mappos+radius)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_BUILDING&amp;gt;CMDTYPE.ICON_BUILDING&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_UNIT_OR_RECTANGLE&amp;gt;CMDTYPE.ICON_UNIT_OR_RECTANGLE&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (unitid)&lt;br /&gt;
      or 3 parameters in return (mappos)&lt;br /&gt;
      or 6 parameters in return (startpos+endpos)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.NUMBER&amp;gt;CMDTYPE.NUMBER&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (number)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b id=CMDTYPE.CUSTOM&amp;gt;CMDTYPE.CUSTOM&amp;lt;/b&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&amp;lt;b id=CMDTYPE.NEXT&amp;gt;CMDTYPE.NEXT&amp;lt;/b&amp;gt; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;next command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&amp;lt;b id=CMDTYPE.PREV&amp;gt;CMDTYPE.PREV&amp;lt;/b&amp;gt; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;previous command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11151</id>
		<title>Lua CMDs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11151"/>
		<updated>2008-08-15T01:21:58Z</updated>

		<summary type="html">&lt;p&gt;JK: test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Options ==&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_ALT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_CTRL&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_SHIFT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_RIGHT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_INTERNAL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Waitcodes ==&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_TIME&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_DEATH&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_SQUAD&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_GATHER&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Insert/Remove Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;First, said &amp;quot;tags&amp;quot; are unique command identifiers, so each command that gets inserted into a unit&#039;s command &lt;br /&gt;
queue gets its unique &amp;quot;tag&amp;quot; number. (It is used to &#039;&#039;sync&#039;&#039; command queue operations, also it makes things much easier.)&amp;lt;br&amp;gt;&lt;br /&gt;
To receive those &amp;quot;tags&amp;quot; you can do the following:&lt;br /&gt;
   local cmdQueue = Spring.GetUnitCommands(unitID);&lt;br /&gt;
   if (#cmdQueue&amp;gt;0) then &lt;br /&gt;
      local cmdTag = cmdQueue[1].tag&lt;br /&gt;
      ..&lt;br /&gt;
   end&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.INSERT&#039;&#039;&#039;&lt;br /&gt;
  options.ALT     -&amp;gt; treat param0 as a position instead of a tag &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0] = command tag or position (negative numbers to reference the back of the queue)&lt;br /&gt;
  params[1] = insertCmd id &lt;br /&gt;
  params[2] = insertCmd options (shift,alt,right click,etc.)&lt;br /&gt;
  params[3 ... N+2] = insertCmd params[0 ... N-1]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;example:&lt;br /&gt;
    Spring.GiveOrderToUnit(unitID,&lt;br /&gt;
      CMD.INSERT,&lt;br /&gt;
      {-1,CMD.ATTACK,&#039;&#039;CMD.OPT_SHIFT&#039;&#039;,&#039;&#039;unitID2&#039;&#039;},&lt;br /&gt;
      {&amp;quot;alt&amp;quot;}&lt;br /&gt;
    );&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note: If you didn&#039;t already notice, the command params and&lt;br /&gt;
        the command options are twisted in the array (compared to GiverOrder)!&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note2: The command options in the array/table is a number value!&lt;br /&gt;
         You have to use CMD.OPT_* in this case.&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.REMOVE&#039;&#039;&#039;&lt;br /&gt;
  options.ALT     -&amp;gt; use the parameters as commandIDs &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0 ... N-1] = tags or commandIDs to remove&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMD[] table is bidirectional. That means: CMD[CMD.STOP] := &amp;quot;CMD_STOP&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.STOP&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.WAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.TIMEWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.DEATHWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_RECTANGLE&lt;br /&gt;
&#039;&#039;&#039;CMD.SQUADWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.GATHERWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.MOVE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.PATROL&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.FIGHT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.ATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.AREA_ATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.GUARD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT&lt;br /&gt;
&#039;&#039;&#039;CMD.AISELECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.COMBO_BOX&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPSELECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPADD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPCLEAR&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.REPAIR&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.FIRE_STATE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.MOVE_STATE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.SELFD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.LOAD_UNITS&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.LOAD_ONTO&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT&lt;br /&gt;
&#039;&#039;&#039;CMD.UNLOAD_UNITS&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.UNLOAD_UNIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.ONOFF&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.RECLAIM&#039;&#039;&#039;&lt;br /&gt;
  type [[Lua_CMDs#CMDTYPE.ICON_UNIT_FEATURE_OR_AREA|CMDTYPE.ICON_UNIT_FEATURE_OR_AREA]]&lt;br /&gt;
&#039;&#039;&#039;CMD.CLOAK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.STOCKPILE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.DGUN&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.RESTORE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.REPEAT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.TRAJECTORY&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.RESURRECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.CAPTURE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.AUTOREPAIRLEVEL&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.LOOPBACKATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.IDLEMODE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.SET_WANTED_MAX_SPEED&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.SETBASE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.INTERNAL&#039;&#039;&#039;&lt;br /&gt;
  used in different ways&lt;br /&gt;
&lt;br /&gt;
== CommandTypes ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMDTYPE[] table is bidirectional. That means: CMDTYPE[CMDTYPE.ICON] := &amp;quot;CMDTYPE_ICON&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON&#039;&#039;&#039;&lt;br /&gt;
  expect 0 parameters in return&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_MODE&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number selected mode)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_MAP&#039;&#039;&#039;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameters in return (unitid)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_MAP&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameters in return (unitid) or 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_FRONT&#039;&#039;&#039;&lt;br /&gt;
  expect 3 or 6 parameters in return (middle and right side of front if a front was defined)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.COMBO_BOX&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number selected option)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid) or 4 parameters in return (mappos+radius)&lt;br /&gt;
&amp;lt;b id=CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&amp;gt;CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&amp;lt;/b&amp;gt;&lt;br /&gt;
  expect 1 parameter in return (unitid or [[Lua_ConstGame#Engine|Game.maxUnits]]+featureid)&lt;br /&gt;
      or 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_BUILDING&#039;&#039;&#039;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_RECTANGLE&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid)&lt;br /&gt;
      or 3 parameters in return (mappos)&lt;br /&gt;
      or 6 parameters in return (startpos+endpos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.NUMBER&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.CUSTOM&#039;&#039;&#039;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.NEXT&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;next command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.PREV&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;previous command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11150</id>
		<title>Lua CMDs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11150"/>
		<updated>2008-08-15T01:07:01Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Options ==&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_ALT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_CTRL&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_SHIFT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_RIGHT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_INTERNAL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Waitcodes ==&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_TIME&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_DEATH&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_SQUAD&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_GATHER&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Insert/Remove Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;First, said &amp;quot;tags&amp;quot; are unique command identifiers, so each command that gets inserted into a unit&#039;s command &lt;br /&gt;
queue gets its unique &amp;quot;tag&amp;quot; number. (It is used to &#039;&#039;sync&#039;&#039; command queue operations, also it makes things much easier.)&amp;lt;br&amp;gt;&lt;br /&gt;
To receive those &amp;quot;tags&amp;quot; you can do the following:&lt;br /&gt;
   local cmdQueue = Spring.GetUnitCommands(unitID);&lt;br /&gt;
   if (#cmdQueue&amp;gt;0) then &lt;br /&gt;
      local cmdTag = cmdQueue[1].tag&lt;br /&gt;
      ..&lt;br /&gt;
   end&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.INSERT&#039;&#039;&#039;&lt;br /&gt;
  options.ALT     -&amp;gt; treat param0 as a position instead of a tag &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0] = command tag or position (negative numbers to reference the back of the queue)&lt;br /&gt;
  params[1] = insertCmd id &lt;br /&gt;
  params[2] = insertCmd options (shift,alt,right click,etc.)&lt;br /&gt;
  params[3 ... N+2] = insertCmd params[0 ... N-1]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;example:&lt;br /&gt;
    Spring.GiveOrderToUnit(unitID,&lt;br /&gt;
      CMD.INSERT,&lt;br /&gt;
      {-1,CMD.ATTACK,&#039;&#039;CMD.OPT_SHIFT&#039;&#039;,&#039;&#039;unitID2&#039;&#039;},&lt;br /&gt;
      {&amp;quot;alt&amp;quot;}&lt;br /&gt;
    );&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note: If you didn&#039;t already notice, the command params and&lt;br /&gt;
        the command options are twisted in the array (compared to GiverOrder)!&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note2: The command options in the array/table is a number value!&lt;br /&gt;
         You have to use CMD.OPT_* in this case.&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.REMOVE&#039;&#039;&#039;&lt;br /&gt;
  options.ALT     -&amp;gt; use the parameters as commandIDs &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0 ... N-1] = tags or commandIDs to remove&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMD[] table is bidirectional. That means: CMD[CMD.STOP] := &amp;quot;CMD_STOP&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.STOP&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.WAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.TIMEWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.DEATHWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_RECTANGLE&lt;br /&gt;
&#039;&#039;&#039;CMD.SQUADWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.GATHERWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.MOVE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.PATROL&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.FIGHT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.ATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.AREA_ATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.GUARD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT&lt;br /&gt;
&#039;&#039;&#039;CMD.AISELECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.COMBO_BOX&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPSELECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPADD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPCLEAR&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.REPAIR&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.FIRE_STATE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.MOVE_STATE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.SELFD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.LOAD_UNITS&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.LOAD_ONTO&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT&lt;br /&gt;
&#039;&#039;&#039;CMD.UNLOAD_UNITS&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.UNLOAD_UNIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.ONOFF&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.RECLAIM&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.CLOAK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.STOCKPILE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.DGUN&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.RESTORE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.REPEAT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.TRAJECTORY&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.RESURRECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.CAPTURE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.AUTOREPAIRLEVEL&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.LOOPBACKATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.IDLEMODE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.SET_WANTED_MAX_SPEED&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.SETBASE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.INTERNAL&#039;&#039;&#039;&lt;br /&gt;
  used in different ways&lt;br /&gt;
&lt;br /&gt;
== CommandTypes ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMDTYPE[] table is bidirectional. That means: CMDTYPE[CMDTYPE.ICON] := &amp;quot;CMDTYPE_ICON&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON&#039;&#039;&#039;&lt;br /&gt;
  expect 0 parameters in return&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_MODE&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number selected mode)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_MAP&#039;&#039;&#039;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameters in return (unitid)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_MAP&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameters in return (unitid) or 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_FRONT&#039;&#039;&#039;&lt;br /&gt;
  expect 3 or 6 parameters in return (middle and right side of front if a front was defined)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.COMBO_BOX&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number selected option)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid) or 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid or [[Lua_ConstGame#Engine|Game.maxUnits]]+featureid)&lt;br /&gt;
      or 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_BUILDING&#039;&#039;&#039;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_RECTANGLE&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid)&lt;br /&gt;
      or 3 parameters in return (mappos)&lt;br /&gt;
      or 6 parameters in return (startpos+endpos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.NUMBER&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.CUSTOM&#039;&#039;&#039;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.NEXT&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;next command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.PREV&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;previous command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11864</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11864"/>
		<updated>2008-08-15T00:56:11Z</updated>

		<summary type="html">&lt;p&gt;JK: wrong place&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Game ==&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number index | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; nil | number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID, boolean onlyActive] ) -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,  &amp;lt;font color=darkgreen&amp;gt;(in synced code this is &amp;quot;SYNCED_NONAME&amp;quot;!)&amp;lt;/font&amp;gt;&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamNum,&lt;br /&gt;
          number  leader,&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number startTime, number endTime ) -&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage, boolean lineageRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean dead&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponNum] ) -&amp;gt; nil | &lt;br /&gt;
  boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number allyTeamID ] ) -&amp;gt; nil |&lt;br /&gt;
    { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of&lt;br /&gt;
   ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which &lt;br /&gt;
   is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece).&lt;br /&gt;
   So if you get via Cob2Lua a pieceID you have to translate it with this function.&lt;br /&gt;
   Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition&lt;br /&gt;
   in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureList&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;// NOTE: this is not really required, now all FeatureDefs are pre-loaded&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y |&lt;br /&gt;
    number x1, number y1, number x2, number y2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean visible, boolean inLos, boolean inAirLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12203</id>
		<title>Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12203"/>
		<updated>2008-07-28T07:17:53Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Pipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pipes ==&lt;br /&gt;
&#039;&#039;&#039;Spring.Echo&#039;&#039;&#039;&lt;br /&gt;
  ( arg1 [, arg2 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Usefull for debugging.&amp;lt;br&amp;gt; Prints values in the spring chat console (hint: the default print() writes to STDOUT).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; [, number volume&lt;br /&gt;
    [, number x, number y, number z ] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Plays WAV sounds. &amp;lt;i&amp;gt;By default&amp;lt;/i&amp;gt;, the soundfile is expected to be in the &amp;quot;Sounds&amp;quot; folder.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;oggfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number x, number y, number z ]] ) -&amp;gt; nil | boolean true&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Allow you to play an Ogg Vorbis (.OGG) compressed sound file.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; you may only play _ONE_ stream at a time. If another stream is playing and&amp;lt;br&amp;gt; you try to start a second one the call will fail, and silence will result.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note2:&amp;lt;/b&amp;gt; the file has to be on the local filesystem, so you can&#039;t playback ogg&#039;s&amp;lt;br&amp;gt; in your mod with this command, to do so you have to extract it before and save&amp;lt;br&amp;gt; it on the local filesystem.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.StopSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Terminates any SoundStream is running.&amp;lt;br&amp;gt; Since only one may play at any time (see above), this can be used as an interrupt.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendMessage ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessage&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToPlayer&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToSpectators&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Selection ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( { [unitID] = anything, ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( { [1] = unitID1 , [2] = unitID2 , ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoDraw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noDraw ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoSelect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoMinimap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noMinimap ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSky&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSky ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawWater&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawWater ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawGround&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawGround ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DrawUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
  ( { [1] = unitID, ... } [, false ] ) -&amp;gt; nil&lt;br /&gt;
  ( { [unitID] = anything, ... }, true  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AssignMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;cmdName&amp;quot;, string &amp;quot;iconFileName&amp;quot;&lt;br /&gt;
    [, boolean overwrite [, boolean hotSpotTopLeft] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ReplaceMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;oldFileName&amp;quot;, string &amp;quot;newFileName&amp;quot; [, boolean hotSpotTopLeft] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCustomCommandDrawData&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;register your custom cmd so it gets visible in the unit&#039;s cmd queue&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    number cmdIconID | string iconname | nil,&lt;br /&gt;
    { number r, number g, number b, number a } [, boolean showArea ] ) -&amp;gt; nil | true&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( table camState, number camTime) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;camState = {&lt;br /&gt;
  mode = cameraID,&lt;br /&gt;
     1 = cameraID,&lt;br /&gt;
     2 = posX,&lt;br /&gt;
     3 = posY,&lt;br /&gt;
     4 = posZ,&lt;br /&gt;
     5 = dirX,&lt;br /&gt;
     6 = dirY,&lt;br /&gt;
     7 = dirZ,&lt;br /&gt;
     ... and more (depending on the camera ...&lt;br /&gt;
}&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [,number transTime] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== World Primitives ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;outdated! use opengl api instead!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldText&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot;, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    number team, number facing) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12202</id>
		<title>Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12202"/>
		<updated>2008-07-28T07:16:23Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Pipes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pipes ==&lt;br /&gt;
&#039;&#039;&#039;Spring.Echo&#039;&#039;&#039;&lt;br /&gt;
  ( arg1 [, arg2 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Usefull for debugging.&amp;lt;br&amp;gt; Prints values in the spring chat console (hint: the default print() writes to STDIN).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; [, number volume&lt;br /&gt;
    [, number x, number y, number z ] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Plays WAV sounds. &amp;lt;i&amp;gt;By default&amp;lt;/i&amp;gt;, the soundfile is expected to be in the &amp;quot;Sounds&amp;quot; folder.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;oggfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number x, number y, number z ]] ) -&amp;gt; nil | boolean true&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Allow you to play an Ogg Vorbis (.OGG) compressed sound file.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; you may only play _ONE_ stream at a time. If another stream is playing and&amp;lt;br&amp;gt; you try to start a second one the call will fail, and silence will result.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note2:&amp;lt;/b&amp;gt; the file has to be on the local filesystem, so you can&#039;t playback ogg&#039;s&amp;lt;br&amp;gt; in your mod with this command, to do so you have to extract it before and save&amp;lt;br&amp;gt; it on the local filesystem.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.StopSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Terminates any SoundStream is running.&amp;lt;br&amp;gt; Since only one may play at any time (see above), this can be used as an interrupt.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendMessage ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessage&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToPlayer&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToSpectators&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Selection ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( { [unitID] = anything, ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( { [1] = unitID1 , [2] = unitID2 , ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoDraw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noDraw ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoSelect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoMinimap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noMinimap ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSky&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSky ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawWater&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawWater ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawGround&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawGround ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DrawUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
  ( { [1] = unitID, ... } [, false ] ) -&amp;gt; nil&lt;br /&gt;
  ( { [unitID] = anything, ... }, true  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AssignMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;cmdName&amp;quot;, string &amp;quot;iconFileName&amp;quot;&lt;br /&gt;
    [, boolean overwrite [, boolean hotSpotTopLeft] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ReplaceMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;oldFileName&amp;quot;, string &amp;quot;newFileName&amp;quot; [, boolean hotSpotTopLeft] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCustomCommandDrawData&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;register your custom cmd so it gets visible in the unit&#039;s cmd queue&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    number cmdIconID | string iconname | nil,&lt;br /&gt;
    { number r, number g, number b, number a } [, boolean showArea ] ) -&amp;gt; nil | true&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( table camState, number camTime) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;camState = {&lt;br /&gt;
  mode = cameraID,&lt;br /&gt;
     1 = cameraID,&lt;br /&gt;
     2 = posX,&lt;br /&gt;
     3 = posY,&lt;br /&gt;
     4 = posZ,&lt;br /&gt;
     5 = dirX,&lt;br /&gt;
     6 = dirY,&lt;br /&gt;
     7 = dirZ,&lt;br /&gt;
     ... and more (depending on the camera ...&lt;br /&gt;
}&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [,number transTime] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== World Primitives ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;outdated! use opengl api instead!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldText&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot;, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    number team, number facing) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19567</id>
		<title>Weapon Variables</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19567"/>
		<updated>2008-07-25T22:48:05Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Descriptions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
=WeaponType=&lt;br /&gt;
This is a weapon tag! It allows you to bypass the engine&#039;s auto detection and force the weapontype.&amp;lt;br&amp;gt; (example weaponType=&amp;quot;StarburstLauncher&amp;quot;)&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;WeaponType&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AircraftBomb (dropped=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Drops a ballistic projectile (aka Plasma) at the same movement vector as the unit itself. It&#039;s only meant for planes. A plane that has a CBombDropper as its weapon1 is a bomber. The CBombDropper automatically calculates its burst and burstrate tags from its reload time and uses 5 as its reload time instead. It will fire if the first bomb would drop within a circle roughly unitspeed*burst*burstrate so the longer the burst and the faster the unit the larger the circle in which it will drop instead of not firing and hoping the next attack run will pass that circle.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;StarburstLauncher(vlaunch=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that rises vertically (starts with no velocity) for &amp;lt;weapontimer&amp;gt; seconds, then turns at a fixed rate towards its target. The projectile&#039;s lifetime depends on its range divided by its max speed (ignores acceleration) and the weapontimer somehow so the weapon can fall short depending on how these values are set. This is the only weapon that can properly perform intercepts and be interceptable. Emits a smoketrail.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BeamLaser (beamlaser=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Should be well known, this thing spawns a beam and does a portion of its total damage each frame. It can&#039;t have a burst or burstrate, it can&#039;t have collidefriendly=0, it can&#039;t be emit-sfxed if it has a beamtime longer than one frame and its damage decreases over range if the minIntensity=1 tag isn&#039;t used. The largebeamlaser tag allows changing the visual effect of the laser, doesn&#039;t affect the behaviour of the weapon itself in any way though. Beamlasers can be really annoying... BTW, their beam doesn&#039;t collide with water so if they&#039;re set to waterweapon=1 they can shoot normally even when underwater (won&#039;t shoot at underwater targets though).&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shield (isShield=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The shield. Really not much to say about this, the tags are all documented in the changelog.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TorpedoLauncher (waterweapon=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that will behave ballistically out of water and like a missile in water. Since waterweapon=1 is usually set for them they can fire underwater and they will target underwater units. The torpedo is the only projectile that doesn&#039;t explode on the water surface. An aircraft carrying a TorpedoLauncher is a special case, the thing turns into a bomb dropepr that will spawn a torpedo projectile, probably to get the whole bomber flight behaviour. Note that the waterweapon tag is also used to make a weapon fire underwater, independent of its type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DGun (weaponname contains the word &amp;quot;disintegrator&amp;quot;)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;This shoots a fireball that travels in a straight line. The fireball has no range limitation by itself so if it misses or is fired in FPS mode it will travel across the whole map and further. DGuns don&#039;t properly check their line of fire, if terrain is in the way they fire anyway. These things are meant to be used with noexplode=1 but of course you CAN use them without that, too. If ballistic=1 is set the fireball will be affected by gravity, the weapon won&#039;t compensate for it though so it will hit the ground before reaching the target. Might be useful for a Scorched Earth mod or something since you&#039;d have to aim it manually to hit anything.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LightingCannon (sic) (lineofsight=1 and rendertype=7)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon like the Beamlaser except with a lightning graphic and even more annoying. It won&#039;t damage shields and it has a hardcoded inaccuracy (comparable to targetMoveError, the code comment is &amp;quot;should make it weaker against air&amp;quot;...). Shares some of the weirdnesses with the beamlaser, e.g. being able to penetrate water.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LaserCannon (lineofsight=1 and either beamweapon=1 or weaponname contains &amp;quot;laser&amp;quot; (marked as &amp;quot;workaround for SWTA))&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The OTA-style laser. Probably one of the least annoying weapons in the engine. Its length is defined by the duration tag (together with the speed), BTW.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MissileLauncher (lineofsight=1 and smoketrail=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shoots a smoke-emitting projectile. It can use guidance, acceleration, etc. The projectile&#039;s lifetime depends on range/maxspeed so a slowly accelerating missile will fall short. It can also use trajectoryheight to have the shot arc but that has trouble with aiming at targets higher or lower than the shooter (see bug report, this REALLY could use some fixing). Pretty versatile weapon overall, if the laser rendering code was ported into this we could pretty much axe the LaserCannon completely.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EmgCannon (lineofsight=1 and rendertype=4 and color=2)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Few know about this, it&#039;s a line of sight (i.e. not ballistic) weapon that can use billboard rendering (looks like a sprite). No idea what drawbacks this has, noone ever uses it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Flame (lineofsight=1 and rendertype=5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The flamethrower. A really annoying weapon. AFAIK it won&#039;t even aim ahead of moving targets. Can&#039;t say much else about it since I haven&#039;t tried using it much but overall I&#039;d avoid the weapontype and fake the effect somehow, it&#039;s not pretty when fast and won&#039;t hit jack when slow.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Cannon (anything that didn&#039;t trigger another weapon)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Aka plasma. Shoots a ballistic projectile. Unlike the DGun it aims properly. Can&#039;t be emit-sfxed properly, maybe a ballistic DGun can fill that role.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Melee (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;When it fires it simply damages the target, no ifs or buts. It doesn&#039;t use a projectile and doesn&#039;t care about the line of fire. It won&#039;t even report a proper heading and pitch to AimWeapon so if you plan on using it in 75b2 you have to slave it to another weapon to handle the aiming. May be useful to be the damage dealer for a cosmetic weapon, i.e. you slave the Melee to a weapon that does no damage but looks pretty and the Melee does the damage. Kinda like the weapons in Warcraft and so.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Rifle (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon but an apparently unmaintained one. It has a hardcoded firing and explosion effect. I wouldn&#039;t use it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNoWeapon (weaponname is NOWEAPON, not reachable by any tag)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Apparently a placeholder used when a weapon isn&#039;t present. It&#039;s not really a weapondef but generated when the unit demands a NOWEAPON.&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Accuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How accurate a weapon is.  A larger number is less accurate.  If this tag is missing entirely, it has perfect accuracy unless its target moves unexpectedly.  Accuracy is relative to the distance to the target; for instance, if the target is very close, even a very high accuracy value will probably still hit.  If a target is very far away, even a very low accuracy value will likely cause the weapon to miss.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;accuracy=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlwaysVisible&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ignore LOS handling and always draw the weapon effect? Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;alwaysVisible=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AreaOfEffect&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How large the weapon&#039;s impact explosion is.  This affects how powerful the weapon&#039;s default impulse strength will be.  Currently, BeamLasers with an AreaOfEffect of 16 or above will deform the ground at their point of impact regardless of whether it has been told not to.  Can be any numeric value, but should generally be at least 8, regardless of the type of weapon.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;areaofeffect=192;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFeature&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This makes the weapon avoid features while targetting (the shoot will still collide with features). Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFeature=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 units will not try to avoid friendly units in their line of fire. Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ballistic&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 for the weapon to be subjected to gravity, travelling in an arc through the air, such as cannons. Ballistic is mutually exclusive to LineOfSight and Dropped.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ballistic=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the speed of the fadeout (each frame the beam&#039;s intensity is multiplied with that value). Can be between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamDecay=0.9;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a beam laser or not.  Beam lasers instantly hit their targets.  Rendertype must be 0.  Mutually exclusive to BeamWeapon.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamlaser=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How long to fire the laser before waiting for ReloadTime to start.  Can be any numeric value.  Defaults to 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamtime=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTTL&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the time (in frames) the beam will stay after being fired. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamTtl=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a regular laser or not.  BeamWeapons (lasers) do not instantly hit their targets, and are affected by the weaponvelocity tag.  Mutually exclusive to BeamLaser.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceRebound&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of vertical velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bouncerebound=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceSlip&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of horizontal velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bounceslip=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurnBlow&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon blows up when it reaches range the target was at when the weapon fired. Only works on plasma (rendertype=4) weapons and possibly missiles?  Can be 1 or 0.  A common usage is on flak guns.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burnblow=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Burst&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How many shots are in a burst.  Must be accompanied by burstrate.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burst=3;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurstRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast the Burst fires.  If set much below 0.1, it stops having any discernable effect.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burstrate=0.1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CameraShake&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much the camera shakes on impact. (needs the cameraShake widget to work). Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cameraShake=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CanAttackGround&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;canAttackGround=0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag is the tag that emits a custom explosion every frame for a projectile. Can be used on any weapon to imitate dynamic lighting, smoke, fire, ball lightning, magic and many other things. Enter the name of your effect to make it emit once per frame.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cegtag=MISSILE_SMOKE_FX;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes. While this still works for lasers, using rgbcolor=X X X; is a much, much better route. Plus, the RGBColor tag will override any color=x; tags in the tdf. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ColorMap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by flamethrower. Must be a CColorMap type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;colorMap=1 0 0 1 &amp;amp;nbsp;0 1 0 1;&amp;lt;br&amp;gt;(red to green fade)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollideFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 this weapon will not hit friendly units. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollisionSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the physical size of projectiles, percentage of size for flamethrower and absolute value emg, plasma and laser. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionSize=30;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CommandFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;When ordered to attack ground this weapon will only fire once, rather than continuously. This does not work when ordered to attack units (It will continue to fire until the target is dead). If the unit has CanDgun=1 in its FBI, commandfire will identify that weapon with the dgun button. The weapon wont fire unless the dgun button is pressed. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;commandfire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CoreThickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of the core of a laser (the part which use rgbcolor2).  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coreThickness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Coverage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The range for anti-weapon weapons, like antinukes.  This will be shown on the minimap as a guide.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coverage=1280;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Adds a constant factor to the terraform the explosion does. Can be any numeric value. (default 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterMult&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Multiplies with the terraform the explosion does. Can be any numeric value. (default :=impulsFactor)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CylinderTargetting&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If greater than 0, range will be checked in a cylinder instead of a sphere:&lt;br /&gt;
half height=unitradius*cylinderTargetting&lt;br /&gt;
Defaults to 1 for Melee type weapons, 0 otherwise. In 0.76b1, does not work with BeamLaser weapons.([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cylinderTargetting=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missles, unlike wobble it doesn&#039;t rotate the missile and it prevents the missile from going too far off course so a dancing swarm will remain coherent. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dance=97;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dropped&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Sets the weapon to be dropped, like from a bomber.  Must be RenderType=6 and needs the Model tag to be specified.  Mutually exclusive to Ballistic and LineOfSight.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dropped=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Duration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For how many seconds a beam weapon will be fired before waiting for reload time.  Also controls the length of the beam in BeamWeapon projectiles.  Can be any numeric value.  Used for rendertype 0 and 7 weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;duration=.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageExp&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Exponent of the range damage formula, 0 (the default) disables dynamic damage. 1 means linear scaling. Only used by BeamLasers and LightingCannons. Can be any numeric value. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=263438#p263438 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageExp=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageInverted&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Inverts the damage curve (more damage at far range). Only used by BeamLasers and LightingCannons. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageInverted=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageMin&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum dynamic range damage value. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageMin=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set it will use this value in the dynamic range damage formula instead of the range value from the weapon in the calculation. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EdgeEffectiveness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Determines what percent of a weapon&#039;s maximum damage value will be applied to units as they are closer to the outer edge of the weapon&#039;s AreaOfEffect.  Must have a decimal value between 0 and 1.  Default in OTA was 0, probably the same in Spring. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=251180#p251180 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;edgeEffectiveness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EnergyPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Energy used per shot.  If the specified amount of energy is not available, the weapon will not be able to shoot.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;energypershot=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExplosionSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Explosion animation speed/time. (only used by BeamLaser and LightingCannon?) default:&lt;br /&gt;
gd=max(30, DefaultDamage/20);&amp;lt;br&amp;gt;&lt;br /&gt;
expSpeed=(8+(gd*2.5))/(9+(sqrt(gd)*.7))/2;&amp;lt;br&amp;gt;&lt;br /&gt;
Can be any numeric value.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;explosionSpeed=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rate at which the beamweapon fades out after it goes past its maximum range. 0 is never fade out, 1 is finish fading out exactly at max range, the default 0.5 is the previous behaviour.&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireStarter&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How likely the weapon will set trees on fire.  High values make trees likey to be set on fire, low values make trees likely to just explode or tip over.  Can be any numeric value between 0 and 100.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireStarter=75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireSubmersed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the weapon can fire underwater, if not then not. Use it for weapons that cannot fire underwater but can hit underwater targets. Works even for torpedoes. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireSubmersed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FixedLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missiles, starburst missiles and torpedoes, this makes the projectile spawn with the orientation of the shooting piece instead of their normal orientation. The weapon will not properly check if allies are in the way so make sure you align the launchers in a way that won&#039;t hammer right into your own forces and perhaps use collideFriendly=0. FixedLauncher conflicts with trajectoryHeight and IMO combining them is pointless anyway so don&#039;t use both on a weapon. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fixedLauncher=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameGFXTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Makes the flamethrower projectile stay alive as a graphical effect (doesnt do any damage) after it has reached maxrange. It is defined in percent, so 1.2 makes it remain 20% beyond maxrange. Can be any numeric value. &lt;br /&gt;
	&amp;lt;TD&amp;gt;flamegfxtime=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlightTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;flightTime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;GroundBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the ground (on land or the ocean floor). Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;groundbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Guidance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Specifies whether or not the weapon is capable of correcting its trajectory mid-flight. Will not track a moving target. Works only on missile and torpedo weapons.  Can be set to 1 or 0.  See TurnRate for information on specifying how well a weapon can track a target.  Requires rendertype=1, lineofsight=1, and selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;guidance=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HardStop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For LaserCannon, defined if the laser effect hard stops or fade out. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;hardStop=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightBoostFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Gives control of cannon height range boost (more than 1 means increased range, 0 means the cannon has fixed range regardless of height difference to target. default is a magic value calculated on weapon init, based on range tag and theoretical max range.). Can be any numeric value, including negative ones (&amp;lt;0 := automatically calculated).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightBoostFactor=-1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightMod&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Changes the sphere weapon range into an ellipsis. If it is larger 1.0 the weapon can&#039;t shoot as height as far, i.e. 0.5 means it can shoot twice as height as far ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image]). Note that this may not work well with beam weapons, use minIntensity (0..1) tag to fix that.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightMod=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A constant factor added on the weapon&#039;s impulsefactor.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulseBoost=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The multiplier on the weapon&#039;s default impulsefactor, which is determined based on a weapon&#039;s default damage and AreaOfEffect.  The impulse of a weapon is how strong of a kinetic force will be applied to its target or anything near the point of impact.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulsefactor=2.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Intensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Alpha (brighness and washout effect) of the weapon.  Can be used on any rendertype 0, 3, or 4 weapon.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;intensity=1.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of shields that can intercept this weapon. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a shield with that digit set to one will intercept this weapon, for instance, the example will result in the weapons being blocked by shields with types 1 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Interceptor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can intercept missiles with the Cruise tag.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;interceptor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1 a beamlaser uses an alternate graphics effect. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;largeBeamLaser=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserFlareSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size of the flare for laser weapons, multiplier for thickness. Can be set to any numeric value. (default: 15)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;laserFlareSize=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Leadbonus&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Is multiplied with the unit&#039;s experience and added to the lead limit.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadbonus=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LeadLimit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Limits the maximum distance a unit will lead a target (default is -1 which means infinite).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadLimit=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LineOfSight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NOT SUPPORTED BY SPRING!&amp;lt;br&amp;gt;&lt;br /&gt;
It is only used to detect the weapontype of ota weapon configs.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LodDistance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum camera distance at which the default beamweapon projectile is simplified to rectangle. Can be set to any numeric value. (default: 1000)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;lodDistance=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ManualBombSettings&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For Bombers, use burst and burstrate tags instead of hardcoded values.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;manualBombSettings=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MetalPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Metal used per shot.  If the specified amount is not available, the weapon cannot be fired.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;metalpershot=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MinIntensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For beamlasers - always hit with some minimum intensity (a damage coeffcient normally dependent on distance - range 0 to 1). Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;minIntensity=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Model&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The 3DO or S3O model to be used as this weapon&#039;s physical representation.  3DO modesl do not need a .3do extension, but S3O weapon do.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;model=missile;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MovingAccuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A weapon&#039;s accuracy while moving.  See Accuracy.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;movingaccuracy=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MyGravity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For ballistic weapons (Cannon and Bomb), it overrides the map gravity if used. Regular map gravity is around 0.2.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;myGravity=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoExplode&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether or not the weapon will explode on impact or continue on its path.  An example is the d-gun.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noexplode=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoSelfDamage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This weapon will not damage the unit that fired it.  For instance, a nuke silo could shoot itself and not take any damage if this was active.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noselfdamage=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NumBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum number of times a weapon will bounce. -1 for infinite. Defaults to -1&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;numbounce=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Paralyzer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, this weapon will not cause any damage to its target, but will instead paralyze (aka EMP).  The default damage value of a weapon with this active will be applied to the target&#039;s HP; once the HP is overwhelmed, it will be paralyzed.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzer=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ParalyzerTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On Paralyzer weapons, determines the maximum length of time the target will be paralyzed (In seconds?). The timer is refreshed every time the target is hit by the weapon. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzetime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PredictBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much should the weapon predict unit speeds (similar to targetMoveError). Default 0 for non-burnblow, 0.5 for burnblow weapons. Can be set to any numerical value (0.0-1.0).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;predictBoost=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Projectiles&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon fires this many projectiles at once (shotgun style). Make sure you put them on different trajectories somehow (sprayangle or different firepoints) because otherwise they&#039;ll all be clumped in one shot. Works well combined with bursts. Can be set to any integer value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;projectiles=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ProximityPriority&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Acts as a multiplier for the distance to the target in the priority calculation. Note that negative values make weapons prefer distant targets. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;proximityPriority=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PulseSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On LargeBeamLaser, how fast the pulsating effect at the beam start is. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;pulseSpeed=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum range of the weapon.  If set to noexplode, the weapon will disappear after this range has been met.  If set to burnblow, the weapon will explode after this range has been met.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;range=750;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ReloadTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of time between shots.  If a unit is paralyzed, this stops counting down.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;reloadtime=3.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rendertype&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The way the weapon will be displayed.  Certain rendertypes are incompatibile with other tags, but it&#039;s generally for a logical reason.  The rendertypes are as follows: 0 - Laser, 1 - Model, 3 - Plasma, 4 - Unit explosion (usally), 5 - Flamethrower, 6 - Dropped, 7 - Lightning.  There&#039;s no documented use of rendertype=2 in OTA, and it probably doesn&#039;t do anything in Spring.  3 and 4 are usually interchangeable, both can be used to render a plasma/EMG/whatever shot; this is probably for compatibility.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rendertype=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color of the rendertype 0, 3, 4, 7 weapon, specified in RED_GREEN_BLUE format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rgbcolor=1 0.3 1; - this would make evul-purple&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color at the core of a rendertype 0 (laser) weapon.  Specified the same as above.  Defaults to white.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2=0 1 0; - this would make a weird green middle for the evul-purple laser&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ScrollSeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. How fast the beam apears to be moving towards it target. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;scrollSeed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Selfprop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Required for Guidance tag.  This weapon can propel itself and can have things like acceleration, rather than always travelling at one speed.  See Guidance, StartVelocity, WeaponAcceleration, WeaponVelocity.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the visible size of projectiles. Can be set to any numerical value. Default size is 2 + min(damage / 400, areaOfEffect / 10).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;size=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeGrowth&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines how fast flame projectiles will grow in size. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sizegrowth=0.6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmokeTrail&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Does the projectile leave a smoke trail or not.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smoketrail=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made whe the weapon hits.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhit=emghit;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHitVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhitvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStart&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made when the weapon begins to fire.  Will fire only once if the weapon is shot in a burst.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstart=emgfire;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStartVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstartvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundTrigger&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will sound every time a shot is fired in a burst sequence.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundtrigger=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SprayAngle&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How wide the the angle of a burst from a burst weapon can be.  Very similar to Accuracy, except that if a weapon has no sprayangle, all the shots will be fired at the same spot, even if the weapon&#039;s aim is off.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sprayangle=1024;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StartVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The starting speed of the weapon as it is first fired.  Only applicable to weapons that can accelerate.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;startvelocity=200;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stockpile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can this weapon be stockpiled, for instance like a nuke launcher.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;stockpile=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SubMissile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For TorpedoLaunchers, if set to 1 the torpedo will travel like a missile outside of water. It will not emit a smoketrail, though. When fired from a plane it will behave the same way but the plane will probably be considered a fighter, not a bomber. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;subMissile=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If 1 (default 0) it will make the weapon continue firing while it aims for a new target. Only works on continous beam lasers currently. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargeBorder&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If nonzero, targetting units will TryTarget at the edge of collision sphere (radius*tag_value, [-1;1]) instead of its centre. Can be set between 0 and 1. Defaults to 1 for Melee type weapons, 0 otherwise. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetBorder=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Targetable&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will be automatically targeted by any Interceptor weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetable=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargetMoveError&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The degree to which a weapon&#039;s aiming will fail to keep up with its target&#039;s movement.  If set very low or not set at all, a weapon will lead its target and almost always hit unless there&#039;s a lot of micromanagement on the part of the person controlling the target.  If set too high (about 0.3 or above), the weapon will have a lot of difficulty even tracking its target enough to get a shot off.  Can probably only be set between 0 and 1.  Beyond 1, the weapon would be virtually useless.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetmoveerror=0.15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of a beamweapon or beamlaser, default is 2.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;thickness=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TileLength&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. Defines the length before the texture used is repeated (tiled).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tileLength=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ToAirWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will only be capable of targetting units which are flying, or are capable of flying.  Can be set to 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;toairweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tolerance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount to which the weapon&#039;s &amp;quot;real&amp;quot; aim can be off while the weapon will still be able to fire accurately at the target.  This worked in OTA, but I&#039;m not 100% sure if it works in Spring.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tolerance=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tracks&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If the missile tracks a moving target. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tracks=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TrajectoryHeight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The height of the arc of a missile weapon. It is useful for compensating for mountains or debris. Is relative to the weapons speed (Higher speed, higher arc) and the range the weapon is firing at (Lower range lower arc). Requires Guidance and Turnrate to hit its target when over 1. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;trajectoryheight=0.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turnrate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast a guided weapon can turn.  Can be any numerical value between 0 and 64000.  If set to 0, the weapon can&#039;t turn at all, if set to 64000, the weapon can literally defy all known physics and turn 180 degrees in a fraction of a second.  This is relative to a weapon&#039;s velocity; a weapon with a very low velocity (~200) wouldn&#039;t need a very high turnrate to keep up with a fighter, although it would probably never catch it because of its slow speed.  A weapon with a very high velocity (~1000) would need a very high value in order to be able to hit targets that turn suddenly.&lt;br /&gt;
	&amp;lt;TD&amp;gt;turnrate=32000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turret&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 if weapon is used by a turret that rotates. Set to 0 if weapon is forward firing, ie, has no rotating turret piece.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;turret=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TwoPhase&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weapon operates in two phases. Unused in 76b1 and 77b1! Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;twophase=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VLaunch&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 to launch the weapon vertically.  Can only be used with missile-type weapons with a TurnRate.  Cannot be used at the same time as Turret.  Set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;vlaunch=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the surface of the water. Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Water weapons behave somewhat like Dropped weapons out of water, and like missiles underwater. Is the only type of weapon that can fire under water.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponAcceleration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tells the weapon how fast it should accelerate from its StartVelocity to its actual WeaponVelocity.  Increases the weapon&#039;s velocity every second by the amount specified.  Can be any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponacceleration=50;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponTimer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How long until the weapon will go into its second phase.  For use with missile weapons.  For VLaunch weapons, the weapon will turn to actually go towards its target after the specified number of seconds has expired.  For non-VLaunch missiles with a TurnRate, the weapon will go randomly off-course after this period of time.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weapontimer=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The speed the weapon moves after being fired. If StartVelocity is lower than this number, the weapon will increase speed to its WeaponVelocity at the rate specified by its WeaponAcceleration.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponvelocity=800;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Wobble&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount that a missile will wobble off-course. Requires TurnRate. Turnrate will wrestle with wobble to keep the weapon on course, so wobble must be high enough to compensate to have any effect. Can be set to any numerical value between 0 and 64000.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;wobble=15000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
NOTE: Variables that are defined by either a 1 or a 0 are BOOLEAN, where 1 means TRUE and 0 means FALSE.&lt;br /&gt;
&lt;br /&gt;
NOTE 2: &amp;quot;Any numerical value&amp;quot; for things that relate to angles really means any value between 0 and 64,000 since that&#039;s between 0 and 360 degrees in spring measurement. Setting it higher than 64,000 will bring it &#039;full circle&#039; so to speak.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Texture Tags=&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table width=500 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 1em; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt; Weapon &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Used Texture Tags &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AircraftBomb&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PlasmaCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EmgCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameThrower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flame&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = muzzle&amp;lt;br&amp;gt;texture4 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LightingCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MissileLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StarburstLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;texture3 = flame&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TorpedoLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
NOTE: All textures need to be `atlased`. So you have to define them in the &#039;&#039;&#039;resources.tdf&#039;&#039;&#039; and use the reference name in the texture tags.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Plasma Visuals=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is more transparent than the previous particle. Can be set to any numerical value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay=0.95;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the distance between plasma particles is proportional to the size of the two particles. If set to 0, the distance between plasma particles will be proportional to the size of the first particle.&lt;br /&gt;
Can be set to 1 or 0. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Distance between each plasma particle.  Can be set to any number value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is smaller than the previous within the same plasma shot. Can be set to any numerical value. (default: 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Number of particles used in one plasma shot.  Can be set to any number value. (default: 5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages=20;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Shield/Repulsor Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExteriorShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not have any effect on weapons fired from within its field.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;exteriorshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;IsShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, this &amp;quot;weapon&amp;quot; is no longer a weapon, is now a repulsor or a shield, based on the other properties given to it.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;isshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldAlpha&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How clearly visible the shield is, if you have VisibleShield turned on.  Value is between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldalpha=0.4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldEnergyUse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of energy used to repulse or destroy weapons.  Will be used constantly while the weapon is in its area of effect if it is a repulsor, will be used only once on impact if it is a shield.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldenergyuse=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldForce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The force applied to weapons, an arbitrary number.  Set to 1, it will not deflect very well.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldforce=1.75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldBadColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 0% strength, if you have VisibleShield turned on.  Defined in R G B format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldbadcolor=0 1 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldGoodColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 100% strength, if you have VisibleShield turned on.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldgoodcolor=1 0 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of weapons that this shield can intercept. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a weapon with that digit set to one will be intercepted by this shield, for instance, the example will result in the shield blocking weapons with types 2 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType=6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldMaxSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum speed the repulsor will push weapons away at.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldmaxspeed=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much &amp;quot;power&amp;quot; a shield can store.  &amp;quot;Power&amp;quot; is not the same as energy; think of it as the shield/repulsor&#039;s private battery source.  It can be drained completely by defending against weapons, even if you have lots of energy.  &#039;&#039;Power is drained by the affected weapons damage.&#039;&#039;  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpower=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegen&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How quickly the shield regenerates its &amp;quot;power&amp;quot;, even when under attack.  Regenerates the amount specified every second.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregen=25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegenEnergy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much energy is required to keep the shield regenerating its &amp;quot;power&amp;quot;.  For instance, you might have it set so that 100 units of energy are necessary for every 25 units of &amp;quot;power&amp;quot;.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregenenergy=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRadius&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the size of the area the shield/repulsor protects.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldradius=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRepulsor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the &amp;quot;shield&amp;quot;-type weapon will repulse projectiles.  If set to 0, it will destroy them.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldrepulsor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldStartingPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the shield starts with this much power instead of 0.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldStartingPower=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmartShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not affect owned/allied weapons.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smartshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield will be visible.  Only for use on shield-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldHitFrames&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Numbers of frames how long the shield should be visible after it got hit (the alpha value fades after the hit).  Can be set to any numerical value. (default: 0 frames)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleShieldHitFrames=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldRepulse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the repulsing effect will be visible.  Only for use on repulsor-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshieldrepulse=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Weapons]]&lt;br /&gt;
&lt;br /&gt;
[[category:Shields]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19565</id>
		<title>Weapon Variables</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19565"/>
		<updated>2008-07-11T00:45:44Z</updated>

		<summary type="html">&lt;p&gt;JK: /* WeaponType */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
=WeaponType=&lt;br /&gt;
This is a weapon tag! It allows you to bypass the engine&#039;s auto detection and force the weapontype.&amp;lt;br&amp;gt; (example weaponType=&amp;quot;StarburstLauncher&amp;quot;)&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;WeaponType&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AircraftBomb (dropped=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Drops a ballistic projectile (aka Plasma) at the same movement vector as the unit itself. It&#039;s only meant for planes. A plane that has a CBombDropper as its weapon1 is a bomber. The CBombDropper automatically calculates its burst and burstrate tags from its reload time and uses 5 as its reload time instead. It will fire if the first bomb would drop within a circle roughly unitspeed*burst*burstrate so the longer the burst and the faster the unit the larger the circle in which it will drop instead of not firing and hoping the next attack run will pass that circle.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;StarburstLauncher(vlaunch=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that rises vertically (starts with no velocity) for &amp;lt;weapontimer&amp;gt; seconds, then turns at a fixed rate towards its target. The projectile&#039;s lifetime depends on its range divided by its max speed (ignores acceleration) and the weapontimer somehow so the weapon can fall short depending on how these values are set. This is the only weapon that can properly perform intercepts and be interceptable. Emits a smoketrail.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BeamLaser (beamlaser=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Should be well known, this thing spawns a beam and does a portion of its total damage each frame. It can&#039;t have a burst or burstrate, it can&#039;t have collidefriendly=0, it can&#039;t be emit-sfxed if it has a beamtime longer than one frame and its damage decreases over range if the minIntensity=1 tag isn&#039;t used. The largebeamlaser tag allows changing the visual effect of the laser, doesn&#039;t affect the behaviour of the weapon itself in any way though. Beamlasers can be really annoying... BTW, their beam doesn&#039;t collide with water so if they&#039;re set to waterweapon=1 they can shoot normally even when underwater (won&#039;t shoot at underwater targets though).&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shield (isShield=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The shield. Really not much to say about this, the tags are all documented in the changelog.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TorpedoLauncher (waterweapon=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that will behave ballistically out of water and like a missile in water. Since waterweapon=1 is usually set for them they can fire underwater and they will target underwater units. The torpedo is the only projectile that doesn&#039;t explode on the water surface. An aircraft carrying a TorpedoLauncher is a special case, the thing turns into a bomb dropepr that will spawn a torpedo projectile, probably to get the whole bomber flight behaviour. Note that the waterweapon tag is also used to make a weapon fire underwater, independent of its type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DGun (weaponname contains the word &amp;quot;disintegrator&amp;quot;)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;This shoots a fireball that travels in a straight line. The fireball has no range limitation by itself so if it misses or is fired in FPS mode it will travel across the whole map and further. DGuns don&#039;t properly check their line of fire, if terrain is in the way they fire anyway. These things are meant to be used with noexplode=1 but of course you CAN use them without that, too. If ballistic=1 is set the fireball will be affected by gravity, the weapon won&#039;t compensate for it though so it will hit the ground before reaching the target. Might be useful for a Scorched Earth mod or something since you&#039;d have to aim it manually to hit anything.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LightingCannon (sic) (lineofsight=1 and rendertype=7)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon like the Beamlaser except with a lightning graphic and even more annoying. It won&#039;t damage shields and it has a hardcoded inaccuracy (comparable to targetMoveError, the code comment is &amp;quot;should make it weaker against air&amp;quot;...). Shares some of the weirdnesses with the beamlaser, e.g. being able to penetrate water.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LaserCannon (lineofsight=1 and either beamweapon=1 or weaponname contains &amp;quot;laser&amp;quot; (marked as &amp;quot;workaround for SWTA))&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The OTA-style laser. Probably one of the least annoying weapons in the engine. Its length is defined by the duration tag (together with the speed), BTW.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MissileLauncher (lineofsight=1 and smoketrail=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shoots a smoke-emitting projectile. It can use guidance, acceleration, etc. The projectile&#039;s lifetime depends on range/maxspeed so a slowly accelerating missile will fall short. It can also use trajectoryheight to have the shot arc but that has trouble with aiming at targets higher or lower than the shooter (see bug report, this REALLY could use some fixing). Pretty versatile weapon overall, if the laser rendering code was ported into this we could pretty much axe the LaserCannon completely.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EmgCannon (lineofsight=1 and rendertype=4 and color=2)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Few know about this, it&#039;s a line of sight (i.e. not ballistic) weapon that can use billboard rendering (looks like a sprite). No idea what drawbacks this has, noone ever uses it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Flame (lineofsight=1 and rendertype=5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The flamethrower. A really annoying weapon. AFAIK it won&#039;t even aim ahead of moving targets. Can&#039;t say much else about it since I haven&#039;t tried using it much but overall I&#039;d avoid the weapontype and fake the effect somehow, it&#039;s not pretty when fast and won&#039;t hit jack when slow.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Cannon (anything that didn&#039;t trigger another weapon)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Aka plasma. Shoots a ballistic projectile. Unlike the DGun it aims properly. Can&#039;t be emit-sfxed properly, maybe a ballistic DGun can fill that role.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Melee (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;When it fires it simply damages the target, no ifs or buts. It doesn&#039;t use a projectile and doesn&#039;t care about the line of fire. It won&#039;t even report a proper heading and pitch to AimWeapon so if you plan on using it in 75b2 you have to slave it to another weapon to handle the aiming. May be useful to be the damage dealer for a cosmetic weapon, i.e. you slave the Melee to a weapon that does no damage but looks pretty and the Melee does the damage. Kinda like the weapons in Warcraft and so.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Rifle (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon but an apparently unmaintained one. It has a hardcoded firing and explosion effect. I wouldn&#039;t use it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNoWeapon (weaponname is NOWEAPON, not reachable by any tag)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Apparently a placeholder used when a weapon isn&#039;t present. It&#039;s not really a weapondef but generated when the unit demands a NOWEAPON.&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Accuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How accurate a weapon is.  A larger number is less accurate.  If this tag is missing entirely, it has perfect accuracy unless its target moves unexpectedly.  Accuracy is relative to the distance to the target; for instance, if the target is very close, even a very high accuracy value will probably still hit.  If a target is very far away, even a very low accuracy value will likely cause the weapon to miss.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;accuracy=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlwaysVisible&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ignore LOS handling and always draw the weapon effect? Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;alwaysVisible=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AreaOfEffect&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How large the weapon&#039;s impact explosion is.  This affects how powerful the weapon&#039;s default impulse strength will be.  Currently, BeamLasers with an AreaOfEffect of 16 or above will deform the ground at their point of impact regardless of whether it has been told not to.  Can be any numeric value, but should generally be at least 8, regardless of the type of weapon.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;areaofeffect=192;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFeature&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This makes the weapon avoid features while targetting (the shoot will still collide with features). Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFeature=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 units will not try to avoid friendly units in their line of fire. Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ballistic&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 for the weapon to be subjected to gravity, travelling in an arc through the air, such as cannons. Ballistic is mutually exclusive to LineOfSight and Dropped.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ballistic=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the speed of the fadeout (each frame the beam&#039;s intensity is multiplied with that value). Can be between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamDecay=0.9;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a beam laser or not.  Beam lasers instantly hit their targets.  Rendertype must be 0.  Mutually exclusive to BeamWeapon.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamlaser=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How long to fire the laser before waiting for ReloadTime to start.  Can be any numeric value.  Defaults to 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamtime=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTTL&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the time (in frames) the beam will stay after being fired. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamTtl=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a regular laser or not.  BeamWeapons (lasers) do not instantly hit their targets, and are affected by the weaponvelocity tag.  Mutually exclusive to BeamLaser.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceRebound&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of vertical velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bouncerebound=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceSlip&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of horizontal velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bounceslip=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurnBlow&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon blows up when it reaches range the target was at when the weapon fired. Only works on plasma (rendertype=4) weapons and possibly missiles?  Can be 1 or 0.  A common usage is on flak guns.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burnblow=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Burst&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How many shots are in a burst.  Must be accompanied by burstrate.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burst=3;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurstRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast the Burst fires.  If set much below 0.1, it stops having any discernable effect.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burstrate=0.1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CameraShake&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much the camera shakes on impact. (needs the cameraShake widget to work). Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cameraShake=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CanAttackGround&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;canAttackGround=0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag is the tag that emits a custom explosion every frame for a projectile. Can be used on any weapon to imitate dynamic lighting, smoke, fire, ball lightning, magic and many other things. Enter the name of your effect to make it emit once per frame.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cegtag=MISSILE_SMOKE_FX;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes. While this still works for lasers, using rgbcolor=X X X; is a much, much better route. Plus, the RGBColor tag will override any color=x; tags in the tdf. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ColorMap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by flamethrower. Must be a CColorMap type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;colorMap=1 0 0 1 &amp;amp;nbsp;0 1 0 1;&amp;lt;br&amp;gt;(red to green fade)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollideFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 this weapon will not hit friendly units. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollisionSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the physical size of projectiles, percentage of size for flamethrower and absolute value emg, plasma and laser. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionSize=30;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CommandFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;When ordered to attack ground this weapon will only fire once, rather than continuously. This does not work when ordered to attack units (It will continue to fire until the target is dead). If the unit has CanDgun=1 in its FBI, commandfire will identify that weapon with the dgun button. The weapon wont fire unless the dgun button is pressed. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;commandfire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CoreThickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of the core of a laser (the part which use rgbcolor2).  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coreThickness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Coverage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The range for anti-weapon weapons, like antinukes.  This will be shown on the minimap as a guide.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coverage=1280;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Adds a constant factor to the terraform the explosion does. Can be any numeric value. (default 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterMult&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Multiplies with the terraform the explosion does. Can be any numeric value. (default :=impulsFactor)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CylinderTargetting&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If greater than 0, range will be checked in a cylinder instead of a sphere:&lt;br /&gt;
half height=unitradius*cylinderTargetting&lt;br /&gt;
Defaults to 1 for Melee type weapons, 0 otherwise. In 0.76b1, does not work with BeamLaser weapons.([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cylinderTargetting=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missles, unlike wobble it doesn&#039;t rotate the missile and it prevents the missile from going too far off course so a dancing swarm will remain coherent. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dance=97;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dropped&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Sets the weapon to be dropped, like from a bomber.  Must be RenderType=6 and needs the Model tag to be specified.  Mutually exclusive to Ballistic and LineOfSight.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dropped=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Duration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For how many seconds a beam weapon will be fired before waiting for reload time.  Also controls the length of the beam in BeamWeapon projectiles.  Can be any numeric value.  Used for rendertype 0 and 7 weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;duration=.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageExp&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Exponent of the range damage formula, 0 (the default) disables dynamic damage. 1 means linear scaling. Only used by BeamLasers and LightingCannons. Can be any numeric value. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=263438#p263438 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageExp=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageInverted&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Inverts the damage curve (more damage at far range). Only used by BeamLasers and LightingCannons. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageInverted=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageMin&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum dynamic range damage value. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageMin=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set it will use this value in the dynamic range damage formula instead of the range value from the weapon in the calculation. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EdgeEffectiveness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Determines what percent of a weapon&#039;s maximum damage value will be applied to units as they are closer to the outer edge of the weapon&#039;s AreaOfEffect.  Must have a decimal value between 0 and 1.  Default in OTA was 0, probably the same in Spring. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=251180#p251180 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;edgeEffectiveness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EnergyPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Energy used per shot.  If the specified amount of energy is not available, the weapon will not be able to shoot.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;energypershot=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExplosionSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Explosion animation speed/time. (only used by BeamLaser and LightingCannon?) default:&lt;br /&gt;
gd=max(30, DefaultDamage/20);&amp;lt;br&amp;gt;&lt;br /&gt;
expSpeed=(8+(gd*2.5))/(9+(sqrt(gd)*.7))/2;&amp;lt;br&amp;gt;&lt;br /&gt;
Can be any numeric value.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;explosionSpeed=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rate at which the beamweapon fades out after it goes past its maximum range. 0 is never fade out, 1 is finish fading out exactly at max range, the default 0.5 is the previous behaviour.&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireStarter&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How likely the weapon will set trees on fire.  High values make trees likey to be set on fire, low values make trees likely to just explode or tip over.  Can be any numeric value between 0 and 100.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireStarter=75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireSubmersed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the weapon can fire underwater, if not then not. Use it for weapons that cannot fire underwater but can hit underwater targets. Works even for torpedoes. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireSubmersed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FixedLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missiles, starburst missiles and torpedoes, this makes the projectile spawn with the orientation of the shooting piece instead of their normal orientation. The weapon will not properly check if allies are in the way so make sure you align the launchers in a way that won&#039;t hammer right into your own forces and perhaps use collideFriendly=0. FixedLauncher conflicts with trajectoryHeight and IMO combining them is pointless anyway so don&#039;t use both on a weapon. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fixedLauncher=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameGFXTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Makes the flamethrower projectile stay alive as a graphical effect (doesnt do any damage) after it has reached maxrange. It is defined in percent, so 1.2 makes it remain 20% beyond maxrange. Can be any numeric value. &lt;br /&gt;
	&amp;lt;TD&amp;gt;flamegfxtime=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlightTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;flightTime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;GroundBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the ground (on land or the ocean floor). Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;groundbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Guidance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Specifies whether or not the weapon is capable of correcting its trajectory mid-flight. Will not track a moving target. Works only on missile and torpedo weapons.  Can be set to 1 or 0.  See TurnRate for information on specifying how well a weapon can track a target.  Requires rendertype=1, lineofsight=1, and selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;guidance=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HardStop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For LaserCannon, defined if the laser effect hard stops or fade out. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;hardStop=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightBoostFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Gives control of cannon height range boost (more than 1 means increased range, 0 means the cannon has fixed range regardless of height difference to target. default is a magic value calculated on weapon init, based on range tag and theoretical max range.). Can be any numeric value, including negative ones (&amp;lt;0 := automatically calculated).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightBoostFactor=-1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightMod&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Changes the sphere weapon range into an ellipsis. If it is larger 1.0 the weapon can&#039;t shoot as height as far, i.e. 0.5 means it can shoot twice as height as far ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image]). Note that this may not work well with beam weapons, use minIntensity (0..1) tag to fix that.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightMod=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A constant factor added on the weapon&#039;s impulsefactor.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulseBoost=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The multiplier on the weapon&#039;s default impulsefactor, which is determined based on a weapon&#039;s default damage and AreaOfEffect.  The impulse of a weapon is how strong of a kinetic force will be applied to its target or anything near the point of impact.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulsefactor=2.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Intensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Alpha (brighness and washout effect) of the weapon.  Can be used on any rendertype 0, 3, or 4 weapon.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;intensity=1.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of shields that can intercept this weapon. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a shield with that digit set to one will intercept this weapon, for instance, the example will result in the weapons being blocked by shields with types 1 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Interceptor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can intercept missiles with the Cruise tag.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;interceptor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1 a beamlaser uses an alternate graphics effect. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;largeBeamLaser=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserFlareSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size of the flare for laser weapons, multiplier for thickness. Can be set to any numeric value. (default: 15)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;laserFlareSize=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Leadbonus&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Is multiplied with the unit&#039;s experience and added to the lead limit.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadbonus=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LeadLimit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Limits the maximum distance a unit will lead a target (default is -1 which means infinite).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadLimit=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LineOfSight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NOT SUPPORTED BY SPRING!&amp;lt;br&amp;gt;&lt;br /&gt;
It is only used to detect the weapontype of ota weapon configs.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LodDistance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum camera distance at which the default beamweapon projectile is simplified to rectangle. Can be set to any numeric value. (default: 1000)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;lodDistance=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ManualBombSettings&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For Bombers, use burst and burstrate tags instead of hardcoded values.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;manualBombSettings=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MetalPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Metal used per shot.  If the specified amount is not available, the weapon cannot be fired.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;metalpershot=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MinIntensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For beamlasers - always hit with some minimum intensity (a damage coeffcient normally dependent on distance - range 0 to 1). Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;minIntensity=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Model&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The 3DO or S3O model to be used as this weapon&#039;s physical representation.  3DO modesl do not need a .3do extension, but S3O weapon do.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;model=missile;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MovingAccuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A weapon&#039;s accuracy while moving.  See Accuracy.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;movingaccuracy=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MyGravity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For ballistic weapons (Cannon and Bomb), it overrides the map gravity if used. Regular map gravity is around 0.2.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;myGravity=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoExplode&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether or not the weapon will explode on impact or continue on its path.  An example is the d-gun.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noexplode=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoSelfDamage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This weapon will not damage the unit that fired it.  For instance, a nuke silo could shoot itself and not take any damage if this was active.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noselfdamage=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NumBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum number of times a weapon will bounce. -1 for infinite. Defaults to -1&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;numbounce=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Paralyzer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, this weapon will not cause any damage to its target, but will instead paralyze (aka EMP).  The default damage value of a weapon with this active will be applied to the target&#039;s HP; once the HP is overwhelmed, it will be paralyzed.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzer=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ParalyzerTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On Paralyzer weapons, determines the maximum length of time the target will be paralyzed (In seconds?). The timer is refreshed every time the target is hit by the weapon. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzetime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PredictBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;No idea what it does. Default 0 for non-burnblow, 0.5 for burnblow weapons. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;predictBoost=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Projectiles&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon fires this many projectiles at once (shotgun style). Make sure you put them on different trajectories somehow (sprayangle or different firepoints) because otherwise they&#039;ll all be clumped in one shot. Works well combined with bursts. Can be set to any integer value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;projectiles=1o;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ProximityPriority&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Acts as a multiplier for the distance to the target in the priority calculation. Note that negative values make weapons prefer distant targets. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;proximityPriority=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PulseSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On LargeBeamLaser, how fast the pulsating effect at the beam start is. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;pulseSpeed=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum range of the weapon.  If set to noexplode, the weapon will disappear after this range has been met.  If set to burnblow, the weapon will explode after this range has been met.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;range=750;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ReloadTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of time between shots.  If a unit is paralyzed, this stops counting down.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;reloadtime=3.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rendertype&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The way the weapon will be displayed.  Certain rendertypes are incompatibile with other tags, but it&#039;s generally for a logical reason.  The rendertypes are as follows: 0 - Laser, 1 - Model, 3 - Plasma, 4 - Unit explosion (usally), 5 - Flamethrower, 6 - Dropped, 7 - Lightning.  There&#039;s no documented use of rendertype=2 in OTA, and it probably doesn&#039;t do anything in Spring.  3 and 4 are usually interchangeable, both can be used to render a plasma/EMG/whatever shot; this is probably for compatibility.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rendertype=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color of the rendertype 0, 3, 4, 7 weapon, specified in RED_GREEN_BLUE format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rgbcolor=1 0.3 1; - this would make evul-purple&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color at the core of a rendertype 0 (laser) weapon.  Specified the same as above.  Defaults to white.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2=0 1 0; - this would make a weird green middle for the evul-purple laser&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ScrollSeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. How fast the beam apears to be moving towards it target. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;scrollSeed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Selfprop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Required for Guidance tag.  This weapon can propel itself and can have things like acceleration, rather than always travelling at one speed.  See Guidance, StartVelocity, WeaponAcceleration, WeaponVelocity.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the visible size of projectiles. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;size=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeGrowth&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines how fast flame projectiles will grow in size. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sizegrowth=0.6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmokeTrail&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Does the projectile leave a smoke trail or not.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smoketrail=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made whe the weapon hits.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhit=emghit;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHitVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhitvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStart&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made when the weapon begins to fire.  Will fire only once if the weapon is shot in a burst.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstart=emgfire;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStartVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstartvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundTrigger&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will sound every time a shot is fired in a burst sequence.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundtrigger=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SprayAngle&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How wide the the angle of a burst from a burst weapon can be.  Very similar to Accuracy, except that if a weapon has no sprayangle, all the shots will be fired at the same spot, even if the weapon&#039;s aim is off.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sprayangle=1024;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StartVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The starting speed of the weapon as it is first fired.  Only applicable to weapons that can accelerate.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;startvelocity=200;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stockpile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can this weapon be stockpiled, for instance like a nuke launcher.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;stockpile=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SubMissile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For TorpedoLaunchers, if set to 1 the torpedo will travel like a missile outside of water. It will not emit a smoketrail, though. When fired from a plane it will behave the same way but the plane will probably be considered a fighter, not a bomber. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;subMissile=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If 1 (default 0) it will make the weapon continue firing while it aims for a new target. Only works on continous beam lasers currently. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargeBorder&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If nonzero, targetting units will TryTarget at the edge of collision sphere (radius*tag_value, [-1;1]) instead of its centre. Can be set between 0 and 1. Defaults to 1 for Melee type weapons, 0 otherwise. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetBorder=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Targetable&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will be automatically targeted by any Interceptor weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetable=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargetMoveError&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The degree to which a weapon&#039;s aiming will fail to keep up with its target&#039;s movement.  If set very low or not set at all, a weapon will lead its target and almost always hit unless there&#039;s a lot of micromanagement on the part of the person controlling the target.  If set too high (about 0.3 or above), the weapon will have a lot of difficulty even tracking its target enough to get a shot off.  Can probably only be set between 0 and 1.  Beyond 1, the weapon would be virtually useless.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetmoveerror=0.15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of a beamweapon or beamlaser, default is 2.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;thickness=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TileLength&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. Defines the length before the texture used is repeated (tiled).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tileLength=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ToAirWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will only be capable of targetting units which are flying, or are capable of flying.  Can be set to 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;toairweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tolerance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount to which the weapon&#039;s &amp;quot;real&amp;quot; aim can be off while the weapon will still be able to fire accurately at the target.  This worked in OTA, but I&#039;m not 100% sure if it works in Spring.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tolerance=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tracks&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If the missile tracks a moving target. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tracks=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TrajectoryHeight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The height of the arc of a missile weapon. It is useful for compensating for mountains or debris. Is relative to the weapons speed (Higher speed, higher arc) and the range the weapon is firing at (Lower range lower arc). Requires Guidance and Turnrate to hit its target when over 1. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;trajectoryheight=0.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turnrate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast a guided weapon can turn.  Can be any numerical value between 0 and 64000.  If set to 0, the weapon can&#039;t turn at all, if set to 64000, the weapon can literally defy all known physics and turn 180 degrees in a fraction of a second.  This is relative to a weapon&#039;s velocity; a weapon with a very low velocity (~200) wouldn&#039;t need a very high turnrate to keep up with a fighter, although it would probably never catch it because of its slow speed.  A weapon with a very high velocity (~1000) would need a very high value in order to be able to hit targets that turn suddenly.&lt;br /&gt;
	&amp;lt;TD&amp;gt;turnrate=32000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turret&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 if weapon is used by a turret that rotates. Set to 0 if weapon is forward firing, ie, has no rotating turret piece.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;turret=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TwoPhase&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weapon operates in two phases... eh... yeah, I honestly have no idea what the difference between this and VLaunch is.  Generally use it with VLaunch as well.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;twophase=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VLaunch&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 to launch the weapon vertically.  Can only be used with missile-type weapons with a TurnRate.  Cannot be used at the same time as Turret.  Set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;vlaunch=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the surface of the water. Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Water weapons behave somewhat like Dropped weapons out of water, and like missiles underwater. Is the only type of weapon that can fire under water.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponAcceleration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tells the weapon how fast it should accelerate from its StartVelocity to its actual WeaponVelocity.  Increases the weapon&#039;s velocity every second by the amount specified.  Can be any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponacceleration=50;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponTimer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;;How long until the weapon will go into its second phase.  For use with missile weapons.  For VLaunch weapons, the weapon will turn to actually go towards its target after the specified number of seconds has expired.  For non-VLaunch missiles with a TurnRate, the weapon will go randomly off-course after this period of time.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weapontimer=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The speed the weapon moves after being fired. If StartVelocity is lower than this number, the weapon will increase speed to its WeaponVelocity at the rate specified by its WeaponAcceleration.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponvelocity=800;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Wobble&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount that a missile will wobble off-course. Requires TurnRate. Turnrate will wrestle with wobble to keep the weapon on course, so wobble must be high enough to compensate to have any effect. Can be set to any numerical value between 0 and 64000.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;wobble=15000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
NOTE: Variables that are defined by either a 1 or a 0 are BOOLEAN, where 1 means TRUE and 0 means FALSE.&lt;br /&gt;
&lt;br /&gt;
NOTE 2: &amp;quot;Any numerical value&amp;quot; for things that relate to angles really means any value between 0 and 64,000 since that&#039;s between 0 and 360 degrees in spring measurement. Setting it higher than 64,000 will bring it &#039;full circle&#039; so to speak.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Texture Tags=&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table width=500 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 1em; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt; Weapon &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Used Texture Tags &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AircraftBomb&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PlasmaCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EmgCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameThrower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flame&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = muzzle&amp;lt;br&amp;gt;texture4 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LightingCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MissileLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StarburstLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;texture3 = flame&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TorpedoLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
NOTE: All textures need to be `atlased`. So you have to define them in the &#039;&#039;&#039;resources.tdf&#039;&#039;&#039; and use the reference name in the texture tags.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Plasma Visuals=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is more transparent than the previous particle. Can be set to any numerical value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay=0.95;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the distance between plasma particles is proportional to the size of the two particles. If set to 0, the distance between plasma particles will be proportional to the size of the first particle.&lt;br /&gt;
Can be set to 1 or 0. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Distance between each plasma particle.  Can be set to any number value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is smaller than the previous within the same plasma shot. Can be set to any numerical value. (default: 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Number of particles used in one plasma shot.  Can be set to any number value. (default: 5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages=20;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Shield/Repulsor Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExteriorShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not have any effect on weapons fired from within its field.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;exteriorshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;IsShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, this &amp;quot;weapon&amp;quot; is no longer a weapon, is now a repulsor or a shield, based on the other properties given to it.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;isshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldAlpha&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How clearly visible the shield is, if you have VisibleShield turned on.  Value is between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldalpha=0.4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldEnergyUse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of energy used to repulse or destroy weapons.  Will be used constantly while the weapon is in its area of effect if it is a repulsor, will be used only once on impact if it is a shield.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldenergyuse=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldForce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The force applied to weapons, an arbitrary number.  Set to 1, it will not deflect very well.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldforce=1.75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldBadColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 0% strength, if you have VisibleShield turned on.  Defined in R G B format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldbadcolor=0 1 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldGoodColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 100% strength, if you have VisibleShield turned on.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldgoodcolor=1 0 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of weapons that this shield can intercept. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a weapon with that digit set to one will be intercepted by this shield, for instance, the example will result in the shield blocking weapons with types 2 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType=6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldMaxSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum speed the repulsor will push weapons away at.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldmaxspeed=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much &amp;quot;power&amp;quot; a shield can store.  &amp;quot;Power&amp;quot; is not the same as energy; think of it as the shield/repulsor&#039;s private battery source.  It can be drained completely by defending against weapons, even if you have lots of energy.  &#039;&#039;Power is drained by the affected weapons damage.&#039;&#039;  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpower=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegen&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How quickly the shield regenerates its &amp;quot;power&amp;quot;, even when under attack.  Regenerates the amount specified every second.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregen=25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegenEnergy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much energy is required to keep the shield regenerating its &amp;quot;power&amp;quot;.  For instance, you might have it set so that 100 units of energy are necessary for every 25 units of &amp;quot;power&amp;quot;.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregenenergy=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRadius&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the size of the area the shield/repulsor protects.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldradius=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRepulsor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the &amp;quot;shield&amp;quot;-type weapon will repulse projectiles.  If set to 0, it will destroy them.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldrepulsor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldStartingPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the shield starts with this much power instead of 0.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldStartingPower=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmartShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not affect owned/allied weapons.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smartshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield will be visible.  Only for use on shield-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldHitFrames&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Numbers of frames how long the shield should be visible after it got hit (the alpha value fades after the hit).  Can be set to any numerical value. (default: 0 frames)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleShieldHitFrames=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldRepulse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the repulsing effect will be visible.  Only for use on repulsor-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshieldrepulse=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Weapons]]&lt;br /&gt;
&lt;br /&gt;
[[category:Shields]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12436</id>
		<title>Lua VFS</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12436"/>
		<updated>2008-07-09T13:36:24Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modes ==&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MOD&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MAP&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.BASE&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_ONLY&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as VFS.RAW)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_ONLY&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&#039;&#039;&#039;VFS.Include&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(if enviroment=nil then use current one)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, table enviroment [, number mode ] ] ) -&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.LoadFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; nil | lstring data&lt;br /&gt;
&#039;&#039;&#039;VFS.FileExists&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;VFS.DirList&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot; [, string &amp;quot;pattern&amp;quot;  [, number mode [, string &amp;quot;optstr&amp;quot; ] ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string filename, ... }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;  optstr can contain:&lt;br /&gt;
      &amp;quot;r&amp;quot; = recursive&lt;br /&gt;
      &amp;quot;d&amp;quot; = include dirs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packing ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;The Pack- and Unpack-functions are used to convert numbers-&amp;gt;strings and strings-&amp;gt;numbers.&lt;br /&gt;
So you can read a binary file and then convert the received strings back to numbers and the other way around. Also you can use it in combination with the SendLuaXYZMsg-functions.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( number arg1, number arg2, number arg3, ... )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( {[1]=number,[2]=number,..} )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackX( string &amp;quot;binary&amp;quot; [, number offset ] [, number count] )&#039;&#039;&#039;&lt;br /&gt;
  -&amp;gt; number | table { [1]=number,[2]=number,.. }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12435</id>
		<title>Lua VFS</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12435"/>
		<updated>2008-07-09T13:35:55Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modes ==&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MOD&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MAP&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.BASE&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_ONLY&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as VFS.RAW)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_ONLY&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&#039;&#039;&#039;VFS.Include&#039;&#039;&#039; (if enviroment=nil then use current one)&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, table enviroment [, number mode ] ] ) -&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.LoadFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; nil | lstring data&lt;br /&gt;
&#039;&#039;&#039;VFS.FileExists&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;VFS.DirList&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot; [, string &amp;quot;pattern&amp;quot;  [, number mode [, string &amp;quot;optstr&amp;quot; ] ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string filename, ... }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;  optstr can contain:&lt;br /&gt;
      &amp;quot;r&amp;quot; = recursive&lt;br /&gt;
      &amp;quot;d&amp;quot; = include dirs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packing ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;The Pack- and Unpack-functions are used to convert numbers-&amp;gt;strings and strings-&amp;gt;numbers.&lt;br /&gt;
So you can read a binary file and then convert the received strings back to numbers and the other way around. Also you can use it in combination with the SendLuaXYZMsg-functions.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( number arg1, number arg2, number arg3, ... )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( {[1]=number,[2]=number,..} )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackX( string &amp;quot;binary&amp;quot; [, number offset ] [, number count] )&#039;&#039;&#039;&lt;br /&gt;
  -&amp;gt; number | table { [1]=number,[2]=number,.. }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Beginners_FAQ&amp;diff=11090</id>
		<title>Lua Beginners FAQ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Beginners_FAQ&amp;diff=11090"/>
		<updated>2008-07-05T01:37:21Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Q: I&#039;m interested in learning to use Lua with Spring. Where should I start?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: You can start by reading the tutorial  [http://lua-users.org/wiki/TutorialDirectory here]. The &amp;quot;Introductory topics&amp;quot; and &amp;quot;Programming in Lua&amp;quot; sections should suffice, in the beginning. After that, you can try editing simple LuaUI widgets, like snd_chatterbox.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Why should I learn Lua?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: If you are a player, it can allow you to write widgets that automate tedious and mindless tasks, help you organize the information available to you in a a more effective way, or even let you overhaul the user interface. If you are a modder, it gives you the power to manipulate every aspect of the simluation except projectiles. Here are some of the things you can do:&lt;br /&gt;
&lt;br /&gt;
*Create or destroy units.&lt;br /&gt;
*Transform units into other units.&lt;br /&gt;
*Change game rules.&lt;br /&gt;
*Give orders to units.&lt;br /&gt;
*Add new buttons to the unit orders panel.&lt;br /&gt;
*Manipulate unit physics.&lt;br /&gt;
*Upgrade units.&lt;br /&gt;
*Create a research system.&lt;br /&gt;
*Write a new user interface.&lt;br /&gt;
*Directly access OpenGL calls.&lt;br /&gt;
*Use your own shaders written in GLSL.&lt;br /&gt;
*Write your own custom model format.&lt;br /&gt;
*Use bump mapping, relief mapping, normal mapping, and more advanced graphic techniques.&lt;br /&gt;
*Use different levels of detail.&lt;br /&gt;
*Create single player missions.&lt;br /&gt;
*Implement a new resource system.&lt;br /&gt;
*Add fauna to a map.&lt;br /&gt;
*Create weather effects.&lt;br /&gt;
*Communicate with cob scripts.&lt;br /&gt;
*Respond to explosions.&lt;br /&gt;
*playback ogg&#039;s.&lt;br /&gt;
&lt;br /&gt;
The possibilites are mostly limited by your creativity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: What Lua cannot do (yet)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: You cannot ...&lt;br /&gt;
*changing projectiles, nor detect their positions.&lt;br /&gt;
*writting to the metal/texture map.&lt;br /&gt;
*control the LOS.&lt;br /&gt;
*create a random map generator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: How do I open &amp;quot;.lua&amp;quot; files?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Notepad or any text editor are enough.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Where can I find documentation?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: There is incomplete documentation for LuaUI in &amp;quot;Spring/LuaUI/API.txt&amp;quot;. &amp;quot;Spring/LuaUI/widgets.lua&amp;quot; and &amp;quot;&amp;lt;modname&amp;gt;/LuaRules/gadgets.lua&amp;quot; contain the call-ins and their arguments. You will have to read the Spring source to find the list of call-outs and their arguments. The source of the Lua API can be found [https://taspring.clan-sy.com/svn/spring/trunk/rts/Lua/ here]. LuaSyncedCtrl.cpp, LuaSyncedRead.cpp, LuaUnsyncedCtrl.cpp, LuaUnsyncedRead.cpp, LuaOpenGL.cpp and LuaSyncedMoveCtrl.cpp contain most call-outs. (L, 1) usually refers to the first argument, (L, 2) to the second, etc. If you don&#039;t know C++, understanding those files will require a little bit of guesswork, but it should&#039;nt be hard. Note that not all calls are available to both LuaUI and LuaRules/LuaCob/LuaGaia.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;And there are following wiki articles:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{{LuaInterfaces}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: What is a call-in? And a call-out?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Call-ins are functions defined in your script that Spring calls when a determined event takes place. For example, the gadget:Initialize() call-in is run by Spring when the widget is loaded.&lt;br /&gt;
Call-outs are functions defined in Spring you can run at whichever moment you desire. For example, when you call Spring.GetUnitTeam(unitID), the engine returns the teamID of the unit identified by &amp;quot;unitID&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: What is the difference between a widget and a gadget?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: A widget is a Lua script that works with LuaUI. A gadget works with LuaRules, LuaCob or LuaGaia. Widgets allow you to customize your interface, and must be unsynced. They can be bundled with the mod or you can save them in your &amp;quot;Spring/LuaUI/Wigets&amp;quot; directory. Gadgets can be synced or unsynced. LuaRules and LuaCob gadgets are usually part of a mod. LuaGaia gadgets should be part of a map. Gadgets can contain both synced and unsynced code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Where can I find examples?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: The &amp;quot;Spring/LuaUI/Widgets&amp;quot; directory contains many examples. More can be found at [http://spring.unknown-files.net/category/19/Lua_Scripts/ Unknow Files] or in the [http://www.caspring.org/ Complete Annihilation] mod.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Can I reload a script without restarting Spring?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Yes, you can type &amp;quot;/luaui reload&amp;quot; or &amp;quot;.luarules reload&amp;quot;. If you just need to check for syntax error, you can do it without having to load Spring by compiling the code. You can find a Lua compiler [http://luaforge.net/frs/?group_id=110&amp;amp;release_id=694 here]. [http://luaforge.net/frs/download.php/2218/lua5_1_2_Win32_bin.zip This] is the download for Windows users..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Why does the print function seem to do nothing?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Its output is displayed in stdout. If you are a windows user, to see it, you need to first unzip [http://lcc-clan.com/quant/winpipe.zip this archive] in your Spring directory, then open the command promt, navigate to your Spring directory, and run spring by typing &amp;quot;spring.exe | winpipe.exe&amp;quot;. The stdout will appear in the command prompt window.&lt;br /&gt;
You might want to run Spring in windowed mode so the command prompt is visible at all times.&amp;lt;br&amp;gt;&lt;br /&gt;
(for the lazy ones: there is also a Spring.Echo(var1,var2,...) that prints into the ingame chatbox)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: How do I print the &amp;quot;UnitDefs[unitDefID]&amp;quot; or &amp;quot;WeaponDefs[weaponDefID]&amp;quot; tables? &amp;quot;for k, v in ipairs(t) do print(k, v) end&amp;quot; does not behave as expected.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Use &amp;quot;for k,v in UnitDefs[unitDefID]:pairs() do print(k, v) end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Where can I find help?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: There is a [http://spring.clan-sy.com/phpbb/viewforum.php?f=23 Lua section] in the Spring forums. Probably the most effective way, though, is to join #lua on the lobby.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Who implemented LuaUI, LuaRules, LuaCob and LuaGaia?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: They were written by trepan.&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Beginners_FAQ&amp;diff=11089</id>
		<title>Lua Beginners FAQ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Beginners_FAQ&amp;diff=11089"/>
		<updated>2008-07-05T01:36:49Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Q: I&#039;m interested in learning to use Lua with Spring. Where should I start?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: You can start by reading the tutorial  [http://lua-users.org/wiki/TutorialDirectory here]. The &amp;quot;Introductory topics&amp;quot; and &amp;quot;Programming in Lua&amp;quot; sections should suffice, in the beginning. After that, you can try editing simple LuaUI widgets, like snd_chatterbox.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Why should I learn Lua?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: If you are a player, it can allow you to write widgets that automate tedious and mindless tasks, help you organize the information available to you in a a more effective way, or even let you overhaul the user interface. If you are a modder, it gives you the power to manipulate every aspect of the simluation except projectiles. Here are some of the things you can do:&lt;br /&gt;
&lt;br /&gt;
*Create or destroy units.&lt;br /&gt;
*Transform units into other units.&lt;br /&gt;
*Change game rules.&lt;br /&gt;
*Give orders to units.&lt;br /&gt;
*Add new buttons to the unit orders panel.&lt;br /&gt;
*Manipulate unit physics.&lt;br /&gt;
*Upgrade units.&lt;br /&gt;
*Create a research system.&lt;br /&gt;
*Write a new user interface.&lt;br /&gt;
*Directly access OpenGL calls.&lt;br /&gt;
*Use your own shaders written in GLSL.&lt;br /&gt;
*Write your own custom model format.&lt;br /&gt;
*Use 3d textures, bump mapping, relief mapping, normal mapping, and more advanced graphic techniques.&lt;br /&gt;
*Use different levels of detail.&lt;br /&gt;
*Create single player missions.&lt;br /&gt;
*Implement a new resource system.&lt;br /&gt;
*Add fauna to a map.&lt;br /&gt;
*Create weather effects.&lt;br /&gt;
*Communicate with cob scripts.&lt;br /&gt;
*Respond to explosions.&lt;br /&gt;
*playback ogg&#039;s.&lt;br /&gt;
&lt;br /&gt;
The possibilites are mostly limited by your creativity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: What Lua cannot do (yet)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: You cannot ...&lt;br /&gt;
*changing projectiles, nor detect their positions.&lt;br /&gt;
*writting to the metal/texture map.&lt;br /&gt;
*control the LOS.&lt;br /&gt;
*create a random map generator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: How do I open &amp;quot;.lua&amp;quot; files?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Notepad or any text editor are enough.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Where can I find documentation?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: There is incomplete documentation for LuaUI in &amp;quot;Spring/LuaUI/API.txt&amp;quot;. &amp;quot;Spring/LuaUI/widgets.lua&amp;quot; and &amp;quot;&amp;lt;modname&amp;gt;/LuaRules/gadgets.lua&amp;quot; contain the call-ins and their arguments. You will have to read the Spring source to find the list of call-outs and their arguments. The source of the Lua API can be found [https://taspring.clan-sy.com/svn/spring/trunk/rts/Lua/ here]. LuaSyncedCtrl.cpp, LuaSyncedRead.cpp, LuaUnsyncedCtrl.cpp, LuaUnsyncedRead.cpp, LuaOpenGL.cpp and LuaSyncedMoveCtrl.cpp contain most call-outs. (L, 1) usually refers to the first argument, (L, 2) to the second, etc. If you don&#039;t know C++, understanding those files will require a little bit of guesswork, but it should&#039;nt be hard. Note that not all calls are available to both LuaUI and LuaRules/LuaCob/LuaGaia.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;And there are following wiki articles:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
{{LuaInterfaces}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: What is a call-in? And a call-out?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Call-ins are functions defined in your script that Spring calls when a determined event takes place. For example, the gadget:Initialize() call-in is run by Spring when the widget is loaded.&lt;br /&gt;
Call-outs are functions defined in Spring you can run at whichever moment you desire. For example, when you call Spring.GetUnitTeam(unitID), the engine returns the teamID of the unit identified by &amp;quot;unitID&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: What is the difference between a widget and a gadget?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: A widget is a Lua script that works with LuaUI. A gadget works with LuaRules, LuaCob or LuaGaia. Widgets allow you to customize your interface, and must be unsynced. They can be bundled with the mod or you can save them in your &amp;quot;Spring/LuaUI/Wigets&amp;quot; directory. Gadgets can be synced or unsynced. LuaRules and LuaCob gadgets are usually part of a mod. LuaGaia gadgets should be part of a map. Gadgets can contain both synced and unsynced code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Where can I find examples?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: The &amp;quot;Spring/LuaUI/Widgets&amp;quot; directory contains many examples. More can be found at [http://spring.unknown-files.net/category/19/Lua_Scripts/ Unknow Files] or in the [http://www.caspring.org/ Complete Annihilation] mod.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Can I reload a script without restarting Spring?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Yes, you can type &amp;quot;/luaui reload&amp;quot; or &amp;quot;.luarules reload&amp;quot;. If you just need to check for syntax error, you can do it without having to load Spring by compiling the code. You can find a Lua compiler [http://luaforge.net/frs/?group_id=110&amp;amp;release_id=694 here]. [http://luaforge.net/frs/download.php/2218/lua5_1_2_Win32_bin.zip This] is the download for Windows users..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Why does the print function seem to do nothing?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Its output is displayed in stdout. If you are a windows user, to see it, you need to first unzip [http://lcc-clan.com/quant/winpipe.zip this archive] in your Spring directory, then open the command promt, navigate to your Spring directory, and run spring by typing &amp;quot;spring.exe | winpipe.exe&amp;quot;. The stdout will appear in the command prompt window.&lt;br /&gt;
You might want to run Spring in windowed mode so the command prompt is visible at all times.&amp;lt;br&amp;gt;&lt;br /&gt;
(for the lazy ones: there is also a Spring.Echo(var1,var2,...) that prints into the ingame chatbox)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: How do I print the &amp;quot;UnitDefs[unitDefID]&amp;quot; or &amp;quot;WeaponDefs[weaponDefID]&amp;quot; tables? &amp;quot;for k, v in ipairs(t) do print(k, v) end&amp;quot; does not behave as expected.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: Use &amp;quot;for k,v in UnitDefs[unitDefID]:pairs() do print(k, v) end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Where can I find help?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: There is a [http://spring.clan-sy.com/phpbb/viewforum.php?f=23 Lua section] in the Spring forums. Probably the most effective way, though, is to join #lua on the lobby.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q: Who implemented LuaUI, LuaRules, LuaCob and LuaGaia?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A: They were written by trepan.&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19564</id>
		<title>Weapon Variables</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19564"/>
		<updated>2008-07-01T18:41:38Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Descriptions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
=WeaponType=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;WeaponType&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AircraftBomb (dropped=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Drops a ballistic projectile (aka Plasma) at the same movement vector as the unit itself. It&#039;s only meant for planes. A plane that has a CBombDropper as its weapon1 is a bomber. The CBombDropper automatically calculates its burst and burstrate tags from its reload time and uses 5 as its reload time instead. It will fire if the first bomb would drop within a circle roughly unitspeed*burst*burstrate so the longer the burst and the faster the unit the larger the circle in which it will drop instead of not firing and hoping the next attack run will pass that circle.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;StarburstLauncher(vlaunch=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that rises vertically (starts with no velocity) for &amp;lt;weapontimer&amp;gt; seconds, then turns at a fixed rate towards its target. The projectile&#039;s lifetime depends on its range divided by its max speed (ignores acceleration) and the weapontimer somehow so the weapon can fall short depending on how these values are set. This is the only weapon that can properly perform intercepts and be interceptable. Emits a smoketrail.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BeamLaser (beamlaser=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Should be well known, this thing spawns a beam and does a portion of its total damage each frame. It can&#039;t have a burst or burstrate, it can&#039;t have collidefriendly=0, it can&#039;t be emit-sfxed if it has a beamtime longer than one frame and its damage decreases over range if the minIntensity=1 tag isn&#039;t used. The largebeamlaser tag allows changing the visual effect of the laser, doesn&#039;t affect the behaviour of the weapon itself in any way though. Beamlasers can be really annoying... BTW, their beam doesn&#039;t collide with water so if they&#039;re set to waterweapon=1 they can shoot normally even when underwater (won&#039;t shoot at underwater targets though).&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shield (isShield=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The shield. Really not much to say about this, the tags are all documented in the changelog.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TorpedoLauncher (waterweapon=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that will behave ballistically out of water and like a missile in water. Since waterweapon=1 is usually set for them they can fire underwater and they will target underwater units. The torpedo is the only projectile that doesn&#039;t explode on the water surface. An aircraft carrying a TorpedoLauncher is a special case, the thing turns into a bomb dropepr that will spawn a torpedo projectile, probably to get the whole bomber flight behaviour. Note that the waterweapon tag is also used to make a weapon fire underwater, independent of its type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DGun (weaponname contains the word &amp;quot;disintegrator&amp;quot;)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;This shoots a fireball that travels in a straight line. The fireball has no range limitation by itself so if it misses or is fired in FPS mode it will travel across the whole map and further. DGuns don&#039;t properly check their line of fire, if terrain is in the way they fire anyway. These things are meant to be used with noexplode=1 but of course you CAN use them without that, too. If ballistic=1 is set the fireball will be affected by gravity, the weapon won&#039;t compensate for it though so it will hit the ground before reaching the target. Might be useful for a Scorched Earth mod or something since you&#039;d have to aim it manually to hit anything.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LightingCannon (sic) (lineofsight=1 and rendertype=7)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon like the Beamlaser except with a lightning graphic and even more annoying. It won&#039;t damage shields and it has a hardcoded inaccuracy (comparable to targetMoveError, the code comment is &amp;quot;should make it weaker against air&amp;quot;...). Shares some of the weirdnesses with the beamlaser, e.g. being able to penetrate water.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LaserCannon (lineofsight=1 and either beamweapon=1 or weaponname contains &amp;quot;laser&amp;quot; (marked as &amp;quot;workaround for SWTA))&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The OTA-style laser. Probably one of the least annoying weapons in the engine. Its length is defined by the duration tag (together with the speed), BTW.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MissileLauncher (lineofsight=1 and smoketrail=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shoots a smoke-emitting projectile. It can use guidance, acceleration, etc. The projectile&#039;s lifetime depends on range/maxspeed so a slowly accelerating missile will fall short. It can also use trajectoryheight to have the shot arc but that has trouble with aiming at targets higher or lower than the shooter (see bug report, this REALLY could use some fixing). Pretty versatile weapon overall, if the laser rendering code was ported into this we could pretty much axe the LaserCannon completely.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EmgCannon (lineofsight=1 and rendertype=4 and color=2)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Few know about this, it&#039;s a line of sight (i.e. not ballistic) weapon that can use billboard rendering (looks like a sprite). No idea what drawbacks this has, noone ever uses it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Flame (lineofsight=1 and rendertype=5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The flamethrower. A really annoying weapon. AFAIK it won&#039;t even aim ahead of moving targets. Can&#039;t say much else about it since I haven&#039;t tried using it much but overall I&#039;d avoid the weapontype and fake the effect somehow, it&#039;s not pretty when fast and won&#039;t hit jack when slow.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Cannon (anything that didn&#039;t trigger another weapon)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Aka plasma. Shoots a ballistic projectile. Unlike the DGun it aims properly. Can&#039;t be emit-sfxed properly, maybe a ballistic DGun can fill that role.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Melee (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;When it fires it simply damages the target, no ifs or buts. It doesn&#039;t use a projectile and doesn&#039;t care about the line of fire. It won&#039;t even report a proper heading and pitch to AimWeapon so if you plan on using it in 75b2 you have to slave it to another weapon to handle the aiming. May be useful to be the damage dealer for a cosmetic weapon, i.e. you slave the Melee to a weapon that does no damage but looks pretty and the Melee does the damage. Kinda like the weapons in Warcraft and so.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Rifle (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon but an apparently unmaintained one. It has a hardcoded firing and explosion effect. I wouldn&#039;t use it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNoWeapon (weaponname is NOWEAPON, not reachable by any tag)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Apparently a placeholder used when a weapon isn&#039;t present. It&#039;s not really a weapondef but generated when the unit demands a NOWEAPON.&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
=Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Accuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How accurate a weapon is.  A larger number is less accurate.  If this tag is missing entirely, it has perfect accuracy unless its target moves unexpectedly.  Accuracy is relative to the distance to the target; for instance, if the target is very close, even a very high accuracy value will probably still hit.  If a target is very far away, even a very low accuracy value will likely cause the weapon to miss.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;accuracy=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlwaysVisible&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ignore LOS handling and always draw the weapon effect? Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;alwaysVisible=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AreaOfEffect&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How large the weapon&#039;s impact explosion is.  This affects how powerful the weapon&#039;s default impulse strength will be.  Currently, BeamLasers with an AreaOfEffect of 16 or above will deform the ground at their point of impact regardless of whether it has been told not to.  Can be any numeric value, but should generally be at least 8, regardless of the type of weapon.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;areaofeffect=192;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFeature&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This makes the weapon avoid features while targetting (the shoot will still collide with features). Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFeature=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 units will not try to avoid friendly units in their line of fire. Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ballistic&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 for the weapon to be subjected to gravity, travelling in an arc through the air, such as cannons. Ballistic is mutually exclusive to LineOfSight and Dropped.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ballistic=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the speed of the fadeout (each frame the beam&#039;s intensity is multiplied with that value). Can be between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamDecay=0.9;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a beam laser or not.  Beam lasers instantly hit their targets.  Rendertype must be 0.  Mutually exclusive to BeamWeapon.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamlaser=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How long to fire the laser before waiting for ReloadTime to start.  Can be any numeric value.  Defaults to 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamtime=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTTL&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the time (in frames) the beam will stay after being fired. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamTtl=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a regular laser or not.  BeamWeapons (lasers) do not instantly hit their targets, and are affected by the weaponvelocity tag.  Mutually exclusive to BeamLaser.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceRebound&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of vertical velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bouncerebound=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceSlip&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of horizontal velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bounceslip=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurnBlow&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon blows up when it reaches range the target was at when the weapon fired. Only works on plasma (rendertype=4) weapons and possibly missiles?  Can be 1 or 0.  A common usage is on flak guns.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burnblow=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Burst&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How many shots are in a burst.  Must be accompanied by burstrate.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burst=3;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurstRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast the Burst fires.  If set much below 0.1, it stops having any discernable effect.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burstrate=0.1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CameraShake&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much the camera shakes on impact. (needs the cameraShake widget to work). Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cameraShake=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CanAttackGround&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;canAttackGround=0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag is the tag that emits a custom explosion every frame for a projectile. Can be used on any weapon to imitate dynamic lighting, smoke, fire, ball lightning, magic and many other things. Enter the name of your effect to make it emit once per frame.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cegtag=MISSILE_SMOKE_FX;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes. While this still works for lasers, using rgbcolor=X X X; is a much, much better route. Plus, the RGBColor tag will override any color=x; tags in the tdf. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ColorMap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by flamethrower. Must be a CColorMap type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;colorMap=1 0 0 1 &amp;amp;nbsp;0 1 0 1;&amp;lt;br&amp;gt;(red to green fade)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollideFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 this weapon will not hit friendly units. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollisionSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the physical size of projectiles, percentage of size for flamethrower and absolute value emg, plasma and laser. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionSize=30;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CommandFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;When ordered to attack ground this weapon will only fire once, rather than continuously. This does not work when ordered to attack units (It will continue to fire until the target is dead). If the unit has CanDgun=1 in its FBI, commandfire will identify that weapon with the dgun button. The weapon wont fire unless the dgun button is pressed. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;commandfire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CoreThickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of the core of a laser (the part which use rgbcolor2).  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coreThickness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Coverage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The range for anti-weapon weapons, like antinukes.  This will be shown on the minimap as a guide.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coverage=1280;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Adds a constant factor to the terraform the explosion does. Can be any numeric value. (default 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterMult&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Multiplies with the terraform the explosion does. Can be any numeric value. (default :=impulsFactor)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CylinderTargetting&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If greater than 0, range will be checked in a cylinder instead of a sphere:&lt;br /&gt;
half height=unitradius*cylinderTargetting&lt;br /&gt;
Defaults to 1 for Melee type weapons, 0 otherwise. In 0.76b1, does not work with BeamLaser weapons.([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cylinderTargetting=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missles, unlike wobble it doesn&#039;t rotate the missile and it prevents the missile from going too far off course so a dancing swarm will remain coherent. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dance=97;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dropped&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Sets the weapon to be dropped, like from a bomber.  Must be RenderType=6 and needs the Model tag to be specified.  Mutually exclusive to Ballistic and LineOfSight.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dropped=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Duration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For how many seconds a beam weapon will be fired before waiting for reload time.  Also controls the length of the beam in BeamWeapon projectiles.  Can be any numeric value.  Used for rendertype 0 and 7 weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;duration=.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageExp&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Exponent of the range damage formula, 0 (the default) disables dynamic damage. 1 means linear scaling. Only used by BeamLasers and LightingCannons. Can be any numeric value. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=263438#p263438 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageExp=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageInverted&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Inverts the damage curve (more damage at far range). Only used by BeamLasers and LightingCannons. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageInverted=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageMin&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum dynamic range damage value. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageMin=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set it will use this value in the dynamic range damage formula instead of the range value from the weapon in the calculation. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EdgeEffectiveness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Determines what percent of a weapon&#039;s maximum damage value will be applied to units as they are closer to the outer edge of the weapon&#039;s AreaOfEffect.  Must have a decimal value between 0 and 1.  Default in OTA was 0, probably the same in Spring. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=251180#p251180 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;edgeEffectiveness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EnergyPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Energy used per shot.  If the specified amount of energy is not available, the weapon will not be able to shoot.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;energypershot=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExplosionSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Explosion animation speed/time. (only used by BeamLaser and LightingCannon?) default:&lt;br /&gt;
gd=max(30, DefaultDamage/20);&amp;lt;br&amp;gt;&lt;br /&gt;
expSpeed=(8+(gd*2.5))/(9+(sqrt(gd)*.7))/2;&amp;lt;br&amp;gt;&lt;br /&gt;
Can be any numeric value.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;explosionSpeed=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rate at which the beamweapon fades out after it goes past its maximum range. 0 is never fade out, 1 is finish fading out exactly at max range, the default 0.5 is the previous behaviour.&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireStarter&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How likely the weapon will set trees on fire.  High values make trees likey to be set on fire, low values make trees likely to just explode or tip over.  Can be any numeric value between 0 and 100.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireStarter=75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireSubmersed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the weapon can fire underwater, if not then not. Use it for weapons that cannot fire underwater but can hit underwater targets. Works even for torpedoes. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireSubmersed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FixedLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missiles, starburst missiles and torpedoes, this makes the projectile spawn with the orientation of the shooting piece instead of their normal orientation. The weapon will not properly check if allies are in the way so make sure you align the launchers in a way that won&#039;t hammer right into your own forces and perhaps use collideFriendly=0. FixedLauncher conflicts with trajectoryHeight and IMO combining them is pointless anyway so don&#039;t use both on a weapon. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fixedLauncher=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameGFXTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Makes the flamethrower projectile stay alive as a graphical effect (doesnt do any damage) after it has reached maxrange. It is defined in percent, so 1.2 makes it remain 20% beyond maxrange. Can be any numeric value. &lt;br /&gt;
	&amp;lt;TD&amp;gt;flamegfxtime=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlightTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;flightTime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;GroundBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the ground (on land or the ocean floor). Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;groundbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Guidance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Specifies whether or not the weapon is capable of correcting its trajectory mid-flight. Will not track a moving target. Works only on missile and torpedo weapons.  Can be set to 1 or 0.  See TurnRate for information on specifying how well a weapon can track a target.  Requires rendertype=1, lineofsight=1, and selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;guidance=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HardStop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For LaserCannon, defined if the laser effect hard stops or fade out. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;hardStop=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightBoostFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Gives control of cannon height range boost (more than 1 means increased range, 0 means the cannon has fixed range regardless of height difference to target. default is a magic value calculated on weapon init, based on range tag and theoretical max range.). Can be any numeric value, including negative ones (&amp;lt;0 := automatically calculated).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightBoostFactor=-1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightMod&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Changes the sphere weapon range into an ellipsis. If it is larger 1.0 the weapon can&#039;t shoot as height as far, i.e. 0.5 means it can shoot twice as height as far ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image]). Note that this may not work well with beam weapons, use minIntensity (0..1) tag to fix that.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightMod=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A constant factor added on the weapon&#039;s impulsefactor.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulseBoost=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The multiplier on the weapon&#039;s default impulsefactor, which is determined based on a weapon&#039;s default damage and AreaOfEffect.  The impulse of a weapon is how strong of a kinetic force will be applied to its target or anything near the point of impact.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulsefactor=2.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Intensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Alpha (brighness and washout effect) of the weapon.  Can be used on any rendertype 0, 3, or 4 weapon.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;intensity=1.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of shields that can intercept this weapon. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a shield with that digit set to one will intercept this weapon, for instance, the example will result in the weapons being blocked by shields with types 1 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Interceptor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can intercept missiles with the Cruise tag.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;interceptor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1 a beamlaser uses an alternate graphics effect. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;largeBeamLaser=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserFlareSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size of the flare for laser weapons, multiplier for thickness. Can be set to any numeric value. (default: 15)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;laserFlareSize=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Leadbonus&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Is multiplied with the unit&#039;s experience and added to the lead limit.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadbonus=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LeadLimit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Limits the maximum distance a unit will lead a target (default is -1 which means infinite).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadLimit=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LineOfSight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NOT SUPPORTED BY SPRING!&amp;lt;br&amp;gt;&lt;br /&gt;
It is only used to detect the weapontype of ota weapon configs.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LodDistance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum camera distance at which the default beamweapon projectile is simplified to rectangle. Can be set to any numeric value. (default: 1000)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;lodDistance=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ManualBombSettings&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For Bombers, use burst and burstrate tags instead of hardcoded values.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;manualBombSettings=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MetalPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Metal used per shot.  If the specified amount is not available, the weapon cannot be fired.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;metalpershot=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MinIntensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For beamlasers - always hit with some minimum intensity (a damage coeffcient normally dependent on distance - range 0 to 1). Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;minIntensity=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Model&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The 3DO or S3O model to be used as this weapon&#039;s physical representation.  3DO modesl do not need a .3do extension, but S3O weapon do.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;model=missile;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MovingAccuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A weapon&#039;s accuracy while moving.  See Accuracy.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;movingaccuracy=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MyGravity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For ballistic weapons (Cannon and Bomb), it overrides the map gravity if used. Regular map gravity is around 0.2.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;myGravity=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoExplode&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether or not the weapon will explode on impact or continue on its path.  An example is the d-gun.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noexplode=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoSelfDamage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This weapon will not damage the unit that fired it.  For instance, a nuke silo could shoot itself and not take any damage if this was active.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noselfdamage=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NumBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum number of times a weapon will bounce. -1 for infinite. Defaults to -1&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;numbounce=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Paralyzer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, this weapon will not cause any damage to its target, but will instead paralyze (aka EMP).  The default damage value of a weapon with this active will be applied to the target&#039;s HP; once the HP is overwhelmed, it will be paralyzed.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzer=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ParalyzerTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On Paralyzer weapons, determines the maximum length of time the target will be paralyzed (In seconds?). The timer is refreshed every time the target is hit by the weapon. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzetime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PredictBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;No idea what it does. Default 0 for non-burnblow, 0.5 for burnblow weapons. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;predictBoost=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Projectiles&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon fires this many projectiles at once (shotgun style). Make sure you put them on different trajectories somehow (sprayangle or different firepoints) because otherwise they&#039;ll all be clumped in one shot. Works well combined with bursts. Can be set to any integer value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;projectiles=1o;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ProximityPriority&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Acts as a multiplier for the distance to the target in the priority calculation. Note that negative values make weapons prefer distant targets. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;proximityPriority=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PulseSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On LargeBeamLaser, how fast the pulsating effect at the beam start is. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;pulseSpeed=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum range of the weapon.  If set to noexplode, the weapon will disappear after this range has been met.  If set to burnblow, the weapon will explode after this range has been met.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;range=750;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ReloadTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of time between shots.  If a unit is paralyzed, this stops counting down.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;reloadtime=3.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rendertype&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The way the weapon will be displayed.  Certain rendertypes are incompatibile with other tags, but it&#039;s generally for a logical reason.  The rendertypes are as follows: 0 - Laser, 1 - Model, 3 - Plasma, 4 - Unit explosion (usally), 5 - Flamethrower, 6 - Dropped, 7 - Lightning.  There&#039;s no documented use of rendertype=2 in OTA, and it probably doesn&#039;t do anything in Spring.  3 and 4 are usually interchangeable, both can be used to render a plasma/EMG/whatever shot; this is probably for compatibility.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rendertype=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color of the rendertype 0, 3, 4, 7 weapon, specified in RED_GREEN_BLUE format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rgbcolor=1 0.3 1; - this would make evul-purple&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color at the core of a rendertype 0 (laser) weapon.  Specified the same as above.  Defaults to white.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2=0 1 0; - this would make a weird green middle for the evul-purple laser&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ScrollSeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. How fast the beam apears to be moving towards it target. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;scrollSeed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Selfprop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Required for Guidance tag.  This weapon can propel itself and can have things like acceleration, rather than always travelling at one speed.  See Guidance, StartVelocity, WeaponAcceleration, WeaponVelocity.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the visible size of projectiles. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;size=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeGrowth&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines how fast flame projectiles will grow in size. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sizegrowth=0.6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmokeTrail&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Does the projectile leave a smoke trail or not.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smoketrail=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made whe the weapon hits.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhit=emghit;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHitVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhitvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStart&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made when the weapon begins to fire.  Will fire only once if the weapon is shot in a burst.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstart=emgfire;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStartVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstartvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundTrigger&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will sound every time a shot is fired in a burst sequence.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundtrigger=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SprayAngle&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How wide the the angle of a burst from a burst weapon can be.  Very similar to Accuracy, except that if a weapon has no sprayangle, all the shots will be fired at the same spot, even if the weapon&#039;s aim is off.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sprayangle=1024;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StartVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The starting speed of the weapon as it is first fired.  Only applicable to weapons that can accelerate.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;startvelocity=200;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stockpile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can this weapon be stockpiled, for instance like a nuke launcher.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;stockpile=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SubMissile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For TorpedoLaunchers, if set to 1 the torpedo will travel like a missile outside of water. It will not emit a smoketrail, though. When fired from a plane it will behave the same way but the plane will probably be considered a fighter, not a bomber. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;subMissile=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If 1 (default 0) it will make the weapon continue firing while it aims for a new target. Only works on continous beam lasers currently. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargeBorder&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If nonzero, targetting units will TryTarget at the edge of collision sphere (radius*tag_value, [-1;1]) instead of its centre. Can be set between 0 and 1. Defaults to 1 for Melee type weapons, 0 otherwise. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetBorder=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Targetable&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will be automatically targeted by any Interceptor weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetable=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargetMoveError&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The degree to which a weapon&#039;s aiming will fail to keep up with its target&#039;s movement.  If set very low or not set at all, a weapon will lead its target and almost always hit unless there&#039;s a lot of micromanagement on the part of the person controlling the target.  If set too high (about 0.3 or above), the weapon will have a lot of difficulty even tracking its target enough to get a shot off.  Can probably only be set between 0 and 1.  Beyond 1, the weapon would be virtually useless.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetmoveerror=0.15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of a beamweapon or beamlaser, default is 2.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;thickness=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TileLength&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. Defines the length before the texture used is repeated (tiled).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tileLength=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ToAirWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will only be capable of targetting units which are flying, or are capable of flying.  Can be set to 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;toairweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tolerance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount to which the weapon&#039;s &amp;quot;real&amp;quot; aim can be off while the weapon will still be able to fire accurately at the target.  This worked in OTA, but I&#039;m not 100% sure if it works in Spring.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tolerance=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tracks&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If the missile tracks a moving target. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tracks=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TrajectoryHeight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The height of the arc of a missile weapon. It is useful for compensating for mountains or debris. Is relative to the weapons speed (Higher speed, higher arc) and the range the weapon is firing at (Lower range lower arc). Requires Guidance and Turnrate to hit its target when over 1. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;trajectoryheight=0.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turnrate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast a guided weapon can turn.  Can be any numerical value between 0 and 64000.  If set to 0, the weapon can&#039;t turn at all, if set to 64000, the weapon can literally defy all known physics and turn 180 degrees in a fraction of a second.  This is relative to a weapon&#039;s velocity; a weapon with a very low velocity (~200) wouldn&#039;t need a very high turnrate to keep up with a fighter, although it would probably never catch it because of its slow speed.  A weapon with a very high velocity (~1000) would need a very high value in order to be able to hit targets that turn suddenly.&lt;br /&gt;
	&amp;lt;TD&amp;gt;turnrate=32000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turret&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 if weapon is used by a turret that rotates. Set to 0 if weapon is forward firing, ie, has no rotating turret piece.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;turret=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TwoPhase&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weapon operates in two phases... eh... yeah, I honestly have no idea what the difference between this and VLaunch is.  Generally use it with VLaunch as well.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;twophase=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VLaunch&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 to launch the weapon vertically.  Can only be used with missile-type weapons with a TurnRate.  Cannot be used at the same time as Turret.  Set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;vlaunch=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the surface of the water. Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Water weapons behave somewhat like Dropped weapons out of water, and like missiles underwater. Is the only type of weapon that can fire under water.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponAcceleration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tells the weapon how fast it should accelerate from its StartVelocity to its actual WeaponVelocity.  Increases the weapon&#039;s velocity every second by the amount specified.  Can be any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponacceleration=50;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponTimer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;;How long until the weapon will go into its second phase.  For use with missile weapons.  For VLaunch weapons, the weapon will turn to actually go towards its target after the specified number of seconds has expired.  For non-VLaunch missiles with a TurnRate, the weapon will go randomly off-course after this period of time.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weapontimer=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The speed the weapon moves after being fired. If StartVelocity is lower than this number, the weapon will increase speed to its WeaponVelocity at the rate specified by its WeaponAcceleration.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponvelocity=800;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Wobble&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount that a missile will wobble off-course. Requires TurnRate. Turnrate will wrestle with wobble to keep the weapon on course, so wobble must be high enough to compensate to have any effect. Can be set to any numerical value between 0 and 64000.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;wobble=15000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
NOTE: Variables that are defined by either a 1 or a 0 are BOOLEAN, where 1 means TRUE and 0 means FALSE.&lt;br /&gt;
&lt;br /&gt;
NOTE 2: &amp;quot;Any numerical value&amp;quot; for things that relate to angles really means any value between 0 and 64,000 since that&#039;s between 0 and 360 degrees in spring measurement. Setting it higher than 64,000 will bring it &#039;full circle&#039; so to speak.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Texture Tags=&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table width=500 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 1em; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt; Weapon &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Used Texture Tags &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AircraftBomb&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PlasmaCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EmgCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameThrower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flame&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = muzzle&amp;lt;br&amp;gt;texture4 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LightingCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MissileLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StarburstLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;texture3 = flame&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TorpedoLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
NOTE: All textures need to be `atlased`. So you have to define them in the &#039;&#039;&#039;resources.tdf&#039;&#039;&#039; and use the reference name in the texture tags.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Plasma Visuals=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is more transparent than the previous particle. Can be set to any numerical value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay=0.95;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the distance between plasma particles is proportional to the size of the two particles. If set to 0, the distance between plasma particles will be proportional to the size of the first particle.&lt;br /&gt;
Can be set to 1 or 0. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Distance between each plasma particle.  Can be set to any number value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is smaller than the previous within the same plasma shot. Can be set to any numerical value. (default: 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Number of particles used in one plasma shot.  Can be set to any number value. (default: 5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages=20;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Shield/Repulsor Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExteriorShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not have any effect on weapons fired from within its field.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;exteriorshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;IsShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, this &amp;quot;weapon&amp;quot; is no longer a weapon, is now a repulsor or a shield, based on the other properties given to it.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;isshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldAlpha&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How clearly visible the shield is, if you have VisibleShield turned on.  Value is between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldalpha=0.4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldEnergyUse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of energy used to repulse or destroy weapons.  Will be used constantly while the weapon is in its area of effect if it is a repulsor, will be used only once on impact if it is a shield.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldenergyuse=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldForce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The force applied to weapons, an arbitrary number.  Set to 1, it will not deflect very well.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldforce=1.75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldBadColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 0% strength, if you have VisibleShield turned on.  Defined in R G B format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldbadcolor=0 1 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldGoodColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 100% strength, if you have VisibleShield turned on.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldgoodcolor=1 0 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of weapons that this shield can intercept. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a weapon with that digit set to one will be intercepted by this shield, for instance, the example will result in the shield blocking weapons with types 2 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType=6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldMaxSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum speed the repulsor will push weapons away at.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldmaxspeed=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much &amp;quot;power&amp;quot; a shield can store.  &amp;quot;Power&amp;quot; is not the same as energy; think of it as the shield/repulsor&#039;s private battery source.  It can be drained completely by defending against weapons, even if you have lots of energy.  &#039;&#039;Power is drained by the affected weapons damage.&#039;&#039;  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpower=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegen&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How quickly the shield regenerates its &amp;quot;power&amp;quot;, even when under attack.  Regenerates the amount specified every second.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregen=25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegenEnergy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much energy is required to keep the shield regenerating its &amp;quot;power&amp;quot;.  For instance, you might have it set so that 100 units of energy are necessary for every 25 units of &amp;quot;power&amp;quot;.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregenenergy=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRadius&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the size of the area the shield/repulsor protects.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldradius=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRepulsor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the &amp;quot;shield&amp;quot;-type weapon will repulse projectiles.  If set to 0, it will destroy them.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldrepulsor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldStartingPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the shield starts with this much power instead of 0.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldStartingPower=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmartShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not affect owned/allied weapons.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smartshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield will be visible.  Only for use on shield-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldHitFrames&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Numbers of frames how long the shield should be visible after it got hit (the alpha value fades after the hit).  Can be set to any numerical value. (default: 0 frames)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleShieldHitFrames=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldRepulse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the repulsing effect will be visible.  Only for use on repulsor-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshieldrepulse=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Weapons]]&lt;br /&gt;
&lt;br /&gt;
[[category:Shields]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11448</id>
		<title>Lua OpenGL Api</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11448"/>
		<updated>2008-06-29T14:17:32Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit/Feature Draw Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spring ==&lt;br /&gt;
&#039;&#039;&#039;gl.GetSun&#039;&#039;&#039;&lt;br /&gt;
  ()        -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;pos&amp;quot; ) -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;shadowDensity&amp;quot; [, &amp;quot;unit&amp;quot;] ) -&amp;gt; number shadowDensity&lt;br /&gt;
  ( &amp;quot;diffuse&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;ambient&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;specular&amp;quot; )                 -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigScreen&#039;&#039;&#039;&lt;br /&gt;
  ( number screenWidth, number screenDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawMiniMap&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SlaveMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( boolean mode ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( int px, int py, int sx, int sy ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetViewSizes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number x, number y&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;gl.Translate&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scale&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rotate&#039;&#039;&#039;&lt;br /&gt;
  (number angle, number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Color&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b[, number a] } |&lt;br /&gt;
      number r, number g, number b[, number a] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineWidth&#039;&#039;&#039;&lt;br /&gt;
  ( number width ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSize&#039;&#039;&#039;&lt;br /&gt;
  ( number size ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Billboard&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;use this to draw 2d primitives in DrawWorld&amp;lt;/font&amp;gt;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetState&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  ShadeModel = GL_SMOOTH&lt;br /&gt;
  Scissor    = false&lt;br /&gt;
  Texture    = false&lt;br /&gt;
  ColorMask  = true, true, true, true&lt;br /&gt;
  DepthMask  = false&lt;br /&gt;
  DepthTest  = false  (GL_LEQUAL)&lt;br /&gt;
  Culling    = false  (GL_BACK)&lt;br /&gt;
  LogicOp    = false  (GL_INVERT)&lt;br /&gt;
  AlphaTest  = false  (GL_GREATER, 0.5f)&lt;br /&gt;
  Blending   = GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetMatrices&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  Resets GL_TEXTURE matrix stack&lt;br /&gt;
  Resets GL_MODELVIEW matrix stack&lt;br /&gt;
  Resets GL_PROJECTION matrix stack&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Clear&#039;&#039;&#039;&lt;br /&gt;
  ( GL.DEPTH_BUFFER_BIT, number cleardepth ) -&amp;gt; nil&lt;br /&gt;
  ( GL.STENCIL_BUFFER_BIT, int clearstencil ) -&amp;gt; nil&lt;br /&gt;
  ( GL.COLOR_BUFFER_BIT | GL.ACCUM_BUFFER_BIT, number r, number g, number b, number a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Draw Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BeginEnd&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Drawing_Primitives|GLType]], function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Vertex&#039;&#039;&#039;&lt;br /&gt;
  ( { number x, number y [, number z [, number w ]] } |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Normal&#039;&#039;&#039;&lt;br /&gt;
  (  number x, number y, number z |&lt;br /&gt;
   { number x, number y, number z } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rect&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexRect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;texture rect&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2,&lt;br /&gt;
  [ boolean flip_s, boolean flip_t | number s1, number t1, number s2, number t2 ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Shape&#039;&#039;&#039;&lt;br /&gt;
 ( number [[Lua_ConstGL#Drawing_Primitives|GLtype]],&lt;br /&gt;
   elements = {&lt;br /&gt;
     [1] = { v | vertex   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;required&amp;lt;/font&amp;gt;&lt;br /&gt;
             n | normal   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             t | texcoord = { number x, number y },                     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             c | color    = { number r, number g, number b, number a }  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
     },&lt;br /&gt;
     etc ...&lt;br /&gt;
   }&lt;br /&gt;
 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Text&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;, number x, number y, number size [, string &amp;quot;options&amp;quot;] )&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  options:&lt;br /&gt;
  &#039;c&#039; = center&lt;br /&gt;
  &#039;r&#039; = right&lt;br /&gt;
  &#039;n&#039; = deactives colorCodes (so you can use gl.Color() to write transparent text etc.)&lt;br /&gt;
  &#039;o&#039; = black outline&lt;br /&gt;
  &#039;O&#039; = white outline&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetTextWidth&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;) -&amp;gt; number width  --  in pixels, with a font size of 1.0&lt;br /&gt;
&lt;br /&gt;
== Unit/Feature Draw Functions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Unit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws an unit; on default it uses LOD, with lod&amp;lt;0 it is turned off, else it defines a specific level)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitRaw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(redundant -&amp;gt; use gl.Unit instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitShape&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Feature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FeatureShape&#039;&#039;&#039;&lt;br /&gt;
  ( number featureDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(world space -&amp;gt; unit space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(unit space -&amp;gt; piece space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPiece&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws the unit piece)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(use gl.UnitPieceMultMatrix instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawListAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number listID, [ boolean midPos,&lt;br /&gt;
      number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
      number degrees, number rotX, number rotX, number rotZ ] ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawFuncAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean midPos, function [, arg1,... ]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Switches ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Blending&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#BlendingFactorSrc|srcmode]], number [[Lua_ConstGL#BlendingFactorDest|dstmode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.AlphaTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]], number threshold ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Culling&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#Culling|face]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ColorMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( boolean r, boolean g, boolean b, boolean a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LogicOp&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#LogicOp|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Fog&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Smoothing&#039;&#039;&#039;&lt;br /&gt;
 ( (boolean enable | number POINT), &lt;br /&gt;
   (boolean enable | number LINE),&lt;br /&gt;
   (boolean enable | number POLYGON) ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.EdgeFlag&#039;&#039;&#039;&lt;br /&gt;
 ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scissor&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( int x, int y, int w, int h ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineStipple&#039;&#039;&#039;&lt;br /&gt;
  ( string any ) -&amp;gt; nil &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(use springs default line stipple)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
  ( int factor, number pattern ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number [[Lua_ConstGL#PolygonMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonOffset&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number factor, number units ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Textures ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Texture&#039;&#039;&#039;&lt;br /&gt;
  ( [ number texNum, ] boolean enable | string name ) -&amp;gt; nil | boolean loaded&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
                           current formats:&lt;br /&gt;
  :${opt}:/LuaUI/images/image.png = filename&lt;br /&gt;
                              #12 = unitDef 12 buildpic&lt;br /&gt;
                            %34:1 = unitDef 34 s3o tex2 (:0-&amp;gt;tex1,:1-&amp;gt;tex2)&lt;br /&gt;
                              !56 = lua generated texture 56&lt;br /&gt;
                           $units = 3do textureatlas&lt;br /&gt;
                          $shadow = shadowmap&lt;br /&gt;
                        $specular = specular cube map&lt;br /&gt;
                      $reflection = reflection cube map&lt;br /&gt;
&lt;br /&gt;
                         possible ${opt}&#039;s are:&lt;br /&gt;
                              &#039;n&#039; = nearest&lt;br /&gt;
                              &#039;l&#039; = linear&lt;br /&gt;
                              &#039;a&#039; = aniso&lt;br /&gt;
                              &#039;i&#039; = invert&lt;br /&gt;
                              &#039;g&#039; = greyed&lt;br /&gt;
                              &#039;c&#039; = clamped&lt;br /&gt;
                              &#039;b&#039; = border&lt;br /&gt;
                              &#039;t&#039; = tint (don&#039;t know how to use it, sorry)&lt;br /&gt;
&lt;br /&gt;
                 example: &amp;quot;:iac:/LuaUI/images/image.png&amp;quot;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int xsize, int ysize,&lt;br /&gt;
  [ { &lt;br /&gt;
    [target     = number,] &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(like GL_TEXTURE_1D,GL_TEXTURE_2D,...)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [format     = number,]&lt;br /&gt;
    [min_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [mag_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [wrap_s     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_t     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_r     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [aniso      = number,]&lt;br /&gt;
    [border     = boolean,]&lt;br /&gt;
    [fbo        = boolean,] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [fboDepth   = boolean] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  } ]&lt;br /&gt;
  ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTexture&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTextureFBO&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TextureInfo&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; nil | {&lt;br /&gt;
      xsize = number,&lt;br /&gt;
      ysize = number,&lt;br /&gt;
      alpha = boolean, //not used yet&lt;br /&gt;
      type  = number,  //not used yet&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
   the format of the texture string is the same as in gl.Texture()&lt;br /&gt;
&amp;lt;/font&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number x | &lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum,&lt;br /&gt;
    number x |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexGen&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexGen&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CopyToTexture&#039;&#039;&#039;&lt;br /&gt;
  (string texture, int xoff, int yoff, int x, int y, int w, int h &lt;br /&gt;
  [,number target,number level])-&amp;gt;nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.RenderToTexture&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string fbotexture, lua_func ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GenerateMipmap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs glGenerateMipmapEXT!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Lighting&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ShadeModel&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#ShadeModel|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Light&#039;&#039;&#039;&lt;br /&gt;
  ( int light, &lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param1, number param2, number param3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Material&#039;&#039;&#039;&lt;br /&gt;
  ({&lt;br /&gt;
    ambient   = {number r, number g, number b[, number a]},&lt;br /&gt;
    diffuse   = {number r, number g, number b[, number a]},&lt;br /&gt;
    ambidiff  = {number r, number g, number b[, number a]},&lt;br /&gt;
    emission  = {number r, number g, number b[, number a]},&lt;br /&gt;
    specular  = {number r, number g, number b[, number a]},&lt;br /&gt;
    shininess = number specularExponent&lt;br /&gt;
  }) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Display Lists ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Display Lists save given vertex attributes in a static buffer, so the GPU can directly read them (without the CPU). Display Lists are a lot faster (10-60x) than standard drawing with glShape/glBeginEnd, so try to use them when ever you can. If you want to learn more about them, g00gle is your friend ;)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateList&#039;&#039;&#039;&lt;br /&gt;
  ( function [,arg1 [,arg2...]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CallList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Hardware relevant ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.HasExtension&#039;&#039;&#039;&lt;br /&gt;
  ( string extname ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetNumber&#039;&#039;&#039;&lt;br /&gt;
  ( number ext, int count ) -&amp;gt; number [, number, number, ... #count ]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetString&#039;&#039;&#039;&lt;br /&gt;
  ( number ext ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
== DrawGroundPrimitives ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundCircle&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius, number divs [, number slope ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundQuad&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Note: x1,z1,x2 &amp;amp; z2 are rounded, so don&#039;t use it for very small or moving objects&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number z1, number x2, number z2,&lt;br /&gt;
    [ boolean useNorm,&lt;br /&gt;
      [ number tu1, number tv1, number tu2, number tv2 |&lt;br /&gt;
        boolean useTextureCoord ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Extended ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ActiveTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexNames&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; { [1] = string texture, etc ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexCoords&#039;&#039;&#039;&lt;br /&gt;
  ( string tatexture ) -&amp;gt; number xstart, number ystart, number xend, number yend&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetShadowMapParams&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; number xmid, number ymid, number p17, number p18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetMatrixData&#039;&#039;&#039;&lt;br /&gt;
  ( GL.PROJECTION [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( GL.MODELVIEW  [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i] &lt;br /&gt;
  ( GL.TEXTURE    [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( &amp;quot;shadow&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camera&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;caminv&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camprj&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;billboard&amp;quot; )             -&amp;gt; nil | number, etc.. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSprite&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable, [boolean coord_replace, boolean coord_origin_upper] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointParameter&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number v1, number v2, number v3, &lt;br /&gt;
    [ number sizeMin, number sizeMax, number sizeFade ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SecondaryColor&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b } |&lt;br /&gt;
      number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FogCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number value ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ClipPlane&#039;&#039;&#039;&lt;br /&gt;
  ( int plane, &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;note: $plane can only be 1 or 2&amp;lt;/font&amp;gt;&lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number A, number B, number C, number D ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MatrixMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#MatrixMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadIdentity&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Ortho&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Frustum&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushPopMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushAttrib&#039;&#039;&#039;&lt;br /&gt;
  ( [ number [[Lua_ConstGL#glPushAttrib.28.29_bits|attrib]] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopAttrib&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Flush&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Finish&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Shaders (GLSL) ==&lt;br /&gt;
  [[Lua_GLSL_Api]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12163</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12163"/>
		<updated>2008-06-28T18:23:02Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (number unitID,  int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; [[Lua_UnitRendering#Material_UserData|userdata Material]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, [[Lua_OpenGL_Api#Display_Lists|preDisplayList]], [[Lua_OpenGL_Api#Display_Lists|postDisplayList]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;none user accessible methods (yet)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12162</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12162"/>
		<updated>2008-06-20T03:39:15Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Material UserData */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; [[Lua_UnitRendering#Material_UserData|userdata Material]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, [[Lua_OpenGL_Api#Display_Lists|preDisplayList]], [[Lua_OpenGL_Api#Display_Lists|postDisplayList]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;none user accessible methods (yet)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11447</id>
		<title>Lua OpenGL Api</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11447"/>
		<updated>2008-06-19T02:31:55Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Text */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spring ==&lt;br /&gt;
&#039;&#039;&#039;gl.GetSun&#039;&#039;&#039;&lt;br /&gt;
  ()        -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;pos&amp;quot; ) -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;shadowDensity&amp;quot; [, &amp;quot;unit&amp;quot;] ) -&amp;gt; number shadowDensity&lt;br /&gt;
  ( &amp;quot;diffuse&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;ambient&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;specular&amp;quot; )                 -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigScreen&#039;&#039;&#039;&lt;br /&gt;
  ( number screenWidth, number screenDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawMiniMap&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SlaveMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( boolean mode ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( int px, int py, int sx, int sy ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetViewSizes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number x, number y&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;gl.Translate&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scale&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rotate&#039;&#039;&#039;&lt;br /&gt;
  (number angle, number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Color&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b[, number a] } |&lt;br /&gt;
      number r, number g, number b[, number a] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineWidth&#039;&#039;&#039;&lt;br /&gt;
  ( number width ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSize&#039;&#039;&#039;&lt;br /&gt;
  ( number size ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Billboard&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;use this to draw 2d primitives in DrawWorld&amp;lt;/font&amp;gt;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetState&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  ShadeModel = GL_SMOOTH&lt;br /&gt;
  Scissor    = false&lt;br /&gt;
  Texture    = false&lt;br /&gt;
  ColorMask  = true, true, true, true&lt;br /&gt;
  DepthMask  = false&lt;br /&gt;
  DepthTest  = false  (GL_LEQUAL)&lt;br /&gt;
  Culling    = false  (GL_BACK)&lt;br /&gt;
  LogicOp    = false  (GL_INVERT)&lt;br /&gt;
  AlphaTest  = false  (GL_GREATER, 0.5f)&lt;br /&gt;
  Blending   = GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetMatrices&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  Resets GL_TEXTURE matrix stack&lt;br /&gt;
  Resets GL_MODELVIEW matrix stack&lt;br /&gt;
  Resets GL_PROJECTION matrix stack&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Clear&#039;&#039;&#039;&lt;br /&gt;
  ( GL.DEPTH_BUFFER_BIT, number cleardepth ) -&amp;gt; nil&lt;br /&gt;
  ( GL.STENCIL_BUFFER_BIT, int clearstencil ) -&amp;gt; nil&lt;br /&gt;
  ( GL.COLOR_BUFFER_BIT | GL.ACCUM_BUFFER_BIT, number r, number g, number b, number a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Draw Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BeginEnd&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Drawing_Primitives|GLType]], function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Vertex&#039;&#039;&#039;&lt;br /&gt;
  ( { number x, number y [, number z [, number w ]] } |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Normal&#039;&#039;&#039;&lt;br /&gt;
  (  number x, number y, number z |&lt;br /&gt;
   { number x, number y, number z } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rect&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexRect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;texture rect&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2,&lt;br /&gt;
  [ boolean flip_s, boolean flip_t | number s1, number t1, number s2, number t2 ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Shape&#039;&#039;&#039;&lt;br /&gt;
 ( number [[Lua_ConstGL#Drawing_Primitives|GLtype]],&lt;br /&gt;
   elements = {&lt;br /&gt;
     [1] = { v | vertex   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;required&amp;lt;/font&amp;gt;&lt;br /&gt;
             n | normal   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             t | texcoord = { number x, number y },                     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             c | color    = { number r, number g, number b, number a }  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
     },&lt;br /&gt;
     etc ...&lt;br /&gt;
   }&lt;br /&gt;
 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Text&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;, number x, number y, number size [, string &amp;quot;options&amp;quot;] )&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  options:&lt;br /&gt;
  &#039;c&#039; = center&lt;br /&gt;
  &#039;r&#039; = right&lt;br /&gt;
  &#039;n&#039; = deactives colorCodes (so you can use gl.Color() to write transparent text etc.)&lt;br /&gt;
  &#039;o&#039; = black outline&lt;br /&gt;
  &#039;O&#039; = white outline&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetTextWidth&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;) -&amp;gt; number width  --  in pixels, with a font size of 1.0&lt;br /&gt;
&lt;br /&gt;
== Unit/Feature Draw Functions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Unit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws the unit)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitRaw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(redundant -&amp;gt; use gl.Unit instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitShape&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Feature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FeatureShape&#039;&#039;&#039;&lt;br /&gt;
  ( number featureDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(world space -&amp;gt; unit space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(unit space -&amp;gt; piece space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPiece&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws the unit piece)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(use gl.UnitPieceMultMatrix instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawListAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number listID, [ boolean midPos,&lt;br /&gt;
      number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
      number degrees, number rotX, number rotX, number rotZ ] ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawFuncAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean midPos, function [, arg1,... ]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Switches ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Blending&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#BlendingFactorSrc|srcmode]], number [[Lua_ConstGL#BlendingFactorDest|dstmode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.AlphaTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]], number threshold ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Culling&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#Culling|face]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ColorMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( boolean r, boolean g, boolean b, boolean a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LogicOp&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#LogicOp|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Fog&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Smoothing&#039;&#039;&#039;&lt;br /&gt;
 ( (boolean enable | number POINT), &lt;br /&gt;
   (boolean enable | number LINE),&lt;br /&gt;
   (boolean enable | number POLYGON) ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.EdgeFlag&#039;&#039;&#039;&lt;br /&gt;
 ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scissor&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( int x, int y, int w, int h ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineStipple&#039;&#039;&#039;&lt;br /&gt;
  ( string any ) -&amp;gt; nil &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(use springs default line stipple)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
  ( int factor, number pattern ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number [[Lua_ConstGL#PolygonMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonOffset&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number factor, number units ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Textures ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Texture&#039;&#039;&#039;&lt;br /&gt;
  ( [ number texNum, ] boolean enable | string name ) -&amp;gt; nil | boolean loaded&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
                           current formats:&lt;br /&gt;
  :${opt}:/LuaUI/images/image.png = filename&lt;br /&gt;
                              #12 = unitDef 12 buildpic&lt;br /&gt;
                            %34:1 = unitDef 34 s3o tex2 (:0-&amp;gt;tex1,:1-&amp;gt;tex2)&lt;br /&gt;
                              !56 = lua generated texture 56&lt;br /&gt;
                           $units = 3do textureatlas&lt;br /&gt;
                          $shadow = shadowmap&lt;br /&gt;
                        $specular = specular cube map&lt;br /&gt;
                      $reflection = reflection cube map&lt;br /&gt;
&lt;br /&gt;
                         possible ${opt}&#039;s are:&lt;br /&gt;
                              &#039;n&#039; = nearest&lt;br /&gt;
                              &#039;l&#039; = linear&lt;br /&gt;
                              &#039;a&#039; = aniso&lt;br /&gt;
                              &#039;i&#039; = invert&lt;br /&gt;
                              &#039;g&#039; = greyed&lt;br /&gt;
                              &#039;c&#039; = clamped&lt;br /&gt;
                              &#039;b&#039; = border&lt;br /&gt;
                              &#039;t&#039; = tint (don&#039;t know how to use it, sorry)&lt;br /&gt;
&lt;br /&gt;
                 example: &amp;quot;:iac:/LuaUI/images/image.png&amp;quot;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int xsize, int ysize,&lt;br /&gt;
  [ { &lt;br /&gt;
    [target     = number,] &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(like GL_TEXTURE_1D,GL_TEXTURE_2D,...)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [format     = number,]&lt;br /&gt;
    [min_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [mag_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [wrap_s     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_t     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_r     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [aniso      = number,]&lt;br /&gt;
    [border     = boolean,]&lt;br /&gt;
    [fbo        = boolean,] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [fboDepth   = boolean] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  } ]&lt;br /&gt;
  ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTexture&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTextureFBO&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TextureInfo&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; nil | {&lt;br /&gt;
      xsize = number,&lt;br /&gt;
      ysize = number,&lt;br /&gt;
      alpha = boolean, //not used yet&lt;br /&gt;
      type  = number,  //not used yet&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
   the format of the texture string is the same as in gl.Texture()&lt;br /&gt;
&amp;lt;/font&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number x | &lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum,&lt;br /&gt;
    number x |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexGen&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexGen&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CopyToTexture&#039;&#039;&#039;&lt;br /&gt;
  (string texture, int xoff, int yoff, int x, int y, int w, int h &lt;br /&gt;
  [,number target,number level])-&amp;gt;nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.RenderToTexture&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string fbotexture, lua_func ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GenerateMipmap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs glGenerateMipmapEXT!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Lighting&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ShadeModel&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#ShadeModel|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Light&#039;&#039;&#039;&lt;br /&gt;
  ( int light, &lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param1, number param2, number param3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Material&#039;&#039;&#039;&lt;br /&gt;
  ({&lt;br /&gt;
    ambient   = {number r, number g, number b[, number a]},&lt;br /&gt;
    diffuse   = {number r, number g, number b[, number a]},&lt;br /&gt;
    ambidiff  = {number r, number g, number b[, number a]},&lt;br /&gt;
    emission  = {number r, number g, number b[, number a]},&lt;br /&gt;
    specular  = {number r, number g, number b[, number a]},&lt;br /&gt;
    shininess = number specularExponent&lt;br /&gt;
  }) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Display Lists ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Display Lists save given vertex attributes in a static buffer, so the GPU can directly read them (without the CPU). Display Lists are a lot faster (10-60x) than standard drawing with glShape/glBeginEnd, so try to use them when ever you can. If you want to learn more about them, g00gle is your friend ;)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateList&#039;&#039;&#039;&lt;br /&gt;
  ( function [,arg1 [,arg2...]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CallList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Hardware relevant ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.HasExtension&#039;&#039;&#039;&lt;br /&gt;
  ( string extname ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetNumber&#039;&#039;&#039;&lt;br /&gt;
  ( number ext, int count ) -&amp;gt; number [, number, number, ... #count ]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetString&#039;&#039;&#039;&lt;br /&gt;
  ( number ext ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
== DrawGroundPrimitives ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundCircle&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius, number divs [, number slope ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundQuad&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Note: x1,z1,x2 &amp;amp; z2 are rounded, so don&#039;t use it for very small or moving objects&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number z1, number x2, number z2,&lt;br /&gt;
    [ boolean useNorm,&lt;br /&gt;
      [ number tu1, number tv1, number tu2, number tv2 |&lt;br /&gt;
        boolean useTextureCoord ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Extended ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ActiveTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexNames&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; { [1] = string texture, etc ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexCoords&#039;&#039;&#039;&lt;br /&gt;
  ( string tatexture ) -&amp;gt; number xstart, number ystart, number xend, number yend&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetShadowMapParams&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; number xmid, number ymid, number p17, number p18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetMatrixData&#039;&#039;&#039;&lt;br /&gt;
  ( GL.PROJECTION [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( GL.MODELVIEW  [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i] &lt;br /&gt;
  ( GL.TEXTURE    [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( &amp;quot;shadow&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camera&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;caminv&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camprj&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;billboard&amp;quot; )             -&amp;gt; nil | number, etc.. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSprite&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable, [boolean coord_replace, boolean coord_origin_upper] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointParameter&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number v1, number v2, number v3, &lt;br /&gt;
    [ number sizeMin, number sizeMax, number sizeFade ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SecondaryColor&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b } |&lt;br /&gt;
      number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FogCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number value ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ClipPlane&#039;&#039;&#039;&lt;br /&gt;
  ( int plane, &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;note: $plane can only be 1 or 2&amp;lt;/font&amp;gt;&lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number A, number B, number C, number D ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MatrixMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#MatrixMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadIdentity&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Ortho&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Frustum&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushPopMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushAttrib&#039;&#039;&#039;&lt;br /&gt;
  ( [ number [[Lua_ConstGL#glPushAttrib.28.29_bits|attrib]] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopAttrib&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Flush&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Finish&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Shaders (GLSL) ==&lt;br /&gt;
  [[Lua_GLSL_Api]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11446</id>
		<title>Lua OpenGL Api</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11446"/>
		<updated>2008-06-17T12:08:41Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Spring */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spring ==&lt;br /&gt;
&#039;&#039;&#039;gl.GetSun&#039;&#039;&#039;&lt;br /&gt;
  ()        -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;pos&amp;quot; ) -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;shadowDensity&amp;quot; [, &amp;quot;unit&amp;quot;] ) -&amp;gt; number shadowDensity&lt;br /&gt;
  ( &amp;quot;diffuse&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;ambient&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;specular&amp;quot; )                 -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigScreen&#039;&#039;&#039;&lt;br /&gt;
  ( number screenWidth, number screenDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawMiniMap&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SlaveMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( boolean mode ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( int px, int py, int sx, int sy ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetViewSizes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number x, number y&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;gl.Translate&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scale&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rotate&#039;&#039;&#039;&lt;br /&gt;
  (number angle, number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Color&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b[, number a] } |&lt;br /&gt;
      number r, number g, number b[, number a] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineWidth&#039;&#039;&#039;&lt;br /&gt;
  ( number width ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSize&#039;&#039;&#039;&lt;br /&gt;
  ( number size ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Billboard&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;use this to draw 2d primitives in DrawWorld&amp;lt;/font&amp;gt;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetState&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  ShadeModel = GL_SMOOTH&lt;br /&gt;
  Scissor    = false&lt;br /&gt;
  Texture    = false&lt;br /&gt;
  ColorMask  = true, true, true, true&lt;br /&gt;
  DepthMask  = false&lt;br /&gt;
  DepthTest  = false  (GL_LEQUAL)&lt;br /&gt;
  Culling    = false  (GL_BACK)&lt;br /&gt;
  LogicOp    = false  (GL_INVERT)&lt;br /&gt;
  AlphaTest  = false  (GL_GREATER, 0.5f)&lt;br /&gt;
  Blending   = GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetMatrices&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  Resets GL_TEXTURE matrix stack&lt;br /&gt;
  Resets GL_MODELVIEW matrix stack&lt;br /&gt;
  Resets GL_PROJECTION matrix stack&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Clear&#039;&#039;&#039;&lt;br /&gt;
  ( GL.DEPTH_BUFFER_BIT, number cleardepth ) -&amp;gt; nil&lt;br /&gt;
  ( GL.STENCIL_BUFFER_BIT, int clearstencil ) -&amp;gt; nil&lt;br /&gt;
  ( GL.COLOR_BUFFER_BIT | GL.ACCUM_BUFFER_BIT, number r, number g, number b, number a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Draw Basics ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BeginEnd&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Drawing_Primitives|GLType]], function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Vertex&#039;&#039;&#039;&lt;br /&gt;
  ( { number x, number y [, number z [, number w ]] } |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Normal&#039;&#039;&#039;&lt;br /&gt;
  (  number x, number y, number z |&lt;br /&gt;
   { number x, number y, number z } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rect&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexRect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;texture rect&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2,&lt;br /&gt;
  [ boolean flip_s, boolean flip_t | number s1, number t1, number s2, number t2 ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Shape&#039;&#039;&#039;&lt;br /&gt;
 ( number [[Lua_ConstGL#Drawing_Primitives|GLtype]],&lt;br /&gt;
   elements = {&lt;br /&gt;
     [1] = { v | vertex   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;required&amp;lt;/font&amp;gt;&lt;br /&gt;
             n | normal   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             t | texcoord = { number x, number y },                     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             c | color    = { number r, number g, number b, number a }  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
     },&lt;br /&gt;
     etc ...&lt;br /&gt;
   }&lt;br /&gt;
 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Text ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Text&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;, number x, number y, number size, string &amp;quot;options&amp;quot;)&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  options:&lt;br /&gt;
  &#039;c&#039; = center&lt;br /&gt;
  &#039;r&#039; = right&lt;br /&gt;
  &#039;n&#039; = deactives colorCodes (so you can use gl.Color() to write transparent text etc.)&lt;br /&gt;
  &#039;o&#039; = black outline&lt;br /&gt;
  &#039;O&#039; = white outline&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetTextWidth&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;) -&amp;gt; number width  --  in pixels, with a font size of 1.0&lt;br /&gt;
&lt;br /&gt;
== Unit/Feature Draw Functions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Unit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws the unit)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitRaw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(redundant -&amp;gt; use gl.Unit instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitShape&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Feature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FeatureShape&#039;&#039;&#039;&lt;br /&gt;
  ( number featureDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(world space -&amp;gt; unit space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(unit space -&amp;gt; piece space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPiece&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(draws the unit piece)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(use gl.UnitPieceMultMatrix instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawListAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number listID, [ boolean midPos,&lt;br /&gt;
      number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
      number degrees, number rotX, number rotX, number rotZ ] ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawFuncAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean midPos, function [, arg1,... ]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Switches ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Blending&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#BlendingFactorSrc|srcmode]], number [[Lua_ConstGL#BlendingFactorDest|dstmode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.AlphaTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]], number threshold ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Culling&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#Culling|face]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ColorMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( boolean r, boolean g, boolean b, boolean a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LogicOp&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#LogicOp|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Fog&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Smoothing&#039;&#039;&#039;&lt;br /&gt;
 ( (boolean enable | number POINT), &lt;br /&gt;
   (boolean enable | number LINE),&lt;br /&gt;
   (boolean enable | number POLYGON) ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.EdgeFlag&#039;&#039;&#039;&lt;br /&gt;
 ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scissor&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( int x, int y, int w, int h ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineStipple&#039;&#039;&#039;&lt;br /&gt;
  ( string any ) -&amp;gt; nil &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;(use springs default line stipple)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
  ( int factor, number pattern ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number [[Lua_ConstGL#PolygonMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonOffset&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number factor, number units ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Textures ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Texture&#039;&#039;&#039;&lt;br /&gt;
  ( [ number texNum, ] boolean enable | string name ) -&amp;gt; nil | boolean loaded&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
                           current formats:&lt;br /&gt;
  :${opt}:/LuaUI/images/image.png = filename&lt;br /&gt;
                              #12 = unitDef 12 buildpic&lt;br /&gt;
                            %34:1 = unitDef 34 s3o tex2 (:0-&amp;gt;tex1,:1-&amp;gt;tex2)&lt;br /&gt;
                              !56 = lua generated texture 56&lt;br /&gt;
                           $units = 3do textureatlas&lt;br /&gt;
                          $shadow = shadowmap&lt;br /&gt;
                        $specular = specular cube map&lt;br /&gt;
                      $reflection = reflection cube map&lt;br /&gt;
&lt;br /&gt;
                         possible ${opt}&#039;s are:&lt;br /&gt;
                              &#039;n&#039; = nearest&lt;br /&gt;
                              &#039;l&#039; = linear&lt;br /&gt;
                              &#039;a&#039; = aniso&lt;br /&gt;
                              &#039;i&#039; = invert&lt;br /&gt;
                              &#039;g&#039; = greyed&lt;br /&gt;
                              &#039;c&#039; = clamped&lt;br /&gt;
                              &#039;b&#039; = border&lt;br /&gt;
                              &#039;t&#039; = tint (don&#039;t know how to use it, sorry)&lt;br /&gt;
&lt;br /&gt;
                 example: &amp;quot;:iac:/LuaUI/images/image.png&amp;quot;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int xsize, int ysize,&lt;br /&gt;
  [ { &lt;br /&gt;
    [target     = number,] &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(like GL_TEXTURE_1D,GL_TEXTURE_2D,...)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [format     = number,]&lt;br /&gt;
    [min_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [mag_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [wrap_s     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_t     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_r     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [aniso      = number,]&lt;br /&gt;
    [border     = boolean,]&lt;br /&gt;
    [fbo        = boolean,] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [fboDepth   = boolean] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  } ]&lt;br /&gt;
  ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTexture&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTextureFBO&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TextureInfo&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; nil | {&lt;br /&gt;
      xsize = number,&lt;br /&gt;
      ysize = number,&lt;br /&gt;
      alpha = boolean, //not used yet&lt;br /&gt;
      type  = number,  //not used yet&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
   the format of the texture string is the same as in gl.Texture()&lt;br /&gt;
&amp;lt;/font&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number x | &lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum,&lt;br /&gt;
    number x |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexGen&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexGen&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CopyToTexture&#039;&#039;&#039;&lt;br /&gt;
  (string texture, int xoff, int yoff, int x, int y, int w, int h &lt;br /&gt;
  [,number target,number level])-&amp;gt;nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.RenderToTexture&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string fbotexture, lua_func ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GenerateMipmap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs glGenerateMipmapEXT!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
== Lights ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Lighting&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ShadeModel&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#ShadeModel|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Light&#039;&#039;&#039;&lt;br /&gt;
  ( int light, &lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param1, number param2, number param3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Material&#039;&#039;&#039;&lt;br /&gt;
  ({&lt;br /&gt;
    ambient   = {number r, number g, number b[, number a]},&lt;br /&gt;
    diffuse   = {number r, number g, number b[, number a]},&lt;br /&gt;
    ambidiff  = {number r, number g, number b[, number a]},&lt;br /&gt;
    emission  = {number r, number g, number b[, number a]},&lt;br /&gt;
    specular  = {number r, number g, number b[, number a]},&lt;br /&gt;
    shininess = number specularExponent&lt;br /&gt;
  }) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Display Lists ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Display Lists save given vertex attributes in a static buffer, so the GPU can directly read them (without the CPU). Display Lists are a lot faster (10-60x) than standard drawing with glShape/glBeginEnd, so try to use them when ever you can. If you want to learn more about them, g00gle is your friend ;)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateList&#039;&#039;&#039;&lt;br /&gt;
  ( function [,arg1 [,arg2...]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CallList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Hardware relevant ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.HasExtension&#039;&#039;&#039;&lt;br /&gt;
  ( string extname ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetNumber&#039;&#039;&#039;&lt;br /&gt;
  ( number ext, int count ) -&amp;gt; number [, number, number, ... #count ]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetString&#039;&#039;&#039;&lt;br /&gt;
  ( number ext ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
== DrawGroundPrimitives ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundCircle&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius, number divs [, number slope ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundQuad&#039;&#039;&#039; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;Note: x1,z1,x2 &amp;amp; z2 are rounded, so don&#039;t use it for very small or moving objects&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number z1, number x2, number z2,&lt;br /&gt;
    [ boolean useNorm,&lt;br /&gt;
      [ number tu1, number tv1, number tu2, number tv2 |&lt;br /&gt;
        boolean useTextureCoord ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Extended ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ActiveTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexNames&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; { [1] = string texture, etc ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexCoords&#039;&#039;&#039;&lt;br /&gt;
  ( string tatexture ) -&amp;gt; number xstart, number ystart, number xend, number yend&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetShadowMapParams&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; number xmid, number ymid, number p17, number p18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetMatrixData&#039;&#039;&#039;&lt;br /&gt;
  ( GL.PROJECTION [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( GL.MODELVIEW  [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i] &lt;br /&gt;
  ( GL.TEXTURE    [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( &amp;quot;shadow&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camera&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;caminv&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camprj&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;billboard&amp;quot; )             -&amp;gt; nil | number, etc.. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSprite&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable, [boolean coord_replace, boolean coord_origin_upper] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointParameter&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number v1, number v2, number v3, &lt;br /&gt;
    [ number sizeMin, number sizeMax, number sizeFade ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SecondaryColor&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b } |&lt;br /&gt;
      number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FogCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number value ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ClipPlane&#039;&#039;&#039;&lt;br /&gt;
  ( int plane, &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;note: $plane can only be 1 or 2&amp;lt;/font&amp;gt;&lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number A, number B, number C, number D ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MatrixMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#MatrixMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadIdentity&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Ortho&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Frustum&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushPopMatrix&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushAttrib&#039;&#039;&#039;&lt;br /&gt;
  ( [ number [[Lua_ConstGL#glPushAttrib.28.29_bits|attrib]] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopAttrib&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Flush&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Finish&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Shaders (GLSL) ==&lt;br /&gt;
  [[Lua_GLSL_Api]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12161</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12161"/>
		<updated>2008-06-15T03:13:14Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; [[Lua_UnitRendering#Material_UserData|userdata Material]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, [[Lua_OpenGL_Api#Display_Lists|preDisplayList]], [[Lua_OpenGL_Api#Display_Lists|postDisplayList]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;fill me&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12160</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12160"/>
		<updated>2008-06-15T03:08:36Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; userdata Material&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, preDisplayList, postDisplayList ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;fill me&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12159</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12159"/>
		<updated>2008-06-15T03:08:04Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, [[Lua_UnitRendering#Material_UserData|userdata Material]] | [[Lua_UnitRendering#Material_Table|table Material]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, preDisplayList, postDisplayList ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;fill me&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12158</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12158"/>
		<updated>2008-06-15T03:05:20Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Material Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, table Material ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, userdata Material | table Material ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, preDisplayList, postDisplayList ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;fill me&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
        &amp;lt;font color=darkgreen&amp;gt;(upto [15] and supports holes in it)&amp;lt;/font&amp;gt;&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12157</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12157"/>
		<updated>2008-06-15T02:50:53Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, table Material ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, userdata Material | table Material ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, preDisplayList, postDisplayList ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Material UserData==&lt;br /&gt;
&amp;lt;font color=red&amp;gt;fill me&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Material Table==&lt;br /&gt;
  material = {&lt;br /&gt;
    [&amp;quot;order&amp;quot;  = number ,]&lt;br /&gt;
    [&amp;quot;shader&amp;quot; = [[Lua_GLSL_Api|lua_shader]] | string &amp;quot;3do&amp;quot; | string &amp;quot;s3o&amp;quot; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunits&amp;quot; = {&lt;br /&gt;
        [ [0] = { [&amp;quot;tex&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
                  [&amp;quot;enable&amp;quot; = boolean true ] }, ]&lt;br /&gt;
        [ [3] = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt;, ]&lt;br /&gt;
      } ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;texunit0&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
     ...&lt;br /&gt;
    [&amp;quot;texunit7&amp;quot; = &amp;lt;font color=darkgreen&amp;gt;[[Lua_OpenGL_Api#Textures|see gl.Texture]]&amp;lt;/font&amp;gt; ,]&lt;br /&gt;
&lt;br /&gt;
    [&amp;quot;prelist&amp;quot;   = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;postlist&amp;quot;  = [[Lua_OpenGL_Api#Display_Lists|lua_displaylist]] ,]&lt;br /&gt;
    [&amp;quot;usecamera&amp;quot; = boolean ,]&lt;br /&gt;
    [&amp;quot;cameraloc&amp;quot; = number ,]&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12156</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12156"/>
		<updated>2008-06-15T02:31:46Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(creates a material userdata)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string MaterialName, table Material ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, userdata Material | table Material ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, preDisplayList, postDisplayList ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12155</id>
		<title>Lua UnitRendering</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnitRendering&amp;diff=12155"/>
		<updated>2008-06-15T02:21:47Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Unit Rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Unit Rendering==&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODCount&#039;&#039;&#039;&lt;br /&gt;
  ( int lodCount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODLength&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(`lod` is 1-indexed)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodLength ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetLODDistance&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( int lod, number lodDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetPieceList&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(displayList=nil reset to default)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int lod, int piece [, number displayList = nil ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.GetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( string MaterialName, ?? ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterial&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, int lod, string MaterialName, userdata Material | table Material ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialLastLOD&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, int lastLOD ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetMaterialDisplayLists&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string MaterialName, preDisplayList, postDisplayList ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitUniform&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unfinished)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, string MaterialName, int lod, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.SetUnitLuaDraw&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(enables the DrawUnit callin)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean enabled ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UnitRendering.Debug&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(prints some usefull debug informations)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [ number unitID ] ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19563</id>
		<title>Weapon Variables</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Weapon_Variables&amp;diff=19563"/>
		<updated>2008-06-13T11:07:55Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Descriptions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
=WeaponType=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;WeaponType&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AircraftBomb (dropped=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Drops a ballistic projectile (aka Plasma) at the same movement vector as the unit itself. It&#039;s only meant for planes. A plane that has a CBombDropper as its weapon1 is a bomber. The CBombDropper automatically calculates its burst and burstrate tags from its reload time and uses 5 as its reload time instead. It will fire if the first bomb would drop within a circle roughly unitspeed*burst*burstrate so the longer the burst and the faster the unit the larger the circle in which it will drop instead of not firing and hoping the next attack run will pass that circle.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;StarburstLauncher(vlaunch=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that rises vertically (starts with no velocity) for &amp;lt;weapontimer&amp;gt; seconds, then turns at a fixed rate towards its target. The projectile&#039;s lifetime depends on its range divided by its max speed (ignores acceleration) and the weapontimer somehow so the weapon can fall short depending on how these values are set. This is the only weapon that can properly perform intercepts and be interceptable. Emits a smoketrail.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BeamLaser (beamlaser=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Should be well known, this thing spawns a beam and does a portion of its total damage each frame. It can&#039;t have a burst or burstrate, it can&#039;t have collidefriendly=0, it can&#039;t be emit-sfxed if it has a beamtime longer than one frame and its damage decreases over range if the minIntensity=1 tag isn&#039;t used. The largebeamlaser tag allows changing the visual effect of the laser, doesn&#039;t affect the behaviour of the weapon itself in any way though. Beamlasers can be really annoying... BTW, their beam doesn&#039;t collide with water so if they&#039;re set to waterweapon=1 they can shoot normally even when underwater (won&#039;t shoot at underwater targets though).&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shield (isShield=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The shield. Really not much to say about this, the tags are all documented in the changelog.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TorpedoLauncher (waterweapon=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Fires a projectile that will behave ballistically out of water and like a missile in water. Since waterweapon=1 is usually set for them they can fire underwater and they will target underwater units. The torpedo is the only projectile that doesn&#039;t explode on the water surface. An aircraft carrying a TorpedoLauncher is a special case, the thing turns into a bomb dropepr that will spawn a torpedo projectile, probably to get the whole bomber flight behaviour. Note that the waterweapon tag is also used to make a weapon fire underwater, independent of its type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DGun (weaponname contains the word &amp;quot;disintegrator&amp;quot;)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;This shoots a fireball that travels in a straight line. The fireball has no range limitation by itself so if it misses or is fired in FPS mode it will travel across the whole map and further. DGuns don&#039;t properly check their line of fire, if terrain is in the way they fire anyway. These things are meant to be used with noexplode=1 but of course you CAN use them without that, too. If ballistic=1 is set the fireball will be affected by gravity, the weapon won&#039;t compensate for it though so it will hit the ground before reaching the target. Might be useful for a Scorched Earth mod or something since you&#039;d have to aim it manually to hit anything.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LightingCannon (sic) (lineofsight=1 and rendertype=7)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon like the Beamlaser except with a lightning graphic and even more annoying. It won&#039;t damage shields and it has a hardcoded inaccuracy (comparable to targetMoveError, the code comment is &amp;quot;should make it weaker against air&amp;quot;...). Shares some of the weirdnesses with the beamlaser, e.g. being able to penetrate water.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LaserCannon (lineofsight=1 and either beamweapon=1 or weaponname contains &amp;quot;laser&amp;quot; (marked as &amp;quot;workaround for SWTA))&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The OTA-style laser. Probably one of the least annoying weapons in the engine. Its length is defined by the duration tag (together with the speed), BTW.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MissileLauncher (lineofsight=1 and smoketrail=1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Shoots a smoke-emitting projectile. It can use guidance, acceleration, etc. The projectile&#039;s lifetime depends on range/maxspeed so a slowly accelerating missile will fall short. It can also use trajectoryheight to have the shot arc but that has trouble with aiming at targets higher or lower than the shooter (see bug report, this REALLY could use some fixing). Pretty versatile weapon overall, if the laser rendering code was ported into this we could pretty much axe the LaserCannon completely.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EmgCannon (lineofsight=1 and rendertype=4 and color=2)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Few know about this, it&#039;s a line of sight (i.e. not ballistic) weapon that can use billboard rendering (looks like a sprite). No idea what drawbacks this has, noone ever uses it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Flame (lineofsight=1 and rendertype=5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;The flamethrower. A really annoying weapon. AFAIK it won&#039;t even aim ahead of moving targets. Can&#039;t say much else about it since I haven&#039;t tried using it much but overall I&#039;d avoid the weapontype and fake the effect somehow, it&#039;s not pretty when fast and won&#039;t hit jack when slow.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Cannon (anything that didn&#039;t trigger another weapon)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Aka plasma. Shoots a ballistic projectile. Unlike the DGun it aims properly. Can&#039;t be emit-sfxed properly, maybe a ballistic DGun can fill that role.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Melee (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;When it fires it simply damages the target, no ifs or buts. It doesn&#039;t use a projectile and doesn&#039;t care about the line of fire. It won&#039;t even report a proper heading and pitch to AimWeapon so if you plan on using it in 75b2 you have to slave it to another weapon to handle the aiming. May be useful to be the damage dealer for a cosmetic weapon, i.e. you slave the Melee to a weapon that does no damage but looks pretty and the Melee does the damage. Kinda like the weapons in Warcraft and so.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Rifle (only reachable through WeaponType)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;An instant hit weapon but an apparently unmaintained one. It has a hardcoded firing and explosion effect. I wouldn&#039;t use it.&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNoWeapon (weaponname is NOWEAPON, not reachable by any tag)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Apparently a placeholder used when a weapon isn&#039;t present. It&#039;s not really a weapondef but generated when the unit demands a NOWEAPON.&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
=Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Accuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How accurate a weapon is.  A larger number is less accurate.  If this tag is missing entirely, it has perfect accuracy unless its target moves unexpectedly.  Accuracy is relative to the distance to the target; for instance, if the target is very close, even a very high accuracy value will probably still hit.  If a target is very far away, even a very low accuracy value will likely cause the weapon to miss.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;accuracy=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlwaysVisible&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ignore LOS handling and always draw the weapon effect? Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;alwaysVisible=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AreaOfEffect&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How large the weapon&#039;s impact explosion is.  This affects how powerful the weapon&#039;s default impulse strength will be.  Currently, BeamLasers with an AreaOfEffect of 16 or above will deform the ground at their point of impact regardless of whether it has been told not to.  Can be any numeric value, but should generally be at least 8, regardless of the type of weapon.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;areaofeffect=192;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFeature&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This makes the weapon avoid features while targetting (the shoot will still collide with features). Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFeature=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AvoidFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 units will not try to avoid friendly units in their line of fire. Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;avoidFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Ballistic&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 for the weapon to be subjected to gravity, travelling in an arc through the air, such as cannons. Ballistic is mutually exclusive to LineOfSight and Dropped.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ballistic=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the speed of the fadeout (each frame the beam&#039;s intensity is multiplied with that value). Can be between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamDecay=0.9;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a beam laser or not.  Beam lasers instantly hit their targets.  Rendertype must be 0.  Mutually exclusive to BeamWeapon.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamlaser=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How long to fire the laser before waiting for ReloadTime to start.  Can be any numeric value.  Defaults to 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamtime=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamTTL&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For BeamLasers, defines the time (in frames) the beam will stay after being fired. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamTtl=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether this weapon is a regular laser or not.  BeamWeapons (lasers) do not instantly hit their targets, and are affected by the weaponvelocity tag.  Mutually exclusive to BeamLaser.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;beamweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceRebound&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of vertical velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bouncerebound=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;BounceSlip&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;The amount of horizontal velocity a projectile keeps when it bounces. Generally .3-1, but 0 for a sticky bomb, or 2 for a flubber bomb. Defaults to 1&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;bounceslip=.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurnBlow&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon blows up when it reaches range the target was at when the weapon fired. Only works on plasma (rendertype=4) weapons and possibly missiles?  Can be 1 or 0.  A common usage is on flak guns.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burnblow=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Burst&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How many shots are in a burst.  Must be accompanied by burstrate.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burst=3;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BurstRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast the Burst fires.  If set much below 0.1, it stops having any discernable effect.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;burstrate=0.1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CameraShake&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much the camera shakes on impact. (needs the cameraShake widget to work). Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cameraShake=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CanAttackGround&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;canAttackGround=0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CegTag is the tag that emits a custom explosion every frame for a projectile. Can be used on any weapon to imitate dynamic lighting, smoke, fire, ball lightning, magic and many other things. Enter the name of your effect to make it emit once per frame.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cegtag=MISSILE_SMOKE_FX;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes. While this still works for lasers, using rgbcolor=X X X; is a much, much better route. Plus, the RGBColor tag will override any color=x; tags in the tdf. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Color2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;An obsolete tag only recognized for compatibility purposes.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;color=2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ColorMap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by flamethrower. Must be a CColorMap type.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;colorMap=1 0 0 1 &amp;amp;nbsp;0 1 0 1;&amp;lt;br&amp;gt;(red to green fade)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollideFriendly&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 0 this weapon will not hit friendly units. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionFriendly=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CollisionSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the physical size of projectiles, percentage of size for flamethrower and absolute value emg, plasma and laser. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;collisionSize=30;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CommandFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;When ordered to attack ground this weapon will only fire once, rather than continuously. This does not work when ordered to attack units (It will continue to fire until the target is dead). If the unit has CanDgun=1 in its FBI, commandfire will identify that weapon with the dgun button. The weapon wont fire unless the dgun button is pressed. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;commandfire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CoreThickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of the core of a laser (the part which use rgbcolor2).  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coreThickness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Coverage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The range for anti-weapon weapons, like antinukes.  This will be shown on the minimap as a guide.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;coverage=1280;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Adds a constant factor to the terraform the explosion does. Can be any numeric value. (default 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CraterMult&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Multiplies with the terraform the explosion does. Can be any numeric value. (default :=impulsFactor)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;craterMult=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;CylinderTargetting&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If greater than 0, range will be checked in a cylinder instead of a sphere:&lt;br /&gt;
half height=unitradius*cylinderTargetting&lt;br /&gt;
Defaults to 1 for Melee type weapons, 0 otherwise. In 0.76b1, does not work with BeamLaser weapons.([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;cylinderTargetting=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missles, unlike wobble it doesn&#039;t rotate the missile and it prevents the missile from going too far off course so a dancing swarm will remain coherent. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dance=97;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Dropped&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Sets the weapon to be dropped, like from a bomber.  Must be RenderType=6 and needs the Model tag to be specified.  Mutually exclusive to Ballistic and LineOfSight.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dropped=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Duration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For how many seconds a beam weapon will be fired before waiting for reload time.  Also controls the length of the beam in BeamWeapon projectiles.  Can be any numeric value.  Used for rendertype 0 and 7 weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;duration=.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageExp&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Exponent of the range damage formula, 0 (the default) disables dynamic damage. 1 means linear scaling. Only used by BeamLasers and LightingCannons. Can be any numeric value. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=263438#p263438 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageExp=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageInverted&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Inverts the damage curve (more damage at far range). Only used by BeamLasers and LightingCannons. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageInverted=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageMin&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum dynamic range damage value. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;dynDamageMin=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set it will use this value in the dynamic range damage formula instead of the range value from the weapon in the calculation. Only used by BeamLasers and LightingCannons. Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;DynDamageRange=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EdgeEffectiveness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Determines what percent of a weapon&#039;s maximum damage value will be applied to units as they are closer to the outer edge of the weapon&#039;s AreaOfEffect.  Must have a decimal value between 0 and 1.  Default in OTA was 0, probably the same in Spring. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=251180#p251180 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;edgeEffectiveness=0.25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EnergyPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Energy used per shot.  If the specified amount of energy is not available, the weapon will not be able to shoot.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;energypershot=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExplosionSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Explosion animation speed/time. (only used by BeamLaser and LightingCannon?) default:&lt;br /&gt;
gd=max(30, DefaultDamage/20);&amp;lt;br&amp;gt;&lt;br /&gt;
expSpeed=(8+(gd*2.5))/(9+(sqrt(gd)*.7))/2;&amp;lt;br&amp;gt;&lt;br /&gt;
Can be any numeric value.&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;explosionSpeed=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rate at which the beamweapon fades out after it goes past its maximum range. 0 is never fade out, 1 is finish fading out exactly at max range, the default 0.5 is the previous behaviour.&lt;br /&gt;
	&amp;lt;TD&amp;gt;FallOffRate=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireStarter&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How likely the weapon will set trees on fire.  High values make trees likey to be set on fire, low values make trees likely to just explode or tip over.  Can be any numeric value between 0 and 100.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireStarter=75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FireSubmersed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the weapon can fire underwater, if not then not. Use it for weapons that cannot fire underwater but can hit underwater targets. Works even for torpedoes. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fireSubmersed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FixedLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For missiles, starburst missiles and torpedoes, this makes the projectile spawn with the orientation of the shooting piece instead of their normal orientation. The weapon will not properly check if allies are in the way so make sure you align the launchers in a way that won&#039;t hammer right into your own forces and perhaps use collideFriendly=0. FixedLauncher conflicts with trajectoryHeight and IMO combining them is pointless anyway so don&#039;t use both on a weapon. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;fixedLauncher=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameGFXTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Makes the flamethrower projectile stay alive as a graphical effect (doesnt do any damage) after it has reached maxrange. It is defined in percent, so 1.2 makes it remain 20% beyond maxrange. Can be any numeric value. &lt;br /&gt;
	&amp;lt;TD&amp;gt;flamegfxtime=1.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlightTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;flightTime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;GroundBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the ground (on land or the ocean floor). Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;groundbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Guidance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Specifies whether or not the weapon is capable of correcting its trajectory mid-flight. Will not track a moving target. Works only on missile and torpedo weapons.  Can be set to 1 or 0.  See TurnRate for information on specifying how well a weapon can track a target.  Requires rendertype=1, lineofsight=1, and selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;guidance=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HardStop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For LaserCannon, defined if the laser effect hard stops or fade out. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;hardStop=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightBoostFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Gives control of cannon height range boost (more than 1 means increased range, 0 means the cannon has fixed range regardless of height difference to target. default is a magic value calculated on weapon init, based on range tag and theoretical max range.). Can be any numeric value, including negative ones (&amp;lt;0 := automatically calculated).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightBoostFactor=-1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;HeightMod&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Changes the sphere weapon range into an ellipsis. If it is larger 1.0 the weapon can&#039;t shoot as height as far, i.e. 0.5 means it can shoot twice as height as far ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image]). Note that this may not work well with beam weapons, use minIntensity (0..1) tag to fix that.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;heightMod=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A constant factor added on the weapon&#039;s impulsefactor.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulseBoost=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ImpulseFactor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The multiplier on the weapon&#039;s default impulsefactor, which is determined based on a weapon&#039;s default damage and AreaOfEffect.  The impulse of a weapon is how strong of a kinetic force will be applied to its target or anything near the point of impact.  Can be any numeric value, including negative ones.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;impulsefactor=2.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Intensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Alpha (brighness and washout effect) of the weapon.  Can be used on any rendertype 0, 3, or 4 weapon.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;intensity=1.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of shields that can intercept this weapon. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a shield with that digit set to one will intercept this weapon, for instance, the example will result in the weapons being blocked by shields with types 1 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;InterceptedByShieldType=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Interceptor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can intercept missiles with the Cruise tag.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;interceptor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1 a beamlaser uses an alternate graphics effect. Can be 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;largeBeamLaser=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserFlareSize&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size of the flare for laser weapons, multiplier for thickness. Can be set to any numeric value. (default: 15)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;laserFlareSize=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Leadbonus&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Is multiplied with the unit&#039;s experience and added to the lead limit.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadbonus=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LeadLimit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Limits the maximum distance a unit will lead a target (default is -1 which means infinite).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;leadLimit=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LineOfSight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LineOfSight weapons ignore gravity and must have a direct line from the firing point to the impact point in order to be fired.  Can be set to 1 or 0.  Mutually exclusive to Ballistic and Dropped.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;lineofsight=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LodDistance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Minimum camera distance at which the default beamweapon projectile is simplified to rectangle. Can be set to any numeric value. (default: 1000)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;lodDistance=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ManualBombSettings&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For Bombers, use burst and burstrate tags instead of hardcoded values.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;manualBombSettings=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MetalPerShot&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Metal used per shot.  If the specified amount is not available, the weapon cannot be fired.  Can also be used to specify how much a Stockpile weapon wll cost to build.  Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;metalpershot=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MinIntensity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For beamlasers - always hit with some minimum intensity (a damage coeffcient normally dependent on distance - range 0 to 1). Can be set to any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;minIntensity=0.1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Model&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The 3DO or S3O model to be used as this weapon&#039;s physical representation.  3DO modesl do not need a .3do extension, but S3O weapon do.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;model=missile;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MovingAccuracy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;A weapon&#039;s accuracy while moving.  See Accuracy.  Can be any numeric value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;movingaccuracy=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MyGravity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For ballistic weapons (Cannon and Bomb), it overrides the map gravity if used. Regular map gravity is around 0.2.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;myGravity=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoExplode&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Whether or not the weapon will explode on impact or continue on its path.  An example is the d-gun.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noexplode=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoSelfDamage&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;This weapon will not damage the unit that fired it.  For instance, a nuke silo could shoot itself and not take any damage if this was active.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;noselfdamage=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NumBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum number of times a weapon will bounce. -1 for infinite. Defaults to -1&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;numbounce=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Paralyzer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, this weapon will not cause any damage to its target, but will instead paralyze (aka EMP).  The default damage value of a weapon with this active will be applied to the target&#039;s HP; once the HP is overwhelmed, it will be paralyzed.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzer=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ParalyzerTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On Paralyzer weapons, determines the maximum length of time the target will be paralyzed (In seconds?). The timer is refreshed every time the target is hit by the weapon. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;paralyzetime=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PredictBoost&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;No idea what it does. Default 0 for non-burnblow, 0.5 for burnblow weapons. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;predictBoost=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Projectiles&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The weapon fires this many projectiles at once (shotgun style). Make sure you put them on different trajectories somehow (sprayangle or different firepoints) because otherwise they&#039;ll all be clumped in one shot. Works well combined with bursts. Can be set to any integer value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;projectiles=1o;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ProximityPriority&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Acts as a multiplier for the distance to the target in the priority calculation. Note that negative values make weapons prefer distant targets. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;proximityPriority=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PulseSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;On LargeBeamLaser, how fast the pulsating effect at the beam start is. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;pulseSpeed=15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum range of the weapon.  If set to noexplode, the weapon will disappear after this range has been met.  If set to burnblow, the weapon will explode after this range has been met.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;range=750;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ReloadTime&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of time between shots.  If a unit is paralyzed, this stops counting down.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;reloadtime=3.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Rendertype&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The way the weapon will be displayed.  Certain rendertypes are incompatibile with other tags, but it&#039;s generally for a logical reason.  The rendertypes are as follows: 0 - Laser, 1 - Model, 3 - Plasma, 4 - Unit explosion (usally), 5 - Flamethrower, 6 - Dropped, 7 - Lightning.  There&#039;s no documented use of rendertype=2 in OTA, and it probably doesn&#039;t do anything in Spring.  3 and 4 are usually interchangeable, both can be used to render a plasma/EMG/whatever shot; this is probably for compatibility.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rendertype=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color of the rendertype 0, 3, 4, 7 weapon, specified in RED_GREEN_BLUE format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;rgbcolor=1 0.3 1; - this would make evul-purple&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color at the core of a rendertype 0 (laser) weapon.  Specified the same as above.  Defaults to white.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;RGBColor2=0 1 0; - this would make a weird green middle for the evul-purple laser&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ScrollSeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. How fast the beam apears to be moving towards it target. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;scrollSeed=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Selfprop&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Required for Guidance tag.  This weapon can propel itself and can have things like acceleration, rather than always travelling at one speed.  See Guidance, StartVelocity, WeaponAcceleration, WeaponVelocity.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;selfprop=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Size&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the visible size of projectiles. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;size=10;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeGrowth&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines how fast flame projectiles will grow in size. Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sizegrowth=0.6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmokeTrail&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Does the projectile leave a smoke trail or not.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smoketrail=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHit&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made whe the weapon hits.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhit=emghit;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundHitVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundhitvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStart&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The sound made when the weapon begins to fire.  Will fire only once if the weapon is shot in a burst.  Must reference a .wav file in the .\Sounds directory.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstart=emgfire;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundStartVolume&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can be any numerical value between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundstartvolume=0.5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SoundTrigger&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will sound every time a shot is fired in a burst sequence.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;soundtrigger=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SprayAngle&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How wide the the angle of a burst from a burst weapon can be.  Very similar to Accuracy, except that if a weapon has no sprayangle, all the shots will be fired at the same spot, even if the weapon&#039;s aim is off.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;sprayangle=1024;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StartVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The starting speed of the weapon as it is first fired.  Only applicable to weapons that can accelerate.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;startvelocity=200;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stockpile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Can this weapon be stockpiled, for instance like a nuke launcher.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;stockpile=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SubMissile&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;For TorpedoLaunchers, if set to 1 the torpedo will travel like a missile outside of water. It will not emit a smoketrail, though. When fired from a plane it will behave the same way but the plane will probably be considered a fighter, not a bomber. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;subMissile=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If 1 (default 0) it will make the weapon continue firing while it aims for a new target. Only works on continous beam lasers currently. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SweepFire=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargeBorder&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If nonzero, targetting units will TryTarget at the edge of collision sphere (radius*tag_value, [-1;1]) instead of its centre. Can be set between 0 and 1. Defaults to 1 for Melee type weapons, 0 otherwise. ([http://spring.clan-sy.com/phpbb/viewtopic.php?p=219659#p219659 image])&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetBorder=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Targetable&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will be automatically targeted by any Interceptor weapons.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetable=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TargetMoveError&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The degree to which a weapon&#039;s aiming will fail to keep up with its target&#039;s movement.  If set very low or not set at all, a weapon will lead its target and almost always hit unless there&#039;s a lot of micromanagement on the part of the person controlling the target.  If set too high (about 0.3 or above), the weapon will have a lot of difficulty even tracking its target enough to get a shot off.  Can probably only be set between 0 and 1.  Beyond 1, the weapon would be virtually useless.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;targetmoveerror=0.15;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Thickness of a beamweapon or beamlaser, default is 2.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;thickness=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TileLength&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Only used by LargeBeamLaser. Defines the length before the texture used is repeated (tiled).&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tileLength=4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ToAirWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If active, the weapon will only be capable of targetting units which are flying, or are capable of flying.  Can be set to 0 or 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;toairweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tolerance&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount to which the weapon&#039;s &amp;quot;real&amp;quot; aim can be off while the weapon will still be able to fire accurately at the target.  This worked in OTA, but I&#039;m not 100% sure if it works in Spring.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tolerance=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tracks&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If the missile tracks a moving target. Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;tracks=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TrajectoryHeight&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The height of the arc of a missile weapon. It is useful for compensating for mountains or debris. Is relative to the weapons speed (Higher speed, higher arc) and the range the weapon is firing at (Lower range lower arc). Requires Guidance and Turnrate to hit its target when over 1. &amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;trajectoryheight=0.8;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turnrate&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How fast a guided weapon can turn.  Can be any numerical value between 0 and 64000.  If set to 0, the weapon can&#039;t turn at all, if set to 64000, the weapon can literally defy all known physics and turn 180 degrees in a fraction of a second.  This is relative to a weapon&#039;s velocity; a weapon with a very low velocity (~200) wouldn&#039;t need a very high turnrate to keep up with a fighter, although it would probably never catch it because of its slow speed.  A weapon with a very high velocity (~1000) would need a very high value in order to be able to hit targets that turn suddenly.&lt;br /&gt;
	&amp;lt;TD&amp;gt;turnrate=32000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Turret&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 if weapon is used by a turret that rotates. Set to 0 if weapon is forward firing, ie, has no rotating turret piece.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;turret=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TwoPhase&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weapon operates in two phases... eh... yeah, I honestly have no idea what the difference between this and VLaunch is.  Generally use it with VLaunch as well.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;twophase=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VLaunch&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Set to 1 to launch the weapon vertically.  Can only be used with missile-type weapons with a TurnRate.  Cannot be used at the same time as Turret.  Set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;vlaunch=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterBounce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Weather the weapon projectile will bounce on the surface of the water. Can be 0 or 1, defaults to 0 (off)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterbounce=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WaterWeapon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Water weapons behave somewhat like Dropped weapons out of water, and like missiles underwater. Is the only type of weapon that can fire under water.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;waterweapon=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponAcceleration&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Tells the weapon how fast it should accelerate from its StartVelocity to its actual WeaponVelocity.  Increases the weapon&#039;s velocity every second by the amount specified.  Can be any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponacceleration=50;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponTimer&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;;How long until the weapon will go into its second phase.  For use with missile weapons.  For VLaunch weapons, the weapon will turn to actually go towards its target after the specified number of seconds has expired.  For non-VLaunch missiles with a TurnRate, the weapon will go randomly off-course after this period of time.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weapontimer=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;WeaponVelocity&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The speed the weapon moves after being fired. If StartVelocity is lower than this number, the weapon will increase speed to its WeaponVelocity at the rate specified by its WeaponAcceleration.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;weaponvelocity=800;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Wobble&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount that a missile will wobble off-course. Requires TurnRate. Turnrate will wrestle with wobble to keep the weapon on course, so wobble must be high enough to compensate to have any effect. Can be set to any numerical value between 0 and 64000.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;wobble=15000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
NOTE: Variables that are defined by either a 1 or a 0 are BOOLEAN, where 1 means TRUE and 0 means FALSE.&lt;br /&gt;
&lt;br /&gt;
NOTE 2: &amp;quot;Any numerical value&amp;quot; for things that relate to angles really means any value between 0 and 64,000 since that&#039;s between 0 and 360 degrees in spring measurement. Setting it higher than 64,000 will bring it &#039;full circle&#039; so to speak.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Texture Tags=&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;table width=500 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 1em; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt; Weapon &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Used Texture Tags &amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AircraftBomb&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;BeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;PlasmaCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;EmgCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;FlameThrower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flame&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LargeBeamLaser&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;texture3 = muzzle&amp;lt;br&amp;gt;texture4 = flare&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LaserCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;texture2 = beamend&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;LightingCannon&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = beam&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;MissileLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = shield&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;StarburstLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = flare&amp;lt;br&amp;gt;texture2 = smoketrail&amp;lt;br&amp;gt;texture3 = flame&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;TorpedoLauncher&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;texture1 = projectile&amp;lt;br&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
NOTE: All textures need to be `atlased`. So you have to define them in the &#039;&#039;&#039;resources.tdf&#039;&#039;&#039; and use the reference name in the texture tags.&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Plasma Visuals=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is more transparent than the previous particle. Can be set to any numerical value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;AlphaDecay=0.95;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the distance between plasma particles is proportional to the size of the two particles. If set to 0, the distance between plasma particles will be proportional to the size of the first particle.&lt;br /&gt;
Can be set to 1 or 0. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;NoGap=0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Distance between each plasma particle.  Can be set to any number value. (default: 1)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Separation=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much a plasma particle is smaller than the previous within the same plasma shot. Can be set to any numerical value. (default: 0)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SizeDecay=0.2;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Number of particles used in one plasma shot.  Can be set to any number value. (default: 5)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Stages=20;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Shield/Repulsor Descriptions=&lt;br /&gt;
&amp;lt;table width=730 border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;th&amp;gt;Variable &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Description &amp;lt;/th&amp;gt;&amp;lt;th&amp;gt; Examples&amp;lt;/Th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ExteriorShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not have any effect on weapons fired from within its field.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;exteriorshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;IsShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, this &amp;quot;weapon&amp;quot; is no longer a weapon, is now a repulsor or a shield, based on the other properties given to it.  Can be 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;isshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldAlpha&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How clearly visible the shield is, if you have VisibleShield turned on.  Value is between 0 and 1.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldalpha=0.4;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldEnergyUse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The amount of energy used to repulse or destroy weapons.  Will be used constantly while the weapon is in its area of effect if it is a repulsor, will be used only once on impact if it is a shield.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldenergyuse=1500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldForce&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The force applied to weapons, an arbitrary number.  Set to 1, it will not deflect very well.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldforce=1.75;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldBadColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 0% strength, if you have VisibleShield turned on.  Defined in R G B format.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldbadcolor=0 1 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldGoodColor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The color the shield is when it is at 100% strength, if you have VisibleShield turned on.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldgoodcolor=1 0 0;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Bitfield representing the types of weapons that this shield can intercept. The best way to think about this is to think of it as the resulting binary. Every digit of binary that is set to one means that a weapon with that digit set to one will be intercepted by this shield, for instance, the example will result in the shield blocking weapons with types 2 and/or 3. Maxium of 32 unique types. See [[Shield Interception Tag Use]].&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldInterceptType=6;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldMaxSpeed&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;The maximum speed the repulsor will push weapons away at.  Only for use on repulsor-type.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldmaxspeed=400;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much &amp;quot;power&amp;quot; a shield can store.  &amp;quot;Power&amp;quot; is not the same as energy; think of it as the shield/repulsor&#039;s private battery source.  It can be drained completely by defending against weapons, even if you have lots of energy.  &#039;&#039;Power is drained by the affected weapons damage.&#039;&#039;  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpower=1000;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegen&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How quickly the shield regenerates its &amp;quot;power&amp;quot;, even when under attack.  Regenerates the amount specified every second.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregen=25;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldPowerRegenEnergy&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;How much energy is required to keep the shield regenerating its &amp;quot;power&amp;quot;.  For instance, you might have it set so that 100 units of energy are necessary for every 25 units of &amp;quot;power&amp;quot;.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldpowerregenenergy=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRadius&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Defines the size of the area the shield/repulsor protects.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldradius=500;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldRepulsor&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the &amp;quot;shield&amp;quot;-type weapon will repulse projectiles.  If set to 0, it will destroy them.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldrepulsor=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;ShieldStartingPower&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set the shield starts with this much power instead of 0.  Can be set to any numerical value.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;shieldStartingPower=100;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;SmartShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield/repulsor will not affect owned/allied weapons.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;smartshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShield&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the shield will be visible.  Only for use on shield-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshield=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldHitFrames&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;Numbers of frames how long the shield should be visible after it got hit (the alpha value fades after the hit).  Can be set to any numerical value. (default: 0 frames)&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleShieldHitFrames=5;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;VisibleShieldRepulse&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;If set to 1, the repulsing effect will be visible.  Only for use on repulsor-type.  Can be set to 1 or 0.&amp;lt;/TD&amp;gt;&lt;br /&gt;
	&amp;lt;TD&amp;gt;visibleshieldrepulse=1;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Weapons]]&lt;br /&gt;
&lt;br /&gt;
[[category:Shields]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12434</id>
		<title>Lua VFS</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12434"/>
		<updated>2008-06-05T03:39:28Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Modes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modes ==&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MOD&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MAP&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.BASE&#039;&#039;&#039; &amp;lt;font color=red&amp;gt;(unimplemented, acts like VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_ONLY&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as VFS.RAW)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_ONLY&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(same as VFS.ZIP)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&#039;&#039;&#039;VFS.Include&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, table enviroment [, number mode ] ] ) -&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.LoadFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; nil | lstring data&lt;br /&gt;
&#039;&#039;&#039;VFS.FileExists&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;VFS.DirList&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot; [, string &amp;quot;pattern&amp;quot;  [, number mode [, string &amp;quot;optstr&amp;quot; ] ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string filename, ... }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;  optstr can contain:&lt;br /&gt;
      &amp;quot;r&amp;quot; = recursive&lt;br /&gt;
      &amp;quot;d&amp;quot; = include dirs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packing ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;The Pack- and Unpack-functions are used to convert numbers-&amp;gt;strings and strings-&amp;gt;numbers.&lt;br /&gt;
So you can read a binary file and then convert the received strings back to numbers and the other way around. Also you can use it in combination with the SendLuaXYZMsg-functions.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( number arg1, number arg2, number arg3, ... )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( {[1]=number,[2]=number,..} )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackX( string &amp;quot;binary&amp;quot; [, number offset ] [, number count] )&#039;&#039;&#039;&lt;br /&gt;
  -&amp;gt; number | table { [1]=number,[2]=number,.. }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11860</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11860"/>
		<updated>2008-06-02T05:15:47Z</updated>

		<summary type="html">&lt;p&gt;JK: /* StartBoxes/StartPositions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Game ==&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number index | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; nil | number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID, boolean onlyActive] ) -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,  &amp;lt;font color=darkgreen&amp;gt;(in synced code this is &amp;quot;SYNCED_NONAME&amp;quot;!)&amp;lt;/font&amp;gt;&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamNum,&lt;br /&gt;
          number  leader,&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number startTime, number endTime ) -&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage, boolean lineageRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean dead&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponNum] ) -&amp;gt; nil | &lt;br /&gt;
  boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number allyTeamID ] ) -&amp;gt; nil |&lt;br /&gt;
    { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of&lt;br /&gt;
   ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which &lt;br /&gt;
   is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece).&lt;br /&gt;
   So if you get via Cob2Lua a pieceID you have to translate it with this function.&lt;br /&gt;
   Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition&lt;br /&gt;
   in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureList&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;// NOTE: this is not really required, now all FeatureDefs are pre-loaded&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y |&lt;br /&gt;
    number x1, number y1, number x2, number y2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean visible, boolean inLos, boolean inAirLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Associated_Development_Groups&amp;diff=2199</id>
		<title>Associated Development Groups</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Associated_Development_Groups&amp;diff=2199"/>
		<updated>2008-05-26T14:40:03Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Forums */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are numerous people and groups involved in the Spring project, from development to content creation. This is meant as a cumulative list of associated groups to ease communication between them. However, use of this tenative listing to abuse or assault any of the below listed forums, groups, teams or individuals will not be tolerated.&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
*[http://cs.selu.edu/~ssmith/FORUM/ Smoth&#039;s Development Forum] - Smoth&#039;s forum showcases many prominent members of the Spring community in a cooperative enviroment outside of the main Spring forums.&lt;br /&gt;
*[http://trac.caspring.org/ CA&#039;s Trac] - The CA dev team is one of the most active and innovative groups in the spring community. Their Lua gadgets/widgets push the spring engine to its limits.&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Associated_Development_Groups&amp;diff=2198</id>
		<title>Associated Development Groups</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Associated_Development_Groups&amp;diff=2198"/>
		<updated>2008-05-26T14:39:35Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Forums */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are numerous people and groups involved in the Spring project, from development to content creation. This is meant as a cumulative list of associated groups to ease communication between them. However, use of this tenative listing to abuse or assault any of the below listed forums, groups, teams or individuals will not be tolerated.&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
*[http://cs.selu.edu/~ssmith/FORUM/ Smoth&#039;s Development Forum] - Smoth&#039;s forum showcases many prominent members of the Spring community in a cooperative enviroment outside of the main Spring forums.&lt;br /&gt;
*[http://trac.caspring.org/ CA&#039;s Trac] - The CA dev team is one of the most active and innovative groups in the spring community. Their Lua gadgets/widgets push the spring engine to its limit.&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Associated_Development_Groups&amp;diff=2197</id>
		<title>Associated Development Groups</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Associated_Development_Groups&amp;diff=2197"/>
		<updated>2008-05-26T02:58:06Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are numerous people and groups involved in the Spring project, from development to content creation. This is meant as a cumulative list of associated groups to ease communication between them. However, use of this tenative listing to abuse or assault any of the below listed forums, groups, teams or individuals will not be tolerated.&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
*[http://cs.selu.edu/~ssmith/FORUM/ Smoth&#039;s Development Forum] - Smoth&#039;s forum showcases many prominent members of the Spring community in a cooperative enviroment outside of the main Spring forums.&lt;br /&gt;
*[http://trac.caspring.org/ CA&#039;s Trac] - The CA dev team is one of the most active and innovative group in the spring community. Their Lua gadgets/widgets push the spring engine to its limit.&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12431</id>
		<title>Lua VFS</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12431"/>
		<updated>2008-05-26T01:42:30Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Packing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modes ==&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MOD&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MAP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.BASE&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_ONLY&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_ONLY&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&#039;&#039;&#039;VFS.Include&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, table enviroment [, number mode ] ] ) -&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.LoadFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; nil | lstring data&lt;br /&gt;
&#039;&#039;&#039;VFS.FileExists&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;VFS.DirList&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot; [, string &amp;quot;pattern&amp;quot;  [, number mode [, string &amp;quot;optstr&amp;quot; ] ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string filename, ... }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;  optstr can contain:&lt;br /&gt;
      &amp;quot;r&amp;quot; = recursive&lt;br /&gt;
      &amp;quot;d&amp;quot; = include dirs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packing ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;The Pack- and Unpack-functions are used to convert numbers-&amp;gt;strings and strings-&amp;gt;numbers.&lt;br /&gt;
So you can read a binary file and then convert the received strings back to numbers and the other way around. Also you can use it in combination with the SendLuaXYZMsg-functions.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( number arg1, number arg2, number arg3, ... )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackX( {[1]=number,[2]=number,..} )&#039;&#039;&#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;arguments are:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackX( string &amp;quot;binary&amp;quot; [, number offset ] [, number count] )&#039;&#039;&#039;&lt;br /&gt;
  -&amp;gt; number | table { [1]=number,[2]=number,.. }&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12430</id>
		<title>Lua VFS</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_VFS&amp;diff=12430"/>
		<updated>2008-05-26T00:34:03Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Packing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modes ==&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MOD&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.MAP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.BASE&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_FIRST&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.RAW_ONLY&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.ZIP_ONLY&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&#039;&#039;&#039;VFS.Include&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, table enviroment [, number mode ] ] ) -&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VFS.LoadFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; nil | lstring data&lt;br /&gt;
&#039;&#039;&#039;VFS.FileExists&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;VFS.DirList&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot; [, string &amp;quot;pattern&amp;quot;  [, number mode [, string &amp;quot;optstr&amp;quot; ] ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string filename, ... }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;  optstr can contain:&lt;br /&gt;
      &amp;quot;r&amp;quot; = recursive&lt;br /&gt;
      &amp;quot;d&amp;quot; = include dirs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packing ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;Pack- and Unpack-functions are used to convert numbers-&amp;gt;strings and strings-&amp;gt;numbers.&lt;br /&gt;
So you can read a binary file and then convert the received strings back to numbers and the other way around. Also you can use it in combination with the SendLuaXYZMsg-functions.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.PackF32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackU32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackS32&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VFS.UnpackF32&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11859</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11859"/>
		<updated>2008-05-26T00:26:07Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Player,Team,Ally Lists/Info */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Game ==&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number index | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID, boolean onlyActive] ) -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,  &amp;lt;font color=darkgreen&amp;gt;(in synced code this is &amp;quot;SYNCED_NONAME&amp;quot;!)&amp;lt;/font&amp;gt;&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamNum,&lt;br /&gt;
          number  leader,&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number startTime, number endTime ) -&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage, boolean lineageRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean dead&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponNum] ) -&amp;gt; nil | &lt;br /&gt;
  boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number allyTeamID ] ) -&amp;gt; nil |&lt;br /&gt;
    { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of&lt;br /&gt;
   ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which &lt;br /&gt;
   is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece).&lt;br /&gt;
   So if you get via Cob2Lua a pieceID you have to translate it with this function.&lt;br /&gt;
   Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition&lt;br /&gt;
   in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureList&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;// NOTE: this is not really required, now all FeatureDefs are pre-loaded&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y |&lt;br /&gt;
    number x1, number y1, number x2, number y2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean visible, boolean inLos, boolean inAirLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=12772</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=12772"/>
		<updated>2008-05-15T12:03:25Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 10px; border: 1px #aaa solid; border-collapse: collapse; background: #f9f9f9&amp;quot;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;Other Languages&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;[[Image:france_flag.gif]] [[Page_principale|FranÃƒÂ§ais]]&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;[[Image:germany_flag.gif]] [[Uebersicht der Wiki|Deutsch]]&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;[[Pagina Principale|Italiano]]&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #e6e6fa; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Read Me First]]&#039;&#039;&#039; Answers to questions often asked - Everyone should read this first. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039; Has it been asked before? &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Using_Spring|Playing Spring]]&#039;&#039;&#039; How to play the game. Controls, issuing orders, and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mods]]&#039;&#039;&#039; Games that use the Spring engine.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Maps]]&#039;&#039;&#039; All about maps for the Spring engine and where to get them.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AIs]]&#039;&#039;&#039; Skirmish AIs, Helper AIs...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Strategy and Tactics]]&#039;&#039;&#039; Basic ideas how to stand your ground.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Glossary]]&#039;&#039;&#039; What does &amp;quot;AA&amp;quot; or &amp;quot;XTA&amp;quot; mean? Explanations for common terms and shorthand.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Clans]]&#039;&#039;&#039; A list of the official clans in spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[King Titles]]&#039;&#039;&#039; Titles of importance. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Spreading Spring]]&#039;&#039;&#039; Read before advertising.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Hosting Spring]]&#039;&#039;&#039; Autohosting and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[The Lighter Side Of Spring]]&#039;&#039;&#039; Humour, comics and quotations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #e6e6fa; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== Development == &lt;br /&gt;
&#039;&#039;&#039;[[Engine Development]]&#039;&#039;&#039; Information regarding the source code of Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mod_and_Unit_development#Mod_development|Game Development And Unit Creation]]&#039;&#039;&#039; Lots of links to valuable Articles and forum threads regarding Mod/Unit Development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map_development|Map Development]]&#039;&#039;&#039; Tutorials and other useful information for creating maps.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Scripting]]&#039;&#039;&#039; Information regarding the use of the supplementary Lua scripting language for Widgets and beyond...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map, Mod, And Unit Development Programs|Content Development Programs]]&#039;&#039;&#039; Links to all kind of useful programs.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mission development]]&#039;&#039;&#039; Help on writing campaigns, demos and missions using Lua.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AI|AI Development]]&#039;&#039;&#039; Lots of information about developing Skirmish, Unit and Group AIs for Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Linux_Page |Linux and Mac OS]]&#039;&#039;&#039; Mac OSX / NetBSD / Solaris / Linux / Cross-platform information.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Monthly Topic Rotation]]&#039;&#039;&#039; Generally related to development of the engine or particular mods. Read before posting on the forums.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[General Resources]]&#039;&#039;&#039; Usable textures, sounds and code snippets by the community, for the community.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Associated Development Groups]]&#039;&#039;&#039; Teams, Forums and Groups associated with Spring content and code development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;margin:10px; background:#f9f9f9; padding:5px; border:1px #aaa solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
This site is put together by the community, which could (read as SHOULD) mean YOU!  If you see information missing, or find out new information you think would be helpful, put it in.  If you find a spelling mistake or phrase that could be clearer, fix it.  If you find yourself doing repeated searches or going back to the [[Special:Allpages|Topic Index]] repeatedly when trying to find out about a particular feature, consider combining articles or linking them to one another.  Any contributions you make to this Wiki are in the public domain.  [[Help:Editing|Add to the Wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A wiki is a web application that allows users to add content, as on an Internet forum, but also allows anyone to edit the content.&amp;quot;&#039;&#039;&lt;br /&gt;
- [http://en.wikipedia.org/wiki/Wiki Wikipedia.org]&lt;br /&gt;
|}&lt;br /&gt;
 __NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
If you wish to comment on this page (or the wiki) you need to login and then you can go [http://taspring.clan-sy.com/w/index.php?title=Talk:Main_Page&amp;amp;action=edit&amp;amp;section=new here], and post your thoughts.&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=210</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=210"/>
		<updated>2008-05-15T12:03:25Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 10px; border: 1px #aaa solid; border-collapse: collapse; background: #f9f9f9&amp;quot;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;Other Languages&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;[[Image:france_flag.gif]] [[Page_principale|FranÃƒÂ§ais]]&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;[[Image:germany_flag.gif]] [[Uebersicht der Wiki|Deutsch]]&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|&amp;lt;center&amp;gt;&#039;&#039;&#039;[[Pagina Principale|Italiano]]&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;10&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #e6e6fa; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Read Me First]]&#039;&#039;&#039; Answers to questions often asked - Everyone should read this first. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039; Has it been asked before? &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Using_Spring|Playing Spring]]&#039;&#039;&#039; How to play the game. Controls, issuing orders, and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mods]]&#039;&#039;&#039; Games that use the Spring engine.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Maps]]&#039;&#039;&#039; All about maps for the Spring engine and where to get them.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AIs]]&#039;&#039;&#039; Skirmish AIs, Helper AIs...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Strategy and Tactics]]&#039;&#039;&#039; Basic ideas how to stand your ground.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Glossary]]&#039;&#039;&#039; What does &amp;quot;AA&amp;quot; or &amp;quot;XTA&amp;quot; mean? Explanations for common terms and shorthand.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Clans]]&#039;&#039;&#039; A list of the official clans in spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[King Titles]]&#039;&#039;&#039; Titles of importance. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Spreading Spring]]&#039;&#039;&#039; Read before advertising.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Hosting Spring]]&#039;&#039;&#039; Autohosting and related topics.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[The Lighter Side Of Spring]]&#039;&#039;&#039; Humour, comics and quotations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #e6e6fa; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
== Development == &lt;br /&gt;
&#039;&#039;&#039;[[Engine Development]]&#039;&#039;&#039; Information regarding the source code of Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mod_and_Unit_development#Mod_development|Game Development And Unit Creation]]&#039;&#039;&#039; Lots of links to valuable Articles and forum threads regarding Mod/Unit Development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map_development|Map Development]]&#039;&#039;&#039; Tutorials and other useful information for creating maps.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Scripting]]&#039;&#039;&#039; Information regarding the use of the supplementary Lua scripting language for Widgets and beyond...&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Map, Mod, And Unit Development Programs|Content Development Programs]]&#039;&#039;&#039; Links to all kind of useful programs.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Mission development]]&#039;&#039;&#039; Help on writing campaigns, demos and missions using Lua.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[AI|AI Development]]&#039;&#039;&#039; Lots of information about developing Skirmish, Unit and Group AIs for Spring.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Linux_Page |Linux and Mac OS]]&#039;&#039;&#039; Mac OSX / NetBSD / Solaris / Linux / Cross-platform information.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Monthly Topic Rotation]]&#039;&#039;&#039; Generally related to development of the engine or particular mods. Read before posting on the forums.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[General Resources]]&#039;&#039;&#039; Usable textures, sounds and code snippets by the community, for the community.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[[Associated Development Groups]]&#039;&#039;&#039; Teams, Forums and Groups associated with Spring content and code development.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;margin:10px; background:#f9f9f9; padding:5px; border:1px #aaa solid;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
This site is put together by the community, which could (read as SHOULD) mean YOU!  If you see information missing, or find out new information you think would be helpful, put it in.  If you find a spelling mistake or phrase that could be clearer, fix it.  If you find yourself doing repeated searches or going back to the [[Special:Allpages|Topic Index]] repeatedly when trying to find out about a particular feature, consider combining articles or linking them to one another.  Any contributions you make to this Wiki are in the public domain.  [[Help:Editing|Add to the Wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A wiki is a web application that allows users to add content, as on an Internet forum, but also allows anyone to edit the content.&amp;quot;&#039;&#039;&lt;br /&gt;
- [http://en.wikipedia.org/wiki/Wiki Wikipedia.org]&lt;br /&gt;
|}&lt;br /&gt;
 __NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
If you wish to comment on this page (or the wiki) you need to login and then you can go [http://taspring.clan-sy.com/w/index.php?title=Talk:Main_Page&amp;amp;action=edit&amp;amp;section=new here], and post your thoughts.&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Development:Main&amp;diff=5639</id>
		<title>Development:Main</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Development:Main&amp;diff=5639"/>
		<updated>2008-05-03T03:56:11Z</updated>

		<summary type="html">&lt;p&gt;JK: added note about compilation error of streflop with installed delphi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Outlined below is information on assisting with the development of the Spring source itself.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;small&amp;gt;NOTE: For information about developing a mod (units, maps, etc.) see the [[Mod Development]] page.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below you can find information on how to work with the Spring source in the current mainline (Windows platform) if you like to work on another platform (Linux &amp;amp; Mac) please look at the bottem of this page under &amp;quot;Multiplatform development&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Starting Development==&lt;br /&gt;
To start development, you will need&lt;br /&gt;
#The latest version of the source &lt;br /&gt;
#A good code manipulation program&lt;br /&gt;
#Compiling your modified source&lt;br /&gt;
&lt;br /&gt;
== Keep track what others do ==&lt;br /&gt;
If you develop with others, you need to know what they do. We have [http://spring.clan-sy.com/fisheye/ fisheye], a very handy SVN helper, and [http://spring.clan-sy.com/websvn/ WebSVN] running on the server.&lt;br /&gt;
&lt;br /&gt;
===Source Code Documentation===&lt;br /&gt;
A good place to start is [http://buildbot.no-ip.org/~buildbot/spring/doxygen the source code documentation].&lt;br /&gt;
&lt;br /&gt;
An explanation on how the code is executed in game can be found in the [[Spring Engine Code]]&lt;br /&gt;
page.&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Source==&lt;br /&gt;
The latest SVN is at: [https://spring.clan-sy.com/svn/spring https://spring.clan-sy.com/svn/spring]&amp;lt;br&amp;gt;&lt;br /&gt;
A hourly updated read-only mirror is available at: svn://caspring.org:3691/&lt;br /&gt;
&lt;br /&gt;
Another option is to manually [http://spring.clan-sy.com/download.php download] it along with the latest released version of the game. However, for serious developers, a better way would be to download the source straight from the subversion (SVN) repository. This will also allow you to make a patch out of the changes you make to the code, and send it to one of the developers with SVN access.&lt;br /&gt;
&lt;br /&gt;
Windows SVN clients : [http://subversion.tigris.org Subversion] (Win32-Console), &lt;br /&gt;
[http://www.syntevo.com/smartsvn/index.jsp SmartSVN] (Java) and [http://tortoisesvn.tigris.org TortoiseSVN] (MSI).&lt;br /&gt;
&lt;br /&gt;
Assuming that you are using the Subversion svn client you can download the latest SVN source with one of the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svn.exe checkout https://spring.clan-sy.com/svn/spring/trunk&amp;lt;br&amp;gt;&lt;br /&gt;
svn.exe checkout svn://caspring.org:3691/trunk&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It will create a trunk subdirectory in the directory from where you ran it, which will contain the source code root directory which will be later referred to as /spring&lt;br /&gt;
&lt;br /&gt;
If you&#039;re using Git rather than SVN, you need to initialize local repository and fetch using:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git-svn clone https://spring.clan-sy.com/svn/spring&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this may take a while)&lt;br /&gt;
&lt;br /&gt;
To update your local repository, use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git-svn fetch https://spring.clan-sy.com/svn/spring&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Learning C++==&lt;br /&gt;
You will need to know C++ to modify or understand Spring&#039;s source code. If you are interested in learning C++, see [[Learning_CPP]]&lt;br /&gt;
&lt;br /&gt;
However please note that badly designed code (code created by a C++ novice for example), even if working will likely not be included in the spring code. Spring is a large project, and therefore it is necessary to stay away from hack jobs and create general solutions to problems.&lt;br /&gt;
&lt;br /&gt;
==Setting up your development environment==&lt;br /&gt;
You have either to use the SCons build system that is multi platform, or use Microsoft Visual Studio for building spring. See also [[Development_IDEs]] for some more background information about the IDE to choose.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio 8 (2005)===&lt;br /&gt;
(possibly the free Express Edition) &lt;br /&gt;
&lt;br /&gt;
* Install the [http://xta.wolfgame.org/SimBase/vclibs.7z vclibs library package]. You need to install this in the /spring directory from the SVN checkout the zipped source. If done right, it will look like:&lt;br /&gt;
**/spring/&lt;br /&gt;
**/spring/installer&lt;br /&gt;
**/spring/rts&lt;br /&gt;
**/spring/... other dirs&lt;br /&gt;
**/spring/vclibs&lt;br /&gt;
* Install the [http://msdn.microsoft.com/directx/sdk/ DirectX SDK]&lt;br /&gt;
* Install the PlatformSDK. I got away with unchecking the parts of the PlatformSDK that were obviously not related (IIS, web stuff). Makes for a smaller download. Make &#039;&#039;&#039;sure&#039;&#039;&#039; the Platform SDK and DirectX SDK are in the VS search/include directories:&lt;br /&gt;
* After installing them, open Visual C++. Click Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories. Add these entries to the corresponding sections (paths just a reference, yours may be different):&lt;br /&gt;
**Include files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Include&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\include&lt;br /&gt;
**Library files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Lib\x86 (Might need \x64 on a 64-bit platform, I don&#039;t know.)&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\lib&lt;br /&gt;
* Open the solution. /spring/rts/build/vstudio8/rts.sln&lt;br /&gt;
* Start building (usually you want to select the release/no debug build, debug is really too slow and is used only when you really know what you want to test)&lt;br /&gt;
* Select the working directory in the project properties, otherwise spring will not work correctly&lt;br /&gt;
&lt;br /&gt;
===SCONS/MinGW===&lt;br /&gt;
Code::Blocks and Dev C++ use MinGW too, so if you are using one of these IDEs, you&#039;ll want to follow these instructions too.&lt;br /&gt;
&lt;br /&gt;
*[http://downloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe Dev-C++ Installer]&lt;br /&gt;
&lt;br /&gt;
Get [http://spring.clan-sy.com/dl/spring-mingwlibs-v10.exe the MinGW library package]. Make sure you install it it the checkout directory, so the path is: /spring/mingwlibs. If done right, it will look like:&lt;br /&gt;
**/spring/&lt;br /&gt;
**/spring/installer&lt;br /&gt;
**/spring/rts&lt;br /&gt;
**/spring/... other dirs&lt;br /&gt;
**/spring/mingwlibs&lt;br /&gt;
&lt;br /&gt;
These programs are a must have if you want to compile Spring with MinGW, so install them now, if you don&#039;t have them already.&lt;br /&gt;
&lt;br /&gt;
*[http://www.python.org/ftp/python/2.5.1/python-2.5.1.msi Python 2.5 installer]&lt;br /&gt;
*[http://downloads.sourceforge.net/pywin32/pywin32-210.win32-py2.5.exe Python 2.5 win32 extensions installer] &lt;br /&gt;
*[http://prdownloads.sourceforge.net/scons/scons-0.96.96.win32.exe Scons 0.96 installer]&lt;br /&gt;
&lt;br /&gt;
Oh, and quick instructions:&lt;br /&gt;
&lt;br /&gt;
* Grab and install the above programs.&lt;br /&gt;
* Make sure C:\Python25, C:\Python25\Scripts and C:\Dev-Cpp\bin are in your PATH environment variable. Set environment variables by: Start -&amp;gt; Settings -&amp;gt; Control Panel -&amp;gt; System -&amp;gt; Advanced -&amp;gt; Environment variables (for Windows XP).&lt;br /&gt;
* Make sure a MINGDIR environment variable with value C:\Dev-Cpp exists. (change paths where appropriate.)&lt;br /&gt;
* Checkout the Spring SVN repository, following the instructions above in obtaining source. (TODO:link)&lt;br /&gt;
* Open a console (Start -&amp;gt; Run -&amp;gt; cmd.exe -&amp;gt; Run), cd \where you checked it out in the previous step, if you checked it out on a different drive make sure to change drives with DriveLetter:&amp;lt;enter&amp;gt; first.&lt;br /&gt;
* Type scons configure&amp;lt;enter&amp;gt;. Refer to scons --help for options which can be passed to scons configure. Gotchas:&lt;br /&gt;
** If you get an error message starting with &amp;quot;EOFError: : env = Environement...&amp;quot;, try deleting the file build/scons_signatures.dblite&lt;br /&gt;
** If you get an error message stating &amp;quot;ImportError: No module named win32file:&amp;quot;, you have probably not installed the python-win32-extensions.&lt;br /&gt;
** If all proceeds as intended you will see a message similar to: &amp;quot;Everything seems OK.  Run `scons&#039; now to build.&amp;quot;&lt;br /&gt;
* Type scons&amp;lt;enter&amp;gt; to start the compilation.&lt;br /&gt;
** If you have Delphi installed and get an error message that the commandline params &amp;quot;--no-print-directory&amp;quot; &amp;amp; &amp;quot;-C&amp;quot; aren&#039;t supported, then you should remove the Delphi dirs from your &amp;lt;i&amp;gt;PATH&amp;lt;/i&amp;gt; variable, because scons tried to run the delphi&#039;s make.exe instead of using mingw32-make. (this will cause that streflop can&#039;t be build!)&lt;br /&gt;
* Wait for the compilation to finish, this may take a while.&lt;br /&gt;
* Copy datafiles and stuff from official Spring installation to the /spring/game directory (where spring.exe is located, after the compilation finished.)&lt;br /&gt;
* Copy missing DLLs from mingwlibs/dll.&lt;br /&gt;
* Start developing.&lt;br /&gt;
&lt;br /&gt;
If you are using Linux, refer to the [[SetupGuide]] to build Spring and get it running.&lt;br /&gt;
&lt;br /&gt;
==Development Suggestions==&lt;br /&gt;
Before starting to make modifications to the source, take a look at the [[development guidelines]] which outlines some important things to think about. To find something interesting to work on, look at the list of [[example projects]]. You can also check the list of [[whois doing what]] to see what others are doing. If you do edit the code, please add [[Doxygen style comments]] to the code, which will then enhance the source code documentation.&lt;br /&gt;
&lt;br /&gt;
==How to get your code included==&lt;br /&gt;
If you create something that you think should be included in the official source tree, you can report a &amp;quot;bug&amp;quot; in [http://spring.clan-sy.com/mantis/ mantis, our BTS]. Add your patch as attachment, and put &amp;quot;[patch]&amp;quot; in front of the subject, so it is easy for us to separate patches from bugs.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also considered standard practice to post one&#039;s modifications in the [http://spring.clan-sy.com/phpbb/viewforum.php?f=12 development forum] and get feedback.&lt;br /&gt;
&lt;br /&gt;
==Spring Engine TODO list==&lt;br /&gt;
There is a TODO list for developers who want to contribute to the engine itself:&lt;br /&gt;
[[SpringEngineTODO]]. There is also a [http://spring.clan-sy.com/phpbb/viewforum.php?f=21 feature request forum], which may give you some ideas. Don&#039;t be overwhelmed by the sheer number of (silly) requests though!&lt;br /&gt;
&lt;br /&gt;
==Development links==&lt;br /&gt;
* [http://planetspring.free.fr/spring/ Automatic installer builds (crosscompiled, mingw)]&lt;br /&gt;
* [http://developer.berlios.de/projects/taspring-linux BerliOS project page (OLD)]&lt;br /&gt;
* [http://spring.clan-sy.com/mantis Bug Tracking System]&lt;br /&gt;
* [http://buildbot.no-ip.org:8010/ Buildbot]&lt;br /&gt;
* [https://lists.berlios.de/mailman/listinfo/taspring-linux-commit Commit mailing list]&lt;br /&gt;
* [http://spring.clan-sy.com/dl/spring-vc8libs.exe Development libraries for Visual Studio 2005]&lt;br /&gt;
* [http://www.unknown-files.net/spring/3839/mingwlibsv10/ Development libraries for MinGW]&lt;br /&gt;
* [http://lolut.utbm.info/cgi-bin/mailman/listinfo/taspring-linux Developers mailing list (practically dead, use this forum instead) (DOWN)]&lt;br /&gt;
* [http://buildbot.no-ip.org/~buildbot/spring/doxygen Doxygen pages of the latest source (regenerated nightly)]&lt;br /&gt;
* [http://spring.clan-sy.com/fisheye Fisheye interface to SVN]&lt;br /&gt;
* [http://sourceforge.net/projects/springrts SourceForge project page (OLD)]&lt;br /&gt;
* [http://buildbot.no-ip.org/~buildbot/spring/stacktraceTranslator.php StackTrace Translator]&lt;br /&gt;
* [https://spring.clan-sy.com/svn/spring/trunk/ Subversion repository]&lt;br /&gt;
* [http://spring.clan-sy.com/websvn/listing.php?repname=spring&amp;amp;path=%2F&amp;amp;sc=0 WebSVN]&lt;br /&gt;
* [http://spring.clan-sy.com/websvn/log.php?repname=spring&amp;amp;path=%2F&amp;amp;rev=0&amp;amp;sc=0&amp;amp;isdir=1 WebSVN link to &amp;quot;development log&amp;quot;]&lt;br /&gt;
* [http://spring.clan-sy.com/websvn/filedetails.php?repname=spring&amp;amp;path=%2Ftrunk%2FDocumentation%2Fchangelog.txt&amp;amp;rev=0&amp;amp;sc=0 WebSVN link to the most recent changelog.txt]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]] [[Category:Source development]]&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Complete_Annihilation&amp;diff=5097</id>
		<title>Complete Annihilation</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Complete_Annihilation&amp;diff=5097"/>
		<updated>2008-05-02T00:31:11Z</updated>

		<summary type="html">&lt;p&gt;JK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Features=&lt;br /&gt;
&lt;br /&gt;
==User interface and LuaUI==&lt;br /&gt;
*New cursors&lt;br /&gt;
*Centers and selects the Comm at startup&lt;br /&gt;
*Warns when d-gun is limited&lt;br /&gt;
*Shows which units are being transported&lt;br /&gt;
*Depicts unit experience with tank icons&lt;br /&gt;
*Automatically controls your metal makers for maximum efficiency&lt;br /&gt;
*Always see what your factories are building and give the orders quickly with buildbar.&lt;br /&gt;
*New button graphics.&lt;br /&gt;
*Units reply with speech.&lt;br /&gt;
&lt;br /&gt;
==Gameplay and LuaRules==&lt;br /&gt;
*No effective single unit spam (hopefully).&lt;br /&gt;
*Kbots and Vehicles are both viable on most maps.&lt;br /&gt;
*Arm and Core have a different play style.&lt;br /&gt;
*Set at which percentage of remaining health your units will retreat to the nearest Commander or nanotower.&lt;br /&gt;
*Pointless micromanagement is not rewarded.&lt;br /&gt;
*The Commander can cloak nearby units or toggle the stealth ability, for a hefty energy cost.&lt;br /&gt;
*Once you have a factory, you can concentrate on the battle while the your metal extractors, radars or metal makers automatically upgrade themselves.&lt;br /&gt;
*Windmill output increases with altitude.&lt;br /&gt;
*Sharing with an enemy is disables unless cheat mode is active.&lt;br /&gt;
*Unit sharing is delayed to avoid share at last second before death scenarios.&lt;br /&gt;
*Lose the resources contained in a storage building when it is destroyed.&lt;br /&gt;
&lt;br /&gt;
==Graphics==&lt;br /&gt;
*New models and textures.&lt;br /&gt;
*New explosions, weapon and unit effects.&lt;br /&gt;
*Play in cartoon mode with the outline widget.&lt;br /&gt;
*Higher resolution 3do textures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mutators=&lt;br /&gt;
&lt;br /&gt;
==Deployment Mutator==&lt;br /&gt;
Place your units and give orders to them before the game starts: you don&#039;t have to wait to use the big guns.&lt;br /&gt;
&lt;br /&gt;
==Tactics Mutator==&lt;br /&gt;
Place your units on the battlefield before the game starts then wipe out your enemy. With no economic management, you are free to exercise your tactics.&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Homepage:&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;[http://www.caspring.org www.caspring.org]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Download it here:&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;[http://trac.caspring.org/wiki/CaUpdater CA Updater (the easiest &amp;amp; fastest to get CA and Spring maps)]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CA detailed unit guide]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Mods]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;br /&gt;
{{Category:Mods}}&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12201</id>
		<title>Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12201"/>
		<updated>2008-04-15T11:00:33Z</updated>

		<summary type="html">&lt;p&gt;JK: there is no loop argument in PlaySoundStream, also shortened the descriptions (this is a documentation not a tutorial)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pipes ==&lt;br /&gt;
&#039;&#039;&#039;Spring.Echo&#039;&#039;&#039;&lt;br /&gt;
  ( arg1 [, arg2 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Usefull for debugging.&amp;lt;br&amp;gt; Prints values in the spring chat console (hint: the default print() writes to STDIN).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundFile&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; [, number volume&lt;br /&gt;
    [, number x, number y, number z ] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Plays WAV sounds. &amp;lt;i&amp;gt;By default&amp;lt;/i&amp;gt;, the soundfile is expected to be in the &amp;quot;Sounds&amp;quot; folder.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;oggfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number x, number y, number z ]] ) -&amp;gt; nil | boolean true&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Allow you to play an Ogg Vorbis (.OGG) compressed sound file.&amp;lt;br&amp;gt; &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; you may only play _ONE_ stream at a time. If another stream is playing and&amp;lt;br&amp;gt; you try to start a second one the call will fail, and silence will result.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.StopSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Terminates any SoundStream is running.&amp;lt;br&amp;gt; Since only one may play at any time (see above), this can be used as an interrupt.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendMessage ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessage&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToPlayer&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToSpectators&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Selection ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( { [unitID] = anything, ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( { [1] = unitID1 , [2] = unitID2 , ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoDraw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noDraw ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoSelect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoMinimap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noMinimap ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSky&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSky ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawWater&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawWater ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawGround&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawGround ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DrawUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
  ( { [1] = unitID, ... } [, false ] ) -&amp;gt; nil&lt;br /&gt;
  ( { [unitID] = anything, ... }, true  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AssignMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;cmdName&amp;quot;, string &amp;quot;iconFileName&amp;quot;&lt;br /&gt;
    [, boolean overwrite [, boolean hotSpotTopLeft] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ReplaceMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;default hotspot is center!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;oldFileName&amp;quot;, string &amp;quot;newFileName&amp;quot; [, boolean hotSpotTopLeft] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCustomCommandDrawData&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;register your custom cmd so it gets visible in the unit&#039;s cmd queue&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    number cmdIconID | string iconname | nil,&lt;br /&gt;
    { number r, number g, number b, number a } [, boolean showArea ] ) -&amp;gt; nil | true&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( table camState, number camTime) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;camState = {&lt;br /&gt;
  mode = cameraID,&lt;br /&gt;
     1 = cameraID,&lt;br /&gt;
     2 = posX,&lt;br /&gt;
     3 = posY,&lt;br /&gt;
     4 = posZ,&lt;br /&gt;
     5 = dirX,&lt;br /&gt;
     6 = dirY,&lt;br /&gt;
     7 = dirZ,&lt;br /&gt;
     ... and more (depending on the camera ...&lt;br /&gt;
}&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [,number transTime] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== World Primitives ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;outdated! use opengl api instead!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldText&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot;, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    number team, number facing) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11858</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11858"/>
		<updated>2008-03-25T06:36:59Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Mod-/MapoOptions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Game ==&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number index | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [rule1] = number value1, [rule2] = number value2, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID, boolean onlyActive] ) -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamNum,&lt;br /&gt;
          number  leader,&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number startTime, number endTime ) -&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage, boolean lineageRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean dead&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponNum] ) -&amp;gt; nil | &lt;br /&gt;
  boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number allyTeamID ] ) -&amp;gt; nil |&lt;br /&gt;
    { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of&lt;br /&gt;
   ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which &lt;br /&gt;
   is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece).&lt;br /&gt;
   So if you get via Cob2Lua a pieceID you have to translate it with this function.&lt;br /&gt;
   Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition&lt;br /&gt;
   in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureList&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;// NOTE: this is not really required, now all FeatureDefs are pre-loaded&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y |&lt;br /&gt;
    number x1, number y1, number x2, number y2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean visible, boolean inLos, boolean inAirLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedCtrl&amp;diff=11646</id>
		<title>Lua SyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedCtrl&amp;diff=11646"/>
		<updated>2008-03-18T22:49:09Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Heightmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Resources =&lt;br /&gt;
&#039;&#039;&#039;Spring.AddTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.UseTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, &lt;br /&gt;
    string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount |&lt;br /&gt;
    { m = number amount, e = number amount}&lt;br /&gt;
  ) -&amp;gt; nil | boolean hadEnough&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string res, number amount ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for res are:&lt;br /&gt;
    &amp;quot;m&amp;quot;  = metal&lt;br /&gt;
    &amp;quot;e&amp;quot;  = energy&lt;br /&gt;
    &amp;quot;ms&amp;quot;  = metal storage&lt;br /&gt;
    &amp;quot;es&amp;quot;  = energy storage&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamShareLevel&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Unit Handling =&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateUnit&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;defName&amp;quot;,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    (number facing | string &amp;quot;facing&amp;quot;),&lt;br /&gt;
    number teamID ) -&amp;gt; number unitID&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for facing are:&lt;br /&gt;
    &amp;quot;s&amp;quot; | 0 = south&lt;br /&gt;
    &amp;quot;e&amp;quot; | 1 = east&lt;br /&gt;
    &amp;quot;n&amp;quot; | 2 = north&lt;br /&gt;
    &amp;quot;w&amp;quot; | 3 = west&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DestroyUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    [boolean selfd,]&lt;br /&gt;
    [boolean reclaimWreckage,]&lt;br /&gt;
    [number attackerID] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TransferUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    numer newTeamID,&lt;br /&gt;
    boolean given ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCosts&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, { &lt;br /&gt;
     [ buildTime  = number amount ],&lt;br /&gt;
     [ metalCost  = number amount ],&lt;br /&gt;
     [ energyCost = number amount ]&lt;br /&gt;
   } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;tooltip&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number health |&lt;br /&gt;
    { [ health   = number health ],&lt;br /&gt;
      [ capture  = number capture ],&lt;br /&gt;
      [ paralyze = number paralyze ],&lt;br /&gt;
      [ build    = number build ] }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMaxHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number maxHealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitDamage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number damage&lt;br /&gt;
    [, number paralyze = 0 [, number attackerID = -1 [, number weaponID = -1&lt;br /&gt;
      [, number impulse_x [, number impulse_y [, number impulse_z ]]] ]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number stockpile [, number buildPercent ]]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number experience ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCloak&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    boolean cloaked | number scriptCloak,&lt;br /&gt;
    [ number decloakDistance | boolean decloakAbs ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  If the 2nd argument is a number, the value works like this:&lt;br /&gt;
   1:=normal cloak&lt;br /&gt;
   2:=for free cloak (cost no E)&lt;br /&gt;
   3:=for free + no decloaking (except the unit is stunned)&lt;br /&gt;
   4&amp;gt;=ultimative cloak (no ecost, no decloaking, no stunned decloak)&lt;br /&gt;
&lt;br /&gt;
  The decloak distance is only changed if the 3th argument is a number or a boolean.&lt;br /&gt;
   If the boolean is false it takes the default decloak distance for that unitdef,&lt;br /&gt;
   if the boolean is true it takes the absolute value of it.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitStealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean stealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number teamID [, boolean isRoot] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean neutral ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number enemyUnitID | number x, number y, number z,&lt;br /&gt;
    [ boolean dgun = false ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitAlwaysVisible&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean alwaysVisible ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noBlock) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMetalExtraction&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number depth [,number range] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitBuildSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( number builderID,&lt;br /&gt;
    number buildSpeed, [ number repairSpeed [, number reclaimSpeed&lt;br /&gt;
  [,number resurrectSpeed [, number captureSpeed [, number terraformSpeed ]] ]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean enabled [, number power] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number weaponNum, table states ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;format of the states table:&lt;br /&gt;
    {&lt;br /&gt;
      [&amp;quot;reloadstate&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;reloadtime&amp;quot;  = number value,]&lt;br /&gt;
      [&amp;quot;accuracy&amp;quot;    = number value,]&lt;br /&gt;
      [&amp;quot;sprayangle&amp;quot;  = number value,]&lt;br /&gt;
      [&amp;quot;range&amp;quot;       = number value,]&lt;br /&gt;
      [&amp;quot;projectilespeed&amp;quot; = number value,]&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number travel [, number travelPeriod] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMoveGoal&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;used by default commands to get in build-,attackrange etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, number x, number y, number z,&lt;br /&gt;
    [, number radius = 0 [, number speed = unit-&amp;gt;maxSpeed * 2 ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPhysics&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posx, number posy, number posz,&lt;br /&gt;
    number velx, number vely, number velz,&lt;br /&gt;
    number rotx, number roty, number rotz,&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number x, number z [, boolean alwaysAboveSea] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number velx, number vely, number velz ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number rotx, number roty, number rotz ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitImpulse&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Ressourcing ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitResourcing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    string res, number amount |&lt;br /&gt;
    { res = number amount, ... }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for res are: &amp;quot;[u|c][u|m][m|e]&amp;quot;&lt;br /&gt;
       unconditional | conditional&lt;br /&gt;
                 use | make&lt;br /&gt;
               metal | energy&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitResource&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UseUnitResource&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Feature Handling =&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateFeature&#039;&#039;&#039;&lt;br /&gt;
  (  string &amp;quot;defName&amp;quot;, number x, number y, number z&lt;br /&gt;
   [,number heading [, number AllyTeamID ]] ) -&amp;gt; number featureID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DestroyFeature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TransferFeature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number AllyTeamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number health) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureReclaim&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number reclaimLeft) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, string &amp;quot;UnitDefName?&amp;quot; [, number facing | string &amp;quot;facing&amp;quot; ] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible string values for facing are:&lt;br /&gt;
    &amp;quot;s&amp;quot;  = south&lt;br /&gt;
    &amp;quot;e&amp;quot;  = east&lt;br /&gt;
    &amp;quot;n&amp;quot;  = north&lt;br /&gt;
    &amp;quot;w&amp;quot;  = west&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveBuildingDecal&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lua to COB =&lt;br /&gt;
&#039;&#039;&#039;Spring.CallCOBScript&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )&lt;br /&gt;
    -&amp;gt; nil | number returnValue, number retArg1, number retArg2, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.CallCOBScriptCB&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )&lt;br /&gt;
    -&amp;gt; nil | number returnValue, number CallbackData, number retArg1, number retArg2, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBScriptID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string funcName ) -&amp;gt; nil | number funcID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCOBValue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, boolean splitData=false], number COBValue&lt;br /&gt;
    [, number param1 [,number param2 [, number param3 [, number param4 ] ] ] ] )&lt;br /&gt;
  -&amp;gt; number result | number result1, number result2&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCOBValue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number COBValue, number param1 [,number param2] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Give Order =&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( unitMap = { [unitID] = dontCare, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( unitArray = { [1] = unitID, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( unitMap = { [number unitID] = dontCare, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        params = {number, etc...},&lt;br /&gt;
        options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( unitArray = { [1] = number unitID, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        params = {number, etc...},&lt;br /&gt;
        options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Heightmap =&lt;br /&gt;
&#039;&#039;&#039;Spring.LevelHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AdjustHeightMap&#039;&#039;&#039; &amp;lt;font color=darkgreen&amp;gt;(heightmap[x][z] += height;)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RevertHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number origFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Command Descriptions =&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot; style=&amp;quot;font-size:120%&amp;quot;&amp;gt;Doesn&#039;t work in unsynced code.&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.EditUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdDescID, table cmdArray ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  structure of cmdArray:&lt;br /&gt;
  {&lt;br /&gt;
    [ id          = int ],&lt;br /&gt;
    [ type        = int ],&lt;br /&gt;
    [ name        = string ],&lt;br /&gt;
    [ action      = string ],&lt;br /&gt;
    [ tooltip     = string ],&lt;br /&gt;
    [ texture     = string ],&lt;br /&gt;
    [ cursor      = string ],&lt;br /&gt;
    [ hidden      = boolean ],&lt;br /&gt;
    [ disabled    = boolean ],&lt;br /&gt;
    [ showUnique  = boolean ],&lt;br /&gt;
    [ onlyTexture = boolean ],&lt;br /&gt;
    [ params      = { string = string, ... } ]&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.InsertUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number cmdDescID ] , table cmdArray ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number cmdDescID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetNoPause&#039;&#039;&#039;&lt;br /&gt;
  ( boolean noPause ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitToFeature&#039;&#039;&#039;&lt;br /&gt;
  ( boolean tofeature ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetExperienceGrade&#039;&#039;&#039;&lt;br /&gt;
  ( number expGrade&lt;br /&gt;
   &amp;lt;font color=red&amp;gt;[, number ExpPowerScale [, number ExpHealthScale [, number ExpReloadScale ]]]&amp;lt;/font&amp;gt; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;expGrade defines how often UnitExperience() will be called,&lt;br /&gt;
   it is based on the following equation:&lt;br /&gt;
     (int) [exp/(exp+1)] / expGrade&lt;br /&gt;
   If this integer differs from the one before the experience change&lt;br /&gt;
   it will call UnitExperience().&lt;br /&gt;
  Also those 3 last params are only available in .cheat&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Scream&amp;diff=11575</id>
		<title>Lua Scream</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_Scream&amp;diff=11575"/>
		<updated>2008-03-17T19:15:43Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Scream UserData Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Scream UserData Object ==&lt;br /&gt;
&#039;&#039;&#039;Script.CreateScream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;This creates an userdata object, which calls a special&lt;br /&gt;
  user-defined function, when the object gets destroyed&lt;br /&gt;
  (-&amp;gt;garbage collector).&lt;br /&gt;
  You use it like the follow:&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;local myScream = Script.CreateScream()&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;myScream.func  = function() Spring.Echo(&amp;quot;AHHHHHH&amp;quot;) end&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedCtrl&amp;diff=11645</id>
		<title>Lua SyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedCtrl&amp;diff=11645"/>
		<updated>2008-03-15T04:04:15Z</updated>

		<summary type="html">&lt;p&gt;JK: it is LuaUI and LuaGadgets (synced) only&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Resources =&lt;br /&gt;
&#039;&#039;&#039;Spring.AddTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.UseTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, &lt;br /&gt;
    string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount |&lt;br /&gt;
    { m = number amount, e = number amount}&lt;br /&gt;
  ) -&amp;gt; nil | boolean hadEnough&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string res, number amount ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for res are:&lt;br /&gt;
    &amp;quot;m&amp;quot;  = metal&lt;br /&gt;
    &amp;quot;e&amp;quot;  = energy&lt;br /&gt;
    &amp;quot;ms&amp;quot;  = metal storage&lt;br /&gt;
    &amp;quot;es&amp;quot;  = energy storage&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamShareLevel&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Unit Handling =&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateUnit&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;defName&amp;quot;,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    (number facing | string &amp;quot;facing&amp;quot;),&lt;br /&gt;
    number teamID ) -&amp;gt; number unitID&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for facing are:&lt;br /&gt;
    &amp;quot;s&amp;quot; | 0 = south&lt;br /&gt;
    &amp;quot;e&amp;quot; | 1 = east&lt;br /&gt;
    &amp;quot;n&amp;quot; | 2 = north&lt;br /&gt;
    &amp;quot;w&amp;quot; | 3 = west&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DestroyUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    [boolean selfd,]&lt;br /&gt;
    [boolean reclaimWreckage,]&lt;br /&gt;
    [number attackerID] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TransferUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    numer newTeamID,&lt;br /&gt;
    boolean given ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCosts&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, { &lt;br /&gt;
     [ buildTime  = number amount ],&lt;br /&gt;
     [ metalCost  = number amount ],&lt;br /&gt;
     [ energyCost = number amount ]&lt;br /&gt;
   } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;tooltip&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number health |&lt;br /&gt;
    { [ health   = number health ],&lt;br /&gt;
      [ capture  = number capture ],&lt;br /&gt;
      [ paralyze = number paralyze ],&lt;br /&gt;
      [ build    = number build ] }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMaxHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number maxHealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitDamage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number damage&lt;br /&gt;
    [, number paralyze = 0 [, number attackerID = -1 [, number weaponID = -1&lt;br /&gt;
      [, number impulse_x [, number impulse_y [, number impulse_z ]]] ]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number stockpile [, number buildPercent ]]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number experience ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCloak&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    boolean cloaked | number scriptCloak,&lt;br /&gt;
    [ number decloakDistance | boolean decloakAbs ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;&lt;br /&gt;
  If the 2nd argument is a number, the value works like this:&lt;br /&gt;
   1:=normal cloak&lt;br /&gt;
   2:=for free cloak (cost no E)&lt;br /&gt;
   3:=for free + no decloaking (except the unit is stunned)&lt;br /&gt;
   4&amp;gt;=ultimative cloak (no ecost, no decloaking, no stunned decloak)&lt;br /&gt;
&lt;br /&gt;
  The decloak distance is only changed if the 3th argument is a number or a boolean.&lt;br /&gt;
   If the boolean is false it takes the default decloak distance for that unitdef,&lt;br /&gt;
   if the boolean is true it takes the absolute value of it.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitStealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean stealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitLineage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number teamID [, boolean isRoot] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean neutral ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number enemyUnitID | number x, number y, number z,&lt;br /&gt;
    [ boolean dgun = false ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitAlwaysVisible&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean alwaysVisible ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean noBlock) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMetalExtraction&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number depth [,number range] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitBuildSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( number builderID,&lt;br /&gt;
    number buildSpeed, [ number repairSpeed [, number reclaimSpeed&lt;br /&gt;
  [,number resurrectSpeed [, number captureSpeed [, number terraformSpeed ]] ]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean enabled [, number power] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number weaponNum, table states ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;format of the states table:&lt;br /&gt;
    {&lt;br /&gt;
      [&amp;quot;reloadstate&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;reloadtime&amp;quot;  = number value,]&lt;br /&gt;
      [&amp;quot;accuracy&amp;quot;    = number value,]&lt;br /&gt;
      [&amp;quot;sprayangle&amp;quot;  = number value,]&lt;br /&gt;
      [&amp;quot;range&amp;quot;       = number value,]&lt;br /&gt;
      [&amp;quot;projectilespeed&amp;quot; = number value,]&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number travel [, number travelPeriod] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMoveGoal&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;used by default commands to get in build-,attackrange etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, number x, number y, number z,&lt;br /&gt;
    [, number radius = 0 [, number speed = unit-&amp;gt;maxSpeed * 2 ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPhysics&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posx, number posy, number posz,&lt;br /&gt;
    number velx, number vely, number velz,&lt;br /&gt;
    number rotx, number roty, number rotz,&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number x, number z [, boolean alwaysAboveSea] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number velx, number vely, number velz ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number rotx, number roty, number rotz ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitImpulse&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Ressourcing ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitResourcing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    string res, number amount |&lt;br /&gt;
    { res = number amount, ... }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for res are: &amp;quot;[u|c][u|m][m|e]&amp;quot;&lt;br /&gt;
       unconditional | conditional&lt;br /&gt;
                 use | make&lt;br /&gt;
               metal | energy&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitResource&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UseUnitResource&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Feature Handling =&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateFeature&#039;&#039;&#039;&lt;br /&gt;
  (  string &amp;quot;defName&amp;quot;, number x, number y, number z&lt;br /&gt;
   [,number heading [, number AllyTeamID ]] ) -&amp;gt; number featureID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DestroyFeature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TransferFeature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number AllyTeamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number health) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureReclaim&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number reclaimLeft) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, string &amp;quot;UnitDefName?&amp;quot; [, number facing | string &amp;quot;facing&amp;quot; ] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  possible string values for facing are:&lt;br /&gt;
    &amp;quot;s&amp;quot;  = south&lt;br /&gt;
    &amp;quot;e&amp;quot;  = east&lt;br /&gt;
    &amp;quot;n&amp;quot;  = north&lt;br /&gt;
    &amp;quot;w&amp;quot;  = west&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveBuildingDecal&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lua to COB =&lt;br /&gt;
&#039;&#039;&#039;Spring.CallCOBScript&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )&lt;br /&gt;
    -&amp;gt; nil | number returnValue, number retArg1, number retArg2, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.CallCOBScriptCB&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )&lt;br /&gt;
    -&amp;gt; nil | number returnValue, number CallbackData, number retArg1, number retArg2, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBScriptID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string funcName ) -&amp;gt; nil | number funcID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCOBValue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, boolean splitData=false], number COBValue&lt;br /&gt;
    [, number param1 [,number param2 [, number param3 [, number param4 ] ] ] ] )&lt;br /&gt;
  -&amp;gt; number result | number result1, number result2&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCOBValue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number COBValue, number param1 [,number param2] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Give Order =&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( unitMap = { [unitID] = dontCare, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( unitArray = { [1] = unitID, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( unitMap = { [number unitID] = dontCare, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        params = {number, etc...},&lt;br /&gt;
        options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( unitArray = { [1] = number unitID, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        params = {number, etc...},&lt;br /&gt;
        options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Heightmap =&lt;br /&gt;
&#039;&#039;&#039;Spring.LevelHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AdjustHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RevertHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number origFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Command Descriptions =&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot; style=&amp;quot;font-size:120%&amp;quot;&amp;gt;Doesn&#039;t work in unsynced code.&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.EditUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdDescID, table cmdArray ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&lt;br /&gt;
  structure of cmdArray:&lt;br /&gt;
  {&lt;br /&gt;
    [ id          = int ],&lt;br /&gt;
    [ type        = int ],&lt;br /&gt;
    [ name        = string ],&lt;br /&gt;
    [ action      = string ],&lt;br /&gt;
    [ tooltip     = string ],&lt;br /&gt;
    [ texture     = string ],&lt;br /&gt;
    [ cursor      = string ],&lt;br /&gt;
    [ hidden      = boolean ],&lt;br /&gt;
    [ disabled    = boolean ],&lt;br /&gt;
    [ showUnique  = boolean ],&lt;br /&gt;
    [ onlyTexture = boolean ],&lt;br /&gt;
    [ params      = { string = string, ... } ]&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.InsertUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number cmdDescID ] , table cmdArray ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number cmdDescID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetNoPause&#039;&#039;&#039;&lt;br /&gt;
  ( boolean noPause ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitToFeature&#039;&#039;&#039;&lt;br /&gt;
  ( boolean tofeature ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetExperienceGrade&#039;&#039;&#039;&lt;br /&gt;
  ( number expGrade&lt;br /&gt;
   &amp;lt;font color=red&amp;gt;[, number ExpPowerScale [, number ExpHealthScale [, number ExpReloadScale ]]]&amp;lt;/font&amp;gt; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;expGrade defines how often UnitExperience() will be called,&lt;br /&gt;
   it is based on the following equation:&lt;br /&gt;
     (int) [exp/(exp+1)] / expGrade&lt;br /&gt;
   If this integer differs from the one before the experience change&lt;br /&gt;
   it will call UnitExperience().&lt;br /&gt;
  Also those 3 last params are only available in .cheat&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11148</id>
		<title>Lua CMDs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_CMDs&amp;diff=11148"/>
		<updated>2008-03-12T15:55:41Z</updated>

		<summary type="html">&lt;p&gt;JK: /* Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Options ==&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_ALT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_CTRL&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_SHIFT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_RIGHT&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.OPT_INTERNAL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Waitcodes ==&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_TIME&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_DEATH&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_SQUAD&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.WAITCODE_GATHER&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Insert/Remove Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;First, said &amp;quot;tags&amp;quot; are unique command identifiers, so each command that gets inserted into a unit&#039;s command &lt;br /&gt;
queue gets its unique &amp;quot;tag&amp;quot; number. (It is used to &#039;&#039;sync&#039;&#039; command queue operations, also it makes things much easier.)&amp;lt;br&amp;gt;&lt;br /&gt;
To receive those &amp;quot;tags&amp;quot; you can do the following:&lt;br /&gt;
   local cmdQueue = Spring.GetUnitCommands(unitID);&lt;br /&gt;
   if (#cmdQueue&amp;gt;0) then &lt;br /&gt;
      local cmdTag = cmdQueue[1].tag&lt;br /&gt;
      ..&lt;br /&gt;
   end&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.INSERT&#039;&#039;&#039;&lt;br /&gt;
  options.ALT     -&amp;gt; treat param0 as a position instead of a tag &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0] = command tag or position (negative numbers to reference the back of the queue)&lt;br /&gt;
  params[1] = insertCmd id &lt;br /&gt;
  params[2] = insertCmd options (shift,alt,right click,etc.)&lt;br /&gt;
  params[3 ... N+2] = insertCmd params[0 ... N-1]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;example:&lt;br /&gt;
    Spring.GiveOrderToUnit(unitID,&lt;br /&gt;
      CMD.INSERT,&lt;br /&gt;
      {-1,CMD.ATTACK,&#039;&#039;CMD.OPT_SHIFT&#039;&#039;,&#039;&#039;unitID2&#039;&#039;},&lt;br /&gt;
      {&amp;quot;alt&amp;quot;}&lt;br /&gt;
    );&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note: If you didn&#039;t already noticed, the command params and&lt;br /&gt;
        the command options are twisted in the array (compared to GiverOrder)!&lt;br /&gt;
  &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&lt;br /&gt;
  Note2: The command options in the array/table is a number value!&lt;br /&gt;
         You have to use CMD.OPT_* in this case.&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CMD.REMOVE&#039;&#039;&#039;&lt;br /&gt;
  options.ALT     -&amp;gt; use the parameters as commandIDs &lt;br /&gt;
  options.CONTROL -&amp;gt; use the build queue for factories &lt;br /&gt;
  params[0 ... N-1] = tags or commandIDs to remove&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMD[] table is bidirectional. That means: CMD[CMD.STOP] := &amp;quot;CMD_STOP&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.STOP&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.WAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.TIMEWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.DEATHWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_RECTANGLE&lt;br /&gt;
&#039;&#039;&#039;CMD.SQUADWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.GATHERWAIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.MOVE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.PATROL&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.FIGHT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.ATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.AREA_ATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.GUARD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT&lt;br /&gt;
&#039;&#039;&#039;CMD.AISELECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.COMBO_BOX&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPSELECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPADD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.GROUPCLEAR&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.REPAIR&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.FIRE_STATE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.MOVE_STATE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.SELFD&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.LOAD_UNITS&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.LOAD_ONTO&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT&lt;br /&gt;
&#039;&#039;&#039;CMD.UNLOAD_UNITS&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.UNLOAD_UNIT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.ONOFF&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.RECLAIM&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.CLOAK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.STOCKPILE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON&lt;br /&gt;
&#039;&#039;&#039;CMD.DGUN&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MAP&lt;br /&gt;
&#039;&#039;&#039;CMD.RESTORE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.REPEAT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.TRAJECTORY&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.RESURRECT&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.CAPTURE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_UNIT_OR_AREA&lt;br /&gt;
&#039;&#039;&#039;CMD.AUTOREPAIRLEVEL&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.LOOPBACKATTACK&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.IDLEMODE&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.ICON_MODE&lt;br /&gt;
&#039;&#039;&#039;CMD.SET_WANTED_MAX_SPEED&#039;&#039;&#039;&lt;br /&gt;
  type CMDTYPE.NUMBER&lt;br /&gt;
&#039;&#039;&#039;CMD.SETBASE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMD.INTERNAL&#039;&#039;&#039;&lt;br /&gt;
  used in different ways&lt;br /&gt;
&lt;br /&gt;
== CommandTypes ==&lt;br /&gt;
&amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;Note, the CMDTYPE[] table is bidirectional. That means: CMDTYPE[CMDTYPE.ICON] := &amp;quot;CMDTYPE_ICON&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON&#039;&#039;&#039;&lt;br /&gt;
  expect 0 parameters in return&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_MODE&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number selected mode)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_MAP&#039;&#039;&#039;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameters in return (unitid)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_MAP&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameters in return (unitid) or 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_FRONT&#039;&#039;&#039;&lt;br /&gt;
  expect 3 or 6 parameters in return (middle and right side of front if a front was defined)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.COMBO_BOX&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number selected option)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid) or 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_FEATURE_OR_AREA&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid or featureid+MAX_UNITS (id&amp;gt;MAX_UNITS=feature))&lt;br /&gt;
      or 4 parameters in return (mappos+radius)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_BUILDING&#039;&#039;&#039;&lt;br /&gt;
  expect 3 parameters in return (mappos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.ICON_UNIT_OR_RECTANGLE&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (unitid)&lt;br /&gt;
      or 3 parameters in return (mappos)&lt;br /&gt;
      or 6 parameters in return (startpos+endpos)&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.NUMBER&#039;&#039;&#039;&lt;br /&gt;
  expect 1 parameter in return (number)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.CUSTOM&#039;&#039;&#039;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.NEXT&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;next command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;br /&gt;
&#039;&#039;&#039;CMDTYPE.PREV&#039;&#039;&#039; &amp;lt;font color=&amp;quot;darkgreen&amp;quot;&amp;gt;previous command page&amp;lt;/font&amp;gt;&lt;br /&gt;
  used with CMD_INTERNAL&lt;/div&gt;</summary>
		<author><name>JK</name></author>
	</entry>
</feed>