User:Master-athmos: Difference between revisions

From Spring
Jump to navigationJump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}}
[[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}}
=Unsynced Read=


== Replay/Spectating ==
'''Spring.IsReplay'''
  ( ) -> nil | boolean
'''Spring.GetReplayLength''' {{new|92.0}}
  ( ) -> nil | number (in seconds)
'''Spring.GetSpectatingState'''
  ( ) -> boolean spectating, boolean fullView, boolean fullSelect


== Game/Menu Name ==
'''Spring.GetGameName''' {{new|104.0}}
  ( ) -> string name


<div class="note">
Apparently returns {{xtaglink|Modinfo.lua|name}} .. {{xtaglink|Modinfo.lua|version}} from [[Modinfo.lua]]. E.g. "Spring: 1944 test-5640-ac2d15b".
NOTE: Prior to 102.0, entries below marked <font color="red" style="font-weight:600">(needs ModUICtrl)</font> require the setting ModUICtrl to be enabled in the users [[springrc]], if you want to use them in unsynced LuaRules/LuaGaia. It is enabled by default in previous versions and removed in 102.0 so you generally don't need to care.</div>


= UI =
'''Spring.GetMenuName''' {{new|104.0}}
  ( ) -> string name


{{LuaCallout
== ModUI ==
|prefix = Spring.
'''Spring.GetModUICtrl'''
|name = SetLastMessagePosition
  ( ) -> boolean
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} z
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


= Ingame Console =
== MyInfo ==
'''Spring.GetMyAllyTeamID'''
  ( ) -> number
'''Spring.GetMyTeamID'''
  ( ) -> number
'''Spring.GetMyPlayerID'''
  ( ) -> number


{{LuaCallout
== Local Player,Team,Ally ==
|prefix = Spring.
<span class="note">Redundant same as the GetMyXYZ functions!</span>
|name = Echo
|arg1 = {{type|arg1}} {{bracket}}
|arg2 = {{type|arg2}} {{bracket}}
|arg3 = {{type|...}} {{rbracket}}{{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Useful for debugging.<br> Prints values in the spring chat console.<br> Hint: the default print() writes to STDOUT.
}}


'''Spring.GetLocalPlayerID'''
  ( ) -> number playerID
'''Spring.GetLocalTeamID'''
  ( ) -> number teamID
'''Spring.GetLocalAllyTeamID'''
  ( ) -> number allyID


{{LuaCallout
== Team/Player Info ==
|prefix = Spring.
'''Spring.GetPlayerRoster'''
|name = Log
  ( [number sortType] | [number sortType], [bool showPathingPlayers] ) ->
|arg1 = {{type|string}} section
    nil | playerTable = {
|arg2 = {{type|number}} logLevel {{pipe}} {{type|string}} logLevel
            [1] = {
|arg3 = {{type|string}} LogMessage1 {{bracket}}
              string name,
|arg4 = {{type|string}} LogMessage2{{bracket}}
              number  playerID,
|arg5 = ... {{rbracket}}{{rbracket}}
              number  teamID,
|arg6 =
              number  allyTeamID,
|arg7 =
              boolean spectator,
|arg8 =
              number cpuUsage,
|arg9 =
              number  pingTime
|return = {{type|nil}}
            },
|info =
            etc...
}}
          }
<pre>Possible values for logLevel are:
  if pingTime is == -1, the player is pathfinding, in order to find the progress, use:
    "debug"   | LOG.DEBUG
  cpuUsage&0x1 if it's PC or BO, cpuUsage& 0xFE to get path res, (cpuUsage>>8)*1000
    "info"    | LOG.INFO
  for the progress
    "notice"  | LOG.NOTICE (engine default) (new in Version 97)
  <font color="#55ee99">  Sort codes:
    "warning" | LOG.WARNING
    1 = Sort by allies  (the default)
    "error"  | LOG.ERROR
    2 = Sort by teamID
    "fatal"   | LOG.FATAL</pre>
    3 = Sort by playerName
    4 = Sort by CPU usage
    5 = Sort by ping time</font>
'''Spring.GetTeamColor'''
   ( number teamID ) -> nil | number r, number g, number b,  number a
'''Spring.GetTeamOrigColor'''
  ( number teamID ) -> nil | number r, number g, number b,  number a
'''Spring.GetPlayerTraffic'''
   ( number playerID [, number packetID] ) -> number


== Sound ==
'''Spring.GetSoundStreamTime'''
  ( ) -> number playedTime, number totalTime


== Camera ==
'''Spring.GetCameraNames'''
  ( ) -> { [camName] = number camNum, ... }
'''Spring.GetCameraState'''
  ( ) -> { "name" = string, "mode" = number camIdx, state1 = number, state2 = number, ... }


{{LuaCallout
See [[Lua_camState]] for details about Spring.GetCameraState output.
|prefix = Spring.
|name = SendCommands
|arg1 = {{type|string}} command1 {{bracket}}
|arg2 = {{type|string}} command2 {{bracket}}
|arg3 = {{type|...}} {{rbracket}}{{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


or
'''Spring.GetCameraPosition'''
  ( ) -> number x, number y, number z
'''Spring.GetCameraDirection'''
  ( ) -> number forward_x, number forward_y, number forward_z
'''Spring.GetCameraFOV'''
  ( ) -> number vFov, number hFov
'''Spring.GetCameraVectors'''
  ( ) -> vectorTable = {
    forward  = { [1] = number x, [2] = number y, [3] = number z },
    up        = { [1] = number x, [2] = number y, [3] = number z },
    right    = { [1] = number x, [2] = number y, [3] = number z },
    top      = { [1] = number x, [2] = number y, [3] = number z },
    bottom    = { [1] = number x, [2] = number y, [3] = number z },
    leftside  = { [1] = number x, [2] = number y, [3] = number z },
    rightside = { [1] = number x, [2] = number y, [3] = number z }
  }


{{LuaCallout
=== Inview ===
|prefix = Spring.
'''Spring.GetVisibleUnits'''
|name = SendCommands
  ( [number teamID = -1 [, number radius = 30 [, boolean Icons = true ]]] )
|arg1 = { {{type|string}} command1, {{type|string}} command2, ... }
    -> nil | unitTable = { [1] = number unitID, ... }
|arg2 =
'''Spring.GetVisibleFeatures'''
|arg3 =  
  ( [number allyTeamID = -1 [, number radius = 30 [, boolean Icons = true [, boolean geos = true ]]]] )
|arg4 =  
    -> nil | featureTable = { [1] = number featureID, ... }
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


== GUI ==
'''Spring.IsAABBInView'''
  ( number minX, number minY, number minZ,
    number maxX, number maxY, number maxZ ) -> nil | boolean
'''Spring.IsSphereInView'''
  ( number x, number y, number z [, number radius ] ) -> nil | boolean
'''Spring.IsUnitIcon'''
  ( number unitID ) -> nil | boolean
'''Spring.IsUnitInView'''
  ( number unitID ) -> nil | boolean
'''Spring.IsUnitVisible'''
  ( number unitID [, number radius [, boolean checkIcons] ] ) -> nil | boolean


{{LuaCallout
=== Screen Trace ===
|prefix = Spring.
'''Spring.WorldToScreenCoords'''
|name = SetActiveCommand
  ( number x, number y, number z ) -> number x, number y, number z
|arg1 = {{type|string}} action {{bracket}}
|arg2 = {{type|string}} actionExtra {{rbracket}}
|arg3 =  
|arg4 =  
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} commandSet
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


or
'''Spring.TraceScreenRay'''


{{LuaCallout
  ( number mouseX, number mouseY [, boolean onlyCoords
|prefix = Spring.
  [, boolean useMinimap [, boolean includeSky [, boolean ignoreWater [, number D] ] ] ] ] )
|name = SetActiveCommand
    -> nil |
|arg1 = {{type|number}} cmdIndex {{bracket}}
    string "unit",    number unitID    |
|arg2 = {{type|number}} button = 1 {{bracket}}
    string "feature", number featureID |
|arg3 = {{type|bool}} leftClick {{bracket}}
    string "ground",  { [1] = number x, [2] = number y, [3] = number z }
|arg4 = {{type|bool}} rightClick {{bracket}}
|arg5 = {{type|bool}} alt {{bracket}}
|arg6 = {{type|bool}} ctrl {{bracket}}
|arg7 = {{type|bool}} meta {{bracket}}
|arg8 = {{type|bool}} shift {{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}
|arg9 =  
|return = {{type|nil}} {{pipe}} {{type|bool}} commandSet
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


{{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 & 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.


{{LuaCallout
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:
|prefix = Spring.
  local mouseX, mouseY = Spring.GetMouseState()
|name = LoadCmdColorsConfig
  print ("Mouse coordinates: (" .. mouseX .. ", " .. mouseY .. ")")
|arg1 = {{type|string}} config
  local desc, args = Spring.TraceScreenRay(mouseX, mouseY, true)
|arg2 =  
  if nil == desc then return end -- off map
|arg3 =  
  local x = args[1]
|arg4 =  
  local y = args[2]
|arg5 =  
  local z = args[3]
|arg6 =  
  print ("World coordinates: (" .. x .. ", " .. y .. ", " .. z .. ")")
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}




{{LuaCallout
'''Spring.GetPixelDir''' {{New|95.0}}
|prefix = Spring.
  ( number x, number y ) -> number dirx, number diry, number dirz
|name = LoadCtrlPanelConfig
|arg1 = {{type|string}} config
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


=== Screen & Window Geometry ===
'''Spring.GetViewGeometry'''
  ( ) -> number viewSizeX, number viewSizeY, number viewPosX, number viewPosY
'''Spring.GetWindowGeometry'''
  ( ) -> number winSizeX, number winSizeY, number winPosX, number winPosY
'''Spring.GetScreenGeometry''' (is missing multiscreen support!)
  ( ) -> number screenSizeX, number screenSizeY, number ZERO, number ZERO


== Unit ==
'''Spring.IsUnitAllied'''
  ( number unitID ) -> nil | boolean
'''Spring.GetUnitViewPosition'''
  ( number unitID [, boolean midPos = false ] ) -> nil | number x, number y, number z
'''Spring.GetUnitTransformMatrix'''
  ( number unitID [, boolean invert = false] ) -> nil | number a11, number a12 ..., number a44    <span class=note>(4x4 matrix)</span>
'''Spring.GetUnitSelectionVolumeData'''
  ( number unitID )
  -> number scaleX, number scaleY, number scaleZ,
  number offsetX, number offsetY, number offsetZ,
  number volumeType, number testType, number primaryAxis, boolean disabled


{{LuaCallout
=== Selected Units ===
|prefix = Spring.
'''Spring.GetSelectedUnits'''
|name = ForceLayoutUpdate
  ( ) -> { [1] = unitID, ... }
|arg1 =  
'''Spring.GetSelectedUnitsSorted'''
|arg2 =  
  ( ) -> { [number unitDefID] = { [1] = [number unitID], etc...}, ... }
|arg3 =  
'''Spring.GetSelectedUnitsCounts'''
|arg4 =
  ( ) -> { [number unitDefID] = number count, etc... }
|arg5 =  
'''Spring.GetSelectedUnitsCount'''
|arg6 =
  ( ) -> number count
|arg7 =  
'''Spring.IsUnitSelected'''
|arg8 =  
  ( number unitID ) -> nil | boolean
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


=== Unit Groups ===
'''Spring.GetUnitGroup'''
  ( number unitID ) -> nil | number


{{LuaCallout
'''Spring.GetGroupList'''
|prefix = Spring.
  ( ) -> nil | {
|name = SetDrawSelectionInfo
    [number] = number unitCount,
|arg1 = {{type|bool}} enable
    ...
|arg2 =  
  }
|arg3 =
'''Spring.GetSelectedGroup'''
|arg4 =
  ( ) -> number
|arg5 =
'''Spring.GetGroupAIName'''
|arg6 =
  ( number groupID ) -> string aiName
|arg7 =
'''Spring.GetGroupAIList'''
|arg8 =
  ( ) -> {
|arg9 =
    [1] = string aiName, ...
|return = {{type|nil}}
  }
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>Disables the "Selected Units x" box in the GUI.
}}


== Mouse ==
'''Spring.GetGroupUnits'''
  ( number groupID ) -> nil | {
    [1] = number unitID, ...
  }
'''Spring.GetGroupUnitsSorted'''
  ( number groupID ) -> nil | {
    [number unitDefID] = {number unitID, ...}, ...
  }
'''Spring.GetGroupUnitsCounts'''
  ( number groupID ) -> nil | {
    [number unitDefID] = number count, ...
  }
'''Spring.GetGroupUnitsCount'''
  ( number groupID ) -> nil | number count


{{LuaCallout
== Feature ==
|prefix = Spring.
'''Spring.GetFeatureSelectionVolumeData'''
|name = SetMouseCursor
  ( number unitID )
|arg1 = {{type|string}} cursorName {{bracket}}
  -> number scaleX, number scaleY, number scaleZ,
|arg2 = {{type|number}} scale {{rbracket}}
  number offsetX, number offsetY, number offsetZ,
|arg3 =
  number volumeType, number testType, number primaryAxis, boolean disabled
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


== Projectiles ==
'''Spring.GetVisibleProjectiles''' {{New|95.0}}
  ([ number allyTeamID = -1
  [ , boolean addSyncedProjectiles = true
  [ , boolean addWeaponProjectiles = true
  [ , boolean addPieceProjectiles = true ]]]]
  ) --> nil | {[1] = projectileID, ...}


{{LuaCallout
|prefix = Spring.
|name = WarpMouse
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


== LOS Colors ==
== UI ==
'''Spring.GetUICommands''' {{new|101.0}}
  ( ) -> nil | {
    [1] = {
      command=string,
      description=string,
      synced=bool,
      cheat=bool,
    }, ...
  }
Returns a list of available [[UI commands]].


{{LuaCallout
=== GUI Settings ===
|prefix = Spring.
'''Spring.IsGUIHidden'''
|name = SetLosViewColors
  ( ) -> nil | boolean
|arg1 = {{type|table}} always = {r,g,b}
'''Spring.HaveShadows'''
|arg2 = {{type|table}} LOS = {r,g,b}
  ( ) -> nil | boolean
|arg3 = {{type|table}} radar = {r,g,b}
'''Spring.HaveAdvShading'''
|arg4 = {{type|table}} jam = {r,g,b}
  ( ) -> nil | boolean
|arg5 = {{type|table}} radar2 = {r,g,b}
'''Spring.GetWaterMode'''
|arg6 =
  ( ) -> nil | number mode, string "mode"
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>New arguments since 100.0 (radar2 is the inside of radar edge). Arguments for 99.0 and before:<br>
}}
<pre>( table reds = { number always, number LOS, number radar, number jam },
    table greens = { number always, number LOS, number radar, number jam },
    table blues = { number always, number LOS, number radar, number jam } ) -> nil</pre>


== SendMessage ==
  <font color="#55ee99">  mode numbers:
      0 - basic
      1 - reflective
      2 - dynamic
      3 - refractive
      4 - bumpwater
      default - unknown</font>
'''Spring.GetMapDrawMode'''
  ( ) -> nil | "normal" | "height" | "metal" | "pathTraversability" | "los"
'''Spring.GetDrawSelectionInfo''' <font color="#55ee99">Returns whether &quot;Selected units&quot; text is displayed.</font>
  ( ) -> boolean


{{LuaCallout
=== Unit & Feature GUI States ===
|prefix = Spring.
'''Spring.GetUnitLuaDraw'''
|name = SendMessage
  ( number unitID ) -> nil | boolean
|arg1 = {{type|string}} message
'''Spring.GetUnitNoDraw'''
|arg2 =
  ( number unitID ) -> nil | boolean
|arg3 =
'''Spring.GetUnitNoMinimap'''
|arg4 =
  ( number unitID ) -> nil | boolean
|arg5 =
'''Spring.GetUnitNoSelect'''
|arg6 =
  ( number unitID ) -> nil | boolean
|arg7 =
'''Spring.GetFeatureLuaDraw'''
|arg8 =
  ( number featureID ) -> nil | boolean
|arg9 =
'''Spring.GetFeatureNoDraw'''
|return = {{type|nil}}
  ( number featureID ) -> nil | boolean
|info =
}}


=== Minimap ===
'''Spring.GetMiniMapGeometry'''
  ( ) -> number posX, number posY, number sizeX, number sizeY,
    boolean minimized, boolean maximized
'''Spring.GetMiniMapDualScreen'''
  ( ) -> boolean false | string "left" | string "right"
'''Spring.IsAboveMiniMap'''
  ( number x, number y ) -> nil | boolean


{{LuaCallout
|prefix = Spring.
|name = SendMessageToPlayer
|arg1 = {{type|number}} playerID
|arg2 = {{type|string}} message
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


=== (Build-)Menu ===
'''Spring.GetActiveCommand'''
  ( ) -> nil | number index (, number cmd_id, number cmd_type, string cmd_name)
'''Spring.GetDefaultCommand'''
  ( ) -> nil | number index (, number cmd_id, number cmd_type, string cmd_name)
'''Spring.GetActiveCmdDescs'''
  ( ) -> nil | {
    [1] = {
      id=number,
      type=number,
      name=string,
      action=string,
      tooltip=string,
      texture=string,
      cursor=string,
      hidden=boolean,
      disabled=boolean,
      showUnique=boolean,
      onlyTexture=boolean,
      params = { [1] = string, .. }
    }, ...
  }
'''Spring.GetActiveCmdDesc'''
  ( number index ) -> nil | {
      id=number,
      type=number,
      name=string,
      action=string,
      tooltip=string,
      texture=string,
      cursor=string,
      hidden=boolean,
      disabled=boolean,
      showUnique=boolean,
      onlyTexture=boolean,
      params = { [1] = string, .. }
  }
'''Spring.GetCmdDescIndex'''
  ( number cmdID ) -> nil | number index
'''Spring.GetActivePage'''
  ( ) -> nil | number pageNum, number maxPages


{{LuaCallout
=== Build Facing ===
|prefix = Spring.
'''Spring.GetBuildFacing'''
|name = SendMessageToTeam
  ( ) -> nil | number
|arg1 = {{type|number}} teamID
'''Spring.GetBuildSpacing'''
|arg2 = {{type|string}} message
  ( ) -> nil | number
|arg3 =  
|arg4 =  
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


=== GatherMode & InvertQueueKey ===
'''Spring.GetGatherMode'''
  ( ) -> nil | number
'''Spring.GetInvertQueueKey'''
  ( ) -> nil | boolean


=== Mouse States ===
'''Spring.GetMouseState'''


{{LuaCallout
  ( ) -> number X, number Y,
|prefix = Spring.
    boolean leftPressed, boolean middlePressed, boolean rightPressed,
|name = SendMessageToAllyTeam
    boolean offscreen
|arg1 = {{type|number}} allyID
|arg2 = {{type|string}} message
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


X, Y are the screen coordinates, not world ones. This coordinate system starts in the lower left corner.


{{LuaCallout
{{new|104.0}} Sixth return value offscreen
|prefix = Spring.
|name = SendMessageToSpectators
|arg1 = {{type|string}} message
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <PLAYER#> (with # being a playerid) inside the string will be replaced with the players name - i.e. :<br>Spring.SendMessage ("<PLAYER1> did something")<br>might display as "ProRusher did something"
}}


== Markers ==
For world coordinates see Spring.TraceScreenRay


'''Spring.GetMouseCursor'''
  ( ) -> string name, number scale
'''Spring.GetMouseStartPosition'''
  ( number mouseButton ) -> nil | number pressedX, number pressedY,
    number camPosX, number camPosY, number camPosZ,
    number dirX, number dirY, number dirZ


{{LuaCallout
=== (Hot-)Keys ===
|prefix = Spring.
'''Spring.GetKeyState'''
|name = MarkerAddPoint
  ( number key ) -> nil | boolean
|arg1 = {{type|number}} x
'''Spring.GetModKeyState'''
|arg2 = {{type|number}} y
  ( ) -> boolean alt, boolean ctrl, boolean meta, boolean shift
|arg3 = {{type|number}} z {{bracket}}
'''Spring.GetPressedKeys'''
|arg4 = {{type|string}} text = "" {{bracket}}
  ( ) -> {
|arg5 = {{type|bool}} localOnly {{rbracket}}{{rbracket}}
    [number code] = boolean,
|arg6 =
    [string name] = boolean, {{new|99.0}}
|arg7 =
    ...
|arg8 =
  }
|arg9 =  
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


'''Spring.GetKeyCode'''
  ( string keysym ) -> number
'''Spring.GetKeySymbol'''
  ( number key ) -> string "keysym1", string "keysym2"
'''Spring.GetKeyBindings'''
  ( string keyset ) -> nil | {
    [1] = {
      [string actionCmd] = string actionExtra,
      command  = string actionCmd,    {{new|97}}
      boundWith = string boundWith,    {{new|97}}
      extra    = string actionExtra,  {{new|97}}
    }, ...
  }
'''Spring.GetActionHotKeys'''
  ( string action ) -> nil | { [1] = string hotKey, ... }


{{LuaCallout
=== Console ===
|prefix = Spring.
'''Spring.GetLastMessagePositions'''
|name = MarkerAddLine
  ( ) -> nil | {
|arg1 = {{type|number}} x1
    [1] = { number X, number Y, number Z },
|arg2 = {{type|number}} y1
    ...
|arg3 = {{type|number}} z1
  }
|arg4 = {{type|number}} x2
'''Spring.GetConsoleBuffer'''
|arg5 = {{type|number}} y2
  ( [number maxLines] ) -> nil | {
|arg6 = {{type|number}} z2
    [1] = {
|arg7 =  
      text = string,
|arg8 =  
      priority = number
|arg9 =
  }, ...
|return = {{type|nil}}
  }
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
'''Spring.GetCurrentTooltip'''
}}
  ( ) -> string


=== LOS Colors ===
'''Spring.GetLosViewColors'''


{{LuaCallout
  ( ) -> always = {r,g,b}, LOS = {r,g,b}, radar = {r,g,b}, jam = {r,g,b}, radar2 = {r,g,b} {{new|100}}
|prefix = Spring.
|name = MarkerErasePosition
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} z
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}


= Sounds =
== Config ==
'''Spring.GetConfigParams''' <span class="note">same information as <code>spring --list-config-vars</code></span>
  ( ) -> table {
    {
      name = string,
      type = string,
      [ description = string, ]
      [ defaultValue = string, ]
      [ minimumValue = string, ]
      [ maximumValue = string, ]
      [ safemodeValue = string, ]
      [ declarationFile = string, ]
      [ declarationLine = number, ]
      [ readOnly = bool, ]
    },
    ...
  }


{{LuaCallout
'''Spring.GetConfigInt'''
|prefix = Spring.
  ( string name [, number default ] ) -> nil | number
|name = LoadSoundDef
|arg1 = {{type|string}} soundfile
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} success
|info = Loads a SoundDefs file, the format is the same as in `gamedata/sounds.lua`.
}}


'''Spring.GetConfigFloat''' {{new|104.0}}
  ( string name [, number default ] ) -> nil | number


{{LuaCallout
'''Spring.GetConfigString'''
|prefix = Spring.
  ( string name [, string default ] ) -> nil | string
|name = PlaySoundFile
|arg1 = {{type|string}} soundfile {{bracket}}
|arg2 = {{type|number}} volume = 1.0 {{bracket}}
|arg3 = {{type|number}} posx {{bracket}}
|arg4 = {{type|number}} posy {{bracket}}
|arg5 = {{type|number}} posz {{bracket}}
|arg6 = {{type|number}} speedx{{bracket}}
|arg7 = {{type|number}} speedy{{bracket}}
|arg8 = {{type|number}} speedz{{bracket}}
|arg9 = {{type|number}} {{pipe}} {{type|string}} channel {{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}
|return = {{type|nil}} {{pipe}} {{type|bool}} playSound
|info = Possible arguments for channel argument:
}}
<pre>   "general" || 0 || nil (default)
    "battle" || "sfx" | 1
    "unitreply" || "voice" || 2
    "userinterface" || "ui" || 3</pre>


== FPS & GetDrawFrame ==
'''Spring.GetFPS'''
  ( ) -> number
'''Spring.GetDrawFrame'''
  ( ) -> number low 16bit, number high 16bit
'''Spring.GetVideoCapturingMode''' {{new|104.0}}
  ( ) -> boolean videoCaptureAllowed


{{LuaCallout
== Time ==
|prefix = Spring.
'''Spring.GetGameSpeed''' {{new|98.0}}
|name = PlaySoundStream
  ( ) -> number userSpeedFactor, number speedFactor, boolean paused
|arg1 = {{type|string}} oggfile {{bracket}}
'''Spring.GetGameState''' {{new|105.0}}
|arg2 = {{type|number}} volume = 1.0 {{bracket}}
  ( ) -> boolean finishedLoading, boolean loadedFromSave, boolean locallyPaused, boolean laggingWrtExpectedFromSimtime
|arg3 = {{type|bool}} enqueue {{rbracket}}{{rbracket}}
'''Spring.GetFrameTimeOffset'''
|arg4 =
  ( ) -> nil | number
|arg5 =
'''Spring.GetLastUpdateSeconds'''
|arg6 =
  ( ) -> nil | number
|arg7 =
'''Spring.GetHasLag'''
|arg8 =
  ( ) -> boolean
|arg9 =
'''Spring.GetTimer'''
|return = {{type|nil}} {{pipe}} {{type|bool}} true
  ( ) -> timer
|info = Allows to play an Ogg Vorbis (.OGG) compressed sound file.<br> In 83.0 and up multiple sound streams may be played at once.
'''Spring.GetFrameTimer''' {{new|102.0}}
}}
  ( ) -> timer
<span class="note">Get a timer for the start of the frame, this should give better results for camera interpolations.</span>


'''Spring.DiffTimers'''
  ( timer cur, timer ago, [boolean inMilliseconds]) -> number seconds
{{New|95.0}} optional third argument (boolean) to return dt in milliseconds


{{LuaCallout
== Rendering ==
|prefix = Spring.
|name = StopSoundStream
|arg1 =  
|arg2 =  
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Terminates any SoundStream currently running.
}}


'''Spring.GetMapSquareTexture'''
  (number texSqrX, number texSqrY, number texMipLvl, string luaTexName) -> boolean success


{{LuaCallout
== Logging ==
|prefix = Spring.
'''Spring.GetLogSections'''
|name = PauseSoundStream
  ( ) -> table { "KeyBindings" = LOG.INFO, "Font" = LOG.INFO, "Sound" = LOG.WARNING, ... }
|arg1 =  
|arg2 =  
|arg3 =
|arg4 =  
|arg5 =  
|arg6 =  
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


 
== Misc ==
{{LuaCallout
'''Spring.GetClipboard''' {{new|98.0}}
|prefix = Spring.
   ( ) -> string text
|name = SetSoundStreamVolume
|arg1 = {{type|number}} volume
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= SendLuaMessage =
<font color="#55ee99">Very important! (allows synced inter-lua-enviroment communications)</font>
 
{{LuaCallout
|prefix = Spring.
|name = SendLuaUIMsg
|arg1 = {{type|string}} message
|arg2 = {{type|string}} mode
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>Possible modes are:<br>"s"/"specs" & "a"/"allies"
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SendLuaGaiaMsg
|arg1 = {{type|string}} message
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SendLuaRulesMsg
|arg1 = {{type|string}} message
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
= AI =
 
{{LuaCallout
|prefix = Spring.
|name = SendSkirmishAIMessage
|arg1 = {{type|number}} aiTeam
|arg2 = {{type|string}} message
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} ai_processed, { {{bracket|1}} = {{type|string}} response1, ... }
|info = {{new|83.0}}<br>Note there is nothing in this table due to "limitations" of the AI interface.
}}
 
= Units =
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitLeaveTracks
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} leavetracks
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|83.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitSelectionVolumeData
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ
|arg3 = {{type|number}} offsetX, {{type|number}} offsetY, {{type|number}} offsetZ
|arg4 = {{type|number}} vType
|arg5 = {{type|number}} tType
|arg6 = {{type|number}} Axis
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}
}}
 
== Unit Selection ==
 
{{LuaCallout
|prefix = Spring.
|name = SelectUnitMap
|arg1 = { {{bracket|unitID}} = anything, ... } {{bracket}}
|arg2 = {{type|bool}} append {{rbacket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SelectUnitArray
|arg1 = { {{bracket|1}} = unitID1, {{bracket|2}} = unitID2, ... } {{bracket}}
|arg2 = {{type|bool}} append {{rbacket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetDrawSelectionInfo
|arg1 = {{type|bool}} drawSelectionInfo
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
== Unit Group ==
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitGroup
|arg1 = {{type|number}} unitID
|arg2 = {{type|number}} groupID
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
== Give Order ==
 
{{LuaCallout
|prefix = Spring.
|name = GiveOrder
|arg1 = {{type|number}} cmdID
|arg2 = {{type|table}} params = {number, etc...}
|arg3 = {{type|table}} options = {"alt", "ctrl", "shift", "right"}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} true
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>Gives order to all selected units.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GiveOrderToUnit
|arg1 = {{type|number}} unitID
|arg2 = {{type|number}} cmdID
|arg3 = {{type|table}} params = {number, etc...}
|arg4 = {{type|table}} options = {"alt", "ctrl", "shift", "right"}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} true
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GiveOrderToUnitMap
|arg1 = {{type|table}} unitMap = { {{bracket|unitID}} = arg1, etc... }
|arg2 = {{type|number}} cmdID
|arg3 = {{type|table}} params = {number, etc...}
|arg4 = {{type|table}} options = {"alt", "ctrl", "shift", "right"}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} true
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GiveOrderToUnitArray
|arg1 = {{type|table}} unitArray = { {{bracket|1}} = {{type|number}} unitID, etc... }
|arg2 = {{type|number}} cmdID
|arg3 = {{type|table}} params = {number, etc...}
|arg4 = {{type|table}} options = {"alt", "ctrl", "shift", "right"}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} true
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GiveOrderArrayToUnitMap
|arg1 = {{type|table}} unitMap = { {{bracket|unitID}} = arg1, etc... }
|arg2 = {{type|table}} orderArray = { {{type|number}} cmdID, {{type|table}} params = {number, etc...}, {{type|table}} options = {"alt", "ctrl", "shift", "right"} }
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} true
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = GiveOrderArrayToUnitArray
|arg1 = {{type|table}} unitArray = { {{bracket|11}} = {{type|number}} unitID, etc... }
|arg2 = {{type|table}} orderArray = { {{type|number}} cmdID, {{type|table}} params = {number, etc...}, {{type|table}} options = {"alt", "ctrl", "shift", "right"} } {{bracket}}
|arg3 = {{type|bool}} pairwise {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} true
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>"pairwise" paramater ({{new|89.0}}) is used to send multiple units a single individual command.
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetBuildFacing
|arg1 = {{type|number}} facing
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetBuildSpacing
|arg1 = {{type|number}} spacing
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
== Unit NoDraw,NoSelect,NoMinimap ==
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitNoDraw
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} noDraw
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitNoSelect
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} noSelect
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitNoMinimap
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} noMinimap
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =  
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font>
}}
 
= Features =
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureFade
|arg1 = {{type|number}} featureID
|arg2 = {{type|bool}} allow
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>Control whether a feature will fade or not when zoomed out.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureNoDraw
|arg1 = {{type|number}} featureID
|arg2 = {{type|bool}} noDraw
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font>
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureSelectionVolumeData
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ
|arg3 = {{type|number}} offsetX, {{type|number}} offsetY, {{type|number}} offsetZ
|arg4 = {{type|number}} vType
|arg5 = {{type|number}} tType
|arg6 = {{type|number}} Axis
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}
}}
 
= Developers =
 
{{LuaCallout
|prefix = Spring.
|name = SetDrawSky
|arg1 = {{type|bool}} drawSky
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetDrawWater
|arg1 = {{type|bool}} drawWater
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetDrawGround
|arg1 = {{type|bool}} drawGround
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetWaterParams
|arg1 = {{type|table}} params
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = As of 104.0 no longer needs cheating enabled.<br>Allows to change water params (mostly BumpWater ones) at runtime. You may want to set BumpWaterUseUniforms in your [[springrc]] to 1, then you don't even need to restart BumpWater via `/water 4`. "Params" table contains:
}}
<pre>  params = {
    absorb = {number r, number g, number b},
    baseColor = {number r, number g, number b},
    minColor = {number r, number g, number b},
    surfaceColor = {number r, number g, number b},
    diffuseColor = {number r, number g, number b},
    specularColor = {number r, number g, number b},
    planeColor = {number r, number g, number b},
    texture = string file,
    foamTexture = string file,
    normalTexture = string file,
    damage = number value,
    repeatX = number value,
    repeatY = number value,
    surfaceAlpha = number value,
    ambientFactor = number value,
    diffuseFactor = number value,
    specularFactor = number value,
    specularPower = number value,
    fresnelMin = number value,
    fresnelMax = number value,
    fresnelPower = number value,
    reflectionDistortion = number value,
    blurBase = number value,
    blurExponent = number value,
    perlinStartFreq = number value,
    perlinLacunarity = number value,
    perlinAmplitude = number value,
    numTiles = number value,
    shoreWaves = boolean value,
    forceRendering = boolean value,
    hasWaterPlane = boolean value,
  }</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = SetMapRenderingParams
|arg1 = {{type|table}} params
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}<br>Allows to change map rendering params at runtime.<br>"Params" table contains:
}}
<pre>  params = {
    splatTexMults = {number r, number g, number b, number a},
    splatTexScales = {number r, number g, number b, number a},
    voidWater = boolean value,
    voidGround = boolean value,
    splatDetailNormalDiffuseAlpha = boolean value,
  }</pre>
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetLogSectionFilterLevel
|arg1 = {{type|string}} sectionName
|arg2 = {{type|string}} {{pipe}} {{type|number}} logLevel
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{New|95.0}}<br>See [[infolog.txt]] for possible log sections.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetDrawGroundDeferred
|arg1 = {{type|bool}} drawGroundDeferred {{bracket}}
|arg2 = {{type|bool}} drawGroundForward {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}} {{var|drawGroundForward}} allows disabling of the forward pass
}}
 
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetDrawModelsDeferred
|arg1 = {{type|bool}} drawUnitsDeferred
|arg2 = {{type|bool}} drawFeaturesDeferred {{bracket}}
|arg3 = {{type|bool}} drawUnitsForward {{bracket}}
|arg4 = {{type|bool}} drawFeaturesForward  {{rbracket}}{{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}} {{var|drawFeaturesForward}}, {{var|drawUnitsForward}} allows disabling of the respective forward passes
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetVideoCapturingMode
|arg1 = {{type|bool}} allowCaptureMode
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}<br>This doesn't actually record the game in any way, it just regulates the framerate and interpolations.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetVideoCapturingTimeOffset
|arg1 = {{type|bool}} timeOffset
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}
}}
 
= GUI =
 
{{LuaCallout
|prefix = Spring.
|name = DrawUnitCommands
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}
}}
 
or
 
{{LuaCallout
|prefix = Spring.
|name = DrawUnitCommands
|arg1 = {{type|table}} units = { {{bracket|1}} = unitID, ... } {{bracket}}
|arg2 = {{type|bool}} false
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = Spring.
|name = DrawUnitCommands
|arg1 = {{type|table}} units = { {{bracket|unitID}} = arg1, ... }
|arg2 = {{type|bool}} true
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetTeamColor
|arg1 = {{type|number}} teamID
|arg2 = {{type|number}} r
|arg3 = {{type|number}} g
|arg4 = {{type|number}} b
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = AssignMouseCursor
|arg1 = {{type|string}} cmdName
|arg2 = {{type|string}} iconFileName {{bracket}}
|arg3 = {{type|bool}} overwrite = true {{bracket}}
|arg4 = {{type|bool}} hotSpotTopLeft = false {{rbracket}}{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} assigned
|info = Changes/creates the cursor of a single CursorCmd. Note, that iconFileName is not the full filename instead it is like this:<br/>Wanted filename: Anims/cursorattack_0.bmp<br/>=> iconFileName: cursorattack
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = ReplaceMouseCursor
|arg1 = {{type|string}} oldFileName
|arg2 = {{type|string}} newFileName {{bracket}}
|arg3 = {{type|bool}} hotSpotTopLeft = false {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} assigned
|info = Mass replace all occurrence of the cursor in all CursorCmds.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetCustomCommandDrawData
|arg1 = {{type|number}} cmdID
|arg2 = {{type|number}} cmdID_cloneIcon {{pipe}} {{type|string}} iconname
|arg3 = {{type|table}} RGBA = { {{type|number}} r, {{type|number}} g, {{type|number}} b, {{type|number}} a } {{bracket}}
|arg4 = {{type|bool}} showArea {{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} assigned
|info = Register your custom cmd so it gets visible in the unit's cmd queue
}}
 
or
 
{{LuaCallout
|prefix = Spring.
|name = SetCustomCommandDrawData
|arg1 = {{type|number}} cmdID
|arg2 = {{type|nil}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} assigned
|info = Register your custom cmd so it gets visible in the unit's cmd queue
}}
 
= Sharing =
 
{{LuaCallout
|prefix = Spring.
|name = SetShareLevel
|arg1 = {{type|string}} metal {{pipe}} {{type|string}} energy
|arg2 = {{type|number}} shareLevel
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font><br>Note: shareLevel is 0<= x <= 1 .
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = ShareResources
|arg1 = {{type|number}} teamID
|arg2 = {{type|string}} units
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font>
}}
 
or
 
 
{{LuaCallout
|prefix = Spring.
|name = ShareResources
|arg1 = {{type|number}} teamID
|arg2 = {{type|string}} metal {{pipe}} {{type|string}} energy
|arg3 = {{type|number}} amount
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">LuaGadgets only!</font>
}}
 
= UnitDef RadarIcons & BuildPics =
 
{{LuaCallout
|prefix = Spring.
|name = AddUnitIcon
|arg1 = {{type|string}} iconName
|arg2 = {{type|string}} texFile {{bracket}}
|arg3 = {{type|number}} size {{bracket}}
|arg4 = {{type|number}} dist {{bracket}}
|arg5 = {{type|bool}} radAdjust {{rbracket}}{{rbracket}}{{rbracket}}
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} added
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = FreeUnitIcon
|arg1 = {{type|string}} iconName
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} freed
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitDefIcon
|arg1 = {{type|number}} unitDefID
|arg2 = {{type|string}} iconName
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>Sets radar icon.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitDefImage
|arg1 = {{type|number}} unitDefID
|arg2 = {{type|string}} luaTexture {{pipe}} {{type|string}} texFile
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font><br>Sets buildpic.
}}
 
= Camera =
 
{{LuaCallout
|prefix = Spring.
|name = SetCameraState
|arg1 = {{type|table}} camState
|arg2 = {{type|number}} camTime
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} stateSet
|info = camState has the same format as the output of Spring.GetCameraState(). See [[Lua_camState]] for details about camState.<br>The camState's mode/name must fit the rest of the state. Getting a state, changing its mode/name and then passing it to SetCameraState will have undesired results. [https://springrts.com/mantis/view.php?id=5028#c15491] Also see #5028]
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetCameraTarget
|arg1 = {{type|number}} x, {{type|number}} y, {{type|number}} z {{bracket}}
|arg2 = {{type|number}} transTime {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = For Spring Engine XZ represents horizontal, from north west corner of map and Y vertical, from water level and rising.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetCameraOffset
|arg1 = {{type|number}} px = 0 {{bracket}}
|arg2 = {{type|number}} py = 0 {{bracket}}
|arg3 = {{type|number}} pz = 0 {{bracket}}
|arg4 = {{type|number}} tx = 0 {{bracket}}
|arg5 = {{type|number}} ty = 0 {{bracket}}
|arg6 = {{type|number}} tz = 0 {{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}{{rbracket}}
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
= (Virtual-)FileSystem =
 
{{LuaCallout
|prefix = Spring.
|name = ExtractModArchiveFile
|arg1 = {{type|string}} modfile
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} extracted
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = CreateDir
|arg1 = {{type|string}} path
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} dirCreated
|info = <font color="maroon" style="font-weight:600">Needs ModUICtrl.</font>
}}
 
The full VFS API is available at [[Lua_VFS|link]].
 
= Engine Config =
 
The following functions read the engine configs saved in [[Springsettings.cfg]], a version-ed instance of these or a custom file supplied on the command line.
If ''*Overlay'' is ''true'', the value will only be set in memory, and not be restored for the next game.
 
{{LuaCallout
|prefix = Spring.
|name = SetConfigInt
|arg1 = {{type|string}} name
|arg2 = {{type|number}} value {{bracket}}
|arg3 = {{type|bool}} useOverlay = false {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetConfigFloat
|arg1 = {{type|string}} name
|arg2 = {{type|number}} value {{bracket}}
|arg3 = {{type|bool}} useOverlay = false {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetConfigString
|arg1 = {{type|string}} name
|arg2 = {{type|number}} value {{bracket}}
|arg3 = {{type|bool}} useOverlay = false {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}
}}
 
= World Primitives =
<font color="red" style="font-weight:600">outdated! use opengl api instead!</font>
 
{{LuaCallout
|prefix = Spring.
|name = AddWorldIcon
|arg1 = {{type|number}} cmdID
|arg2 = {{type|number}} x, {{type|number}} y, {{type|number}} z
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = AddWorldText
|arg1 = {{type|string}} text
|arg2 = {{type|number}} x, {{type|number}} y, {{type|number}} z
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = AddWorldUnit
|arg1 = {{type|number}} unitDefID
|arg2 = {{type|number}} x, {{type|number}} y, {{type|number}} z
|arg3 = {{type|number}} team
|arg4 = {{type|number}} facing
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= Sun  =
The dynamic Sun must be invoked via /dynamicsun (Dynamic sun was removed in 104.0, use SetSunDirection, SetSunLighting & SetAtmosphere instead).
 
{{LuaCallout
|prefix = Spring.
|name = SetSunManualControl
|arg1 = {{type|bool}} setManualControl
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{removed|104.0}}
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetSunParameters
|arg1 = {{type|number}} dirX
|arg2 = {{type|number}} dirY
|arg3 = {{type|number}} dirZ
|arg4 = {{type|number}} dist
|arg5 = {{type|number}} startTime
|arg6 = {{type|number}} orbitTime
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{removed|104.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetSunDirection
|arg1 = {{type|number}} dirX
|arg2 = {{type|number}} dirY
|arg3 = {{type|number}} dirZ
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetSunLighting
|arg1 = {{type|table}} params
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>It can be used to modify the following sun lighting parameters:
}}
<pre>    {ground,unit}{Ambient,Diffuse,Specular}Color and specularExponent
    All Colourvalues have to in the Range from 0.0 to 1.0 for all colors and the alpha
    Example usage: Spring.SetSunLighting({groundAmbientColor = {1, 0.1, 1}, groundDiffuseColor = {1, 0.1, 1} })</pre>
 
 
{{LuaCallout
|prefix = Spring.
|name = SetAtmosphere
|arg1 = {{type|table}} params
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>It can be used to modify the following atmosphere parameters:
}}
<pre>    fog{Start,End}, {sun,sky,cloud}Color
    Example usage: Spring.SetAtmosphere({ fogStart = 0, fogEnd   = 0.5, fogColor = { 0.7, 0.2, 0.2, 1 }})</pre>
 
= Misc =
 
{{LuaCallout
|prefix = Spring.
|name = Reload
|arg1 = {{type|string}} startscript
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = -
|info = {{new|99.0}}<br>start-script is the CONTENT of the [[script.txt]] spring should use to start.
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = Restart
|arg1 = {{type|string}} commandline_args
|arg2 = {{type|string}} startscript
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = -
|info = {{new|0.79}}<br>If this call returns, something went wrong.<br>''commandline_args'' are commandline arguments passed to spring executable.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = Start
|arg1 = {{type|string}} commandline_args
|arg2 = {{type|string}} startscript
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = -
|info = {{new|102.0}}<br>If this call returns, something went wrong.<br>Launches a new Spring instance without terminating the existing one.<br>start-script is the CONTENT of the [[script.txt]] spring should use to start (if empty, no start-script is added, you can still point spring to your custom script.txt when you add the file-path to ''commandline_args''.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetWMIcon
|arg1 = {{type|string}} iconFileName
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|83.0}}<br>Sets the icon for the process which is seen in the OS task-bar and other places (default: spring-logo).<br/>Note: has to be 24bit or 32bit.<br/>Note: on windows, it has to be 32x32 pixels in size (recommended for cross-platform)<br/>Note: ''*.bmp'' images have to be in BGR format (default for m$ ones).<br/>Note: ''*.ico'' images are not supported.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetWMCaption
|arg1 = {{type|string}} title {{bracket}}
|arg2 = {{type|string}} titleShort = title {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|83.0}}<br>Sets the window ''title'' for the process (default: "Spring <version>").<br>The ''shortTitle'' is displayed in the OS task-bar (default: "Spring <version>").<br>'''NOTE:''' ''shortTitle'' is only ever possibly used under X11 (Linux & OS X), but not with QT (KDE) and never under Windows. See [http://www.gpwiki.org/index.php/SDL:Tutorials:Initializing_SDL_Libraries#About_the_icon_.28.22Icon_Title.22.29_parameter_on_different_window-managers this site] for more details.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = ClearWatchDogTimer
|arg1 = {{bracket}} {{type|string}} threadName = main {{rbracket}}
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|83.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetClipboard
|arg1 = {{type|string}} text
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|98.0}}
}}
 
= Rendering =
== Preload ==
Allow the engine to load the unit's model (and texture) in a background thread. Wreckages and buildOptions of a unit are automatically preloaded.
 
{{LuaCallout
|prefix = Spring.
|name = PreloadUnitDefModel
|arg1 = {{type|number}} unitDefID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{{new|101.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = PreloadFetureDefModel
|arg1 = {{type|number}} featureDefID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{{new|101.0}}
}}
 
== Lighting ==
<font color="red" style="font-weight:600">NOTE: these (0.83+) lighting callouts only work when called from unsynced gadgets!</font>
 
{{LuaCallout
|prefix = Spring.
|name = AddMapLight
|arg1 = {{type|table}} lightParams
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} lightHandle
|info = (requires MaxDynamicMapLights &gt; 0)
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = AddModelLight
|arg1 = {{type|table}} lightParams
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} lightHandle
|info = (requires MaxDynamicMapLights &gt; 0)
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = UpdateMapLight
|arg1 = {{type|number}} lightHandle
|arg2 = {{type|table}} lightParams
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = UpdateModelLight
|arg1 = {{type|number}} lightHandle
|arg2 = {{type|table}} lightParams
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetMapLightTrackingState
|arg1 = {{type|number}} lightHandle
|arg2 = {{type|number}} unitOrProjectileID
|arg3 = {{type|bool}} enableTracking
|arg4 = {{type|bool}} unitOrProjectile
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetModelLightTrackingState
|arg1 = {{type|number}} lightHandle
|arg2 = {{type|number}} unitOrProjectileID
|arg3 = {{type|bool}} enableTracking
|arg4 = {{type|bool}} unitOrProjectile
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
 
 
'''lightParams''' is a table that should contain at least one of the following recognized key/value pairs:
 
    lightParams = {
        position = {px, py, pz},
        direction = {dx, dy, dz},
        ambientColor = {red, green, blue},
        diffuseColor = {red, green, blue},
        specularColor = {red, green, blue},
        intensityWeight = {ambientWeight, diffuseWeight, specularWeight},
 
        -- per-frame decay of ambientColor (spread over TTL frames)
        ambientDecayRate = {ambientRedDecay, ambientGreenDecay, ambientBlueDecay},
        -- per-frame decay of diffuseColor (spread over TTL frames)
        diffuseDecayRate = {diffuseRedDecay, diffuseGreenDecay, diffuseBlueDecay},
        -- per-frame decay of specularColor (spread over TTL frames)
        specularDecayRate = {specularRedDecay, specularGreenDecay, specularBlueDecay},
        -- *DecayType = 0.0 -> interpret *DecayRate values as linear, else as exponential
        decayFunctionType = {ambientDecayType, diffuseDecayType, specularDecayType},
 
        radius = number elmos,
        fov = number degrees,
        ttl = number frames,
        priority = number,
        ignoreLOS = boolean,
    }
 
= Map =
 
{{LuaCallout
|prefix = Spring.
|name = SetSkyBoxTexture
|arg1 = {{type|string}} texName
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetMapShadingTexture
|arg1 = {{type|string}} texType
|arg2 = {{type|string}} texName
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info = {{new|101.0}}
}}
 
<div class="note">Example usage: Spring.SetMapShadingTexture("$ssmf_specular", "name_of_my_shiny_texture")</div>
 
{{LuaCallout
|prefix = Spring.
|name = SetMapSquareTexture
|arg1 = {{type|number}} texSqrX
|arg2 = {{type|number}} texSqrY
|arg3 = {{type|string}} luaTexName
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetMapShader
|arg1 = {{type|number}} standardShaderID
|arg2 = {{type|number}} deferredShaderID
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{101.0}}
}}
 
<div class="note">The ID's must refer to valid programs returned by gl.CreateShader. Passing in a value of 0 will cause the respective shader to revert back to its engine default. Custom map shaders that declare a uniform ivec2 named "texSquare" can sample from the default diffuse texture(s), which are always bound to TU 0.</div>


[[category: Lua]]
[[category: Lua]]

Revision as of 16:24, 19 April 2021

Development < Lua Scripting < User:Master-athmos

Unsynced Read

Replay/Spectating

Spring.IsReplay

 ( ) -> nil | boolean

Spring.GetReplayLength New in version 92.0

 ( ) -> nil | number (in seconds)

Spring.GetSpectatingState

 ( ) -> boolean spectating, boolean fullView, boolean fullSelect

Game/Menu Name

Spring.GetGameName New in version 104.0

 ( ) -> string name

Apparently returns name .. version from Modinfo.lua. E.g. "Spring: 1944 test-5640-ac2d15b".

Spring.GetMenuName New in version 104.0

 ( ) -> string name

ModUI

Spring.GetModUICtrl

 ( ) -> boolean

MyInfo

Spring.GetMyAllyTeamID

 ( ) -> number

Spring.GetMyTeamID

 ( ) -> number

Spring.GetMyPlayerID

 ( ) -> number

Local Player,Team,Ally

Redundant same as the GetMyXYZ functions!

Spring.GetLocalPlayerID

 ( ) -> number playerID

Spring.GetLocalTeamID

 ( ) -> number teamID

Spring.GetLocalAllyTeamID

 ( ) -> number allyID

Team/Player Info

Spring.GetPlayerRoster

 ( [number sortType] | [number sortType], [bool showPathingPlayers] ) ->
   nil | playerTable = {
           [1] = {
             string  name,
             number  playerID,
             number  teamID,
             number  allyTeamID,
             boolean spectator,
             number  cpuUsage,
             number  pingTime
           },
           etc...
         }
  if pingTime is == -1, the player is pathfinding, in order to find the progress, use:
  cpuUsage&0x1 if it's PC or BO, cpuUsage& 0xFE to get path res, (cpuUsage>>8)*1000
  for the progress
   Sort codes:
    1 = Sort by allies  (the default)
    2 = Sort by teamID
    3 = Sort by playerName
    4 = Sort by CPU usage
    5 = Sort by ping time

Spring.GetTeamColor

 ( number teamID ) -> nil | number r, number g, number b,  number a

Spring.GetTeamOrigColor

 ( number teamID ) -> nil | number r, number g, number b,  number a

Spring.GetPlayerTraffic

 ( number playerID [, number packetID] ) -> number

Sound

Spring.GetSoundStreamTime

 ( ) -> number playedTime, number totalTime

Camera

Spring.GetCameraNames

 ( ) -> { [camName] = number camNum, ... }

Spring.GetCameraState

 ( ) -> { "name" = string, "mode" = number camIdx, state1 = number, state2 = number, ... }

See Lua_camState for details about Spring.GetCameraState output.

Spring.GetCameraPosition

 ( ) -> number x, number y, number z

Spring.GetCameraDirection

 ( ) -> number forward_x, number forward_y, number forward_z

Spring.GetCameraFOV

 ( ) -> number vFov, number hFov

Spring.GetCameraVectors

 ( ) -> vectorTable = {
   forward   = { [1] = number x, [2] = number y, [3] = number z },
   up        = { [1] = number x, [2] = number y, [3] = number z },
   right     = { [1] = number x, [2] = number y, [3] = number z },
   top       = { [1] = number x, [2] = number y, [3] = number z },
   bottom    = { [1] = number x, [2] = number y, [3] = number z },
   leftside  = { [1] = number x, [2] = number y, [3] = number z },
   rightside = { [1] = number x, [2] = number y, [3] = number z }
 }

Inview

Spring.GetVisibleUnits

 ( [number teamID = -1 [, number radius = 30 [, boolean Icons = true ]]] )
   -> nil | unitTable = { [1] = number unitID, ... }

Spring.GetVisibleFeatures

 ( [number allyTeamID = -1 [, number radius = 30 [, boolean Icons = true [, boolean geos = true ]]]] )
   -> nil | featureTable = { [1] = number featureID, ... }

Spring.IsAABBInView

 ( number minX, number minY, number minZ,
   number maxX, number maxY, number maxZ ) -> nil | boolean

Spring.IsSphereInView

 ( number x, number y, number z [, number radius ] ) -> nil | boolean

Spring.IsUnitIcon

 ( number unitID ) -> nil | boolean

Spring.IsUnitInView

 ( number unitID ) -> nil | boolean

Spring.IsUnitVisible

 ( number unitID [, number radius [, boolean checkIcons] ] ) -> nil | boolean

Screen Trace

Spring.WorldToScreenCoords

 ( number x, number y, number z ) -> number x, number y, number z

Spring.TraceScreenRay

 ( number mouseX, number mouseY [, boolean onlyCoords 
 [, boolean useMinimap [, boolean includeSky [, boolean ignoreWater [, number D] ] ] ] ] )
   -> nil |
   string "unit",    number unitID    |
   string "feature", number featureID |
   string "ground",  { [1] = number x, [2] = number y, [3] = number z }

New in version 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 & 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.

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:

  local mouseX, mouseY = Spring.GetMouseState()
  print ("Mouse coordinates: (" .. mouseX .. ", " .. mouseY .. ")")
  local desc, args = Spring.TraceScreenRay(mouseX, mouseY, true)
  if nil == desc then return end -- off map
  local x = args[1]
  local y = args[2]
  local z = args[3]
  print ("World coordinates: (" .. x .. ", " .. y .. ", " .. z .. ")")


Spring.GetPixelDir New in version 95.0

 ( number x, number y ) -> number dirx, number diry, number dirz

Screen & Window Geometry

Spring.GetViewGeometry

 ( ) -> number viewSizeX, number viewSizeY, number viewPosX, number viewPosY

Spring.GetWindowGeometry

 ( ) -> number winSizeX, number winSizeY, number winPosX, number winPosY

Spring.GetScreenGeometry (is missing multiscreen support!)

 ( ) -> number screenSizeX, number screenSizeY, number ZERO, number ZERO

Unit

Spring.IsUnitAllied

 ( number unitID ) -> nil | boolean

Spring.GetUnitViewPosition

 ( number unitID [, boolean midPos = false ] ) -> nil | number x, number y, number z

Spring.GetUnitTransformMatrix

 ( number unitID [, boolean invert = false] ) -> nil | number a11, number a12 ..., number a44    (4x4 matrix)

Spring.GetUnitSelectionVolumeData

 ( number unitID )
 -> number scaleX, number scaleY, number scaleZ,
 number offsetX, number offsetY, number offsetZ,
 number volumeType, number testType, number primaryAxis, boolean disabled

Selected Units

Spring.GetSelectedUnits

 ( ) -> { [1] = unitID, ... }

Spring.GetSelectedUnitsSorted

 ( ) -> { [number unitDefID] = { [1] = [number unitID], etc...}, ... }

Spring.GetSelectedUnitsCounts

 ( ) -> { [number unitDefID] = number count, etc... }

Spring.GetSelectedUnitsCount

 ( ) -> number count

Spring.IsUnitSelected

 ( number unitID ) -> nil | boolean

Unit Groups

Spring.GetUnitGroup

 ( number unitID ) -> nil | number

Spring.GetGroupList

 ( ) -> nil | {
   [number] = number unitCount,
   ...
 }

Spring.GetSelectedGroup

 ( ) -> number

Spring.GetGroupAIName

 ( number groupID ) -> string aiName

Spring.GetGroupAIList

 ( ) -> {
   [1] = string aiName, ...
 }

Spring.GetGroupUnits

 ( number groupID ) -> nil | {
   [1] = number unitID, ...
 }

Spring.GetGroupUnitsSorted

 ( number groupID ) -> nil | {
   [number unitDefID] = {number unitID, ...}, ...
 }

Spring.GetGroupUnitsCounts

 ( number groupID ) -> nil | {
   [number unitDefID] = number count, ...
 }

Spring.GetGroupUnitsCount

 ( number groupID ) -> nil | number count

Feature

Spring.GetFeatureSelectionVolumeData

 ( number unitID )
 -> number scaleX, number scaleY, number scaleZ,
 number offsetX, number offsetY, number offsetZ,
 number volumeType, number testType, number primaryAxis, boolean disabled

Projectiles

Spring.GetVisibleProjectiles New in version 95.0

  ([ number allyTeamID = -1
  [ , boolean addSyncedProjectiles = true
  [ , boolean addWeaponProjectiles = true
  [ , boolean addPieceProjectiles = true ]]]]
  ) --> nil | {[1] = projectileID, ...}


UI

Spring.GetUICommands New in version 101.0

 ( ) -> nil | {
   [1] = {
     command=string,
     description=string,
     synced=bool,
     cheat=bool,
   }, ...
 }

Returns a list of available UI commands.

GUI Settings

Spring.IsGUIHidden

 ( ) -> nil | boolean

Spring.HaveShadows

 ( ) -> nil | boolean

Spring.HaveAdvShading

 ( ) -> nil | boolean

Spring.GetWaterMode

 ( ) -> nil | number mode, string "mode"
   mode numbers:
     0 - basic
     1 - reflective
     2 - dynamic
     3 - refractive
     4 - bumpwater
     default - unknown

Spring.GetMapDrawMode

 ( ) -> nil | "normal" | "height" | "metal" | "pathTraversability" | "los"

Spring.GetDrawSelectionInfo Returns whether "Selected units" text is displayed.

 ( ) -> boolean

Unit & Feature GUI States

Spring.GetUnitLuaDraw

 ( number unitID ) -> nil | boolean

Spring.GetUnitNoDraw

 ( number unitID ) -> nil | boolean

Spring.GetUnitNoMinimap

 ( number unitID ) -> nil | boolean

Spring.GetUnitNoSelect

 ( number unitID ) -> nil | boolean

Spring.GetFeatureLuaDraw

 ( number featureID ) -> nil | boolean

Spring.GetFeatureNoDraw

 ( number featureID ) -> nil | boolean

Minimap

Spring.GetMiniMapGeometry

 ( ) -> number posX, number posY, number sizeX, number sizeY,
   boolean minimized, boolean maximized

Spring.GetMiniMapDualScreen

 ( ) -> boolean false | string "left" | string "right"

Spring.IsAboveMiniMap

 ( number x, number y ) -> nil | boolean


(Build-)Menu

Spring.GetActiveCommand

 ( ) -> nil | number index (, number cmd_id, number cmd_type, string cmd_name)

Spring.GetDefaultCommand

 ( ) -> nil | number index (, number cmd_id, number cmd_type, string cmd_name)

Spring.GetActiveCmdDescs

 ( ) -> nil | {
   [1] = {
     id=number,
     type=number,
     name=string,
     action=string,
     tooltip=string,
     texture=string,
     cursor=string,
     hidden=boolean,
     disabled=boolean,
     showUnique=boolean,
     onlyTexture=boolean,
     params = { [1] = string, .. }
   }, ...
 }

Spring.GetActiveCmdDesc

 ( number index ) -> nil | {
     id=number,
     type=number,
     name=string,
     action=string,
     tooltip=string,
     texture=string,
     cursor=string,
     hidden=boolean,
     disabled=boolean,
     showUnique=boolean,
     onlyTexture=boolean,
     params = { [1] = string, .. }
 }

Spring.GetCmdDescIndex

 ( number cmdID ) -> nil | number index

Spring.GetActivePage

 ( ) -> nil | number pageNum, number maxPages

Build Facing

Spring.GetBuildFacing

 ( ) -> nil | number

Spring.GetBuildSpacing

 ( ) -> nil | number

GatherMode & InvertQueueKey

Spring.GetGatherMode

 ( ) -> nil | number

Spring.GetInvertQueueKey

 ( ) -> nil | boolean

Mouse States

Spring.GetMouseState

 ( ) -> number X, number Y,
   boolean leftPressed, boolean middlePressed, boolean rightPressed,
   boolean offscreen

X, Y are the screen coordinates, not world ones. This coordinate system starts in the lower left corner.

New in version 104.0 Sixth return value offscreen

For world coordinates see Spring.TraceScreenRay

Spring.GetMouseCursor

 ( ) -> string name, number scale

Spring.GetMouseStartPosition

 ( number mouseButton ) -> nil | number pressedX, number pressedY,
   number camPosX, number camPosY, number camPosZ,
   number dirX, number dirY, number dirZ

(Hot-)Keys

Spring.GetKeyState

 ( number key ) -> nil | boolean

Spring.GetModKeyState

 ( ) -> boolean alt, boolean ctrl, boolean meta, boolean shift

Spring.GetPressedKeys

 ( ) -> {
   [number code] = boolean,
   [string name] = boolean, New in version 99.0
   ...
 }

Spring.GetKeyCode

 ( string keysym ) -> number

Spring.GetKeySymbol

 ( number key ) -> string "keysym1", string "keysym2"

Spring.GetKeyBindings

 ( string keyset ) -> nil | {
   [1] = {
     [string actionCmd] = string actionExtra,
     command   = string actionCmd,    New in version 97
     boundWith = string boundWith,    New in version 97
     extra     = string actionExtra,  New in version 97
   }, ...
 }

Spring.GetActionHotKeys

 ( string action ) -> nil | { [1] = string hotKey, ... }

Console

Spring.GetLastMessagePositions

 ( ) -> nil | {
   [1] = { number X, number Y, number Z },
   ...
 }

Spring.GetConsoleBuffer

 ( [number maxLines] ) -> nil | {
   [1] = {
     text = string,
     priority = number
  }, ...
 }

Spring.GetCurrentTooltip

 ( ) -> string

LOS Colors

Spring.GetLosViewColors

 ( ) -> always = {r,g,b}, LOS = {r,g,b}, radar = {r,g,b}, jam = {r,g,b}, radar2 = {r,g,b}  New in version 100

Config

Spring.GetConfigParams same information as spring --list-config-vars

 ( ) -> table {
   {
     name = string,
     type = string,
     [ description = string, ]
     [ defaultValue = string, ]
     [ minimumValue = string, ]
     [ maximumValue = string, ]
     [ safemodeValue = string, ]
     [ declarationFile = string, ]
     [ declarationLine = number, ]
     [ readOnly = bool, ]
   },
   ...
 }

Spring.GetConfigInt

 ( string name [, number default ] ) -> nil | number

Spring.GetConfigFloat New in version 104.0

 ( string name [, number default ] ) -> nil | number

Spring.GetConfigString

 ( string name [, string default ] ) -> nil | string

FPS & GetDrawFrame

Spring.GetFPS

 ( ) -> number

Spring.GetDrawFrame

 ( ) -> number low 16bit, number high 16bit

Spring.GetVideoCapturingMode New in version 104.0

 ( ) -> boolean videoCaptureAllowed

Time

Spring.GetGameSpeed New in version 98.0

 ( ) -> number userSpeedFactor, number speedFactor, boolean paused

Spring.GetGameState New in version 105.0

 ( ) -> boolean finishedLoading, boolean loadedFromSave, boolean locallyPaused, boolean laggingWrtExpectedFromSimtime

Spring.GetFrameTimeOffset

 ( ) -> nil | number

Spring.GetLastUpdateSeconds

 ( ) -> nil | number

Spring.GetHasLag

 ( ) -> boolean

Spring.GetTimer

 ( ) -> timer

Spring.GetFrameTimer New in version 102.0

 ( ) -> timer

Get a timer for the start of the frame, this should give better results for camera interpolations.

Spring.DiffTimers

 ( timer cur, timer ago, [boolean inMilliseconds]) -> number seconds

New in version 95.0 optional third argument (boolean) to return dt in milliseconds

Rendering

Spring.GetMapSquareTexture

 (number texSqrX, number texSqrY, number texMipLvl, string luaTexName) -> boolean success

Logging

Spring.GetLogSections

 ( ) -> table { "KeyBindings" = LOG.INFO, "Font" = LOG.INFO, "Sound" = LOG.WARNING, ... }

Misc

Spring.GetClipboard New in version 98.0

 ( ) -> string text