<?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=Dmitryprofessional</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=Dmitryprofessional"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Dmitryprofessional"/>
	<updated>2026-11-08T20:29:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedRead&amp;diff=12416</id>
		<title>Lua UnsyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedRead&amp;diff=12416"/>
		<updated>2020-10-15T07:25:42Z</updated>

		<summary type="html">&lt;p&gt;Dmitryprofessional: /* Camera */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
=Unsynced Read=&lt;br /&gt;
&lt;br /&gt;
== Replay/Spectating ==&lt;br /&gt;
&#039;&#039;&#039;Spring.IsReplay&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetReplayLength&#039;&#039;&#039; {{new|92.0}}&lt;br /&gt;
  ( ) -&amp;gt; nil | number (in seconds)&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSpectatingState&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean spectating, boolean fullView, boolean fullSelect&lt;br /&gt;
&lt;br /&gt;
== Game/Menu Name ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameName&#039;&#039;&#039; {{new|104.0}}&lt;br /&gt;
  ( ) -&amp;gt; string name&lt;br /&gt;
&lt;br /&gt;
Apparently returns {{xtaglink|Modinfo.lua|name}} .. {{xtaglink|Modinfo.lua|version}} from [[Modinfo.lua]]. E.g. &amp;quot;Spring: 1944 test-5640-ac2d15b&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMenuName&#039;&#039;&#039; {{new|104.0}}&lt;br /&gt;
  ( ) -&amp;gt; string name&lt;br /&gt;
&lt;br /&gt;
== ModUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModUICtrl&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
== MyInfo ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMyAllyTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMyTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMyPlayerID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number&lt;br /&gt;
&lt;br /&gt;
== Local Player,Team,Ally ==&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;Redundant same as the GetMyXYZ functions!&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLocalPlayerID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number playerID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLocalTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLocalAllyTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number allyID&lt;br /&gt;
&lt;br /&gt;
== Team/Player Info ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerRoster&#039;&#039;&#039;&lt;br /&gt;
  ( [number sortType] | [number sortType], [bool showPathingPlayers] ) -&amp;gt;&lt;br /&gt;
    nil | playerTable = {&lt;br /&gt;
            [1] = {&lt;br /&gt;
              string  name,&lt;br /&gt;
              number  playerID,&lt;br /&gt;
              number  teamID,&lt;br /&gt;
              number  allyTeamID,&lt;br /&gt;
              boolean spectator,&lt;br /&gt;
              number  cpuUsage,&lt;br /&gt;
              number  pingTime&lt;br /&gt;
            },&lt;br /&gt;
            etc...&lt;br /&gt;
          }&lt;br /&gt;
   if pingTime is == -1, the player is pathfinding, in order to find the progress, use:&lt;br /&gt;
   cpuUsage&amp;amp;0x1 if it&#039;s PC or BO, cpuUsage&amp;amp; 0xFE to get path res, (cpuUsage&amp;gt;&amp;gt;8)*1000&lt;br /&gt;
   for the progress&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;  Sort codes:&lt;br /&gt;
     1 = Sort by allies  (the default)&lt;br /&gt;
     2 = Sort by teamID&lt;br /&gt;
     3 = Sort by playerName&lt;br /&gt;
     4 = Sort by CPU usage&lt;br /&gt;
     5 = Sort by ping time&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number r, number g, number b,  number a&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamOrigColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number r, number g, number b,  number a&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerTraffic&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID [, number packetID] ) -&amp;gt; number&lt;br /&gt;
&lt;br /&gt;
== Sound ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSoundStreamTime&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number playedTime, number totalTime&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCameraNames&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [camName] = number camNum, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { &amp;quot;name&amp;quot; = string, &amp;quot;mode&amp;quot; = number camIdx, state1 = number, state2 = number, ... }&lt;br /&gt;
&lt;br /&gt;
See [[Lua_camState]] for details about Spring.GetCameraState output.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCameraPosition&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCameraDirection&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number forward_x, number forward_y, number forward_z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCameraFOV&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number vFov, number hFov&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCameraVectors&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; vectorTable = {&lt;br /&gt;
    forward   = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    up        = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    right     = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    top       = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    bottom    = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    leftside  = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    rightside = { [1] = number x, [2] = number y, [3] = number z }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== Inview ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVisibleUnits&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID = -1 [, number radius = 30 [, boolean Icons = true ]]] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVisibleFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID = -1 [, number radius = 30 [, boolean Icons = true [, boolean geos = true ]]]] )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsAABBInView&#039;&#039;&#039;&lt;br /&gt;
  ( number minX, number minY, number minZ,&lt;br /&gt;
    number maxX, number maxY, number maxZ ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsSphereInView&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number radius ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsUnitIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsUnitInView&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsUnitVisible&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number radius [, boolean checkIcons] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
=== Screen Trace ===&lt;br /&gt;
&#039;&#039;&#039;Spring.WorldToScreenCoords&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TraceScreenRay&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  ( number mouseX, number mouseY [, boolean onlyCoords &lt;br /&gt;
  [, boolean useMinimap [, boolean includeSky [, boolean ignoreWater [, number D] ] ] ] ] )&lt;br /&gt;
    -&amp;gt; nil |&lt;br /&gt;
    string &amp;quot;unit&amp;quot;,    number unitID    |&lt;br /&gt;
    string &amp;quot;feature&amp;quot;, number featureID |&lt;br /&gt;
    string &amp;quot;ground&amp;quot;,  { [1] = number x, [2] = number y, [3] = number z }&lt;br /&gt;
