<?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=Floris</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=Floris"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Floris"/>
	<updated>2026-11-09T19:21:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2596</id>
		<title>Balanced Annihilation</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2596"/>
		<updated>2022-03-05T18:59:32Z</updated>

		<summary type="html">&lt;p&gt;Floris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Games]][[category:Balanced Annihilation]]&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://balancedannihilation.com/balanced-annihilation.png&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ BA website]&lt;br /&gt;
* [https://discord.gg/jvFCZHBXTU BA Discord]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA forum]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
[https://balancedannihilation.com/ Balanced Annihilation] is a Total Annihilation mod remastered with improved graphics and balance. The philosophy of Balanced Annihilation follows three principles:  &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Refined Total Annihilation mod:&#039;&#039;&#039; BA&#039;s lineage traces back to Total Annihilation and the mods that refined its classic graphics and gameplay across decades. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Competitive Gameplay:&#039;&#039;&#039; BA has matured through over 15 years of playtesting by veteran players in both casual and tournament settings. Faction and unit choices offer many unique tactical possibilities.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stable Balance:&#039;&#039;&#039; BA is conservatively balanced to favour strategic play. Every unit has a role and few units get truly obsolete as the game progresses.&lt;br /&gt;
&lt;br /&gt;
===Tournaments===&lt;br /&gt;
Balanced Annihilation runs competitive 1v1 tournaments that attract many dedicated players. At 42 players the [https://challonge.com/CROWN_CUP_2 2021 Crown Cup 2 tournament] was the largest tournament in Spring&#039;s 16 year history. Players battle for the BA crown, a unique in-game item for the commander that can only be aquired by winning the event.&lt;br /&gt;
&lt;br /&gt;
*Crown Cup 1 https://challonge.com/CROWN_CUP &#039;&#039;&#039;1st Cartouche, 2nd PRO_rANDY, 3rd Teddy&#039;&#039;&#039;&lt;br /&gt;
*Crown Cup 2 https://challonge.com/CROWN_CUP_2 &#039;&#039;&#039;1st Cartouche, 2nd Teddy, 3rd PtaQ &#039;&#039;&#039;&lt;br /&gt;
*Crown Cup 3, &#039;&#039;&#039;Upcoming Event&#039;&#039;&#039; 12th March 2022 https://challonge.com/CROWN_CUP_3&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
Balanced Annihilation is a Total Annihilation remake built using the [https://en.wikipedia.org/wiki/Spring_Engine Spring engine] whose history traces back to the mod [[Absolute_Annihilation|Absolute Annihilation]] by Caydr (2002-2006). AA was based on [http://bsr.tauniverse.com/faq.html ÜberHack] by Brave Sir Robin (1998-2002). The [https://www.clan-sy.com/frame.html Swedish Yankspankers] work on the TA Demo Recorder (1999-2004) made it possible for AA to be ported to 3D and these efforts led to the creation of Balanced Annihilation in 2006. Zero-K and BAR were both forked from Balanced Annihilation in the past.&lt;br /&gt;
&lt;br /&gt;
===Development===&lt;br /&gt;
&lt;br /&gt;
The current developer is [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10773 Ares] (2020). The previous maintainers, who shouldn&#039;t be forgotten, were: &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=2568 Shox] (2019)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10555 Floris] (2015-19)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=9073 Decay] (2015-16)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7229 Silentwings] (2012-15) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5958 Beherith] (2011-12) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7403 Niobium] (2011)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=4460 TheFatController] (2010-11)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=326 NOiZE]. (2006-11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Floris</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2595</id>
		<title>Balanced Annihilation</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2595"/>
		<updated>2022-03-05T18:58:25Z</updated>

		<summary type="html">&lt;p&gt;Floris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Games]][[category:Balanced Annihilation]]&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://balancedannihilation.com/balanced-annihilation.png&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ BA website]&lt;br /&gt;
* [https://discord.gg/jvFCZHBXTU BA Discord]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA forum]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
[https://balancedannihilation.com/ Balanced Annihilation] is a Total Annihilation mod remastered with improved graphics and balance. The philosophy of Balanced Annihilation follows three principles:  &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Refined Total Annihilation mod:&#039;&#039;&#039; BA&#039;s lineage traces back to Total Annihilation and the mods that refined its classic graphics and gameplay across decades. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Competitive Gameplay:&#039;&#039;&#039; BA has matured through over 15 years of playtesting by veteran players in both casual and tournament settings. Faction and unit choices offer many unique tactical possibilities.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stable Balance:&#039;&#039;&#039; BA is conservatively balanced to favour strategic play. Every unit has a role and few units get truly obsolete as the game progresses.&lt;br /&gt;
&lt;br /&gt;
===Tournaments===&lt;br /&gt;
Balanced Annihilation runs competitive 1v1 tournaments that attract many dedicated players. At 42 players the [https://challonge.com/CROWN_CUP_2 2021 Crown Cup 2 tournament] was the largest tournament in Spring&#039;s 16 year history. Players battle for the BA crown, a unique in-game item for the commander that can only be aquired by winning the event.&lt;br /&gt;
&lt;br /&gt;
*Crown Cup 1 https://challonge.com/CROWN_CUP &#039;&#039;&#039;1st Cartouche, 2nd PRO_rANDY, 3rd Teddy&#039;&#039;&#039;&lt;br /&gt;
*Crown Cup 2 https://challonge.com/CROWN_CUP_2 &#039;&#039;&#039;1st Cartouche, 2nd Teddy, 3rd PtaQ &#039;&#039;&#039;&lt;br /&gt;
*Crown Cup 3, &#039;&#039;&#039;Upcoming Event&#039;&#039;&#039; 12th March 2022 https://challonge.com/CROWN_CUP_3&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
Balanced Annihilation is a Total Annihilation remake built using the [https://en.wikipedia.org/wiki/Spring_Engine Spring engine] whose history traces back to the mod [[Absolute_Annihilation|Absolute Annihilation]] by Caydr (2002-2006). AA was based on [http://bsr.tauniverse.com/faq.html ÜberHack] by Brave Sir Robin (1998-2002). The [https://www.clan-sy.com/frame.html Swedish Yankspankers] work on the TA Demo Recorder (1999-2004) made it possible for AA to be ported to 3D and these efforts led to the creation of Balanced Annihilation in 2006. Zero-K and BAR were both forked from Balanced Annihilation in the past.&lt;br /&gt;
&lt;br /&gt;
===Development===&lt;br /&gt;
&lt;br /&gt;
The current developer is [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10773 Ares] (2020). The previous maintainers, who shouldn&#039;t be forgotten, were: &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=2568 Shox] (2019)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10555 Floris] (2015)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=9073 Decay] (2015-16)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7229 Silentwings] (2012-16) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5958 Beherith] (2011-12) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7403 Niobium] (2011)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=4460 TheFatController] (2010-11)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=326 NOiZE]. (2006-11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Floris</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2594</id>
		<title>Balanced Annihilation</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2594"/>
		<updated>2022-03-05T18:55:25Z</updated>

		<summary type="html">&lt;p&gt;Floris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Games]][[category:Balanced Annihilation]]&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://balancedannihilation.com/balanced-annihilation.png&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ BA website]&lt;br /&gt;
* [https://discord.gg/jvFCZHBXTU BA Discord]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA forum]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
[https://balancedannihilation.com/ Balanced Annihilation] is a Total Annihilation mod remastered with improved graphics and balance. The philosophy of Balanced Annihilation follows three principles:  &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Refined Total Annihilation mod:&#039;&#039;&#039; BA&#039;s lineage traces back to Total Annihilation and the mods that refined its classic graphics and gameplay across decades. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Competitive Gameplay:&#039;&#039;&#039; BA has matured through over 15 years of playtesting by veteran players in both casual and tournament settings. Faction and unit choices offer many unique tactical possibilities.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stable Balance:&#039;&#039;&#039; BA is conservatively balanced to favour strategic play. Every unit has a role and few units get truly obsolete as the game progresses.&lt;br /&gt;
&lt;br /&gt;
===Tournaments===&lt;br /&gt;
Balanced Annihilation runs competitive 1v1 tournaments that attract many dedicated players. At 42 players the [https://challonge.com/CROWN_CUP_2 2021 Crown Cup 2 tournament] was the largest tournament in Spring&#039;s 16 year history. Players battle for the BA crown, a unique in-game item for the commander that can only be aquired by winning the event.&lt;br /&gt;
&lt;br /&gt;
*Crown Cup 1 https://challonge.com/CROWN_CUP &#039;&#039;&#039;1st Cartouche, 2nd PRO_rANDY, 3rd Teddy&#039;&#039;&#039;&lt;br /&gt;
*Crown Cup 2 https://challonge.com/CROWN_CUP_2 &#039;&#039;&#039;1st Cartouche, 2nd Teddy, 3rd PtaQ &#039;&#039;&#039;&lt;br /&gt;
*Crown Cup 3, &#039;&#039;&#039;Upcoming Event&#039;&#039;&#039; 12th March 2022 https://challonge.com/CROWN_CUP_3&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
&lt;br /&gt;
Balanced Annihilation is a Total Annihilation remake built using the [https://en.wikipedia.org/wiki/Spring_Engine Spring engine] whose history traces back to the mod [[Absolute_Annihilation|Absolute Annihilation]] by Caydr (2002-2006). AA was based on [http://bsr.tauniverse.com/faq.html ÜberHack] by Brave Sir Robin (1998-2002). The [https://www.clan-sy.com/frame.html Swedish Yankspankers] work on the TA Demo Recorder (1999-2004) made it possible for AA to be ported to 3D and these efforts led to the creation of Balanced Annihilation in 2006. Zero-K and BAR were both forked from Balanced Annihilation in the past.&lt;br /&gt;
&lt;br /&gt;
===Development===&lt;br /&gt;
&lt;br /&gt;
The current developer is [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10773 Ares] (2020). The previous maintainers, who shouldn&#039;t be forgotten, were: &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=2568 Shox] (2019)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10555 Floris] (2015)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=9073 Decay] (2015)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7229 Silentwings] (2012-16) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5958 Beherith] (2011-12) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7403 Niobium] (2011)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=4460 TheFatController] (2010-11)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=326 NOiZE]. (2006-11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Floris</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedRead&amp;diff=12417</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=12417"/>
		<updated>2021-04-04T12:28:45Z</updated>

		<summary type="html">&lt;p&gt;Floris: /* Time */&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.GetGameState&#039;&#039;&#039; {{new|105.0}}&lt;br /&gt;
  ( ) -&amp;gt; boolean finishedLoading, boolean loadedFromSave, boolean locallyPaused, boolean laggingWrtExpectedFromSimtime&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>Floris</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2484</id>
		<title>Balanced Annihilation</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2484"/>
		<updated>2020-10-19T11:47:37Z</updated>

		<summary type="html">&lt;p&gt;Floris: /* History */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Games]][[category:Balanced Annihilation]]&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://balancedannihilation.com/ba2.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ BA website]&lt;br /&gt;
* [https://discord.gg/Yd6nT2m BA Discord]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA subforum]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
Balanced Annihilation is a fan mod of Total Annihilation remastered with new graphics and balance. BA is a Total Annihilation remake built using the Spring engine based on three basic principles:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Refined Total Annihilation remake:&#039;&#039;&#039; BA&#039;s lineage traces back to original Total Annihilation mods. It feels similar, and play is &#039;&#039;more balanced&#039;&#039; for diverse multiplayer strategies.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stable gameplay:&#039;&#039;&#039; BA has &amp;lt;i&amp;gt;matured&amp;lt;/i&amp;gt; through several years of playtesting.  New versions don&#039;t drastically alter the gameplay. &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Balance:&#039;&#039;&#039; Every unit has a role, and no unit has every role.  Very few units get truly obsolete as a game progresses. The ideal state is to have no obsolete units at all.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
The game started as a fork of [[Absolute Annihilation]] 2.23 in 2006. The current developer is [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10773 Ares]. The previous maintainers, who shouldn&#039;t be forgotten, were: &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=10555 Floris] (2016-2019)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=9073 Decay] (2016)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7229 Silentwings] (2012-16) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5958 Beherith] (2011-12) &lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7403 Niobium] (2011)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=4460 TheFatController] (2010-11)&lt;br /&gt;
* [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=326 NOiZE]. (2006-11)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Games|&amp;lt;--Back to Games]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Floris</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=WidgetDatabaseFAQ&amp;diff=19623</id>
		<title>WidgetDatabaseFAQ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=WidgetDatabaseFAQ&amp;diff=19623"/>
		<updated>2016-08-08T12:35:22Z</updated>

		<summary type="html">&lt;p&gt;Floris: /* Web Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
= What is the widget database? =&lt;br /&gt;
&lt;br /&gt;
The widget database is a resource which contains most of the widgets that got ever released for the Spring engine. The database is stored online and can be accessed via an HTTP interface.&lt;br /&gt;
There are many different clients available to access the database. These are the most common:&lt;br /&gt;
&lt;br /&gt;
== Web Interfaces ==&lt;br /&gt;
[https://springrts.com/dl/buildbot/doc/ Spring documentation]&lt;br /&gt;
&lt;br /&gt;
== Major lobbies utilizing the widget database ==&lt;br /&gt;
&lt;br /&gt;
[http://springlobby.info Springlobby]&lt;br /&gt;
&lt;br /&gt;
[http://zero-k.info/ Zero-K]&lt;br /&gt;
&lt;br /&gt;
TASClient&lt;br /&gt;
&lt;br /&gt;
== Dedicated .NET application (offers all funcionalities) ==&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=25908 WidgetManager]&lt;br /&gt;
&lt;br /&gt;
= For widget developers =&lt;br /&gt;
If you want to see your widgets added to the widget DB, you can get an admin account for the database, which will enable you to add/edit/remove your widgets. Just PM [http://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5267 me (very_bad_soldier)], and I will provide all you need. Big thanks to manolo_ at this point, who helped a lot in keeping the database up to date in the last few years!&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=16122 Widget database announcement thread]&lt;br /&gt;
&lt;br /&gt;
= For lobby developers =&lt;br /&gt;
If you want to build your own database client, you can find the HTTP protocol description here:&lt;br /&gt;
&lt;br /&gt;
[http://trac.caspring.org/wiki/WidgetProtocol Widget database HTTP API]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BEWARE&#039;&#039;&#039;: The URL to the database is http://widgetdb.springrts.de now!&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Floris</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=WidgetDatabaseFAQ&amp;diff=19622</id>
		<title>WidgetDatabaseFAQ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=WidgetDatabaseFAQ&amp;diff=19622"/>
		<updated>2016-08-08T12:33:03Z</updated>

		<summary type="html">&lt;p&gt;Floris: /* Web Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
= What is the widget database? =&lt;br /&gt;
&lt;br /&gt;
The widget database is a resource which contains most of the widgets that got ever released for the Spring engine. The database is stored online and can be accessed via an HTTP interface.&lt;br /&gt;
There are many different clients available to access the database. These are the most common:&lt;br /&gt;
&lt;br /&gt;
== Web Interfaces ==&lt;br /&gt;
[http://widgets.springrts.de Widget Database]&lt;br /&gt;
&lt;br /&gt;
== Major lobbies utilizing the widget database ==&lt;br /&gt;
&lt;br /&gt;
[http://springlobby.info Springlobby]&lt;br /&gt;
&lt;br /&gt;
[http://zero-k.info/ Zero-K]&lt;br /&gt;
&lt;br /&gt;
TASClient&lt;br /&gt;
&lt;br /&gt;
== Dedicated .NET application (offers all funcionalities) ==&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=25908 WidgetManager]&lt;br /&gt;
&lt;br /&gt;
= For widget developers =&lt;br /&gt;
If you want to see your widgets added to the widget DB, you can get an admin account for the database, which will enable you to add/edit/remove your widgets. Just PM [http://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5267 me (very_bad_soldier)], and I will provide all you need. Big thanks to manolo_ at this point, who helped a lot in keeping the database up to date in the last few years!&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=16122 Widget database announcement thread]&lt;br /&gt;
&lt;br /&gt;
= For lobby developers =&lt;br /&gt;
If you want to build your own database client, you can find the HTTP protocol description here:&lt;br /&gt;
&lt;br /&gt;
[http://trac.caspring.org/wiki/WidgetProtocol Widget database HTTP API]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BEWARE&#039;&#039;&#039;: The URL to the database is http://widgetdb.springrts.de now!&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Floris</name></author>
	</entry>
</feed>