&lt;br /&gt;
{{new|101.0}} Exended to allow a custom plane, parameters are (0, 1, 0, D=0) where D is the offset D can be specified in the third argument (if all the bools are false) or in the seventh (as shown). Intersection coordinates are returned in t[4],t[5],t[6] when the ray goes offmap and includeSky is true), or when no unit or feature is hit (or onlyCoords is true). This will only work for units &amp;amp; objects with the default collission sphere. Per Piece collission and custom collission objects are not supported. The unit must be selectable, to appear to a screen trace ray.&lt;br /&gt;
&lt;br /&gt;
to get map coordinates under mouse cursor: input mouse coordinates obtained via GetMouseState() and pass true for the onlyCoords parameter. Be careful as going off map will result in nil:&lt;br /&gt;
   local mouseX, mouseY = Spring.GetMouseState()&lt;br /&gt;
   print (&amp;quot;Mouse coordinates: (&amp;quot; .. mouseX .. &amp;quot;, &amp;quot; .. mouseY .. &amp;quot;)&amp;quot;)&lt;br /&gt;
   local desc, args = Spring.TraceScreenRay(mouseX, mouseY, true)&lt;br /&gt;
   if nil == desc then return end -- off map&lt;br /&gt;
   local x = args[1]&lt;br /&gt;
   local y = args[2]&lt;br /&gt;
   local z = args[3]&lt;br /&gt;
   print (&amp;quot;World coordinates: (&amp;quot; .. x .. &amp;quot;, &amp;quot; .. y .. &amp;quot;, &amp;quot; .. z .. &amp;quot;)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPixelDir&#039;&#039;&#039; {{New|95.0}}&lt;br /&gt;
  ( number x, number y ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&lt;br /&gt;
=== Screen &amp;amp; Window Geometry ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetViewGeometry&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number viewSizeX, number viewSizeY, number viewPosX, number viewPosY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWindowGeometry&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number winSizeX, number winSizeY, number winPosX, number winPosY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetScreenGeometry&#039;&#039;&#039; (is missing multiscreen support!)&lt;br /&gt;
  ( ) -&amp;gt; number screenSizeX, number screenSizeY, number ZERO, number ZERO&lt;br /&gt;
&lt;br /&gt;
== Unit ==&lt;br /&gt;
&#039;&#039;&#039;Spring.IsUnitAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitViewPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, boolean midPos = false ] ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransformMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, boolean invert = false] ) -&amp;gt; nil | number a11, number a12 ..., number a44    &amp;lt;span class=note&amp;gt;(4x4 matrix)&amp;lt;/span&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelectionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
  -&amp;gt; number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
  number offsetX, number offsetY, number offsetZ,&lt;br /&gt;
  number volumeType, number testType, number primaryAxis, boolean disabled&lt;br /&gt;
&lt;br /&gt;
=== Selected Units ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSelectedUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSelectedUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [number unitDefID] = { [1] = [number unitID], etc...}, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSelectedUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [number unitDefID] = number count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSelectedUnitsCount&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number count&lt;br /&gt;
&#039;&#039;&#039;Spring.IsUnitSelected&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
=== Unit Groups ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitGroup&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | {&lt;br /&gt;
    [number] = number unitCount,&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSelectedGroup&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupAIName&#039;&#039;&#039;&lt;br /&gt;
  ( number groupID ) -&amp;gt; string aiName&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupAIList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {&lt;br /&gt;
    [1] = string aiName, ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number groupID ) -&amp;gt; nil | {&lt;br /&gt;
    [1] = number unitID, ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number groupID ) -&amp;gt; nil | {&lt;br /&gt;
    [number unitDefID] = {number unitID, ...}, ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number groupID ) -&amp;gt; nil | {&lt;br /&gt;
    [number unitDefID] = number count, ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroupUnitsCount&#039;&#039;&#039;&lt;br /&gt;
  ( number groupID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
== Feature ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureSelectionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
  -&amp;gt; number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
  number offsetX, number offsetY, number offsetZ,&lt;br /&gt;
  number volumeType, number testType, number primaryAxis, boolean disabled&lt;br /&gt;
&lt;br /&gt;
== Projectiles ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVisibleProjectiles&#039;&#039;&#039; {{New|95.0}}&lt;br /&gt;
   ([ number allyTeamID = -1&lt;br /&gt;
   [ , boolean addSyncedProjectiles = true&lt;br /&gt;
   [ , boolean addWeaponProjectiles = true&lt;br /&gt;
   [ , boolean addPieceProjectiles = true ]]]]&lt;br /&gt;
   ) --&amp;gt; nil | {[1] = projectileID, ...}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUICommands&#039;&#039;&#039; {{new|101.0}}&lt;br /&gt;
  ( ) -&amp;gt; nil | {&lt;br /&gt;
    [1] = {&lt;br /&gt;
      command=string,&lt;br /&gt;
      description=string,&lt;br /&gt;
      synced=bool,&lt;br /&gt;
      cheat=bool,&lt;br /&gt;
    }, ...&lt;br /&gt;
  }&lt;br /&gt;
Returns a list of available [[UI commands]].&lt;br /&gt;
&lt;br /&gt;
=== GUI Settings ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGUIHidden&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.HaveShadows&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.HaveAdvShading&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWaterMode&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number mode, string &amp;quot;mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;  mode numbers:&lt;br /&gt;
      0 - basic&lt;br /&gt;
      1 - reflective&lt;br /&gt;
      2 - dynamic&lt;br /&gt;
      3 - refractive&lt;br /&gt;
      4 - bumpwater&lt;br /&gt;
      default - unknown&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapDrawMode&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | &amp;quot;normal&amp;quot; | &amp;quot;height&amp;quot; | &amp;quot;metal&amp;quot; | &amp;quot;pathTraversability&amp;quot; | &amp;quot;los&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDrawSelectionInfo&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Returns whether &amp;amp;quot;Selected units&amp;amp;quot; text is displayed.&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Unit &amp;amp; Feature GUI States ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLuaDraw&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNoDraw&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNoMinimap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureLuaDraw&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoDraw&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
=== Minimap ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMiniMapGeometry&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number posX, number posY, number sizeX, number sizeY,&lt;br /&gt;
    boolean minimized, boolean maximized&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMiniMapDualScreen&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean false | string &amp;quot;left&amp;quot; | string &amp;quot;right&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Spring.IsAboveMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== (Build-)Menu ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetActiveCommand&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number index (, number cmd_id, number cmd_type, string cmd_name)&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDefaultCommand&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number index (, number cmd_id, number cmd_type, string cmd_name)&lt;br /&gt;
&#039;&#039;&#039;Spring.GetActiveCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | {&lt;br /&gt;
    [1] = {&lt;br /&gt;
      id=number,&lt;br /&gt;
      type=number,&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 = { [1] = string, .. }&lt;br /&gt;
    }, ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetActiveCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number index ) -&amp;gt; nil | {&lt;br /&gt;
      id=number,&lt;br /&gt;
      type=number,&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 = { [1] = string, .. }&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCmdDescIndex&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&#039;&#039;&#039;Spring.GetActivePage&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number pageNum, number maxPages&lt;br /&gt;
&lt;br /&gt;
=== Build Facing ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetBuildSpacing&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number&lt;br /&gt;
&lt;br /&gt;
=== GatherMode &amp;amp; InvertQueueKey ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGatherMode&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetInvertQueueKey&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
=== Mouse States ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMouseState&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  ( ) -&amp;gt; number X, number Y,&lt;br /&gt;
    boolean leftPressed, boolean middlePressed, boolean rightPressed,&lt;br /&gt;
    boolean offscreen&lt;br /&gt;
&lt;br /&gt;
X, Y are the screen coordinates, not world ones. This coordinate system starts in the lower left corner.&lt;br /&gt;
&lt;br /&gt;
{{new|104.0}} Sixth return value offscreen&lt;br /&gt;
&lt;br /&gt;
For world coordinates see Spring.TraceScreenRay&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMouseCursor&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; string name, number scale&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMouseStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number mouseButton ) -&amp;gt; nil | number pressedX, number pressedY,&lt;br /&gt;
    number camPosX, number camPosY, number camPosZ,&lt;br /&gt;
    number dirX, number dirY, number dirZ&lt;br /&gt;
&lt;br /&gt;
=== (Hot-)Keys ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetKeyState&#039;&#039;&#039;&lt;br /&gt;
  ( number key ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModKeyState&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean alt, boolean ctrl, boolean meta, boolean shift&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPressedKeys&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {&lt;br /&gt;
    [number code] = boolean,&lt;br /&gt;
    [string name] = boolean, {{new|99.0}}&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetKeyCode&#039;&#039;&#039;&lt;br /&gt;
  ( string keysym ) -&amp;gt; number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetKeySymbol&#039;&#039;&#039;&lt;br /&gt;
  ( number key ) -&amp;gt; string &amp;quot;keysym1&amp;quot;, string &amp;quot;keysym2&amp;quot;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetKeyBindings&#039;&#039;&#039;&lt;br /&gt;
  ( string keyset ) -&amp;gt; nil | {&lt;br /&gt;
    [1] = {&lt;br /&gt;
      [string actionCmd] = string actionExtra,&lt;br /&gt;
      command   = string actionCmd,    {{new|97}}&lt;br /&gt;
      boundWith = string boundWith,    {{new|97}}&lt;br /&gt;
      extra     = string actionExtra,  {{new|97}}&lt;br /&gt;
    }, ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetActionHotKeys&#039;&#039;&#039;&lt;br /&gt;
  ( string action ) -&amp;gt; nil | { [1] = string hotKey, ... }&lt;br /&gt;
&lt;br /&gt;
=== Console ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLastMessagePositions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | {&lt;br /&gt;
    [1] = { number X, number Y, number Z },&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConsoleBuffer&#039;&#039;&#039;&lt;br /&gt;
  ( [number maxLines] ) -&amp;gt; nil | {&lt;br /&gt;
    [1] = {&lt;br /&gt;
      text = string,&lt;br /&gt;
      priority = number&lt;br /&gt;
   }, ...&lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCurrentTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
=== LOS Colors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLosViewColors&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  ( ) -&amp;gt; always = {r,g,b}, LOS = {r,g,b}, radar = {r,g,b}, jam = {r,g,b}, radar2 = {r,g,b}  {{new|100}}&lt;br /&gt;
&lt;br /&gt;
== Config ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConfigParams&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;same information as &amp;lt;code&amp;gt;spring --list-config-vars&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( ) -&amp;gt; table {&lt;br /&gt;
    {&lt;br /&gt;
      name = string,&lt;br /&gt;
      type = string,&lt;br /&gt;
      [ description = string, ]&lt;br /&gt;
      [ defaultValue = string, ]&lt;br /&gt;
      [ minimumValue = string, ]&lt;br /&gt;
      [ maximumValue = string, ]&lt;br /&gt;
      [ safemodeValue = string, ]&lt;br /&gt;
      [ declarationFile = string, ]&lt;br /&gt;
      [ declarationLine = number, ]&lt;br /&gt;
      [ readOnly = bool, ]&lt;br /&gt;
    },&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConfigInt&#039;&#039;&#039;&lt;br /&gt;
  ( string name [, number default ] ) -&amp;gt; nil | number&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConfigFloat&#039;&#039;&#039; {{new|104.0}}&lt;br /&gt;
  ( string name [, number default ] ) -&amp;gt; nil | number&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConfigString&#039;&#039;&#039;&lt;br /&gt;
  ( string name [, string default ] ) -&amp;gt; nil | string&lt;br /&gt;
&lt;br /&gt;
== FPS &amp;amp; GetDrawFrame ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFPS&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetDrawFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number low 16bit, number high 16bit&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVideoCapturingMode&#039;&#039;&#039; {{new|104.0}}&lt;br /&gt;
  ( ) -&amp;gt; boolean videoCaptureAllowed&lt;br /&gt;
&lt;br /&gt;
== Time ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039; {{new|98.0}}&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFrameTimeOffset&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLastUpdateSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHasLag&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTimer&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; timer&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFrameTimer&#039;&#039;&#039; {{new|102.0}}&lt;br /&gt;
  ( ) -&amp;gt; timer&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;Get a timer for the start of the frame, this should give better results for camera interpolations.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DiffTimers&#039;&#039;&#039;&lt;br /&gt;
  ( timer cur, timer ago, [boolean inMilliseconds]) -&amp;gt; number seconds&lt;br /&gt;
{{New|95.0}} optional third argument (boolean) to return dt in milliseconds&lt;br /&gt;
&lt;br /&gt;
== Rendering ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapSquareTexture&#039;&#039;&#039;&lt;br /&gt;
  (number texSqrX, number texSqrY, number texMipLvl, string luaTexName) -&amp;gt; boolean success&lt;br /&gt;
&lt;br /&gt;
== Logging ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetLogSections&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; table { &amp;quot;KeyBindings&amp;quot; = LOG.INFO, &amp;quot;Font&amp;quot; = LOG.INFO, &amp;quot;Sound&amp;quot; = LOG.WARNING, ... }&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClipboard&#039;&#039;&#039; {{new|98.0}}&lt;br /&gt;
  ( ) -&amp;gt; string text&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Dmitryprofessional</name></author>
	</entry>
</feed>