<?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=Silentwings</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=Silentwings"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Silentwings"/>
	<updated>2026-11-08T21:31:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Reporting&amp;diff=15929</id>
		<title>Reporting</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Reporting&amp;diff=15929"/>
		<updated>2021-02-07T08:37:55Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Contacting moderators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Contacting moderators ==&lt;br /&gt;
&lt;br /&gt;
For individual forum posts, which might not follow our [[Felony|forum rules]], use the &#039;report post&#039; button which you can find [https://springrts.com/phpbb/app.php/help/faq#f2r9 near the top right of every forum post].&lt;br /&gt;
&lt;br /&gt;
In all other cases, when a reaction is wanted from Springs moderators, reports may be sent, via private messages, with evidence in the form of links/logfiles/replays, [https://springrts.com/phpbb/ucp.php?i=pm&amp;amp;mode=compose&amp;amp;g=3623 to the Spring staff (=moderators and administrators) forum group]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Forum threads should not be used for reporting users behaviour to moderators.&#039;&#039;&#039; Why not? Because forum threads are for discussions, which don&#039;t require a heavy burden of proving something when you say it - consequently we will never treat them as a request for a reaction or judgement from moderators, although we might react for other reasons. We may not always read them, but if we do then we will generally lock threads made to request moderator reactions.&lt;br /&gt;
&lt;br /&gt;
== Moderation within autohosts ==&lt;br /&gt;
&lt;br /&gt;
Misbehaviour within autohosts should be reported to the autohost owners or operators. Send a private lobby message &amp;lt;code&amp;gt;!list users&amp;lt;/code&amp;gt; to the autohost to find out who these are.&lt;br /&gt;
&lt;br /&gt;
Autohosts are typically run by particular users and have a degree of autonomy, [[Botflags|as detailed here]]. Springs (global) moderators will typically not process disputes between players relating to ingame behaviour.&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Read_Me_First&amp;diff=15838</id>
		<title>Read Me First</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Read_Me_First&amp;diff=15838"/>
		<updated>2021-02-07T08:35:21Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Wondering where all the former popular games are ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__= Playing =&lt;br /&gt;
&#039;&#039;&#039;Spring is an engine!&#039;&#039;&#039; It can play many different games and maps. To play, you need at least one [[Games|Game]] and [[Maps|Map]]!&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
To get started with Spring, download [https://springlobby.info/ SpringLobby], which you can use to play, chat and download games and maps.&lt;br /&gt;
&lt;br /&gt;
==Downloading Games/Maps==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To download [[Games|Games]] (or [[Maps|Maps]]), use your lobby to join an online battle hosting the game/map that you want. It should offer to download for you.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;If the download fails, or if no games/maps show up, you should check that your lobby has found your Spring install. With SpringLobby, click edit -&amp;gt; preferences -&amp;gt; Spring, and make sure that it has the correct paths.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also download games and maps manually, see the [[FAQ|FAQ]]. There is also the option to install different [[GamesDownloads#Universal_Downloaders|Lobbies]].&lt;br /&gt;
&lt;br /&gt;
==Single-Player==&lt;br /&gt;
&lt;br /&gt;
To start a single-player game, use your lobby. Go to the Single-Player tab. Select a game, map and [[AIs|AI]] and click &amp;quot;Start&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Some AIs don&#039;t work with all games. If the one you pick builds nothing, try another!&lt;br /&gt;
&lt;br /&gt;
==Playing Online==&lt;br /&gt;
To play online, you need the latest version of the [[Download|Spring Engine]]. To join matches, look for the &amp;quot;battles&amp;quot; or &amp;quot;multiplayer&amp;quot; tab in your lobby client.&lt;br /&gt;
&lt;br /&gt;
== Wondering where some former popular games are? ==&lt;br /&gt;
Some larger games run their own lobby servers! &lt;br /&gt;
* Zero-k (which grew out of CA) can be found at https://zero-k.info/&lt;br /&gt;
* Beyond All Reason (which grew out of BAR) can be found at https://www.beyondallreason.info/&lt;br /&gt;
* Balanced Annihilation and some other legacy *A games can be found at at: https://springfightclub.com&lt;br /&gt;
&lt;br /&gt;
==Lan Party==&lt;br /&gt;
See the dedicated page [[Spring_on_a_LAN|Playing on a lan]].&lt;br /&gt;
&lt;br /&gt;
=Useful Hotkeys, Etc.=&lt;br /&gt;
&lt;br /&gt;
For the default keyboard layout please look at the [[Keyboard]] page.&lt;br /&gt;
&lt;br /&gt;
=The Spring Forum=&lt;br /&gt;
[[Forum_Etiquette|Guidelines For Forum Etiquette]]&lt;br /&gt;
&lt;br /&gt;
=Development=&lt;br /&gt;
To get started with development check the [[Engine_Development|Development]] page.&lt;br /&gt;
&lt;br /&gt;
=Your question not answered here? Got problems?=&lt;br /&gt;
Read the [[FAQ|Frequently Asked Questions]] or ask in the [http://springrts.com/phpbb/viewforum.php?f=11 Forum].&lt;br /&gt;
You can also report [[Bugs]] to the developers so they can be fixed.&lt;br /&gt;
&lt;br /&gt;
==Game Specific Questions==&lt;br /&gt;
If you have a question or problem with a certain gameplay mechanic in a game, you can talk about it at the [http://springrts.com/phpbb/viewforum.php?f=47 game&#039;s subforum]&lt;br /&gt;
&lt;br /&gt;
If Spring crashes/hangs, please look at the [[FAQ:trouble|FAQ]]. &lt;br /&gt;
&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
This page opens, when the installer finished installing, keep that in mind when changing stuff here. This Page is also linked directly from the start-page.&lt;br /&gt;
&lt;br /&gt;
This page should explain how to get an running game after installing the engine.&lt;br /&gt;
(Install Mod + Map)&lt;br /&gt;
 --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2465</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=2465"/>
		<updated>2020-07-25T06:08:34Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: &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;
[[Image:BA.gif|very epic tmp img of BA]]&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ BA website]&lt;br /&gt;
* [https://www.reddit.com/r/BalancedAnnihilation/ r/BalancedAnnihilation reddit]&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 was the long-term most popular game based at the Spring engine.&lt;br /&gt;
It&#039;s based at three basic principles:&lt;br /&gt;
* &#039;&#039;&#039;Refined [[OTA | Original Total Annihilation]]:&#039;&#039;&#039; BA&#039;s lineage traces back to fan mods of the original Total Annihilation. 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; Balanced Annihilation 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;
Balanced Annihilation mod started as a fork of [[Absolute Annihilation]] 2.23 in the end of 2006. The community split in 2019 and shortly afterwards Floris (2016-19) resigned as maintainer. The previous maintainers, who shouldn&#039;t be forgotten, were &lt;br /&gt;
* [teh]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;
===Legal===&lt;br /&gt;
Parts of this mod originate from non-free sources. However, there is an ongoing attempt to find and replace units&#039; models with free ones. [https://springrts.com/phpbb/viewtopic.php?f=44&amp;amp;t=30537 BA Reloaded]&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>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Games&amp;diff=9131</id>
		<title>Games</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Games&amp;diff=9131"/>
		<updated>2020-06-22T12:16:54Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* TA-derived */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of games made for the Spring Engine. Some of the more popular ones are listed below, sorted by their terms of use. &amp;lt;!--(/license schemes?)--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can download games automatically, using your lobby (see [[Read_Me_First|Read Me First]]). Some games also offer a stand-alone installer.&lt;br /&gt;
&lt;br /&gt;
=Open Source=&lt;br /&gt;
&#039;&#039;These games are all free to download and play and may be open to modifications, however, be sure to read the licenses before doing so.&#039;&#039;&lt;br /&gt;
{|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://zero-k.info/ Zero-K]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://github.com/ZeroK-RTS/Zero-K/blob/f24c14f31bcd1040e7dce66336ec39fce63b7de9/sounds/music/license.txt CC-BY-NC-ND for music], [https://github.com/ZeroK-RTS/Zero-K/blob/079af01d8781e9785d21e41057d0d67f0c571b12/legal.txt GPL/PD for code and all other assets])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Zero-k_image.jpg|300px|link=https://zero-k.info/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Zero-K is a fast, competitive game with a focus on a streamlined economy and advanced interface that takes the focus off tedious tasks and back on the action. A huge roster of interesting, unique units and a variety of unit abilities provides tremendous tactical and strategic depth to the game. (This game is available via [https://zerok.itch.io/zero-k Itch.io] and [https://store.steampowered.com/app/334920/ZeroK/ Steam].)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://github.com/spring1944/spring1944/wiki Spring: 1944]&amp;lt;/h2&amp;gt;([https://github.com/spring1944/spring1944/blob/1e36bbf93f42018bb9f52af8c3dc3e9ffa9fbeff/docs/License.txt CC-BY-NC])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:S44_tigers.jpg|300px|link=http://spring1944.net/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Spring:1944 is a WWII themed game with eight fully functional armies (US, Germany, USSR, Britain, Japan, Italy, Hungary, Sweden), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play. ([https://spring1944.github.io/ homepage], [https://youtu.be/bg5k4b8Zgsk youtube 1], [https://youtu.be/76jFZvpvwoA youtube 2], [https://springrts.com/phpbb/viewforum.php?f=45 subforum])&lt;br /&gt;
|-&lt;br /&gt;
|  | &amp;lt;h2&amp;gt;[https://www.evolutionrts.info Evolution RTS]&amp;lt;/h2&amp;gt;([https://github.com/EvolutionRTS/Evolution-RTS/blob/f8a5df79b384f28fa8705f58df2cd2b580f0c982/license.txt CC-BY-SA])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Evoimg.jpg|300px|link=https://www.evolutionrts.info]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A new war is brewing. A violent conflict, between the Six Colonies, each one convinced that it was in the right, each one sure of its own ability to defeat its enemies. But they need Generals. They need soldiers. They need you. (This game is available via [https://forboding-angel.itch.io/evolution-rts Itch.io] and [https://store.steampowered.com/app/291150/Evolution_RTS/ Steam].)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[[Kernel Panic]]&amp;lt;/h2&amp;gt;([[Kernel_Panic#License:|FOSS]])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Kernel_Panic_3.4.jpg|300px|link=Kernel Panic]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A game based around combat &#039;&#039;&#039;inside&#039;&#039;&#039; a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://springfiles.com/spring/games/edge-1 On The Edge]&amp;lt;/h2&amp;gt;  (GPL, [https://github.com/PepeAmpere/On-The-Edge/blob/master/README.md CC-BY-NC-SA], [https://github.com/PepeAmpere/On-The-Edge/blob/master/wiki/credits.md etc])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:start3.jpg|300px|link=https://springfiles.com/spring/games/edge-1]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | First Spring MOBA with unique pre-game hero setup. Under heavy development. ([http://springrts.com/phpbb/viewtopic.php?f=55&amp;amp;t=31476 On The Edge forum thread])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[http://www.metalfactions.pt Metal Factions]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([http://www.metalfactions.pt/about.html#license CC-BY-ND, with GPL/PD code])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Mf_spring_wiki.jpg|300px|link=http://www.metalfactions.pt]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | An evolving game that started as a TA mod and currently features four factions: AVEN, GEAR, CLAW and SPHERE. Commanders can morph to fit into different play styles and be easily revived. Economy scaling is more strictly tied to map control. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://springrts.com/phpbb/viewtopic.php?f=54&amp;amp;t=23988#p447937 The Cursed]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://springrts.com/phpbb/viewtopic.php?f=54&amp;amp;t=23988&amp;amp;p=566530&amp;amp;hilit=license#p566530 CC-BY-NC-SA])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:cursed_logo.jpg|300px|link=http://www.indiedb.com/games/the-cursed]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | The game is about bones, undead, demons, space marines and magic settled in a futuristic environment. It is a fresh   mixture of gameplay elements from many popular RTS games like Starcraft and C&amp;amp;C. ([https://www.indiedb.com/games/the-cursed homepage], [https://youtu.be/EiBh8l200oo youtube 1], [https://youtu.be/oah7Xt0CgVY youtube 2], [https://springrts.com/phpbb/viewforum.php?f=54 subforum])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://drive.google.com/file/d/0Bx_Nvv6rzVvgLXJkckpYaDhaOVU/view Journeywar] &amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://github.com/PicassoCT/Journeywar/blob/97aa399693cd04097367eb5c587eeb590723b700/LICENSE GPLv3])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:JwLogo.jpg|300px|link=https://springrts.com/phpbb/viewtopic.php?f=69&amp;amp;t=23275&amp;amp;start=1180#p578989]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |  Journeywar is the final battle between Combine and Exobiotics. Join the fight and rediscover the HL- Universe from a new, strategic perspective. ([https://springrts.com/phpbb/viewtopic.php?f=69&amp;amp;t=23275&amp;amp;start=1220#p588002 dev blog], [https://springrts.com/phpbb/viewforum.php?f=69 subforum])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Proprietary=&lt;br /&gt;
&#039;&#039;These games may or may not be free to play. Modifying their content (i.e. the art assets) is not allowed without the game authors explicit permission, although the code is GPL and some games include large GPL-friendly content collections.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://www.moddb.com/games/conflict-terra/tutorials/how-to-start-a-game-of-conflict-terra Conflict Terra]&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:CT_Hojos.png|300px|link=http://www.moddb.com/games/conflict-terra]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A unique game with heavy emphasis on mobility and featuring Spring&#039;s first major &amp;quot;collect and drop-off&amp;quot; economy, Conflict Terra boasts a distinctive art style.  Play as one of two factions in an ever-changing battlefield as you struggle to come out on top. ([http://www.moddb.com/games/conflict-terra homepage], [https://github.com/oksnoop2/conflictterra/commit/0e72529194e1ff363c986a43ce3af77d0cf720f7 currently proprietary], [https://github.com/oksnoop2/conflictterra/blob/e4a974c697f425c6ed00f83b1864d64c366da2f1/games/CT/License.txt last known public domain release], [https://springrts.com/phpbb/viewforum.php?f=63 subforum])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=46 Star Wars: Imperial Winter] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Imperial Winter assault.jpg|300px|link=https://springrts.com/phpbb/viewforum.php?f=46]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A Star Wars themed game set in the troubled post-Return of the Jedi era.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://github.com/SpringMCLegacy/SpringMCLegacy/wiki Spring Mech Commander Legacy Project] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Spring_Mech_Commander_Legacy_Project.jpg|300px|link=https://github.com/SpringMCLegacy/SpringMCLegacy/wiki]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A cool RTS based in the Battletech Universe.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=TA-derived=&lt;br /&gt;
&#039;&#039;At least parts of these games are derived from data of the  Total Annihilation game (copyright Atari). As such, their distribution is potentially in breach of copyright laws and therefore not officially endorsed by the Spring RTS team.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;h2&amp;gt; [https://springrts.com/wiki/Balanced_Annihilation#Links Balanced Annihilation] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:BAScreenShot.jpg|300px]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Balanced Annihilation (BA) is a mature game and new versions feature only minor balance tweaks.&lt;br /&gt;
&lt;br /&gt;
BA gameplay develops in stages of progressively heavier units with a growing economy. Many strategies are viable in BA, including focusing on map control, aggression, defense, air power, sea power, or mobility.&lt;br /&gt;
([https://youtu.be/qeZYghUPU-s youtube], [https://springrts.com/phpbb/viewforum.php?f=44 subforum])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;h2&amp;gt;[https://springrts.com/phpbb/viewforum.php?f=55 NOTA]&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:notAgame02.jpg|300px|link=http://nota.machys.net/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Not Original Total Annihilation is a rethink of the Total Annihilation universe with a focus on strategic, base oriented gameplay. With its revised unit scale, huge battles erupt engaging hundreds of units and scores of unit types. NOTA&#039;s completely rethought air and sea gameplay forces participation in all elements and places the tide of conflict in your hands. (This game is available via [http://nota.machys.net/downloads its own lobby].)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [http://fluidplay.co/taprime TA Prime] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Taprime site.png|300px|link=http://fluidplay.co/taprime]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |Highly polished prequel to Total Annihilation, with a full-blown tech tree, unit abilities and a strong rock-paper-scissors countering system similar to C&amp;amp;C games.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=91 Tech Annihilation] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Tech_Annihilation.png|300px|link=https://springrts.com/phpbb/viewforum.php?f=91]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |This Game is bigger, greater and more epic! Tech your Commander from a tiny Commander to a Galactic Commander! (currently no homepage)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [[XTA]] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Screen508_s.jpg|300px|link=XTA]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Originally developed as a Total Annihilation game by the Swedish Yankspankers, XTA is the Original Public Game released with first versions of Spring. Development of this game by the SYs has stopped a while ago, but it is still played and actively developed by the community.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Installing Games in Spring=&lt;br /&gt;
Quite a few of the games listed above come with standalone installers, which makes things easy. Check their website to find out! Otherwise a lobby such as [[SpringLobby]] will download everything for you when you join a game room.&lt;br /&gt;
&lt;br /&gt;
Games can also be downloaded manually as .sdz/.sd7 files, for example &#039;&#039;BA750&#039;&#039;&#039;&#039;&#039;.sd7&#039;&#039;&#039; or &#039;&#039;XTA&#039;&#039;&#039;&#039;&#039;.sdz&#039;&#039;&#039;, and placed into &#039;&#039;...\My Documents\My Games\Spring\Games\&#039;&#039; or &#039;&#039;...\Spring\games\&#039;&#039; folder (&#039;&#039;~/.spring/games/&#039;&#039; on Linux/Unix/Mac). Read the advice on [[Read_Me_First|this page]] if your lobby does not find your games.&lt;br /&gt;
You may install multiple games in the same engine installation. The same goes for [[Maps]]. Place them into a folder called maps in  the same folder where the games folder is.&lt;br /&gt;
&lt;br /&gt;
Still not enough Games? There are [[Getting_Spring_Content_and_Links|some more]], not listed here or make your [[Game_and_Unit_development|own Game]]!&lt;br /&gt;
&lt;br /&gt;
[[Category: Games]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Games&amp;diff=9130</id>
		<title>Games</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Games&amp;diff=9130"/>
		<updated>2020-06-22T12:16:25Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* TA-derived */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of games made for the Spring Engine. Some of the more popular ones are listed below, sorted by their terms of use. &amp;lt;!--(/license schemes?)--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can download games automatically, using your lobby (see [[Read_Me_First|Read Me First]]). Some games also offer a stand-alone installer.&lt;br /&gt;
&lt;br /&gt;
=Open Source=&lt;br /&gt;
&#039;&#039;These games are all free to download and play and may be open to modifications, however, be sure to read the licenses before doing so.&#039;&#039;&lt;br /&gt;
{|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://zero-k.info/ Zero-K]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://github.com/ZeroK-RTS/Zero-K/blob/f24c14f31bcd1040e7dce66336ec39fce63b7de9/sounds/music/license.txt CC-BY-NC-ND for music], [https://github.com/ZeroK-RTS/Zero-K/blob/079af01d8781e9785d21e41057d0d67f0c571b12/legal.txt GPL/PD for code and all other assets])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Zero-k_image.jpg|300px|link=https://zero-k.info/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Zero-K is a fast, competitive game with a focus on a streamlined economy and advanced interface that takes the focus off tedious tasks and back on the action. A huge roster of interesting, unique units and a variety of unit abilities provides tremendous tactical and strategic depth to the game. (This game is available via [https://zerok.itch.io/zero-k Itch.io] and [https://store.steampowered.com/app/334920/ZeroK/ Steam].)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://github.com/spring1944/spring1944/wiki Spring: 1944]&amp;lt;/h2&amp;gt;([https://github.com/spring1944/spring1944/blob/1e36bbf93f42018bb9f52af8c3dc3e9ffa9fbeff/docs/License.txt CC-BY-NC])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:S44_tigers.jpg|300px|link=http://spring1944.net/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Spring:1944 is a WWII themed game with eight fully functional armies (US, Germany, USSR, Britain, Japan, Italy, Hungary, Sweden), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play. ([https://spring1944.github.io/ homepage], [https://youtu.be/bg5k4b8Zgsk youtube 1], [https://youtu.be/76jFZvpvwoA youtube 2], [https://springrts.com/phpbb/viewforum.php?f=45 subforum])&lt;br /&gt;
|-&lt;br /&gt;
|  | &amp;lt;h2&amp;gt;[https://www.evolutionrts.info Evolution RTS]&amp;lt;/h2&amp;gt;([https://github.com/EvolutionRTS/Evolution-RTS/blob/f8a5df79b384f28fa8705f58df2cd2b580f0c982/license.txt CC-BY-SA])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Evoimg.jpg|300px|link=https://www.evolutionrts.info]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A new war is brewing. A violent conflict, between the Six Colonies, each one convinced that it was in the right, each one sure of its own ability to defeat its enemies. But they need Generals. They need soldiers. They need you. (This game is available via [https://forboding-angel.itch.io/evolution-rts Itch.io] and [https://store.steampowered.com/app/291150/Evolution_RTS/ Steam].)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[[Kernel Panic]]&amp;lt;/h2&amp;gt;([[Kernel_Panic#License:|FOSS]])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Kernel_Panic_3.4.jpg|300px|link=Kernel Panic]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A game based around combat &#039;&#039;&#039;inside&#039;&#039;&#039; a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://springfiles.com/spring/games/edge-1 On The Edge]&amp;lt;/h2&amp;gt;  (GPL, [https://github.com/PepeAmpere/On-The-Edge/blob/master/README.md CC-BY-NC-SA], [https://github.com/PepeAmpere/On-The-Edge/blob/master/wiki/credits.md etc])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:start3.jpg|300px|link=https://springfiles.com/spring/games/edge-1]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | First Spring MOBA with unique pre-game hero setup. Under heavy development. ([http://springrts.com/phpbb/viewtopic.php?f=55&amp;amp;t=31476 On The Edge forum thread])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[http://www.metalfactions.pt Metal Factions]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([http://www.metalfactions.pt/about.html#license CC-BY-ND, with GPL/PD code])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Mf_spring_wiki.jpg|300px|link=http://www.metalfactions.pt]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | An evolving game that started as a TA mod and currently features four factions: AVEN, GEAR, CLAW and SPHERE. Commanders can morph to fit into different play styles and be easily revived. Economy scaling is more strictly tied to map control. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://springrts.com/phpbb/viewtopic.php?f=54&amp;amp;t=23988#p447937 The Cursed]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://springrts.com/phpbb/viewtopic.php?f=54&amp;amp;t=23988&amp;amp;p=566530&amp;amp;hilit=license#p566530 CC-BY-NC-SA])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:cursed_logo.jpg|300px|link=http://www.indiedb.com/games/the-cursed]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | The game is about bones, undead, demons, space marines and magic settled in a futuristic environment. It is a fresh   mixture of gameplay elements from many popular RTS games like Starcraft and C&amp;amp;C. ([https://www.indiedb.com/games/the-cursed homepage], [https://youtu.be/EiBh8l200oo youtube 1], [https://youtu.be/oah7Xt0CgVY youtube 2], [https://springrts.com/phpbb/viewforum.php?f=54 subforum])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://drive.google.com/file/d/0Bx_Nvv6rzVvgLXJkckpYaDhaOVU/view Journeywar] &amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://github.com/PicassoCT/Journeywar/blob/97aa399693cd04097367eb5c587eeb590723b700/LICENSE GPLv3])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:JwLogo.jpg|300px|link=https://springrts.com/phpbb/viewtopic.php?f=69&amp;amp;t=23275&amp;amp;start=1180#p578989]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |  Journeywar is the final battle between Combine and Exobiotics. Join the fight and rediscover the HL- Universe from a new, strategic perspective. ([https://springrts.com/phpbb/viewtopic.php?f=69&amp;amp;t=23275&amp;amp;start=1220#p588002 dev blog], [https://springrts.com/phpbb/viewforum.php?f=69 subforum])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Proprietary=&lt;br /&gt;
&#039;&#039;These games may or may not be free to play. Modifying their content (i.e. the art assets) is not allowed without the game authors explicit permission, although the code is GPL and some games include large GPL-friendly content collections.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://www.moddb.com/games/conflict-terra/tutorials/how-to-start-a-game-of-conflict-terra Conflict Terra]&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:CT_Hojos.png|300px|link=http://www.moddb.com/games/conflict-terra]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A unique game with heavy emphasis on mobility and featuring Spring&#039;s first major &amp;quot;collect and drop-off&amp;quot; economy, Conflict Terra boasts a distinctive art style.  Play as one of two factions in an ever-changing battlefield as you struggle to come out on top. ([http://www.moddb.com/games/conflict-terra homepage], [https://github.com/oksnoop2/conflictterra/commit/0e72529194e1ff363c986a43ce3af77d0cf720f7 currently proprietary], [https://github.com/oksnoop2/conflictterra/blob/e4a974c697f425c6ed00f83b1864d64c366da2f1/games/CT/License.txt last known public domain release], [https://springrts.com/phpbb/viewforum.php?f=63 subforum])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=46 Star Wars: Imperial Winter] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Imperial Winter assault.jpg|300px|link=https://springrts.com/phpbb/viewforum.php?f=46]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A Star Wars themed game set in the troubled post-Return of the Jedi era.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://github.com/SpringMCLegacy/SpringMCLegacy/wiki Spring Mech Commander Legacy Project] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Spring_Mech_Commander_Legacy_Project.jpg|300px|link=https://github.com/SpringMCLegacy/SpringMCLegacy/wiki]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A cool RTS based in the Battletech Universe.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=TA-derived=&lt;br /&gt;
&#039;&#039;At least parts of these games are derived from data of the  Total Annihilation game (copyright Atari). As such, their distribution is potentially in breach of copyright laws and therefore not officially endorsed by the Spring RTS team.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;h2&amp;gt; [https://springrts.com/wiki/Balanced_Annihilation#Links Balanced Annihilation] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:BAScreenShot.jpg|300px|link=https://balancedannihilation.com]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Balanced Annihilation (BA) is a mature game and new versions feature only minor balance tweaks.&lt;br /&gt;
&lt;br /&gt;
BA gameplay develops in stages of progressively heavier units with a growing economy. Many strategies are viable in BA, including focusing on map control, aggression, defense, air power, sea power, or mobility.&lt;br /&gt;
([https://youtu.be/qeZYghUPU-s youtube], [https://springrts.com/phpbb/viewforum.php?f=44 subforum])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;h2&amp;gt;[https://springrts.com/phpbb/viewforum.php?f=55 NOTA]&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:notAgame02.jpg|300px|link=http://nota.machys.net/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Not Original Total Annihilation is a rethink of the Total Annihilation universe with a focus on strategic, base oriented gameplay. With its revised unit scale, huge battles erupt engaging hundreds of units and scores of unit types. NOTA&#039;s completely rethought air and sea gameplay forces participation in all elements and places the tide of conflict in your hands. (This game is available via [http://nota.machys.net/downloads its own lobby].)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [http://fluidplay.co/taprime TA Prime] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Taprime site.png|300px|link=http://fluidplay.co/taprime]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |Highly polished prequel to Total Annihilation, with a full-blown tech tree, unit abilities and a strong rock-paper-scissors countering system similar to C&amp;amp;C games.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=91 Tech Annihilation] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Tech_Annihilation.png|300px|link=https://springrts.com/phpbb/viewforum.php?f=91]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |This Game is bigger, greater and more epic! Tech your Commander from a tiny Commander to a Galactic Commander! (currently no homepage)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [[XTA]] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Screen508_s.jpg|300px|link=XTA]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Originally developed as a Total Annihilation game by the Swedish Yankspankers, XTA is the Original Public Game released with first versions of Spring. Development of this game by the SYs has stopped a while ago, but it is still played and actively developed by the community.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Installing Games in Spring=&lt;br /&gt;
Quite a few of the games listed above come with standalone installers, which makes things easy. Check their website to find out! Otherwise a lobby such as [[SpringLobby]] will download everything for you when you join a game room.&lt;br /&gt;
&lt;br /&gt;
Games can also be downloaded manually as .sdz/.sd7 files, for example &#039;&#039;BA750&#039;&#039;&#039;&#039;&#039;.sd7&#039;&#039;&#039; or &#039;&#039;XTA&#039;&#039;&#039;&#039;&#039;.sdz&#039;&#039;&#039;, and placed into &#039;&#039;...\My Documents\My Games\Spring\Games\&#039;&#039; or &#039;&#039;...\Spring\games\&#039;&#039; folder (&#039;&#039;~/.spring/games/&#039;&#039; on Linux/Unix/Mac). Read the advice on [[Read_Me_First|this page]] if your lobby does not find your games.&lt;br /&gt;
You may install multiple games in the same engine installation. The same goes for [[Maps]]. Place them into a folder called maps in  the same folder where the games folder is.&lt;br /&gt;
&lt;br /&gt;
Still not enough Games? There are [[Getting_Spring_Content_and_Links|some more]], not listed here or make your [[Game_and_Unit_development|own Game]]!&lt;br /&gt;
&lt;br /&gt;
[[Category: Games]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2462</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=2462"/>
		<updated>2020-06-22T12:13:42Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Links */&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;
[[Image:BA.gif|very epic tmp img of BA]]&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA subforum]&lt;br /&gt;
* [https://github.com/Balanced-Annihilation/Balanced-Annihilation Game Source Repository]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
Balanced Annihilation was the long-term most popular game based at the Spring engine.&lt;br /&gt;
It&#039;s based at three basic principles:&lt;br /&gt;
* &#039;&#039;&#039;Refined [[OTA | Original Total Annihilation]]:&#039;&#039;&#039; BA&#039;s lineage traces back to fan mods of the original Total Annihilation. 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; Balanced Annihilation 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;
Balanced Annihilation mod started as a fork of [[Absolute Annihilation]] 2.23 in the end of 2006. The community split in 2019 and shortly afterwards Floris (2016-19) resigned as maintainer. The previous maintainers, who shouldn&#039;t be forgotten, were &lt;br /&gt;
* [teh]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;
The [https://github.com/Balanced-Annihilation/Balanced-Annihilation github repository] that remains is owned by ShoX. &lt;br /&gt;
&lt;br /&gt;
===Legal===&lt;br /&gt;
Parts of this mod originate from non-free sources. However, there is an ongoing attempt to find and replace units&#039; models with free ones. [https://springrts.com/phpbb/viewtopic.php?f=44&amp;amp;t=30537 BA Reloaded]&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>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2461</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=2461"/>
		<updated>2020-06-22T12:13:00Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: 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;
[[Image:BA.gif|very epic tmp img of BA]]&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ Official BA website]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA subforum]&lt;br /&gt;
* [https://github.com/Balanced-Annihilation/Balanced-Annihilation Game Source Repository]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
Balanced Annihilation was the long-term most popular game based at the Spring engine.&lt;br /&gt;
It&#039;s based at three basic principles:&lt;br /&gt;
* &#039;&#039;&#039;Refined [[OTA | Original Total Annihilation]]:&#039;&#039;&#039; BA&#039;s lineage traces back to fan mods of the original Total Annihilation. 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; Balanced Annihilation 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;
Balanced Annihilation mod started as a fork of [[Absolute Annihilation]] 2.23 in the end of 2006. The community split in 2019 and shortly afterwards Floris (2016-19) resigned as maintainer. The previous maintainers, who shouldn&#039;t be forgotten, were &lt;br /&gt;
* [teh]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;
The [https://github.com/Balanced-Annihilation/Balanced-Annihilation github repository] that remains is owned by ShoX. &lt;br /&gt;
&lt;br /&gt;
===Legal===&lt;br /&gt;
Parts of this mod originate from non-free sources. However, there is an ongoing attempt to find and replace units&#039; models with free ones. [https://springrts.com/phpbb/viewtopic.php?f=44&amp;amp;t=30537 BA Reloaded]&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>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Games&amp;diff=9129</id>
		<title>Games</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Games&amp;diff=9129"/>
		<updated>2020-06-22T11:56:15Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* TA-derived */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of games made for the Spring Engine. Some of the more popular ones are listed below, sorted by their terms of use. &amp;lt;!--(/license schemes?)--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can download games automatically, using your lobby (see [[Read_Me_First|Read Me First]]). Some games also offer a stand-alone installer.&lt;br /&gt;
&lt;br /&gt;
=Open Source=&lt;br /&gt;
&#039;&#039;These games are all free to download and play and may be open to modifications, however, be sure to read the licenses before doing so.&#039;&#039;&lt;br /&gt;
{|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://zero-k.info/ Zero-K]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://github.com/ZeroK-RTS/Zero-K/blob/f24c14f31bcd1040e7dce66336ec39fce63b7de9/sounds/music/license.txt CC-BY-NC-ND for music], [https://github.com/ZeroK-RTS/Zero-K/blob/079af01d8781e9785d21e41057d0d67f0c571b12/legal.txt GPL/PD for code and all other assets])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Zero-k_image.jpg|300px|link=https://zero-k.info/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Zero-K is a fast, competitive game with a focus on a streamlined economy and advanced interface that takes the focus off tedious tasks and back on the action. A huge roster of interesting, unique units and a variety of unit abilities provides tremendous tactical and strategic depth to the game. (This game is available via [https://zerok.itch.io/zero-k Itch.io] and [https://store.steampowered.com/app/334920/ZeroK/ Steam].)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://github.com/spring1944/spring1944/wiki Spring: 1944]&amp;lt;/h2&amp;gt;([https://github.com/spring1944/spring1944/blob/1e36bbf93f42018bb9f52af8c3dc3e9ffa9fbeff/docs/License.txt CC-BY-NC])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:S44_tigers.jpg|300px|link=http://spring1944.net/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Spring:1944 is a WWII themed game with eight fully functional armies (US, Germany, USSR, Britain, Japan, Italy, Hungary, Sweden), period-accurate units and strengths. Realism comes second only to creating a game that is fun and accessible to play. ([https://spring1944.github.io/ homepage], [https://youtu.be/bg5k4b8Zgsk youtube 1], [https://youtu.be/76jFZvpvwoA youtube 2], [https://springrts.com/phpbb/viewforum.php?f=45 subforum])&lt;br /&gt;
|-&lt;br /&gt;
|  | &amp;lt;h2&amp;gt;[https://www.evolutionrts.info Evolution RTS]&amp;lt;/h2&amp;gt;([https://github.com/EvolutionRTS/Evolution-RTS/blob/f8a5df79b384f28fa8705f58df2cd2b580f0c982/license.txt CC-BY-SA])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Evoimg.jpg|300px|link=https://www.evolutionrts.info]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A new war is brewing. A violent conflict, between the Six Colonies, each one convinced that it was in the right, each one sure of its own ability to defeat its enemies. But they need Generals. They need soldiers. They need you. (This game is available via [https://forboding-angel.itch.io/evolution-rts Itch.io] and [https://store.steampowered.com/app/291150/Evolution_RTS/ Steam].)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[[Kernel Panic]]&amp;lt;/h2&amp;gt;([[Kernel_Panic#License:|FOSS]])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Kernel_Panic_3.4.jpg|300px|link=Kernel Panic]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A game based around combat &#039;&#039;&#039;inside&#039;&#039;&#039; a computer, with 3 unique sides: the System, the Hacker and the Network waging war in a matrix of DOOM! No resource economy exists in KP, with the only constraints being time and space.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://springfiles.com/spring/games/edge-1 On The Edge]&amp;lt;/h2&amp;gt;  (GPL, [https://github.com/PepeAmpere/On-The-Edge/blob/master/README.md CC-BY-NC-SA], [https://github.com/PepeAmpere/On-The-Edge/blob/master/wiki/credits.md etc])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:start3.jpg|300px|link=https://springfiles.com/spring/games/edge-1]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | First Spring MOBA with unique pre-game hero setup. Under heavy development. ([http://springrts.com/phpbb/viewtopic.php?f=55&amp;amp;t=31476 On The Edge forum thread])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[http://www.metalfactions.pt Metal Factions]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([http://www.metalfactions.pt/about.html#license CC-BY-ND, with GPL/PD code])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Mf_spring_wiki.jpg|300px|link=http://www.metalfactions.pt]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | An evolving game that started as a TA mod and currently features four factions: AVEN, GEAR, CLAW and SPHERE. Commanders can morph to fit into different play styles and be easily revived. Economy scaling is more strictly tied to map control. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://springrts.com/phpbb/viewtopic.php?f=54&amp;amp;t=23988#p447937 The Cursed]&amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://springrts.com/phpbb/viewtopic.php?f=54&amp;amp;t=23988&amp;amp;p=566530&amp;amp;hilit=license#p566530 CC-BY-NC-SA])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:cursed_logo.jpg|300px|link=http://www.indiedb.com/games/the-cursed]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | The game is about bones, undead, demons, space marines and magic settled in a futuristic environment. It is a fresh   mixture of gameplay elements from many popular RTS games like Starcraft and C&amp;amp;C. ([https://www.indiedb.com/games/the-cursed homepage], [https://youtu.be/EiBh8l200oo youtube 1], [https://youtu.be/oah7Xt0CgVY youtube 2], [https://springrts.com/phpbb/viewforum.php?f=54 subforum])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://drive.google.com/file/d/0Bx_Nvv6rzVvgLXJkckpYaDhaOVU/view Journeywar] &amp;lt;/h2&amp;gt;&lt;br /&gt;
([https://github.com/PicassoCT/Journeywar/blob/97aa399693cd04097367eb5c587eeb590723b700/LICENSE GPLv3])&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:JwLogo.jpg|300px|link=https://springrts.com/phpbb/viewtopic.php?f=69&amp;amp;t=23275&amp;amp;start=1180#p578989]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |  Journeywar is the final battle between Combine and Exobiotics. Join the fight and rediscover the HL- Universe from a new, strategic perspective. ([https://springrts.com/phpbb/viewtopic.php?f=69&amp;amp;t=23275&amp;amp;start=1220#p588002 dev blog], [https://springrts.com/phpbb/viewforum.php?f=69 subforum])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Proprietary=&lt;br /&gt;
&#039;&#039;These games may or may not be free to play. Modifying their content (i.e. the art assets) is not allowed without the game authors explicit permission, although the code is GPL and some games include large GPL-friendly content collections.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt;[https://www.moddb.com/games/conflict-terra/tutorials/how-to-start-a-game-of-conflict-terra Conflict Terra]&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:CT_Hojos.png|300px|link=http://www.moddb.com/games/conflict-terra]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A unique game with heavy emphasis on mobility and featuring Spring&#039;s first major &amp;quot;collect and drop-off&amp;quot; economy, Conflict Terra boasts a distinctive art style.  Play as one of two factions in an ever-changing battlefield as you struggle to come out on top. ([http://www.moddb.com/games/conflict-terra homepage], [https://github.com/oksnoop2/conflictterra/commit/0e72529194e1ff363c986a43ce3af77d0cf720f7 currently proprietary], [https://github.com/oksnoop2/conflictterra/blob/e4a974c697f425c6ed00f83b1864d64c366da2f1/games/CT/License.txt last known public domain release], [https://springrts.com/phpbb/viewforum.php?f=63 subforum])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=46 Star Wars: Imperial Winter] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Imperial Winter assault.jpg|300px|link=https://springrts.com/phpbb/viewforum.php?f=46]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A Star Wars themed game set in the troubled post-Return of the Jedi era.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;h2&amp;gt; [https://github.com/SpringMCLegacy/SpringMCLegacy/wiki Spring Mech Commander Legacy Project] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Spring_Mech_Commander_Legacy_Project.jpg|300px|link=https://github.com/SpringMCLegacy/SpringMCLegacy/wiki]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | A cool RTS based in the Battletech Universe.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=TA-derived=&lt;br /&gt;
&#039;&#039;At least parts of these games are derived from data of the  Total Annihilation game (copyright Atari). As such, their distribution is potentially in breach of copyright laws and therefore not officially endorsed by the Spring RTS team.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=44 Balanced Annihilation] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:BAScreenShot.jpg|300px|link=https://balancedannihilation.com]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Balanced Annihilation (BA) is a mature game and new versions feature only minor balance tweaks.&lt;br /&gt;
&lt;br /&gt;
BA gameplay develops in stages of progressively heavier units with a growing economy. Many strategies are viable in BA, including focusing on map control, aggression, defense, air power, sea power, or mobility.&lt;br /&gt;
([https://youtu.be/qeZYghUPU-s youtube], [https://springrts.com/phpbb/viewforum.php?f=44 subforum])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;h2&amp;gt;[https://springrts.com/phpbb/viewforum.php?f=55 NOTA]&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:notAgame02.jpg|300px|link=http://nota.machys.net/]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Not Original Total Annihilation is a rethink of the Total Annihilation universe with a focus on strategic, base oriented gameplay. With its revised unit scale, huge battles erupt engaging hundreds of units and scores of unit types. NOTA&#039;s completely rethought air and sea gameplay forces participation in all elements and places the tide of conflict in your hands. (This game is available via [http://nota.machys.net/downloads its own lobby].)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [http://fluidplay.co/taprime TA Prime] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Taprime site.png|300px|link=http://fluidplay.co/taprime]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |Highly polished prequel to Total Annihilation, with a full-blown tech tree, unit abilities and a strong rock-paper-scissors countering system similar to C&amp;amp;C games.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [https://springrts.com/phpbb/viewforum.php?f=91 Tech Annihilation] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Tech_Annihilation.png|300px|link=https://springrts.com/phpbb/viewforum.php?f=91]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |This Game is bigger, greater and more epic! Tech your Commander from a tiny Commander to a Galactic Commander! (currently no homepage)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|  &amp;lt;h2&amp;gt; [[XTA]] &amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Screen508_s.jpg|300px|link=XTA]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Originally developed as a Total Annihilation game by the Swedish Yankspankers, XTA is the Original Public Game released with first versions of Spring. Development of this game by the SYs has stopped a while ago, but it is still played and actively developed by the community.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Installing Games in Spring=&lt;br /&gt;
Quite a few of the games listed above come with standalone installers, which makes things easy. Check their website to find out! Otherwise a lobby such as [[SpringLobby]] will download everything for you when you join a game room.&lt;br /&gt;
&lt;br /&gt;
Games can also be downloaded manually as .sdz/.sd7 files, for example &#039;&#039;BA750&#039;&#039;&#039;&#039;&#039;.sd7&#039;&#039;&#039; or &#039;&#039;XTA&#039;&#039;&#039;&#039;&#039;.sdz&#039;&#039;&#039;, and placed into &#039;&#039;...\My Documents\My Games\Spring\Games\&#039;&#039; or &#039;&#039;...\Spring\games\&#039;&#039; folder (&#039;&#039;~/.spring/games/&#039;&#039; on Linux/Unix/Mac). Read the advice on [[Read_Me_First|this page]] if your lobby does not find your games.&lt;br /&gt;
You may install multiple games in the same engine installation. The same goes for [[Maps]]. Place them into a folder called maps in  the same folder where the games folder is.&lt;br /&gt;
&lt;br /&gt;
Still not enough Games? There are [[Getting_Spring_Content_and_Links|some more]], not listed here or make your [[Game_and_Unit_development|own Game]]!&lt;br /&gt;
&lt;br /&gt;
[[Category: Games]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Defs&amp;diff=3890</id>
		<title>CEG:Defs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=CEG:Defs&amp;diff=3890"/>
		<updated>2020-05-13T14:35:13Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Overall Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CEG Definitions =&lt;br /&gt;
&lt;br /&gt;
==Source== &lt;br /&gt;
The engine source code which loads the tags from these files is viewable here:&lt;br /&gt;
&lt;br /&gt;
* {{sourcelink|file=rts/Sim/Projectiles/}} &lt;br /&gt;
* {{sourcelink|file=rts/Sim/Projectiles/Unsynced/}}&lt;br /&gt;
* {{sourcelink|file=rts/Rendering/GroundFlash.cpp}}&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
CEGs use the following data types:&lt;br /&gt;
{{DataTypes}}&lt;br /&gt;
&lt;br /&gt;
You can use [[CEG:Operators]] to define floats that are not fixed.&lt;br /&gt;
&lt;br /&gt;
== CEG Textures ==&lt;br /&gt;
&lt;br /&gt;
* Textures on CEG definitions are referenced by name.&lt;br /&gt;
* The list of available textures and their names should be in [[resources.lua]]&lt;br /&gt;
* Texture definitions to be used in projectile classes should be placed within the &amp;lt;code&amp;gt;projectiletextures&amp;lt;/code&amp;gt; category and textures to be used with [[#CSimpleGroundFlash]] class should be placed within the &amp;lt;code&amp;gt;groundfx&amp;lt;/code&amp;gt; category.&lt;br /&gt;
* Texture images are usually placed in the &amp;quot;bitmaps&amp;quot; subfolder.&lt;br /&gt;
&lt;br /&gt;
== Overall Format ==&lt;br /&gt;
&lt;br /&gt;
A CEG file contains one or more CEGs. Each CEG follows this format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
  [&amp;quot;ceg_name&amp;quot;] = {&lt;br /&gt;
    -- EXPLOSION LEVEL&lt;br /&gt;
    useDefaultExplosions = false,&lt;br /&gt;
&lt;br /&gt;
    spawner1_name = {&lt;br /&gt;
      -- SPAWNER LEVEL&lt;br /&gt;
      class         = &amp;quot;CClassName&amp;quot;,&lt;br /&gt;
      count              = 1,&lt;br /&gt;
      air                = true,&lt;br /&gt;
      ground             = true,&lt;br /&gt;
      water              = true,&lt;br /&gt;
      properties = {&lt;br /&gt;
        -- CLASS LEVEL&lt;br /&gt;
        },&lt;br /&gt;
      },&lt;br /&gt;
    },&lt;br /&gt;
    spawner2_name = {&lt;br /&gt;
      -- SPAWNER LEVEL&lt;br /&gt;
      -- each spawner follows the above format&lt;br /&gt;
    },&lt;br /&gt;
    groundflash = {&lt;br /&gt;
      -- groundflash is a special spawner name; it always generates a CStandardGroundFlash&lt;br /&gt;
      -- CStandardGroundFlash properties&lt;br /&gt;
    },&lt;br /&gt;
    -- other special spawner names exist, although their use is discouraged in favour of class=&amp;quot;CSomeClass&amp;quot;&lt;br /&gt;
    -- see https://github.com/spring/spring/blob/develop/cont/base/springcontent/gamedata/explosion_alias.lua#L61&lt;br /&gt;
  },&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explosion Level Tags ==&lt;br /&gt;
{{tag&lt;br /&gt;
|name = useDefaultExplosions&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = If this is set, the CEG will use the default explosion (based on damage and area of effect) in addition to any spawners you define. The default explosions are sometimes very performance heavy, especially for large damage values (leading to higher particle counts).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Spawner Level Tags ==&lt;br /&gt;
A CEG can contain any number of spawners. The name of the spawners don&#039;t really matter, as long as it&#039;s not &amp;lt;code&amp;gt;groundflash&amp;lt;/code&amp;gt;, which has a special meaning. You can think of each spawner as being one component of the overall explosion.&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = class&lt;br /&gt;
|type = string&lt;br /&gt;
|default = spawner_name&lt;br /&gt;
|description = Each spawner has a class that determines what kind of graphical effect it creates. Spring has a number of standard classes that you can choose from. Currently available classes are:&lt;br /&gt;
* [[#CExpGenSpawner|CExpGenSpawner]]&lt;br /&gt;
* [[#CBitmapMuzzleFlame|CBitmapMuzzleFlame]]&lt;br /&gt;
* [[#CExploSpikeProjectile|CExploSpikeProjectile]] &lt;br /&gt;
* [[#CHeatCloudProjectile|CHeatCloudProjectile]]&lt;br /&gt;
* [[#CSimpleParticleSystem|CSimpleParticleSystem]]&lt;br /&gt;
* [[#CSpherePartSpawner|CSpherePartSpawner]]&lt;br /&gt;
* [[#CSimpleGroundFlash|CSimpleGroundFlash]]&lt;br /&gt;
* [[#CStandardGroundFlash|CStandardGroundFlash]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = count&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 1&lt;br /&gt;
|description = The count determines the number of times the spawner will run.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Visibility Conditions ===&lt;br /&gt;
These determine under what conditions the spawner will run. If you set the condition to true, the spawner will run if the explosion takes place under that condition. If you set more than one condition, the spawner will run if &#039;&#039;any&#039;&#039; of them are true. If you want a spawner to run only if two or more conditions are &#039;&#039;all&#039;&#039; true, you have to do a little trick with the [[#CExpGenSpawner]] class as explained in &amp;quot;suggested use&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = air&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if at least 20 [[elmo]]s above ground/sea level.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = water&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if in water to a depth of -5 [[elmo]]s.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = underwater&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if under water deeper than 5 [[elmo]]s.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ground&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if less than 20 [[elmo]]s above ground.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = unit&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if the weapon hits a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = nounit&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = The CEG will run if the weapon does not hit a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Class Level Tags ==&lt;br /&gt;
=== Common Properties ===&lt;br /&gt;
All classes have the following properties, although not all of them use them:&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alwaysVisible&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = If true, the spawner is always visible, ignoring LoS. Note that prior to 98.0 this did not work correctly.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = useAirLos&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = Whether the spawner uses air LoS to determine if it is visible. This may allow the spawner to be seen from a further distance than normal.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = pos &lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The initial position vector of the spawner.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = speed&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The initial speed vector of the spawner.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = dir&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|description = The initial direction vector of the spawner.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CExpGenSpawner ===&lt;br /&gt;
This is the closest thing CEG has to a function call. Instead of creating a graphical effect on its own, it creates another CEG.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
* If you use a spawner a lot of times, you may want to make it a separate CEG to avoid having to copy-paste many times.&lt;br /&gt;
* This is the only way to truly delay a graphical effect.&lt;br /&gt;
* The spawned CEG still checks conditions, so if you want to, say, spawn an effect only if it is in water &#039;&#039;and&#039;&#039; doesn&#039;t hit a unit, you can give the CExpGenSpawner &amp;lt;code&amp;gt;nounit = 1;&amp;lt;/code&amp;gt; and the spawned &amp;lt;code&amp;gt;CEG water = 1;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* This allows you to give a set of spawners the same (and possibly random) direction.&lt;br /&gt;
* You can animate an explosion flip-book style using delays and several bitmaps.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = delay&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 1&lt;br /&gt;
|description = How long to wait (in frames?) before spawning the CEG.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = damage&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The CEG will be called with this damage. The CEG doesn&#039;t actually deal any damage, but you can use this as a parameter and read it using the [[CEG:Operators#Damage_.28.27d.27.29|&#039;d&#039; operator]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = explosionGenerator&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = The name of the CEG you want to spawn.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CBitmapMuzzleFlame ===&lt;br /&gt;
This creates three rectangular textures at right angles to each other. The {{taglink|frontTexture}} has {{taglink|dir}} as its normal.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
*Muzzle flames, obviously.&lt;br /&gt;
*You can use an upward-pointing CBitmapMuzzleFlame as a simple splash of water or dirt.&lt;br /&gt;
*Railgun trails.&lt;br /&gt;
*This is the only class that both obeys perspective and allows for a custom texture.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sideTexture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = Texture as viewed from the side.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = frontTexture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = Texture as viewed from the front.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = colorMap&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = See [[CColorMap]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial width of the muzzle flame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = length&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial length of the muzzle flame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = By the end of its life, the muzzle flame grows to &amp;lt;code&amp;gt;1 + sizeGrowth&amp;lt;/code&amp;gt; times its initial {{taglink|size}} and {{taglink|length}}. The flame grows quickly at first and more slowly toward the end.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = How long the muzzle flame lasts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = frontOffset&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Where the frontTexture is along the length of the muzzle flame. &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; means it is in the back, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is in the front.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CExploSpikeProjectile ===&lt;br /&gt;
&lt;br /&gt;
This creates a glowy spike. Note that the spike is two sided, i.e., symmetric about the position of the spawner.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
* Anything glowy.&lt;br /&gt;
* For large, slow missiles, you can try using this as an extended engine flame. Set the width to something fairly large.&lt;br /&gt;
* Long and thin spikes will look spiky; meanwhile, shorter and wider spikes look more blobby.&lt;br /&gt;
* The colors of spikes add together, so if you have several spikes and all three color channels are non-zero, it will be white in the center.&lt;br /&gt;
* The length growth of the spike depends on the norm of the dir vector. The spike does not grow in width.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = length&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial length of (half) of the spike (multiplied by {{taglink|dir}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = lengthGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = dir.Length() * (0.5 + RandFloat() * 0.4)&lt;br /&gt;
|description = How much the length increases by per update.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = width&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Half the initial width of of the spike. This is an absolute value.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alpha&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The starting alpha of the spike.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alphaDecay&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How quickly the alpha of the spike decreases.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = rgb&lt;br /&gt;
|default = {1.0, 0.8, 0.5}&lt;br /&gt;
|description = The color of the spike.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CHeatCloudProjectile ===&lt;br /&gt;
&lt;br /&gt;
Creates an expanding sprite. Simple but effective.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
* As the main background to an explosion.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = heat&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Used in alpha calculations. See {{taglink|heatFalloff}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = maxheat&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Used in alpha calculations. See {{taglink|heatFalloff}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = heatFalloff&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = This is really confusing way of representing alpha and alphaDecay. Basically &amp;lt;code&amp;gt;alpha = &amp;lt;/code&amp;gt;{{taglink|heat}}&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;{{taglink|maxheat}}, and &amp;lt;code&amp;gt;alphaDecay = &amp;lt;/code&amp;gt;{{taglink|heatFalloff}}&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;{{taglink|maxHeat}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial radius of the heatcloud.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The heatcloud grows by this amount every frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeMod&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The size of the heatcloud is multiplied by &amp;lt;code&amp;gt;1 - sizeMod&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeModMod&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Each frame, {{taglink|sizeMod}} is multiplied by {{taglink|sizeModMod}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;heatcloud&amp;quot; as referenced in [[resources.lua]]&lt;br /&gt;
|description = The texture used for the heatcloud.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CSimpleParticleSystem ===&lt;br /&gt;
&lt;br /&gt;
Creates a sprite that can undergo complex motion. Probably the most versatile class.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
* Anything moving that is not doing so at constant velocity.&lt;br /&gt;
* If you want something that expands (or shrinks) to some size then stops, set {{taglink|sizeMod}} to something less than &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, and {{taglink|sizeGrowth}} to something positive. The particle will grow to a size equal to &amp;lt;code&amp;gt;sizeGrowth / (1 - sizeMod)&amp;lt;/code&amp;gt; and stop. The smaller {{taglink|sizeMod}} is, the faster it will reach this size.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
===== Initial Velocity Properties =====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitVector&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The initial direction vector in which the particle is emitted. When spawning CEGs via EmitSfx you can make the particles go into the direction of the emiting piece with {{taglink|emitvector|dir}}. This is useful for e.g. fire coming out of a gun barrel.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitRot&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = At what angle to emit the particle relative to {{taglink|emitVector}}. &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; means that the particle will be emitted in {{taglink|emitVector}}&#039;s direction; &amp;lt;code&amp;gt;180&amp;lt;/code&amp;gt; will emit the particle in the opposite direction. &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt; will emit the particle in a random direction perpendicular to {{taglink|emitVector}}, which is good for creating rings.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitRotSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|emitRotSpread}} is added to the {{taglink|emitRot}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = emitMul&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {1.0, 1.0, 1.0}&lt;br /&gt;
|description = Scales the initial particle velocity; for this property, +y is considered to be in the direction of {{taglink|emitVector}}. Good if you want to create an egg-shaped explosion.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSpeed &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The particle&#039;s initial speed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSpeedSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|particleSpeedSpread}} is added to the {{taglink|particleSpeed}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Movement Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = gravity&lt;br /&gt;
|type = float[3]&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = This will be added to the particle&#039;s velocity every frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = airdrag&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The particle&#039;s velocity is multiplied by this every frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Size Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSize &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The initial size of the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleSizeSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|particleSizeSpread}} is added to the {{taglink|particleSize}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How much the particle grows each frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeMod&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The size of the particle is multiplied by this each frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Visual Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = directional&lt;br /&gt;
|type = bool&lt;br /&gt;
|default = false&lt;br /&gt;
|description = If true, the particle will point in the direction it is moving.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = The texture to use for the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = colorMap&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = See [[CColorMap]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Life Properties =====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = numParticles&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = How many particles to create. This is not the same as &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;; if you spawn multiple particles using &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;, any [[CEG:Operators]] will be re-evaluated for each particle, whereas if you use {{taglink|numParticles}} they will not be. However, the spread properties are evaluated separately for each particle regardless of which one you use.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleLife&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How long each particle lasts. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = particleLifeSpread&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = For each particle, a random number between &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and {{taglink|particleLifeSpread}} is added to the {{taglink|particleLife}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CSpherePartSpawner ===&lt;br /&gt;
&lt;br /&gt;
Draws an expanding sphere.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
*Looks like a shockwave.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = alpha&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The alpha of the sphere.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = Time to live, in frames(?).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = expansionSpeed&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How quickly the sphere expands.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = rgb&lt;br /&gt;
|default = {0.0, 0.0, 0.0}&lt;br /&gt;
|description = The color of the sphere.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSimpleGroundFlash ===&lt;br /&gt;
&lt;br /&gt;
Draws an expanding ground texture.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
* A short groundflash (~8 frames) is good for any explosion that gives off light. You can also use a longer groundflash to suggest the ground is glowing from heat.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The radius of the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = sizeGrowth&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How much the particle grows each frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = Time to live, in frames(?).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = The texture to use for the particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = colorMap&lt;br /&gt;
|type = string&lt;br /&gt;
|default = &amp;quot;&amp;quot;&lt;br /&gt;
|description = See [[CColorMap]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== CStandardGroundFlash ===&lt;br /&gt;
If you name a spawner &amp;quot;groundflash,&amp;quot; it will always generate a standard groundflash. &lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
A short groundflash (~8 frames) is good for any explosion that gives off light. You can also use a longer groundflash to suggest the ground is glowing from heat.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = flashSize&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = The radius of the groundflash.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = flashAlpha &lt;br /&gt;
|type = float&lt;br /&gt;
|range = [0, 1]&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How transparent the groundflash is. Generally the higher the brighter.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = circleGrowth &lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = A groundflash can have an additional circle that expands outwards. This controls how fast the circle grows.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = circleAlpha&lt;br /&gt;
|type = float&lt;br /&gt;
|range = [0, 1]&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How transparent the circle is.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ttl&lt;br /&gt;
|type = int&lt;br /&gt;
|default = 0&lt;br /&gt;
|description = How long the groundflash lasts.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = rgb&lt;br /&gt;
|default = {1.0, 1.0, 0.8}&lt;br /&gt;
|description = The color of the groundflash.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSmokeProjectile2 ===&lt;br /&gt;
( {{FIXME}} newly added to wiki. someone cross-check then remove this note )&lt;br /&gt;
&lt;br /&gt;
Particles that begin with a hard-coded yellow-red colorfade and then fade to monochrom. (shades of grey)&lt;br /&gt;
&lt;br /&gt;
Movement is influenced by the random wind.&lt;br /&gt;
Finer details of visual and position update are best explained by looking at the formulas in &amp;lt;code&amp;gt;CSmokeProjectile2::Update() &amp;amp; CSmokeProjectile2::Draw()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
Smoke. Smokestacks, rocket exhaust, burning wreckage,...&lt;br /&gt;
&lt;br /&gt;
For a nicer stream of smoke spawn it frequently over multiple frames, otherwise it looks rather bland.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = How dark the final monochrom color of a particle is. 0 is black.&lt;br /&gt;
(Use &amp;gt;1 for slightly bugged funnies, like slightly non-monochrome colors or interessting black/white changes.)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Size of a particle.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ageSpeed&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = How fast the particle ages. Every frame: &amp;lt;code&amp;gt;age += ageSpeed&amp;lt;/code&amp;gt; The particle is deleted at &amp;lt;code&amp;gt;if (age &amp;gt; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = glowFalloff&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = How fast the particle fades to monochrom.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = wantedPos&lt;br /&gt;
|type = float3&lt;br /&gt;
|default = &amp;quot;0,0,0&amp;quot;&lt;br /&gt;
|description = In which direction the smoke tends to drift. Less effective in y-coordinate and influenced by random wind. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = speed&lt;br /&gt;
|type = float3&lt;br /&gt;
|default = &amp;quot;0,0,0&amp;quot;&lt;br /&gt;
|description = &amp;lt;code&amp;gt;wantedPos += speed;&amp;lt;/code&amp;gt; How fast and in which vector the particles move.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = hardcoded&lt;br /&gt;
|default = randomly chosen. &lt;br /&gt;
|description = Particles randomly pick one of the smoke textures (bitmaps\smoke) and remain with it until death.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CSmokeProjectile ===&lt;br /&gt;
Monochrome particles that fade out.&lt;br /&gt;
A more &amp;quot;primitive&amp;quot; version of CSmokeProjectile2. &lt;br /&gt;
No hardcoded red-yellow start but it misses wantedPos to tweak the look a bit more detailed.&lt;br /&gt;
&lt;br /&gt;
==== Suggested Use ====&lt;br /&gt;
Smoke. &lt;br /&gt;
For a nicer stream of smoke spawn it frequently over multiple frames, otherwise it looks rather bland.&lt;br /&gt;
&lt;br /&gt;
==== Properties ====&lt;br /&gt;
{{tag&lt;br /&gt;
|name = color&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = Brightness of the particle. 0 is black.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = size&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.0&lt;br /&gt;
|description = Size of a particle&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = ageSpeed&lt;br /&gt;
|type = float&lt;br /&gt;
|default = 0.5&lt;br /&gt;
|description = How fast the particle ages. Every frame: &amp;lt;code&amp;gt;age += ageSpeed&amp;lt;/code&amp;gt; The particle is deleted at &amp;lt;code&amp;gt;if (age &amp;gt; 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = speed&lt;br /&gt;
|type = float3&lt;br /&gt;
|default = &amp;quot;0,0,0&amp;quot;&lt;br /&gt;
|description = &amp;lt;code&amp;gt;pos += speed;&amp;lt;/code&amp;gt; How fast and in which vector the particles move.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{tag&lt;br /&gt;
|name = texture&lt;br /&gt;
|type = hardcoded&lt;br /&gt;
|default = randomly chosen. &lt;br /&gt;
|description = Particles randomly pick one of the smoke textures (bitmaps\smoke) and remain with it until death.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- can&#039;t use the following until all games use effects/ rather than gamedata/explosions&lt;br /&gt;
{{ExampleRepoLinks&lt;br /&gt;
|path = effects/&lt;br /&gt;
|entity = CEGs&lt;br /&gt;
}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[http://imolarpg.dyndns.org/trac/balatest/browser/trunk/gamedata/explosions &#039;Balanced Annihilation&#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/conflictterra/source/browse/#svn%2Fgames%2FCT%2Fgamedata%2Fexplosions &#039;Conflict Terra&#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/EvolutionRTS/Evolution-RTS/tree/master/Gamedata/explosions &#039;Evolution RTS&#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/imperialwinter/swiw.sdd/tree/master/gamedata/explosions &#039;Imperial Winter&#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/journeywar/source/browse/#svn%2Ftrunk%2Fgamedata%2Fexplosions &#039;Journeywar&#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/p/mwspring/code/HEAD/tree/effects/ &#039;MechCommander: Legacy&#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring1944/spring1944/tree/master/effects &#039;Spring: 1944&#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/springtutorialgame/source/browse/#svn%2Ftrunk%2FSpringTutorialGame.sdd%2FGamedata%2Fexplosions &#039;Spring Tutorial Game&#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/xta-springrts/source/browse/#svn%2Ftrunk%2Fgamedata%2Fexplosions &#039;XTA&#039; CEGs] (TDF format)&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K/tree/master/effects &#039;ZeroK&#039; CEGs]&lt;br /&gt;
&lt;br /&gt;
[[Category:CEG]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5301</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5301"/>
		<updated>2020-04-26T13:57:28Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Data and usage of data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server (springrts.com) and its managed infrastructure process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server, running at springrts.com.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and are contactable via the forum hosted at springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data excluding usernames is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use external GDPR compliant services to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5300</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5300"/>
		<updated>2020-04-26T13:55:44Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Data and usage of data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server (springrts.com) and its managed infrastructure process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and are contactable via the forum hosted at springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data excluding usernames is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use external GDPR compliant services to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Systems&amp;diff=6104</id>
		<title>Download Systems</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Systems&amp;diff=6104"/>
		<updated>2020-03-10T11:07:43Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* clients/implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are curently three systems for spring content files:&lt;br /&gt;
*[[rapid]] is currently for games only (rsync like)&lt;br /&gt;
*[[upq]] allows to search for games maps and engine&lt;br /&gt;
*[[plasma]] allows to search for games and maps&lt;br /&gt;
&lt;br /&gt;
These systems allow to automaticly download files.&lt;br /&gt;
&lt;br /&gt;
==clients/implementations==&lt;br /&gt;
*[[SpringLobby]] (c++, cross-platform)&lt;br /&gt;
*[[chobby]] (lua, cross-platform)&lt;br /&gt;
*[[pr-downloader]] (c++, cross-platform)&lt;br /&gt;
[[Category: Download_Systems]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5299</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5299"/>
		<updated>2020-02-08T08:20:05Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* User rights under GDPR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server and its managed game hosts process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and are contactable via the forum hosted at springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data excluding usernames is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use external GDPR compliant services to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5298</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5298"/>
		<updated>2020-02-08T08:17:00Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Disclosure of data to third parties and other users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server and its managed game hosts process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and also contactable through springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data excluding usernames is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use external GDPR compliant services to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5297</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5297"/>
		<updated>2020-02-07T08:25:24Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Disclosure of data to third parties and other users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server and its managed game hosts process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and also contactable through springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use external GDPR compliant services to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10661</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10661"/>
		<updated>2019-12-24T17:03:14Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description] &lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#Changelog changelog]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy lobby server, created by Betalord. Superceeded by uberserver in 2012. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10660</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10660"/>
		<updated>2019-12-24T17:02:48Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description] &lt;br /&gt;
* [file:///C:/nic/springrts/lobby_protocol/ProtocolDescription.xml#Changelog changelog]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy lobby server, created by Betalord. Superceeded by uberserver in 2012. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10659</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10659"/>
		<updated>2019-12-24T16:47:29Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description] &lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#RecentChanges changelog]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy lobby server, created by Betalord. Superceeded by uberserver in 2012. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10658</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10658"/>
		<updated>2019-12-24T16:46:55Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description] containing protocol [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html#RecentChanges changelog]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy lobby server, created by Betalord. Superceeded by uberserver in 2012. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10657</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10657"/>
		<updated>2019-12-16T08:44:32Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* SpringLS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy lobby server, created by Betalord. Superceeded by uberserver in 2012. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10656</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10656"/>
		<updated>2019-12-14T19:02:09Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Legacy lobbyservers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10655</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10655"/>
		<updated>2019-12-14T17:43:34Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Legacy lobby clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt; (superceeded by Chobby)&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Satirik&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;, &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The longest-running lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10654</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10654"/>
		<updated>2019-12-14T17:22:53Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Spring Lobby Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Server:===&lt;br /&gt;
&lt;br /&gt;
===[[Uberserver]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis, abma, silentwings&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The primary lobby server currently running on springrts.com. See the dedicated page on [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
===[[Download_Systems]]===&lt;br /&gt;
Various systems exist to supply content, see the dedicated page [[Download_Systems]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Lobby clients:===&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobby clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained, superceeded by Chobby&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The longest-running lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10653</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10653"/>
		<updated>2019-12-14T17:11:17Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Full featured lobby clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Download System===&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
===Lobby server: UberServer===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary lobby server currently running on springrts.com. Most protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and SpringLS (SpringLS hasn&#039;t seen as many updates recently). See the dedicated [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
==Full featured lobby clients==&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbiy clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
mostly &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The longest-running lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10652</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10652"/>
		<updated>2019-12-14T17:10:56Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Full featured lobby clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Download System===&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
===Lobby server: UberServer===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary lobby server currently running on springrts.com. Most protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and SpringLS (SpringLS hasn&#039;t seen as many updates recently). See the dedicated [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
==Full featured lobby clients==&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbiy clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
mostly &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The longest-running lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10651</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10651"/>
		<updated>2019-12-14T17:10:39Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Full featured lobby clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Download System===&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
===Lobby server: UberServer===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary lobby server currently running on springrts.com. Most protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and SpringLS (SpringLS hasn&#039;t seen as many updates recently). See the dedicated [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
==Full featured lobby clients==&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
===[[Chobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Lua&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;gajop, with major contributions from various game devs&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Spring-Chobby/Chobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbiy clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
mostly &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The longest-running lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10650</id>
		<title>Lobby Development</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10650"/>
		<updated>2019-12-14T17:08:39Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Protocol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Live systems=&lt;br /&gt;
&lt;br /&gt;
===Protocol===&lt;br /&gt;
* [https://springrts.com/dl/LobbyProtocol/ProtocolDescription.html Protocol Description]&lt;br /&gt;
* [http://springrts.com/dl/LobbyProtocol/ Index of commands]&lt;br /&gt;
These are both updated once per day from [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml the raw xml docs]&lt;br /&gt;
&lt;br /&gt;
===Download System===&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
===Lobby server: UberServer===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;aegis&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary lobby server currently running on springrts.com. Most protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and SpringLS (SpringLS hasn&#039;t seen as many updates recently). See the dedicated [[uberserver]] for more info.&lt;br /&gt;
&lt;br /&gt;
==Full featured lobby clients==&lt;br /&gt;
&lt;br /&gt;
===[[SpringLobby]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux, Windows, Mac &amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Koshi, Braindamage, Abma and many others &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/springlobby/springlobby github: repository + issues]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Zero-K systems=&lt;br /&gt;
&lt;br /&gt;
===ZeroK Server===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zero-K lobby server. Uses a different protocol. Source can be found at&lt;br /&gt;
https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZkLobbyServer&lt;br /&gt;
&lt;br /&gt;
===Zero-K Lobby===&lt;br /&gt;
&lt;br /&gt;
No longer uses the Spring lobby protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows/Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C#&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Licho&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;quantum&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K-Infrastructure/tree/master/ZeroKLobby Zero-K Lobby github]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Legacy systems=&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbiy clients==&lt;br /&gt;
&lt;br /&gt;
From mostly functional, to WIP, abandoned or unusable. Apparently, its much harder to make a lobby client than most people think.&lt;br /&gt;
&lt;br /&gt;
===flobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Linux&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;cleanrock&amp;lt;/font&amp;gt;, only maintained actively for use with the Zero-K lobbyserver.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/cleanrock/flobby github page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Weblobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
mostly &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://weblobby.springrts.com project site]&lt;br /&gt;
&lt;br /&gt;
===[[TASClient]]===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Delphi&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alphalobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Windows&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alphalobby is still very much work in progress. If you still wish to use it, source available from the [http://code.google.com/p/alphalobby/source/checkout mercurial repository], binary available on the [http://springfiles.com/spring/lobby-clients/alphalobby springfiles page].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CheeseLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
by &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;Cheesecan&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=64&amp;amp;t=24905 forum thread]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jahwag/OpenLobby binaries and code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QtLobby===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;C++&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;unmaintained&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://github.com/tizbac/qtlobby project page]&lt;br /&gt;
&lt;br /&gt;
===Spring-PythonBotFramework===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Python&amp;lt;/font&amp;gt;, by&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;BrainDamage&amp;lt;/font&amp;gt; &amp;amp; &amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A bot framework written in python. [https://github.com/renemilk/tasbot/wiki GitHub wiki]&lt;br /&gt;
&lt;br /&gt;
===Go SpringLobbyClient===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Go&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple client implementation of the lobby protocol in Go.&lt;br /&gt;
[https://github.com/Agon/go-slc/ project page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Legacy lobbyservers==&lt;br /&gt;
===SpringLS===&lt;br /&gt;
&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;cross-platform&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00AAFF&amp;quot;&amp;gt;Java&amp;lt;/font&amp;gt;,&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;hoijui&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The longest-running lobby server, created by Betalord. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/SpringLS development site].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Reporting&amp;diff=15928</id>
		<title>Reporting</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Reporting&amp;diff=15928"/>
		<updated>2019-06-23T11:08:52Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Moderation within autohosts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Contacting moderators ==&lt;br /&gt;
&lt;br /&gt;
For individual forum posts, which might not follow our [[Felony|forum rules]], use the &#039;report post&#039; button which you can find [https://springrts.com/phpbb/app.php/help/faq#f2r9 near the top right of every forum post].&lt;br /&gt;
&lt;br /&gt;
In all other cases, when a reaction is wanted from Springs moderators, reports may be sent, via private messages, with evidence in the form of links/logfiles/replays, [https://springrts.com/phpbb/ucp.php?i=pm&amp;amp;mode=compose&amp;amp;g=3623 to the Spring staff (=moderators and administrators) forum group]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Forum threads should not be used for reporting users behaviour to moderators.&#039;&#039;&#039; Why not? Because forum threads are for discussions, which don&#039;t require a heavy burden of proving something when you say it - consequently we will never treat them as a request for a reaction or judgement from moderators. We may not always read them, but if we do then we will generally lock threads made to request moderator reactions.&lt;br /&gt;
&lt;br /&gt;
== Moderation within autohosts ==&lt;br /&gt;
&lt;br /&gt;
Misbehaviour within autohosts should be reported to the autohost owners or operators. Send a private lobby message &amp;lt;code&amp;gt;!list users&amp;lt;/code&amp;gt; to the autohost to find out who these are.&lt;br /&gt;
&lt;br /&gt;
Autohosts are typically run by particular users and have a degree of autonomy, [[Botflags|as detailed here]]. Springs (global) moderators will typically not process disputes between players relating to ingame behaviour.&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2460</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=2460"/>
		<updated>2019-05-24T07:34:37Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* 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;
[[Image:BA.gif|very epic tmp img of BA]]&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ Official BA website]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA subforum]&lt;br /&gt;
* [https://github.com/Balanced-Annihilation/Balanced-Annihilation Game Source Repository]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
Balanced Annihilation is the long-term most popular game based at the Spring engine.&lt;br /&gt;
It&#039;s based at three basic principles:&lt;br /&gt;
* &#039;&#039;&#039;Refined [[OTA | Original Total Annihilation]]:&#039;&#039;&#039; BA&#039;s lineage traces back to fan mods of the original Total Annihilation. 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; Balanced Annihilation 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;
Balanced Annihilation mod started as a fork of [[Absolute Annihilation]] 2.23 in the end of 2006. The current maintainer is ShoX. The previous maintainers, who shouldn&#039;t be forgotten, were [teh]Decay, Floris, [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7229 Silentwings], [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5958 Beherith], [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7403 Niobium], [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=4460 TheFatController] and [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=326 NOiZE].&lt;br /&gt;
&lt;br /&gt;
===Legal===&lt;br /&gt;
Parts of this mod originate from non-free sources. However, there is an ongoing attempt to find and replace units&#039; models with free ones. [https://springrts.com/phpbb/viewtopic.php?f=44&amp;amp;t=30537 BA Reloaded]&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>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Balanced_Annihilation&amp;diff=2459</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=2459"/>
		<updated>2019-05-24T07:25:49Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Legal */&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;
[[Image:BA.gif|very epic tmp img of BA]]&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* [https://balancedannihilation.com/ Official BA website]&lt;br /&gt;
* [https://springrts.com/phpbb/viewforum.php?f=44 BA subforum]&lt;br /&gt;
* [https://github.com/Balanced-Annihilation/Balanced-Annihilation Game Source Repository]&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
Balanced Annihilation is the long-term most popular game based at the Spring engine.&lt;br /&gt;
It&#039;s based at three basic principles:&lt;br /&gt;
* &#039;&#039;&#039;Refined [[OTA | Original Total Annihilation]]:&#039;&#039;&#039; BA&#039;s lineage traces back to fan mods of the original Total Annihilation. 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; Balanced Annihilation 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;
Balanced Annihilation mod started as a fork of [[Absolute Annihilation]] 2.23 in the end of 2006. [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=5958 Beherith] &amp;amp; [teh]Decay and Floris are the current BA maintainers. The previous maintainers, who shouldn&#039;t be forgotten, were [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7403 Niobium], [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=7229 Silentwings], [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=4460 TheFatController] and [https://springrts.com/phpbb/memberlist.php?mode=viewprofile&amp;amp;u=326 NOiZE].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Legal===&lt;br /&gt;
Parts of this mod originate from non-free sources. However, there is an ongoing attempt to find and replace units&#039; models with free ones. [https://springrts.com/phpbb/viewtopic.php?f=44&amp;amp;t=30537 BA Reloaded]&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>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Callins&amp;diff=10805</id>
		<title>Lua:Callins</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Callins&amp;diff=10805"/>
		<updated>2019-05-10T13:09:24Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: move hint about drawing callins to avoid the implication that Update is the &amp;quot;best&amp;quot; place for calcs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lua Callins =&lt;br /&gt;
This page is future looking to unified widget/gadget (aka &amp;quot;addon&amp;quot;) handler, which may yet be some way off, c.f. the [https://github.com/spring/spring/blob/ebb704e008f6ea645947d07be1cfcc272af0428f/doc/changelog.txt#L71 changelog].&lt;br /&gt;
&lt;br /&gt;
Related Sourcecode :&lt;br /&gt;
[https://github.com/spring/spring/blob/d9b3927a528a876b9ab4042771e82b050267572a/rts/Lua/LuaHandle.cpp https://github.com/spring/spring/rts/Lua/LuaHandle.cpp]&lt;br /&gt;
&lt;br /&gt;
For now, to use these addons in a widget, replace addon with widget and, for a gadget, replace addon with gadget. For example,&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    function widget:UnitCreated(unitID, unitDefID, unitTeam, builderID)&lt;br /&gt;
        ...  &lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some functions may differ between (synced) gadget and widgets; those are in the [[#Synced_-_Unsynced_Shared]] section. Essentially the reason is that all information should be available to synced (game logic controlling) gadgets, but restricted to unsynced gadget/widget (e.g. information about an enemy unit only detected via radar and not yet in LOS). In such cases the full (synced) param list is documented.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: maroon;&amp;quot;&amp;gt;&#039;&#039;&#039;Attention:&#039;&#039;&#039;&amp;lt;/span&amp;gt; some callins will only work on the unsynced portion of the gadget. Due to the type-unsafe nature of lua parsing, those callins not firing up might be hard to trace. This document will be continuously updated to properly alert about those situations.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Initialize&lt;br /&gt;
|info = Called when the addon is (re)loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Shutdown&lt;br /&gt;
|info = Called when the addon or the game is shutdown.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unsynced Only ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DefaultCommand&lt;br /&gt;
|args = type, id&lt;br /&gt;
|return = {{type|number}} cmdID&lt;br /&gt;
|info = Used to set the default command when a unit is selected. First parameter is the type of the object pointed at (either &amp;quot;unit or &amp;quot;feature&amp;quot;) and the second is its {{var|unitID}} or {{var|featureID}} respectively. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandNotify&lt;br /&gt;
|args = cmdID, cmdParams, cmdOptions&lt;br /&gt;
|return = {{type|bool}} removeCmd&lt;br /&gt;
|info = Called when a command is issued. Returning {{value|true}} deletes the command and does not send it through the network.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandsChanged&lt;br /&gt;
|args = None&lt;br /&gt;
|return = ?&lt;br /&gt;
|info = Called when the command descriptions changed, e.g. when selecting or deselecting a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = WorldTooltip&lt;br /&gt;
|args = ttType, data1, data2, data3&lt;br /&gt;
|return = {{type|string}} newTooltip&lt;br /&gt;
|info = The parameters can be {{value|&amp;quot;unit&amp;quot;}}, {{var|unitID}}; {{value|&amp;quot;feature&amp;quot;}}, {{var|featureID}}; {{value|&amp;quot;ground&amp;quot;}}, {{var|posX}}, {{var|posY}}, {{var|posZ}} or {{value|&amp;quot;selection&amp;quot;}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnsyncedHeightMapUpdate&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = Called when the unsynced copy of the height-map is altered.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameProgress&lt;br /&gt;
|args = serverFrameNum&lt;br /&gt;
|info = Called every 60 frames, calculating delta between GameFrame and GameProgress. Can give an ETA about catching up with simulation for mid-game join players.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameSetup&lt;br /&gt;
|args =  state, ready, playerStates&lt;br /&gt;
|return = {{type|bool}} success, {{type|bool}} newReady&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = SunChanged&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AddConsoleLine&lt;br /&gt;
|args = msg, priority&lt;br /&gt;
|info = Called when text is entered into the console (e.g. Spring.Echo).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvSkirmishAIMessage&lt;br /&gt;
|args = aiTeam, dataStr&lt;br /&gt;
|return = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvFromSynced&lt;br /&gt;
|args = ...&lt;br /&gt;
|info = Receives data sent via [[Lua_System#Synced|SendToUnsynced]] callout.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Save&lt;br /&gt;
|args = zip&lt;br /&gt;
|info = Called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. See [[Lua_SaveLoad#Save_.28_zip_.29_-.3E_nil|Lua_SaveLoad]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = LoadProgress&lt;br /&gt;
|args = message, replaceLastLine&lt;br /&gt;
|info = Only available to LuaIntro.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GroupChanged&lt;br /&gt;
|args = groupID&lt;br /&gt;
|info = Called when a unit is added to or removed from a control group. Currently implemented for widgets only.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ConfigureLayout&lt;br /&gt;
|args = ???&lt;br /&gt;
|return = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Input ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = IsAbove&lt;br /&gt;
|args = x, y&lt;br /&gt;
|return = {{type|bool}} isAbove&lt;br /&gt;
|info = Called every Update. Must return {{value|true}} for {{name|Mouse*}} events and {{name|GetToolTip}} to be called.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GetTooltip&lt;br /&gt;
|args = x, y&lt;br /&gt;
|return = {{type|string}} tooltip&lt;br /&gt;
|info = Called when {{name|IsAbove}} returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = KeyPress&lt;br /&gt;
|args = key, mods, isRepeat&lt;br /&gt;
|return = {{type|bool}} becomeOwner&lt;br /&gt;
|info = Called repeatedly when a key is pressed down. If you want an action to occur only once check for {{var|1=isRepeat == {{value|false}}}}. The {{var|mods}} parameter is a {{type|table}}, with keys {{value|&amp;quot;alt&amp;quot;}}, {{value|&amp;quot;ctrl&amp;quot;}}, {{value|&amp;quot;meta&amp;quot;}} and {{value|&amp;quot;shift&amp;quot;}} each having a boolean value. Return {{value|true}} if you don&#039;t want other callins or the engine to also receive this keypress. A list of key codes can be seen at the [https://wiki.libsdl.org/SDLKeycodeLookup SDL wiki].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = KeyRelease&lt;br /&gt;
|args = key&lt;br /&gt;
|return = {{type|bool}}&lt;br /&gt;
|info = Called when the key is released.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TextInput&lt;br /&gt;
|args = utf8char&lt;br /&gt;
|info = Called whenever a key press results in text input. Introduced in 97.0.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = JoystickEvent&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MousePress&lt;br /&gt;
|args = x, y, button&lt;br /&gt;
|return = {{type|bool}} becomeMouseOwner&lt;br /&gt;
|info = Called when a mouse button is pressed. The {{var|button}} parameter supports up to 7 buttons. Must return {{value|true}} for {{name|MouseRelease}} and other functions to be called.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseRelease&lt;br /&gt;
|args = x, y, button&lt;br /&gt;
|return = bool becomeMouseOwner&lt;br /&gt;
|info = Called when a mouse button is released. Please note that in order to have Spring call {{name|MouseRelease}}, you need to have a {{name|MousePress}} call-in in the same addon that returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseWheel&lt;br /&gt;
|args = up, value&lt;br /&gt;
|info = Called when the mouse wheel is moved. The parameters indicate the direction and amount of travel.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseMove&lt;br /&gt;
|args = x, y, dx, dy, button&lt;br /&gt;
|info = Called when the mouse is moved. The {{var|dx}} and {{var|dy}} parameters indicate the distance travelled, whereas the first two indicate the final position.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Players ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerChanged&lt;br /&gt;
|args = playerID&lt;br /&gt;
|info = Called whenever a player&#039;s status changes e.g. becoming a spectator.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerAdded&lt;br /&gt;
|args = playerID&lt;br /&gt;
|info = Called whenever a new player joins the game.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerRemoved&lt;br /&gt;
|args = playerID, reason&lt;br /&gt;
|info = Called whenever a player is removed from the game.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Downloads ===&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadStarted&lt;br /&gt;
|args = id&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download is started via [[Lua_VFS#Archives|VFS.DownloadArchive]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadFinished&lt;br /&gt;
|args = id&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download finishes successfully.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadFailed&lt;br /&gt;
|args = id, errorID&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download fails to complete.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadProgress&lt;br /&gt;
|args = id, downloaded, total&lt;br /&gt;
|info = Called incrementally during a [[Pr-downloader]] download.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Drawing ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ViewResize&lt;br /&gt;
|args = viewSizeX, viewSizeY&lt;br /&gt;
|info = Called whenever the window is resized.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Update&lt;br /&gt;
|args = dt&lt;br /&gt;
|info = Called for every draw frame (including when the game is paused) and at least once per sim frame except when catching up. The parameter is the time since the last update. }}&lt;br /&gt;
&lt;br /&gt;
=== Draw* Functions ===&lt;br /&gt;
Inside the Draw* functions, you can use the [[Lua_OpenGL_Api | Lua OpenGL Api]] to draw graphics.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Avoid doing heavy calculations inside these callins; ideally, do the calculations elsewhere and use Draw callins only for drawing.&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGenesis&lt;br /&gt;
|info = Doesn&#039;t render to screen! Use this callin to update textures, shaders, etc. Also available to LuaMenu.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldPreParticles&lt;br /&gt;
|info = ??? {{new|104.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldPreUnit&lt;br /&gt;
|info = Spring draws units, features, some water types, cloaked units, and the sun.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorld&lt;br /&gt;
|info = Spring draws command queues, &#039;map stuff&#039;, and map marks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldShadow&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldReflection&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldRefraction&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPreForward&lt;br /&gt;
|info = Runs at the start of the forward pass when a custom map shader has been assigned via [[Lua_UnsyncedCtrl#Map|{{name|Spring.SetMapShader}}]] (convenient for setting uniforms).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPreDeferred&lt;br /&gt;
|info = Runs at the start of the deferred pass when a custom map shader has been assigned via [[Lua_UnsyncedCtrl#Map|{{name|Spring.SetMapShader}}]] (convenient for setting uniforms).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPostDeferred&lt;br /&gt;
|info = This runs at the end of its respective deferred pass and allows proper frame compositing (with ground flashes/decals/foliage/etc, which are drawn between it and [[#API:DrawWorldPreUnit|{{name|DrawWorldPreUnit}}]]) via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawUnitsPostDeferred&lt;br /&gt;
|info = Runs at the end of the unit deferred pass to inform Lua code it should make use of the {{value|$model_gbuffer_*}} textures before another pass overwrites them (and to allow proper blending with e.g. cloaked objects which are drawn between these events and [[#API:DrawWorld|{{name|DrawWorld}}]] via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]]). N.B. The *PostDeferred events are only sent (and only have a real purpose) if forward drawing is disabled.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawFeaturesPostDeferred&lt;br /&gt;
|info = Runs at the end of the feature deferred pass to inform Lua code it should make use of the {{value|$model_gbuffer_*}} textures before another pass overwrites them (and to allow proper blending with e.g. cloaked objects which are drawn between these events and [[#API:DrawWorld|{{name|DrawWorld}}]] via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]]). N.B. The *PostDeferred events are only sent (and only have a real purpose) if forward drawing is disabled.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreen&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = ??? Also available to LuaMenu.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreenEffects&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = Where {{var|vsx}}, {{var|vsy}} are screen coordinates.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreenPost&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = {{new|104.0}} Similar to {{name|DrawScreenEffects}}, this can be used to alter the contents of a frame after it has been completely rendered (i.e. World, MiniMap, Menu, UI).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawLoadScreen&lt;br /&gt;
|info = {{new|95.0}} Only available to LuaIntro, draws custom load screens.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawInMinimap&lt;br /&gt;
|args = sx, sy&lt;br /&gt;
|info = Where {{var|sx}}, {{var|sy}} are values relative to the minimap&#039;s position and scale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawInMinimapBackground&lt;br /&gt;
|args = sx, sy&lt;br /&gt;
|info = Where {{var|sx}}, {{var|sy}} are values relative to the minimap&#039;s position and scale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Custom Object Rendering ===&lt;br /&gt;
For the following calls {{var|drawMode}} can be one of the following, {{var|1=notDrawing = {{value|0}}}}, {{var|1=normalDraw = {{value|1}}}}, {{var|1=shadowDraw = {{value|2}}}}, {{var|1=reflectionDraw = {{value|3}}}}, {{var|1=refractionDraw = {{value|4}}}}, and finally {{var|1=gameDeferredDraw = {{value|5}}}} which was added in 102.0.&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawUnit&lt;br /&gt;
|args = unitID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of units, [[Lua_UnitRendering#Lua.27s_DrawXYZ-Callin|enabled here]].	&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawFeature&lt;br /&gt;
|args = unitID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of features, [[Lua_UnitRendering#Lua.27s_DrawXYZ-Callin|enabled here]].	&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawShield&lt;br /&gt;
|args = unitID, weaponID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of [[Gamedev:WeaponDefs#Shield_(WeaponType)|shields]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawProjectile&lt;br /&gt;
|args = projectileID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of weapon (&amp;amp; other) projectiles.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Unsynced Menu Only ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowDraw&lt;br /&gt;
|return = {{type|bool}} allowDraw&lt;br /&gt;
|info = Enables Draw{Genesis,Screen,ScreenPost} callins if {{value|true}} is returned, otherwise they are called once every 30 seconds. Only active when a game isn&#039;t running.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ActivateMenu&lt;br /&gt;
|info = Called whenever LuaMenu is on with no game loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ActivateGame&lt;br /&gt;
|info = Called whenever LuaMenu is on with a game loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Synced - Unsynced Shared ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GotChatMsg&lt;br /&gt;
|args = msg, player&lt;br /&gt;
|info = Called when a player issues a UI command e.g. types {{var|/foo}} or {{var|/luarules foo}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Game ===&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameID&lt;br /&gt;
|args = gameID&lt;br /&gt;
|info = Called once to deliver the {{var|gameID}}. As of 101.0+ the string is encoded in hex.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GamePaused&lt;br /&gt;
|info = Called when the game is paused.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameOver&lt;br /&gt;
|args = winningAllyTeams&lt;br /&gt;
|info = The parameter is a {{type|table}} list of winning allyTeams, if empty the game result was undecided (like when dropping from an host).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameFrame&lt;br /&gt;
|args = frame&lt;br /&gt;
|info = Called for every game simulation frame (30 per second). Starts at frame {{value|0}} in 101.0+ and {{value|1}} in previous versions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GamePreload&lt;br /&gt;
|info = Called before the 0 gameframe. From 104.0 onwards, will not be called when a saved game is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameStart&lt;br /&gt;
|info = Called upon the start of the game. From 104.0 onwards, will not be called when a saved game is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Teams ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TeamChanged&lt;br /&gt;
|args = teamID&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TeamDied&lt;br /&gt;
|args = teamID&lt;br /&gt;
|info = Called when a team dies (see [[Lua_SyncedCtrl#Game_End|Spring.KillTeam]]).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Units ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCreated&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, builderID&lt;br /&gt;
|info = Called at the moment the unit is created.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFinished&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called at the moment the unit is completed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFromFactory&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, factID, factDefID, userOrders&lt;br /&gt;
|info = Called when a factory finishes construction of a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitReverseBuilt&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a living unit becomes a nanoframe again.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitGiven&lt;br /&gt;
|args = unitID, unitDefID, newTeam, oldTeam&lt;br /&gt;
|info = Called when a unit is transferred between teams. This is called after {{name|UnitTaken}} and in that moment unit is assigned to the &#039;&#039;&#039;newTeam&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitTaken&lt;br /&gt;
|args = unitID, unitDefID, oldTeam, newTeam&lt;br /&gt;
|info = Called when a unit is transferred between teams. This is called before {{name|UnitGiven}} and in that moment unit is still assigned to the &#039;&#039;&#039;oldTeam&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDamaged&lt;br /&gt;
|args =  unitID, unitDefID, unitTeam, damage, paralyzer, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a unit is damaged (after {{name|UnitPreDamaged}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDestroyed&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a unit is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RenderUnitDestroyed&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called just before a unit is invalid, after it finishes its death animation. {{new|101.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitStunned&lt;br /&gt;
|args =  unitID, unitDefID, unitTeam, stunned&lt;br /&gt;
|info = Called when a unit changes its stun status. {{new|99.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitUnitCollision&lt;br /&gt;
|args = colliderID, collideeID&lt;br /&gt;
|info = Called when two units collide. Both units must be registered with [[Lua_System#Synced|Script.SetWatchUnit]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFeatureCollision&lt;br /&gt;
|args = colliderID, collideeID&lt;br /&gt;
|info = Called when a unit collides with a feature. The unit must be registered with [[Lua_System#Synced|Script.SetWatchUnit]] and the feature registered with [[Lua_System#Synced|Script.SetWatchFeature]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCommand&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag&lt;br /&gt;
|info = Called after when a unit accepts a command, after {{name|AllowCommand}} returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCmdDone&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag&lt;br /&gt;
|info = Called when a unit completes a command.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLoaded&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, transportID, transportTeam&lt;br /&gt;
|info = Called when a unit is loaded by a transport.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitUnloaded&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, transportID, transportTeam&lt;br /&gt;
|info = Called when a unit is unloaded by a transport.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitExperience&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, experience, oldExperience&lt;br /&gt;
|info = Called when a unit gains experience greater or equal to the minimum limit set by calling [[Lua_SyncedCtrl#Other|Spring.SetExperienceGrade]]. Should be called more reliably with small values of experience grade in 104.0+.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitIdle&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit is idle (empty command queue).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCloaked&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit cloaks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDecloaked&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit decloaks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitMoved&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented in base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitMoveFailed&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented in base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = StockpileChanged&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, weaponNum, oldCount, newCount&lt;br /&gt;
|info = Called when a units stockpile of weapons increases or decreases. See {{xtaglink|Gamedev:WeaponDefs|stockpile}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredLos&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit enters LOS of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftLos&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit leaves LOS of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredRadar&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit enters radar of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftRadar&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit leaves radar of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredAir&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftAir&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredWater&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftWater&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitSeismicPing&lt;br /&gt;
|args = x, y, z, strength, allyTeam, unitID, unitDefID&lt;br /&gt;
|info = Called when a unit emits a seismic ping. See {{xtaglink|Gamedev:UnitDefs|seismicSignature}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureCreated&lt;br /&gt;
|args = featureID, allyTeamID&lt;br /&gt;
|info = Called when a feature is created.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureDamaged&lt;br /&gt;
|args =  featureID, featureDefID, featureTeam, damage, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a feature is damaged.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureDestroyed&lt;br /&gt;
|args = featureID, allyTeamID&lt;br /&gt;
|info = Called when a feature is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureMoved&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Projectiles ===&lt;br /&gt;
The following Callins are only called for weaponDefIDs registered via [[Lua_System#Synced|Script.SetWatchWeapon]].&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ProjectileCreated&lt;br /&gt;
|args = proID, proOwnerID, weaponDefID&lt;br /&gt;
|info = Called when the projectile is created. Note that {{var|weaponDefID}} is missing if the projectile is spawned as part of a burst, but [[Lua_SyncedRead#Projectiles|Spring.GetProjectileDefID]] and [[Lua_SyncedRead#Projectiles|Spring.GetProjectileName]] still work in callin scope using {{var|proID}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ProjectileDestroyed&lt;br /&gt;
|args = proID&lt;br /&gt;
|info = Called when the projectile is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Synced Only ==&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandFallback&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOptions, cmdTag&lt;br /&gt;
|return = {{type|bool}} used, {{type|bool}} finished&lt;br /&gt;
|info = Called when the unit reaches an unknown command in its queue (i.e. one not handled by the engine). If no addon returns {{var|used}} as {{value|true}} the command is dropped, if an addon returns {{value|true}}, {{value|true}} the command is removed because it&#039;s done, with {{value|true}}, {{value|false}} it&#039;s kept in the queue and {{name|CommandFallback}} gets called again on the next slowupdate.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowCommand&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOptions, cmdTag, synced&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called when the command is given, before the unit&#039;s queue is altered. The return value is whether it should be let into the queue. The queue remains untouched when a command is blocked, whether it would be queued or replace the queue.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitCreation&lt;br /&gt;
|args = unitDefID, builderID, builderTeam, x, y, z, facing&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before unit is created, the boolean return value determines whether or not the creation is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitTransfer&lt;br /&gt;
|args = unitID, unitDefID, oldTeam, newTeam, capture&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a unit is transferred to a different team, the boolean return value determines whether or not the transfer is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitBuildStep&lt;br /&gt;
|args = builderID, builderTeam, unitID, unitDefID, part&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a unit progresses its build percentage, the boolean return value determines whether or not the build makes progress.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowFeatureCreation&lt;br /&gt;
|args = featureDefID, teamID, x, y, z&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before feature is created, the boolean return value determines whether or not the creation is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowFeatureBuildStep&lt;br /&gt;
|args = builderID, builderTeam, featureID, featureDefID, part&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a feature progresses its build percentage, the boolean return value determines whether or not the progress change is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowResourceLevel&lt;br /&gt;
|args = teamID, res, level&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called when a team sets the sharing level of a resource, the boolean return value determines whether or not the sharing level is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowResourceTransfer&lt;br /&gt;
|args = oldTeamID, newTeamID, res, amount&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before resources are transferred between players, the boolean return value determines whether or not the transfer is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowStartPosition&lt;br /&gt;
|args = playerID, teamID, readyState, clampedX, clampedY, clampedZ, rawX, rawY, rawZ&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = {{var|clamped{X,Y,Z}}} are the coordinates clamped into start-boxes, {{var|raw}} is where player tried to place their marker. The {{var|readyState}} can be any one of &lt;br /&gt;
* {{value|0}} - player picked a position, &lt;br /&gt;
* {{value|1}} - player clicked ready, &lt;br /&gt;
* {{value|2}} - player pressed ready OR  the game was force-started (player did not click ready, but is now forcibly readied) or &lt;br /&gt;
* {{value|3}} - the player failed to load. &lt;br /&gt;
* {{new|95.0}} the default &#039;failed to choose&#039; start-position is the north-west point of their startbox, or (0,0,0) if they do not have a startbox. &lt;br /&gt;
NB: The order of the parameters changed with the addition of {{var|teamID}} in 104.0. Previouly it was:&lt;br /&gt;
{{var|clampedX, clampedY, clampedZ, playerID, readyState, rawX, rawY, rawZ}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowDirectUnitControl&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, playerID&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Determines if this unit can be controlled directly in FPS view.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponTargetCheck&lt;br /&gt;
|args = attackerID, attackerWeaponNum, attackerWeaponDefID&lt;br /&gt;
|return = {{type|bool}} allowCheck, {{type|bool}} ignoreCheck&lt;br /&gt;
|info = Determines if this weapon can automatically generate targets itself. See also {{xtaglink|Gamedev:WeaponDefs|commandFire}} weaponDef tag. The {{var|ignoreCheck}} return value was added in 99.0 to allow ignoring the callin i.e. running normal engine check for this weapon.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponTarget&lt;br /&gt;
|args = attackerID, targetID, attackerWeaponNum, attackerWeaponDefID, defPriority&lt;br /&gt;
|return = {{type|bool}} allowed, {{type|number}} newPriority&lt;br /&gt;
|info = Controls blocking of a specific target from being considered during a weapon&#039;s periodic auto-targeting sweep. The second return value is the new priority for this target (if you don&#039;t want to change it, return {{var|defPriority}}). Lower priority targets are targeted first.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponInterceptTarget&lt;br /&gt;
|args = interceptorUnitID, interceptorWeaponID, targetProjectileID&lt;br /&gt;
|return = {{type|bool}} allowed&lt;br /&gt;
|info = Controls blocking of a specific intercept target from being considered during an {{xtaglink|Gamedev:WeaponDefs|interceptor}} weapon&#039;s periodic auto-targeting sweep. Only called for {{var|weaponDefIDs}} registered via [[Lua_System#Synced|Script.SetWatchWeapon]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowBuilderHoldFire&lt;br /&gt;
|args = unitID, unitDefID, action&lt;br /&gt;
|return = {{type|bool}} actionAllowed&lt;br /&gt;
|info = {{new|98.0}} {{Sourcelinkhash|5a82d750b89e72024bb0bb62cf05ea257737e0ac}}   Called when a construction unit wants to &amp;quot;use his nano beams&amp;quot;.&amp;lt;br&amp;gt;{{var|action}} is one of following:&lt;br /&gt;
* {{value|-1}} Build&lt;br /&gt;
* {{value|CMD.REPAIR}} Repair&lt;br /&gt;
* {{value|CMD.RECLAIM}} Reclaim&lt;br /&gt;
* {{value|CMD.RESTORE}} Restore&lt;br /&gt;
* {{value|CMD.RESURRECT}} Resurrect&lt;br /&gt;
* {{value|CMD.CAPTURE}} Capture&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Explosion&lt;br /&gt;
|args = weaponDefID, px, py, pz, AttackerID, ProjectileID&lt;br /&gt;
|return = {{type|bool}} noGfx&lt;br /&gt;
|info = Called when an explosion occurs. If it returns {{value|true}} then no graphical effects are drawn by the engine for this explosion.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TerraformComplete&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, buildUnitID, buildUnitDefID, buildUnitTeam&lt;br /&gt;
|return = {{type|bool}} stop&lt;br /&gt;
|info = Called when pre-building terrain levelling terraforms are completed (c.f. {{xtaglink|Gamedev:UnitDefs|levelGround}}). If the return value is {{value|true}} the current build order is terminated.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MoveCtrlNotify&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, data&lt;br /&gt;
|return = {{type|bool}} moveCtrlComplete&lt;br /&gt;
|info = Enable both [[Lua_MoveCtrl#Options|Spring.MoveCtrl.SetCollideStop]] and [[Lua_MoveCtrl#Options|Spring.MoveCtrl.SetTrackGround]] to enable this call-in, data was supposed to indicate the type of notification but currently never has a value other than {{value|1}} (&amp;quot;unit hit the ground&amp;quot;). The return value determines whether or not the unit should remain script-controlled ({{value|false}}) or return to engine controlled movement ({{value|true}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvLuaMsg&lt;br /&gt;
|args = msg, playerID&lt;br /&gt;
|info = Receives messages from unsynced sent via [[Lua_UnsyncedCtrl#SendLuaMessage|Spring.SendLuaRulesMsg]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Load&lt;br /&gt;
|args = zip&lt;br /&gt;
|info = Called after {{name|GamePreload}} and before {{name|GameStart}}. See [[Lua_SaveLoad#Load_.28_zip_.29_-.3E_nil|Lua_SaveLoad]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Damage Controllers ===&lt;br /&gt;
For the following callins, in addition to being a regular weapon, {{var|weaponDefID}} may be one of the following:&lt;br /&gt;
* {{value|-1}} - debris collision, also default of [[Lua_SyncedCtrl#Unit_Control|Spring.AddUnitDamage]]&lt;br /&gt;
* {{value|-2}} - ground collision&lt;br /&gt;
* {{value|-3}} - object collision&lt;br /&gt;
* {{value|-4}} - fire damage&lt;br /&gt;
* {{value|-5}} - water damage&lt;br /&gt;
* {{value|-6}} - kill damage&lt;br /&gt;
* {{value|-7}} - crush damage&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitPreDamaged&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, damage, paralyzer, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|return = {{type|number}} newDamage, {{type|number}} impulseMult&lt;br /&gt;
|info = Called before damage is applied to the unit, allows fine control over how much damage and [http://en.wikipedia.org/wiki/Impulse_(physics) impulse] is applied.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ShieldPreDamaged&lt;br /&gt;
|I recommend looking up the CallIns in Sourcecode, because the Lua-Documentation, generated from the lua handle of them is seriously flawed and not regenerated.&lt;br /&gt;
|Lua-Handler documented from version&lt;br /&gt;
|args = proID, proOwnerID, shieldEmitterWeaponNum, shieldCarrierUnitID, bounceProjectile, beamEmitterWeaponNum, beamEmitterUnitID, startX, startY, startZ, hitX, hitY, hitZ&lt;br /&gt;
|https://github.com/spring/spring/blob/d085e297416bd963ec25eaa3dbf0796ba22a3582/rts/Lua/LuaHandleSynced.h#L106&lt;br /&gt;
|Actual CallIn: &lt;br /&gt;
|args = proID, shieldCarrier, boolBounceProjectile, beamEmitterWeaponNum, beamEmitterUnitID, startX, startY, startZ, hitX, hitY, hitZ&lt;br /&gt;
|return = {{type|bool}} handleCollision&lt;br /&gt;
|info = Called before any engine shield-vs-projectile logic executes. If the return value is {{value|true}} the gadget handles the collision event and the engine does not remove the projectile. If the weapon is a hitscan type ([[Gamedev:WeaponDefs#Tag:weaponType|BeamLaser]] or [[Gamedev:WeaponDefs#Tag:weaponType|LightningCanon]]) then {{var|proID}} is {{value|nil}} and {{var|beamEmitterWeaponNum}} and {{var|beamEmitterUnitID}} are populated instead. The start and hit position arguments are provided from 104.0 onwards.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeaturePreDamaged&lt;br /&gt;
|args = featureID, featureDefID, featureTeam, damage, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|return = {{type|number}} newDamage, {{type|number}} impulseMult&lt;br /&gt;
|info = Called before damage is applied to the feature, allows fine control over how much damage and [http://en.wikipedia.org/wiki/Impulse_(physics) impulse] is applied.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Lua]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Callins&amp;diff=10804</id>
		<title>Lua:Callins</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Callins&amp;diff=10804"/>
		<updated>2019-05-10T13:06:43Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Drawing */ more clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lua Callins =&lt;br /&gt;
This page is future looking to unified widget/gadget (aka &amp;quot;addon&amp;quot;) handler, which may yet be some way off, c.f. the [https://github.com/spring/spring/blob/ebb704e008f6ea645947d07be1cfcc272af0428f/doc/changelog.txt#L71 changelog].&lt;br /&gt;
&lt;br /&gt;
Related Sourcecode :&lt;br /&gt;
[https://github.com/spring/spring/blob/d9b3927a528a876b9ab4042771e82b050267572a/rts/Lua/LuaHandle.cpp https://github.com/spring/spring/rts/Lua/LuaHandle.cpp]&lt;br /&gt;
&lt;br /&gt;
For now, to use these addons in a widget, replace addon with widget and, for a gadget, replace addon with gadget. For example,&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    function widget:UnitCreated(unitID, unitDefID, unitTeam, builderID)&lt;br /&gt;
        ...  &lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some functions may differ between (synced) gadget and widgets; those are in the [[#Synced_-_Unsynced_Shared]] section. Essentially the reason is that all information should be available to synced (game logic controlling) gadgets, but restricted to unsynced gadget/widget (e.g. information about an enemy unit only detected via radar and not yet in LOS). In such cases the full (synced) param list is documented.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: maroon;&amp;quot;&amp;gt;&#039;&#039;&#039;Attention:&#039;&#039;&#039;&amp;lt;/span&amp;gt; some callins will only work on the unsynced portion of the gadget. Due to the type-unsafe nature of lua parsing, those callins not firing up might be hard to trace. This document will be continuously updated to properly alert about those situations.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Initialize&lt;br /&gt;
|info = Called when the addon is (re)loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Shutdown&lt;br /&gt;
|info = Called when the addon or the game is shutdown.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unsynced Only ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DefaultCommand&lt;br /&gt;
|args = type, id&lt;br /&gt;
|return = {{type|number}} cmdID&lt;br /&gt;
|info = Used to set the default command when a unit is selected. First parameter is the type of the object pointed at (either &amp;quot;unit or &amp;quot;feature&amp;quot;) and the second is its {{var|unitID}} or {{var|featureID}} respectively. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandNotify&lt;br /&gt;
|args = cmdID, cmdParams, cmdOptions&lt;br /&gt;
|return = {{type|bool}} removeCmd&lt;br /&gt;
|info = Called when a command is issued. Returning {{value|true}} deletes the command and does not send it through the network.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandsChanged&lt;br /&gt;
|args = None&lt;br /&gt;
|return = ?&lt;br /&gt;
|info = Called when the command descriptions changed, e.g. when selecting or deselecting a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = WorldTooltip&lt;br /&gt;
|args = ttType, data1, data2, data3&lt;br /&gt;
|return = {{type|string}} newTooltip&lt;br /&gt;
|info = The parameters can be {{value|&amp;quot;unit&amp;quot;}}, {{var|unitID}}; {{value|&amp;quot;feature&amp;quot;}}, {{var|featureID}}; {{value|&amp;quot;ground&amp;quot;}}, {{var|posX}}, {{var|posY}}, {{var|posZ}} or {{value|&amp;quot;selection&amp;quot;}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnsyncedHeightMapUpdate&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = Called when the unsynced copy of the height-map is altered.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameProgress&lt;br /&gt;
|args = serverFrameNum&lt;br /&gt;
|info = Called every 60 frames, calculating delta between GameFrame and GameProgress. Can give an ETA about catching up with simulation for mid-game join players.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameSetup&lt;br /&gt;
|args =  state, ready, playerStates&lt;br /&gt;
|return = {{type|bool}} success, {{type|bool}} newReady&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = SunChanged&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AddConsoleLine&lt;br /&gt;
|args = msg, priority&lt;br /&gt;
|info = Called when text is entered into the console (e.g. Spring.Echo).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvSkirmishAIMessage&lt;br /&gt;
|args = aiTeam, dataStr&lt;br /&gt;
|return = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvFromSynced&lt;br /&gt;
|args = ...&lt;br /&gt;
|info = Receives data sent via [[Lua_System#Synced|SendToUnsynced]] callout.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Save&lt;br /&gt;
|args = zip&lt;br /&gt;
|info = Called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. See [[Lua_SaveLoad#Save_.28_zip_.29_-.3E_nil|Lua_SaveLoad]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = LoadProgress&lt;br /&gt;
|args = message, replaceLastLine&lt;br /&gt;
|info = Only available to LuaIntro.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GroupChanged&lt;br /&gt;
|args = groupID&lt;br /&gt;
|info = Called when a unit is added to or removed from a control group. Currently implemented for widgets only.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ConfigureLayout&lt;br /&gt;
|args = ???&lt;br /&gt;
|return = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Input ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = IsAbove&lt;br /&gt;
|args = x, y&lt;br /&gt;
|return = {{type|bool}} isAbove&lt;br /&gt;
|info = Called every Update. Must return {{value|true}} for {{name|Mouse*}} events and {{name|GetToolTip}} to be called.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GetTooltip&lt;br /&gt;
|args = x, y&lt;br /&gt;
|return = {{type|string}} tooltip&lt;br /&gt;
|info = Called when {{name|IsAbove}} returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = KeyPress&lt;br /&gt;
|args = key, mods, isRepeat&lt;br /&gt;
|return = {{type|bool}} becomeOwner&lt;br /&gt;
|info = Called repeatedly when a key is pressed down. If you want an action to occur only once check for {{var|1=isRepeat == {{value|false}}}}. The {{var|mods}} parameter is a {{type|table}}, with keys {{value|&amp;quot;alt&amp;quot;}}, {{value|&amp;quot;ctrl&amp;quot;}}, {{value|&amp;quot;meta&amp;quot;}} and {{value|&amp;quot;shift&amp;quot;}} each having a boolean value. Return {{value|true}} if you don&#039;t want other callins or the engine to also receive this keypress. A list of key codes can be seen at the [https://wiki.libsdl.org/SDLKeycodeLookup SDL wiki].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = KeyRelease&lt;br /&gt;
|args = key&lt;br /&gt;
|return = {{type|bool}}&lt;br /&gt;
|info = Called when the key is released.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TextInput&lt;br /&gt;
|args = utf8char&lt;br /&gt;
|info = Called whenever a key press results in text input. Introduced in 97.0.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = JoystickEvent&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MousePress&lt;br /&gt;
|args = x, y, button&lt;br /&gt;
|return = {{type|bool}} becomeMouseOwner&lt;br /&gt;
|info = Called when a mouse button is pressed. The {{var|button}} parameter supports up to 7 buttons. Must return {{value|true}} for {{name|MouseRelease}} and other functions to be called.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseRelease&lt;br /&gt;
|args = x, y, button&lt;br /&gt;
|return = bool becomeMouseOwner&lt;br /&gt;
|info = Called when a mouse button is released. Please note that in order to have Spring call {{name|MouseRelease}}, you need to have a {{name|MousePress}} call-in in the same addon that returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseWheel&lt;br /&gt;
|args = up, value&lt;br /&gt;
|info = Called when the mouse wheel is moved. The parameters indicate the direction and amount of travel.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseMove&lt;br /&gt;
|args = x, y, dx, dy, button&lt;br /&gt;
|info = Called when the mouse is moved. The {{var|dx}} and {{var|dy}} parameters indicate the distance travelled, whereas the first two indicate the final position.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Players ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerChanged&lt;br /&gt;
|args = playerID&lt;br /&gt;
|info = Called whenever a player&#039;s status changes e.g. becoming a spectator.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerAdded&lt;br /&gt;
|args = playerID&lt;br /&gt;
|info = Called whenever a new player joins the game.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerRemoved&lt;br /&gt;
|args = playerID, reason&lt;br /&gt;
|info = Called whenever a player is removed from the game.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Downloads ===&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadStarted&lt;br /&gt;
|args = id&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download is started via [[Lua_VFS#Archives|VFS.DownloadArchive]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadFinished&lt;br /&gt;
|args = id&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download finishes successfully.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadFailed&lt;br /&gt;
|args = id, errorID&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download fails to complete.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadProgress&lt;br /&gt;
|args = id, downloaded, total&lt;br /&gt;
|info = Called incrementally during a [[Pr-downloader]] download.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Drawing ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ViewResize&lt;br /&gt;
|args = viewSizeX, viewSizeY&lt;br /&gt;
|info = Called whenever the window is resized.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Update&lt;br /&gt;
|args = dt&lt;br /&gt;
|info = Called for every draw frame (including when the game is paused) and at least once per sim frame except when catching up. The parameter is the time since the last update. Perform calculations in here and only perform drawing in Draw* callins (listed below). }}&lt;br /&gt;
&lt;br /&gt;
=== Draw* Functions ===&lt;br /&gt;
Inside the Draw* functions, you can use the [[Lua_OpenGL_Api | Lua OpenGL Api]] to draw graphics.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGenesis&lt;br /&gt;
|info = Doesn&#039;t render to screen! Use this callin to update textures, shaders, etc. Also available to LuaMenu.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldPreParticles&lt;br /&gt;
|info = ??? {{new|104.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldPreUnit&lt;br /&gt;
|info = Spring draws units, features, some water types, cloaked units, and the sun.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorld&lt;br /&gt;
|info = Spring draws command queues, &#039;map stuff&#039;, and map marks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldShadow&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldReflection&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldRefraction&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPreForward&lt;br /&gt;
|info = Runs at the start of the forward pass when a custom map shader has been assigned via [[Lua_UnsyncedCtrl#Map|{{name|Spring.SetMapShader}}]] (convenient for setting uniforms).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPreDeferred&lt;br /&gt;
|info = Runs at the start of the deferred pass when a custom map shader has been assigned via [[Lua_UnsyncedCtrl#Map|{{name|Spring.SetMapShader}}]] (convenient for setting uniforms).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPostDeferred&lt;br /&gt;
|info = This runs at the end of its respective deferred pass and allows proper frame compositing (with ground flashes/decals/foliage/etc, which are drawn between it and [[#API:DrawWorldPreUnit|{{name|DrawWorldPreUnit}}]]) via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawUnitsPostDeferred&lt;br /&gt;
|info = Runs at the end of the unit deferred pass to inform Lua code it should make use of the {{value|$model_gbuffer_*}} textures before another pass overwrites them (and to allow proper blending with e.g. cloaked objects which are drawn between these events and [[#API:DrawWorld|{{name|DrawWorld}}]] via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]]). N.B. The *PostDeferred events are only sent (and only have a real purpose) if forward drawing is disabled.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawFeaturesPostDeferred&lt;br /&gt;
|info = Runs at the end of the feature deferred pass to inform Lua code it should make use of the {{value|$model_gbuffer_*}} textures before another pass overwrites them (and to allow proper blending with e.g. cloaked objects which are drawn between these events and [[#API:DrawWorld|{{name|DrawWorld}}]] via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]]). N.B. The *PostDeferred events are only sent (and only have a real purpose) if forward drawing is disabled.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreen&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = ??? Also available to LuaMenu.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreenEffects&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = Where {{var|vsx}}, {{var|vsy}} are screen coordinates.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreenPost&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = {{new|104.0}} Similar to {{name|DrawScreenEffects}}, this can be used to alter the contents of a frame after it has been completely rendered (i.e. World, MiniMap, Menu, UI).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawLoadScreen&lt;br /&gt;
|info = {{new|95.0}} Only available to LuaIntro, draws custom load screens.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawInMinimap&lt;br /&gt;
|args = sx, sy&lt;br /&gt;
|info = Where {{var|sx}}, {{var|sy}} are values relative to the minimap&#039;s position and scale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawInMinimapBackground&lt;br /&gt;
|args = sx, sy&lt;br /&gt;
|info = Where {{var|sx}}, {{var|sy}} are values relative to the minimap&#039;s position and scale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Custom Object Rendering ===&lt;br /&gt;
For the following calls {{var|drawMode}} can be one of the following, {{var|1=notDrawing = {{value|0}}}}, {{var|1=normalDraw = {{value|1}}}}, {{var|1=shadowDraw = {{value|2}}}}, {{var|1=reflectionDraw = {{value|3}}}}, {{var|1=refractionDraw = {{value|4}}}}, and finally {{var|1=gameDeferredDraw = {{value|5}}}} which was added in 102.0.&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawUnit&lt;br /&gt;
|args = unitID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of units, [[Lua_UnitRendering#Lua.27s_DrawXYZ-Callin|enabled here]].	&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawFeature&lt;br /&gt;
|args = unitID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of features, [[Lua_UnitRendering#Lua.27s_DrawXYZ-Callin|enabled here]].	&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawShield&lt;br /&gt;
|args = unitID, weaponID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of [[Gamedev:WeaponDefs#Shield_(WeaponType)|shields]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawProjectile&lt;br /&gt;
|args = projectileID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of weapon (&amp;amp; other) projectiles.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Unsynced Menu Only ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowDraw&lt;br /&gt;
|return = {{type|bool}} allowDraw&lt;br /&gt;
|info = Enables Draw{Genesis,Screen,ScreenPost} callins if {{value|true}} is returned, otherwise they are called once every 30 seconds. Only active when a game isn&#039;t running.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ActivateMenu&lt;br /&gt;
|info = Called whenever LuaMenu is on with no game loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ActivateGame&lt;br /&gt;
|info = Called whenever LuaMenu is on with a game loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Synced - Unsynced Shared ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GotChatMsg&lt;br /&gt;
|args = msg, player&lt;br /&gt;
|info = Called when a player issues a UI command e.g. types {{var|/foo}} or {{var|/luarules foo}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Game ===&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameID&lt;br /&gt;
|args = gameID&lt;br /&gt;
|info = Called once to deliver the {{var|gameID}}. As of 101.0+ the string is encoded in hex.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GamePaused&lt;br /&gt;
|info = Called when the game is paused.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameOver&lt;br /&gt;
|args = winningAllyTeams&lt;br /&gt;
|info = The parameter is a {{type|table}} list of winning allyTeams, if empty the game result was undecided (like when dropping from an host).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameFrame&lt;br /&gt;
|args = frame&lt;br /&gt;
|info = Called for every game simulation frame (30 per second). Starts at frame {{value|0}} in 101.0+ and {{value|1}} in previous versions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GamePreload&lt;br /&gt;
|info = Called before the 0 gameframe. From 104.0 onwards, will not be called when a saved game is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameStart&lt;br /&gt;
|info = Called upon the start of the game. From 104.0 onwards, will not be called when a saved game is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Teams ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TeamChanged&lt;br /&gt;
|args = teamID&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TeamDied&lt;br /&gt;
|args = teamID&lt;br /&gt;
|info = Called when a team dies (see [[Lua_SyncedCtrl#Game_End|Spring.KillTeam]]).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Units ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCreated&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, builderID&lt;br /&gt;
|info = Called at the moment the unit is created.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFinished&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called at the moment the unit is completed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFromFactory&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, factID, factDefID, userOrders&lt;br /&gt;
|info = Called when a factory finishes construction of a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitReverseBuilt&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a living unit becomes a nanoframe again.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitGiven&lt;br /&gt;
|args = unitID, unitDefID, newTeam, oldTeam&lt;br /&gt;
|info = Called when a unit is transferred between teams. This is called after {{name|UnitTaken}} and in that moment unit is assigned to the &#039;&#039;&#039;newTeam&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitTaken&lt;br /&gt;
|args = unitID, unitDefID, oldTeam, newTeam&lt;br /&gt;
|info = Called when a unit is transferred between teams. This is called before {{name|UnitGiven}} and in that moment unit is still assigned to the &#039;&#039;&#039;oldTeam&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDamaged&lt;br /&gt;
|args =  unitID, unitDefID, unitTeam, damage, paralyzer, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a unit is damaged (after {{name|UnitPreDamaged}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDestroyed&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a unit is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RenderUnitDestroyed&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called just before a unit is invalid, after it finishes its death animation. {{new|101.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitStunned&lt;br /&gt;
|args =  unitID, unitDefID, unitTeam, stunned&lt;br /&gt;
|info = Called when a unit changes its stun status. {{new|99.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitUnitCollision&lt;br /&gt;
|args = colliderID, collideeID&lt;br /&gt;
|info = Called when two units collide. Both units must be registered with [[Lua_System#Synced|Script.SetWatchUnit]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFeatureCollision&lt;br /&gt;
|args = colliderID, collideeID&lt;br /&gt;
|info = Called when a unit collides with a feature. The unit must be registered with [[Lua_System#Synced|Script.SetWatchUnit]] and the feature registered with [[Lua_System#Synced|Script.SetWatchFeature]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCommand&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag&lt;br /&gt;
|info = Called after when a unit accepts a command, after {{name|AllowCommand}} returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCmdDone&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag&lt;br /&gt;
|info = Called when a unit completes a command.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLoaded&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, transportID, transportTeam&lt;br /&gt;
|info = Called when a unit is loaded by a transport.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitUnloaded&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, transportID, transportTeam&lt;br /&gt;
|info = Called when a unit is unloaded by a transport.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitExperience&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, experience, oldExperience&lt;br /&gt;
|info = Called when a unit gains experience greater or equal to the minimum limit set by calling [[Lua_SyncedCtrl#Other|Spring.SetExperienceGrade]]. Should be called more reliably with small values of experience grade in 104.0+.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitIdle&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit is idle (empty command queue).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCloaked&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit cloaks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDecloaked&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit decloaks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitMoved&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented in base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitMoveFailed&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented in base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = StockpileChanged&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, weaponNum, oldCount, newCount&lt;br /&gt;
|info = Called when a units stockpile of weapons increases or decreases. See {{xtaglink|Gamedev:WeaponDefs|stockpile}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredLos&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit enters LOS of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftLos&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit leaves LOS of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredRadar&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit enters radar of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftRadar&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit leaves radar of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredAir&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftAir&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredWater&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftWater&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitSeismicPing&lt;br /&gt;
|args = x, y, z, strength, allyTeam, unitID, unitDefID&lt;br /&gt;
|info = Called when a unit emits a seismic ping. See {{xtaglink|Gamedev:UnitDefs|seismicSignature}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureCreated&lt;br /&gt;
|args = featureID, allyTeamID&lt;br /&gt;
|info = Called when a feature is created.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureDamaged&lt;br /&gt;
|args =  featureID, featureDefID, featureTeam, damage, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a feature is damaged.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureDestroyed&lt;br /&gt;
|args = featureID, allyTeamID&lt;br /&gt;
|info = Called when a feature is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureMoved&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Projectiles ===&lt;br /&gt;
The following Callins are only called for weaponDefIDs registered via [[Lua_System#Synced|Script.SetWatchWeapon]].&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ProjectileCreated&lt;br /&gt;
|args = proID, proOwnerID, weaponDefID&lt;br /&gt;
|info = Called when the projectile is created. Note that {{var|weaponDefID}} is missing if the projectile is spawned as part of a burst, but [[Lua_SyncedRead#Projectiles|Spring.GetProjectileDefID]] and [[Lua_SyncedRead#Projectiles|Spring.GetProjectileName]] still work in callin scope using {{var|proID}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ProjectileDestroyed&lt;br /&gt;
|args = proID&lt;br /&gt;
|info = Called when the projectile is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Synced Only ==&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandFallback&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOptions, cmdTag&lt;br /&gt;
|return = {{type|bool}} used, {{type|bool}} finished&lt;br /&gt;
|info = Called when the unit reaches an unknown command in its queue (i.e. one not handled by the engine). If no addon returns {{var|used}} as {{value|true}} the command is dropped, if an addon returns {{value|true}}, {{value|true}} the command is removed because it&#039;s done, with {{value|true}}, {{value|false}} it&#039;s kept in the queue and {{name|CommandFallback}} gets called again on the next slowupdate.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowCommand&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOptions, cmdTag, synced&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called when the command is given, before the unit&#039;s queue is altered. The return value is whether it should be let into the queue. The queue remains untouched when a command is blocked, whether it would be queued or replace the queue.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitCreation&lt;br /&gt;
|args = unitDefID, builderID, builderTeam, x, y, z, facing&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before unit is created, the boolean return value determines whether or not the creation is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitTransfer&lt;br /&gt;
|args = unitID, unitDefID, oldTeam, newTeam, capture&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a unit is transferred to a different team, the boolean return value determines whether or not the transfer is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitBuildStep&lt;br /&gt;
|args = builderID, builderTeam, unitID, unitDefID, part&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a unit progresses its build percentage, the boolean return value determines whether or not the build makes progress.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowFeatureCreation&lt;br /&gt;
|args = featureDefID, teamID, x, y, z&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before feature is created, the boolean return value determines whether or not the creation is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowFeatureBuildStep&lt;br /&gt;
|args = builderID, builderTeam, featureID, featureDefID, part&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a feature progresses its build percentage, the boolean return value determines whether or not the progress change is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowResourceLevel&lt;br /&gt;
|args = teamID, res, level&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called when a team sets the sharing level of a resource, the boolean return value determines whether or not the sharing level is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowResourceTransfer&lt;br /&gt;
|args = oldTeamID, newTeamID, res, amount&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before resources are transferred between players, the boolean return value determines whether or not the transfer is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowStartPosition&lt;br /&gt;
|args = playerID, teamID, readyState, clampedX, clampedY, clampedZ, rawX, rawY, rawZ&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = {{var|clamped{X,Y,Z}}} are the coordinates clamped into start-boxes, {{var|raw}} is where player tried to place their marker. The {{var|readyState}} can be any one of &lt;br /&gt;
* {{value|0}} - player picked a position, &lt;br /&gt;
* {{value|1}} - player clicked ready, &lt;br /&gt;
* {{value|2}} - player pressed ready OR  the game was force-started (player did not click ready, but is now forcibly readied) or &lt;br /&gt;
* {{value|3}} - the player failed to load. &lt;br /&gt;
* {{new|95.0}} the default &#039;failed to choose&#039; start-position is the north-west point of their startbox, or (0,0,0) if they do not have a startbox. &lt;br /&gt;
NB: The order of the parameters changed with the addition of {{var|teamID}} in 104.0. Previouly it was:&lt;br /&gt;
{{var|clampedX, clampedY, clampedZ, playerID, readyState, rawX, rawY, rawZ}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowDirectUnitControl&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, playerID&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Determines if this unit can be controlled directly in FPS view.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponTargetCheck&lt;br /&gt;
|args = attackerID, attackerWeaponNum, attackerWeaponDefID&lt;br /&gt;
|return = {{type|bool}} allowCheck, {{type|bool}} ignoreCheck&lt;br /&gt;
|info = Determines if this weapon can automatically generate targets itself. See also {{xtaglink|Gamedev:WeaponDefs|commandFire}} weaponDef tag. The {{var|ignoreCheck}} return value was added in 99.0 to allow ignoring the callin i.e. running normal engine check for this weapon.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponTarget&lt;br /&gt;
|args = attackerID, targetID, attackerWeaponNum, attackerWeaponDefID, defPriority&lt;br /&gt;
|return = {{type|bool}} allowed, {{type|number}} newPriority&lt;br /&gt;
|info = Controls blocking of a specific target from being considered during a weapon&#039;s periodic auto-targeting sweep. The second return value is the new priority for this target (if you don&#039;t want to change it, return {{var|defPriority}}). Lower priority targets are targeted first.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponInterceptTarget&lt;br /&gt;
|args = interceptorUnitID, interceptorWeaponID, targetProjectileID&lt;br /&gt;
|return = {{type|bool}} allowed&lt;br /&gt;
|info = Controls blocking of a specific intercept target from being considered during an {{xtaglink|Gamedev:WeaponDefs|interceptor}} weapon&#039;s periodic auto-targeting sweep. Only called for {{var|weaponDefIDs}} registered via [[Lua_System#Synced|Script.SetWatchWeapon]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowBuilderHoldFire&lt;br /&gt;
|args = unitID, unitDefID, action&lt;br /&gt;
|return = {{type|bool}} actionAllowed&lt;br /&gt;
|info = {{new|98.0}} {{Sourcelinkhash|5a82d750b89e72024bb0bb62cf05ea257737e0ac}}   Called when a construction unit wants to &amp;quot;use his nano beams&amp;quot;.&amp;lt;br&amp;gt;{{var|action}} is one of following:&lt;br /&gt;
* {{value|-1}} Build&lt;br /&gt;
* {{value|CMD.REPAIR}} Repair&lt;br /&gt;
* {{value|CMD.RECLAIM}} Reclaim&lt;br /&gt;
* {{value|CMD.RESTORE}} Restore&lt;br /&gt;
* {{value|CMD.RESURRECT}} Resurrect&lt;br /&gt;
* {{value|CMD.CAPTURE}} Capture&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Explosion&lt;br /&gt;
|args = weaponDefID, px, py, pz, AttackerID, ProjectileID&lt;br /&gt;
|return = {{type|bool}} noGfx&lt;br /&gt;
|info = Called when an explosion occurs. If it returns {{value|true}} then no graphical effects are drawn by the engine for this explosion.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TerraformComplete&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, buildUnitID, buildUnitDefID, buildUnitTeam&lt;br /&gt;
|return = {{type|bool}} stop&lt;br /&gt;
|info = Called when pre-building terrain levelling terraforms are completed (c.f. {{xtaglink|Gamedev:UnitDefs|levelGround}}). If the return value is {{value|true}} the current build order is terminated.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MoveCtrlNotify&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, data&lt;br /&gt;
|return = {{type|bool}} moveCtrlComplete&lt;br /&gt;
|info = Enable both [[Lua_MoveCtrl#Options|Spring.MoveCtrl.SetCollideStop]] and [[Lua_MoveCtrl#Options|Spring.MoveCtrl.SetTrackGround]] to enable this call-in, data was supposed to indicate the type of notification but currently never has a value other than {{value|1}} (&amp;quot;unit hit the ground&amp;quot;). The return value determines whether or not the unit should remain script-controlled ({{value|false}}) or return to engine controlled movement ({{value|true}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvLuaMsg&lt;br /&gt;
|args = msg, playerID&lt;br /&gt;
|info = Receives messages from unsynced sent via [[Lua_UnsyncedCtrl#SendLuaMessage|Spring.SendLuaRulesMsg]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Load&lt;br /&gt;
|args = zip&lt;br /&gt;
|info = Called after {{name|GamePreload}} and before {{name|GameStart}}. See [[Lua_SaveLoad#Load_.28_zip_.29_-.3E_nil|Lua_SaveLoad]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Damage Controllers ===&lt;br /&gt;
For the following callins, in addition to being a regular weapon, {{var|weaponDefID}} may be one of the following:&lt;br /&gt;
* {{value|-1}} - debris collision, also default of [[Lua_SyncedCtrl#Unit_Control|Spring.AddUnitDamage]]&lt;br /&gt;
* {{value|-2}} - ground collision&lt;br /&gt;
* {{value|-3}} - object collision&lt;br /&gt;
* {{value|-4}} - fire damage&lt;br /&gt;
* {{value|-5}} - water damage&lt;br /&gt;
* {{value|-6}} - kill damage&lt;br /&gt;
* {{value|-7}} - crush damage&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitPreDamaged&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, damage, paralyzer, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|return = {{type|number}} newDamage, {{type|number}} impulseMult&lt;br /&gt;
|info = Called before damage is applied to the unit, allows fine control over how much damage and [http://en.wikipedia.org/wiki/Impulse_(physics) impulse] is applied.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ShieldPreDamaged&lt;br /&gt;
|I recommend looking up the CallIns in Sourcecode, because the Lua-Documentation, generated from the lua handle of them is seriously flawed and not regenerated.&lt;br /&gt;
|Lua-Handler documented from version&lt;br /&gt;
|args = proID, proOwnerID, shieldEmitterWeaponNum, shieldCarrierUnitID, bounceProjectile, beamEmitterWeaponNum, beamEmitterUnitID, startX, startY, startZ, hitX, hitY, hitZ&lt;br /&gt;
|https://github.com/spring/spring/blob/d085e297416bd963ec25eaa3dbf0796ba22a3582/rts/Lua/LuaHandleSynced.h#L106&lt;br /&gt;
|Actual CallIn: &lt;br /&gt;
|args = proID, shieldCarrier, boolBounceProjectile, beamEmitterWeaponNum, beamEmitterUnitID, startX, startY, startZ, hitX, hitY, hitZ&lt;br /&gt;
|return = {{type|bool}} handleCollision&lt;br /&gt;
|info = Called before any engine shield-vs-projectile logic executes. If the return value is {{value|true}} the gadget handles the collision event and the engine does not remove the projectile. If the weapon is a hitscan type ([[Gamedev:WeaponDefs#Tag:weaponType|BeamLaser]] or [[Gamedev:WeaponDefs#Tag:weaponType|LightningCanon]]) then {{var|proID}} is {{value|nil}} and {{var|beamEmitterWeaponNum}} and {{var|beamEmitterUnitID}} are populated instead. The start and hit position arguments are provided from 104.0 onwards.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeaturePreDamaged&lt;br /&gt;
|args = featureID, featureDefID, featureTeam, damage, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|return = {{type|number}} newDamage, {{type|number}} impulseMult&lt;br /&gt;
|info = Called before damage is applied to the feature, allows fine control over how much damage and [http://en.wikipedia.org/wiki/Impulse_(physics) impulse] is applied.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Lua]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Callins&amp;diff=10803</id>
		<title>Lua:Callins</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua:Callins&amp;diff=10803"/>
		<updated>2019-05-10T12:51:43Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Drawing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lua Callins =&lt;br /&gt;
This page is future looking to unified widget/gadget (aka &amp;quot;addon&amp;quot;) handler, which may yet be some way off, c.f. the [https://github.com/spring/spring/blob/ebb704e008f6ea645947d07be1cfcc272af0428f/doc/changelog.txt#L71 changelog].&lt;br /&gt;
&lt;br /&gt;
Related Sourcecode :&lt;br /&gt;
[https://github.com/spring/spring/blob/d9b3927a528a876b9ab4042771e82b050267572a/rts/Lua/LuaHandle.cpp https://github.com/spring/spring/rts/Lua/LuaHandle.cpp]&lt;br /&gt;
&lt;br /&gt;
For now, to use these addons in a widget, replace addon with widget and, for a gadget, replace addon with gadget. For example,&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
    function widget:UnitCreated(unitID, unitDefID, unitTeam, builderID)&lt;br /&gt;
        ...  &lt;br /&gt;
    end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some functions may differ between (synced) gadget and widgets; those are in the [[#Synced_-_Unsynced_Shared]] section. Essentially the reason is that all information should be available to synced (game logic controlling) gadgets, but restricted to unsynced gadget/widget (e.g. information about an enemy unit only detected via radar and not yet in LOS). In such cases the full (synced) param list is documented.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: maroon;&amp;quot;&amp;gt;&#039;&#039;&#039;Attention:&#039;&#039;&#039;&amp;lt;/span&amp;gt; some callins will only work on the unsynced portion of the gadget. Due to the type-unsafe nature of lua parsing, those callins not firing up might be hard to trace. This document will be continuously updated to properly alert about those situations.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Initialize&lt;br /&gt;
|info = Called when the addon is (re)loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Shutdown&lt;br /&gt;
|info = Called when the addon or the game is shutdown.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unsynced Only ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DefaultCommand&lt;br /&gt;
|args = type, id&lt;br /&gt;
|return = {{type|number}} cmdID&lt;br /&gt;
|info = Used to set the default command when a unit is selected. First parameter is the type of the object pointed at (either &amp;quot;unit or &amp;quot;feature&amp;quot;) and the second is its {{var|unitID}} or {{var|featureID}} respectively. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandNotify&lt;br /&gt;
|args = cmdID, cmdParams, cmdOptions&lt;br /&gt;
|return = {{type|bool}} removeCmd&lt;br /&gt;
|info = Called when a command is issued. Returning {{value|true}} deletes the command and does not send it through the network.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandsChanged&lt;br /&gt;
|args = None&lt;br /&gt;
|return = ?&lt;br /&gt;
|info = Called when the command descriptions changed, e.g. when selecting or deselecting a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = WorldTooltip&lt;br /&gt;
|args = ttType, data1, data2, data3&lt;br /&gt;
|return = {{type|string}} newTooltip&lt;br /&gt;
|info = The parameters can be {{value|&amp;quot;unit&amp;quot;}}, {{var|unitID}}; {{value|&amp;quot;feature&amp;quot;}}, {{var|featureID}}; {{value|&amp;quot;ground&amp;quot;}}, {{var|posX}}, {{var|posY}}, {{var|posZ}} or {{value|&amp;quot;selection&amp;quot;}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnsyncedHeightMapUpdate&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = Called when the unsynced copy of the height-map is altered.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameProgress&lt;br /&gt;
|args = serverFrameNum&lt;br /&gt;
|info = Called every 60 frames, calculating delta between GameFrame and GameProgress. Can give an ETA about catching up with simulation for mid-game join players.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameSetup&lt;br /&gt;
|args =  state, ready, playerStates&lt;br /&gt;
|return = {{type|bool}} success, {{type|bool}} newReady&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = SunChanged&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AddConsoleLine&lt;br /&gt;
|args = msg, priority&lt;br /&gt;
|info = Called when text is entered into the console (e.g. Spring.Echo).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvSkirmishAIMessage&lt;br /&gt;
|args = aiTeam, dataStr&lt;br /&gt;
|return = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvFromSynced&lt;br /&gt;
|args = ...&lt;br /&gt;
|info = Receives data sent via [[Lua_System#Synced|SendToUnsynced]] callout.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Save&lt;br /&gt;
|args = zip&lt;br /&gt;
|info = Called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. See [[Lua_SaveLoad#Save_.28_zip_.29_-.3E_nil|Lua_SaveLoad]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = LoadProgress&lt;br /&gt;
|args = message, replaceLastLine&lt;br /&gt;
|info = Only available to LuaIntro.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GroupChanged&lt;br /&gt;
|args = groupID&lt;br /&gt;
|info = Called when a unit is added to or removed from a control group. Currently implemented for widgets only.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ConfigureLayout&lt;br /&gt;
|args = ???&lt;br /&gt;
|return = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Input ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = IsAbove&lt;br /&gt;
|args = x, y&lt;br /&gt;
|return = {{type|bool}} isAbove&lt;br /&gt;
|info = Called every Update. Must return {{value|true}} for {{name|Mouse*}} events and {{name|GetToolTip}} to be called.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GetTooltip&lt;br /&gt;
|args = x, y&lt;br /&gt;
|return = {{type|string}} tooltip&lt;br /&gt;
|info = Called when {{name|IsAbove}} returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = KeyPress&lt;br /&gt;
|args = key, mods, isRepeat&lt;br /&gt;
|return = {{type|bool}} becomeOwner&lt;br /&gt;
|info = Called repeatedly when a key is pressed down. If you want an action to occur only once check for {{var|1=isRepeat == {{value|false}}}}. The {{var|mods}} parameter is a {{type|table}}, with keys {{value|&amp;quot;alt&amp;quot;}}, {{value|&amp;quot;ctrl&amp;quot;}}, {{value|&amp;quot;meta&amp;quot;}} and {{value|&amp;quot;shift&amp;quot;}} each having a boolean value. Return {{value|true}} if you don&#039;t want other callins or the engine to also receive this keypress. A list of key codes can be seen at the [https://wiki.libsdl.org/SDLKeycodeLookup SDL wiki].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = KeyRelease&lt;br /&gt;
|args = key&lt;br /&gt;
|return = {{type|bool}}&lt;br /&gt;
|info = Called when the key is released.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TextInput&lt;br /&gt;
|args = utf8char&lt;br /&gt;
|info = Called whenever a key press results in text input. Introduced in 97.0.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = JoystickEvent&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MousePress&lt;br /&gt;
|args = x, y, button&lt;br /&gt;
|return = {{type|bool}} becomeMouseOwner&lt;br /&gt;
|info = Called when a mouse button is pressed. The {{var|button}} parameter supports up to 7 buttons. Must return {{value|true}} for {{name|MouseRelease}} and other functions to be called.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseRelease&lt;br /&gt;
|args = x, y, button&lt;br /&gt;
|return = bool becomeMouseOwner&lt;br /&gt;
|info = Called when a mouse button is released. Please note that in order to have Spring call {{name|MouseRelease}}, you need to have a {{name|MousePress}} call-in in the same addon that returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseWheel&lt;br /&gt;
|args = up, value&lt;br /&gt;
|info = Called when the mouse wheel is moved. The parameters indicate the direction and amount of travel.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MouseMove&lt;br /&gt;
|args = x, y, dx, dy, button&lt;br /&gt;
|info = Called when the mouse is moved. The {{var|dx}} and {{var|dy}} parameters indicate the distance travelled, whereas the first two indicate the final position.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Players ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerChanged&lt;br /&gt;
|args = playerID&lt;br /&gt;
|info = Called whenever a player&#039;s status changes e.g. becoming a spectator.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerAdded&lt;br /&gt;
|args = playerID&lt;br /&gt;
|info = Called whenever a new player joins the game.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = PlayerRemoved&lt;br /&gt;
|args = playerID, reason&lt;br /&gt;
|info = Called whenever a player is removed from the game.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Downloads ===&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadStarted&lt;br /&gt;
|args = id&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download is started via [[Lua_VFS#Archives|VFS.DownloadArchive]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadFinished&lt;br /&gt;
|args = id&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download finishes successfully.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadFailed&lt;br /&gt;
|args = id, errorID&lt;br /&gt;
|info = Called when a [[Pr-downloader]] download fails to complete.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DownloadProgress&lt;br /&gt;
|args = id, downloaded, total&lt;br /&gt;
|info = Called incrementally during a [[Pr-downloader]] download.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Drawing ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ViewResize&lt;br /&gt;
|args = viewSizeX, viewSizeY&lt;br /&gt;
|info = Called whenever the window is resized.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Update&lt;br /&gt;
|args = dt&lt;br /&gt;
|info = Called for every drawn frame. The parameter is the time since the last update. Perform calculations in here and only perform drawing in Draw* callins (listed below). On the synced portion of gadgets, use GameFrame() for per-frame computations. Please note that when  the engine is not under heavy load you will typically get more than one Update callin for each GameFrame. Update is called even while the engine is paused, there is no such event in synced. }}&lt;br /&gt;
&lt;br /&gt;
=== Draw* Functions ===&lt;br /&gt;
Inside the Draw* functions, you can use the [[Lua_OpenGL_Api | Lua OpenGL Api]] to draw graphics.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGenesis&lt;br /&gt;
|info = Doesn&#039;t render to screen! Use this callin to update textures, shaders, etc. Also available to LuaMenu.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldPreParticles&lt;br /&gt;
|info = ??? {{new|104.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldPreUnit&lt;br /&gt;
|info = Spring draws units, features, some water types, cloaked units, and the sun.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorld&lt;br /&gt;
|info = Spring draws command queues, &#039;map stuff&#039;, and map marks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldShadow&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldReflection&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawWorldRefraction&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPreForward&lt;br /&gt;
|info = Runs at the start of the forward pass when a custom map shader has been assigned via [[Lua_UnsyncedCtrl#Map|{{name|Spring.SetMapShader}}]] (convenient for setting uniforms).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPreDeferred&lt;br /&gt;
|info = Runs at the start of the deferred pass when a custom map shader has been assigned via [[Lua_UnsyncedCtrl#Map|{{name|Spring.SetMapShader}}]] (convenient for setting uniforms).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawGroundPostDeferred&lt;br /&gt;
|info = This runs at the end of its respective deferred pass and allows proper frame compositing (with ground flashes/decals/foliage/etc, which are drawn between it and [[#API:DrawWorldPreUnit|{{name|DrawWorldPreUnit}}]]) via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawUnitsPostDeferred&lt;br /&gt;
|info = Runs at the end of the unit deferred pass to inform Lua code it should make use of the {{value|$model_gbuffer_*}} textures before another pass overwrites them (and to allow proper blending with e.g. cloaked objects which are drawn between these events and [[#API:DrawWorld|{{name|DrawWorld}}]] via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]]). N.B. The *PostDeferred events are only sent (and only have a real purpose) if forward drawing is disabled.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawFeaturesPostDeferred&lt;br /&gt;
|info = Runs at the end of the feature deferred pass to inform Lua code it should make use of the {{value|$model_gbuffer_*}} textures before another pass overwrites them (and to allow proper blending with e.g. cloaked objects which are drawn between these events and [[#API:DrawWorld|{{name|DrawWorld}}]] via [[Lua_OpenGL_Api#Textures|{{name|gl.CopyToTexture}}]]). N.B. The *PostDeferred events are only sent (and only have a real purpose) if forward drawing is disabled.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreen&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = ??? Also available to LuaMenu.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreenEffects&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = Where {{var|vsx}}, {{var|vsy}} are screen coordinates.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawScreenPost&lt;br /&gt;
|args = vsx, vsy&lt;br /&gt;
|info = {{new|104.0}} Similar to {{name|DrawScreenEffects}}, this can be used to alter the contents of a frame after it has been completely rendered (i.e. World, MiniMap, Menu, UI).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawLoadScreen&lt;br /&gt;
|info = {{new|95.0}} Only available to LuaIntro, draws custom load screens.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawInMinimap&lt;br /&gt;
|args = sx, sy&lt;br /&gt;
|info = Where {{var|sx}}, {{var|sy}} are values relative to the minimap&#039;s position and scale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawInMinimapBackground&lt;br /&gt;
|args = sx, sy&lt;br /&gt;
|info = Where {{var|sx}}, {{var|sy}} are values relative to the minimap&#039;s position and scale.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Custom Object Rendering ===&lt;br /&gt;
For the following calls {{var|drawMode}} can be one of the following, {{var|1=notDrawing = {{value|0}}}}, {{var|1=normalDraw = {{value|1}}}}, {{var|1=shadowDraw = {{value|2}}}}, {{var|1=reflectionDraw = {{value|3}}}}, {{var|1=refractionDraw = {{value|4}}}}, and finally {{var|1=gameDeferredDraw = {{value|5}}}} which was added in 102.0.&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawUnit&lt;br /&gt;
|args = unitID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of units, [[Lua_UnitRendering#Lua.27s_DrawXYZ-Callin|enabled here]].	&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawFeature&lt;br /&gt;
|args = unitID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of features, [[Lua_UnitRendering#Lua.27s_DrawXYZ-Callin|enabled here]].	&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawShield&lt;br /&gt;
|args = unitID, weaponID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of [[Gamedev:WeaponDefs#Shield_(WeaponType)|shields]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = DrawProjectile&lt;br /&gt;
|args = projectileID, drawMode&lt;br /&gt;
|return = {{type|bool}} suppressEngineDraw&lt;br /&gt;
|info = For custom rendering of weapon (&amp;amp; other) projectiles.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Unsynced Menu Only ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowDraw&lt;br /&gt;
|return = {{type|bool}} allowDraw&lt;br /&gt;
|info = Enables Draw{Genesis,Screen,ScreenPost} callins if {{value|true}} is returned, otherwise they are called once every 30 seconds. Only active when a game isn&#039;t running.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ActivateMenu&lt;br /&gt;
|info = Called whenever LuaMenu is on with no game loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ActivateGame&lt;br /&gt;
|info = Called whenever LuaMenu is on with a game loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Synced - Unsynced Shared ==&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GotChatMsg&lt;br /&gt;
|args = msg, player&lt;br /&gt;
|info = Called when a player issues a UI command e.g. types {{var|/foo}} or {{var|/luarules foo}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Game ===&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameID&lt;br /&gt;
|args = gameID&lt;br /&gt;
|info = Called once to deliver the {{var|gameID}}. As of 101.0+ the string is encoded in hex.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GamePaused&lt;br /&gt;
|info = Called when the game is paused.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameOver&lt;br /&gt;
|args = winningAllyTeams&lt;br /&gt;
|info = The parameter is a {{type|table}} list of winning allyTeams, if empty the game result was undecided (like when dropping from an host).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameFrame&lt;br /&gt;
|args = frame&lt;br /&gt;
|info = Called for every game simulation frame (30 per second). Starts at frame {{value|0}} in 101.0+ and {{value|1}} in previous versions.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GamePreload&lt;br /&gt;
|info = Called before the 0 gameframe. From 104.0 onwards, will not be called when a saved game is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = GameStart&lt;br /&gt;
|info = Called upon the start of the game. From 104.0 onwards, will not be called when a saved game is loaded.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Teams ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TeamChanged&lt;br /&gt;
|args = teamID&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TeamDied&lt;br /&gt;
|args = teamID&lt;br /&gt;
|info = Called when a team dies (see [[Lua_SyncedCtrl#Game_End|Spring.KillTeam]]).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Units ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCreated&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, builderID&lt;br /&gt;
|info = Called at the moment the unit is created.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFinished&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called at the moment the unit is completed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFromFactory&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, factID, factDefID, userOrders&lt;br /&gt;
|info = Called when a factory finishes construction of a unit.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitReverseBuilt&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a living unit becomes a nanoframe again.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitGiven&lt;br /&gt;
|args = unitID, unitDefID, newTeam, oldTeam&lt;br /&gt;
|info = Called when a unit is transferred between teams. This is called after {{name|UnitTaken}} and in that moment unit is assigned to the &#039;&#039;&#039;newTeam&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitTaken&lt;br /&gt;
|args = unitID, unitDefID, oldTeam, newTeam&lt;br /&gt;
|info = Called when a unit is transferred between teams. This is called before {{name|UnitGiven}} and in that moment unit is still assigned to the &#039;&#039;&#039;oldTeam&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDamaged&lt;br /&gt;
|args =  unitID, unitDefID, unitTeam, damage, paralyzer, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a unit is damaged (after {{name|UnitPreDamaged}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDestroyed&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a unit is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RenderUnitDestroyed&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called just before a unit is invalid, after it finishes its death animation. {{new|101.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitStunned&lt;br /&gt;
|args =  unitID, unitDefID, unitTeam, stunned&lt;br /&gt;
|info = Called when a unit changes its stun status. {{new|99.0}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitUnitCollision&lt;br /&gt;
|args = colliderID, collideeID&lt;br /&gt;
|info = Called when two units collide. Both units must be registered with [[Lua_System#Synced|Script.SetWatchUnit]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitFeatureCollision&lt;br /&gt;
|args = colliderID, collideeID&lt;br /&gt;
|info = Called when a unit collides with a feature. The unit must be registered with [[Lua_System#Synced|Script.SetWatchUnit]] and the feature registered with [[Lua_System#Synced|Script.SetWatchFeature]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCommand&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag&lt;br /&gt;
|info = Called after when a unit accepts a command, after {{name|AllowCommand}} returns {{value|true}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCmdDone&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOpts, cmdTag&lt;br /&gt;
|info = Called when a unit completes a command.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLoaded&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, transportID, transportTeam&lt;br /&gt;
|info = Called when a unit is loaded by a transport.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitUnloaded&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, transportID, transportTeam&lt;br /&gt;
|info = Called when a unit is unloaded by a transport.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitExperience&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, experience, oldExperience&lt;br /&gt;
|info = Called when a unit gains experience greater or equal to the minimum limit set by calling [[Lua_SyncedCtrl#Other|Spring.SetExperienceGrade]]. Should be called more reliably with small values of experience grade in 104.0+.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitIdle&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit is idle (empty command queue).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitCloaked&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit cloaks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitDecloaked&lt;br /&gt;
|args = unitID, unitDefID, unitTeam&lt;br /&gt;
|info = Called when a unit decloaks.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitMoved&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented in base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitMoveFailed&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented in base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = StockpileChanged&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, weaponNum, oldCount, newCount&lt;br /&gt;
|info = Called when a units stockpile of weapons increases or decreases. See {{xtaglink|Gamedev:WeaponDefs|stockpile}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredLos&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit enters LOS of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftLos&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit leaves LOS of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredRadar&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit enters radar of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftRadar&lt;br /&gt;
|args = unitID, unitTeam, allyTeam, unitDefID&lt;br /&gt;
|info = Called when a unit leaves radar of an allyteam.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredAir&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftAir&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitEnteredWater&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitLeftWater&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ??? Not implemented by base handler&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitSeismicPing&lt;br /&gt;
|args = x, y, z, strength, allyTeam, unitID, unitDefID&lt;br /&gt;
|info = Called when a unit emits a seismic ping. See {{xtaglink|Gamedev:UnitDefs|seismicSignature}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureCreated&lt;br /&gt;
|args = featureID, allyTeamID&lt;br /&gt;
|info = Called when a feature is created.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureDamaged&lt;br /&gt;
|args =  featureID, featureDefID, featureTeam, damage, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|info = Called when a feature is damaged.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureDestroyed&lt;br /&gt;
|args = featureID, allyTeamID&lt;br /&gt;
|info = Called when a feature is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeatureMoved&lt;br /&gt;
|args = ???&lt;br /&gt;
|info = ???&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Projectiles ===&lt;br /&gt;
The following Callins are only called for weaponDefIDs registered via [[Lua_System#Synced|Script.SetWatchWeapon]].&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ProjectileCreated&lt;br /&gt;
|args = proID, proOwnerID, weaponDefID&lt;br /&gt;
|info = Called when the projectile is created. Note that {{var|weaponDefID}} is missing if the projectile is spawned as part of a burst, but [[Lua_SyncedRead#Projectiles|Spring.GetProjectileDefID]] and [[Lua_SyncedRead#Projectiles|Spring.GetProjectileName]] still work in callin scope using {{var|proID}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ProjectileDestroyed&lt;br /&gt;
|args = proID&lt;br /&gt;
|info = Called when the projectile is destroyed.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Synced Only ==&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = CommandFallback&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOptions, cmdTag&lt;br /&gt;
|return = {{type|bool}} used, {{type|bool}} finished&lt;br /&gt;
|info = Called when the unit reaches an unknown command in its queue (i.e. one not handled by the engine). If no addon returns {{var|used}} as {{value|true}} the command is dropped, if an addon returns {{value|true}}, {{value|true}} the command is removed because it&#039;s done, with {{value|true}}, {{value|false}} it&#039;s kept in the queue and {{name|CommandFallback}} gets called again on the next slowupdate.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowCommand&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, cmdID, cmdParams, cmdOptions, cmdTag, synced&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called when the command is given, before the unit&#039;s queue is altered. The return value is whether it should be let into the queue. The queue remains untouched when a command is blocked, whether it would be queued or replace the queue.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitCreation&lt;br /&gt;
|args = unitDefID, builderID, builderTeam, x, y, z, facing&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before unit is created, the boolean return value determines whether or not the creation is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitTransfer&lt;br /&gt;
|args = unitID, unitDefID, oldTeam, newTeam, capture&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a unit is transferred to a different team, the boolean return value determines whether or not the transfer is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowUnitBuildStep&lt;br /&gt;
|args = builderID, builderTeam, unitID, unitDefID, part&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a unit progresses its build percentage, the boolean return value determines whether or not the build makes progress.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowFeatureCreation&lt;br /&gt;
|args = featureDefID, teamID, x, y, z&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before feature is created, the boolean return value determines whether or not the creation is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowFeatureBuildStep&lt;br /&gt;
|args = builderID, builderTeam, featureID, featureDefID, part&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before a feature progresses its build percentage, the boolean return value determines whether or not the progress change is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowResourceLevel&lt;br /&gt;
|args = teamID, res, level&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called when a team sets the sharing level of a resource, the boolean return value determines whether or not the sharing level is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowResourceTransfer&lt;br /&gt;
|args = oldTeamID, newTeamID, res, amount&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Called just before resources are transferred between players, the boolean return value determines whether or not the transfer is permitted.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowStartPosition&lt;br /&gt;
|args = playerID, teamID, readyState, clampedX, clampedY, clampedZ, rawX, rawY, rawZ&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = {{var|clamped{X,Y,Z}}} are the coordinates clamped into start-boxes, {{var|raw}} is where player tried to place their marker. The {{var|readyState}} can be any one of &lt;br /&gt;
* {{value|0}} - player picked a position, &lt;br /&gt;
* {{value|1}} - player clicked ready, &lt;br /&gt;
* {{value|2}} - player pressed ready OR  the game was force-started (player did not click ready, but is now forcibly readied) or &lt;br /&gt;
* {{value|3}} - the player failed to load. &lt;br /&gt;
* {{new|95.0}} the default &#039;failed to choose&#039; start-position is the north-west point of their startbox, or (0,0,0) if they do not have a startbox. &lt;br /&gt;
NB: The order of the parameters changed with the addition of {{var|teamID}} in 104.0. Previouly it was:&lt;br /&gt;
{{var|clampedX, clampedY, clampedZ, playerID, readyState, rawX, rawY, rawZ}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowDirectUnitControl&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, playerID&lt;br /&gt;
|return = {{type|bool}} allow&lt;br /&gt;
|info = Determines if this unit can be controlled directly in FPS view.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponTargetCheck&lt;br /&gt;
|args = attackerID, attackerWeaponNum, attackerWeaponDefID&lt;br /&gt;
|return = {{type|bool}} allowCheck, {{type|bool}} ignoreCheck&lt;br /&gt;
|info = Determines if this weapon can automatically generate targets itself. See also {{xtaglink|Gamedev:WeaponDefs|commandFire}} weaponDef tag. The {{var|ignoreCheck}} return value was added in 99.0 to allow ignoring the callin i.e. running normal engine check for this weapon.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponTarget&lt;br /&gt;
|args = attackerID, targetID, attackerWeaponNum, attackerWeaponDefID, defPriority&lt;br /&gt;
|return = {{type|bool}} allowed, {{type|number}} newPriority&lt;br /&gt;
|info = Controls blocking of a specific target from being considered during a weapon&#039;s periodic auto-targeting sweep. The second return value is the new priority for this target (if you don&#039;t want to change it, return {{var|defPriority}}). Lower priority targets are targeted first.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowWeaponInterceptTarget&lt;br /&gt;
|args = interceptorUnitID, interceptorWeaponID, targetProjectileID&lt;br /&gt;
|return = {{type|bool}} allowed&lt;br /&gt;
|info = Controls blocking of a specific intercept target from being considered during an {{xtaglink|Gamedev:WeaponDefs|interceptor}} weapon&#039;s periodic auto-targeting sweep. Only called for {{var|weaponDefIDs}} registered via [[Lua_System#Synced|Script.SetWatchWeapon]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = AllowBuilderHoldFire&lt;br /&gt;
|args = unitID, unitDefID, action&lt;br /&gt;
|return = {{type|bool}} actionAllowed&lt;br /&gt;
|info = {{new|98.0}} {{Sourcelinkhash|5a82d750b89e72024bb0bb62cf05ea257737e0ac}}   Called when a construction unit wants to &amp;quot;use his nano beams&amp;quot;.&amp;lt;br&amp;gt;{{var|action}} is one of following:&lt;br /&gt;
* {{value|-1}} Build&lt;br /&gt;
* {{value|CMD.REPAIR}} Repair&lt;br /&gt;
* {{value|CMD.RECLAIM}} Reclaim&lt;br /&gt;
* {{value|CMD.RESTORE}} Restore&lt;br /&gt;
* {{value|CMD.RESURRECT}} Resurrect&lt;br /&gt;
* {{value|CMD.CAPTURE}} Capture&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Explosion&lt;br /&gt;
|args = weaponDefID, px, py, pz, AttackerID, ProjectileID&lt;br /&gt;
|return = {{type|bool}} noGfx&lt;br /&gt;
|info = Called when an explosion occurs. If it returns {{value|true}} then no graphical effects are drawn by the engine for this explosion.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = TerraformComplete&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, buildUnitID, buildUnitDefID, buildUnitTeam&lt;br /&gt;
|return = {{type|bool}} stop&lt;br /&gt;
|info = Called when pre-building terrain levelling terraforms are completed (c.f. {{xtaglink|Gamedev:UnitDefs|levelGround}}). If the return value is {{value|true}} the current build order is terminated.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = MoveCtrlNotify&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, data&lt;br /&gt;
|return = {{type|bool}} moveCtrlComplete&lt;br /&gt;
|info = Enable both [[Lua_MoveCtrl#Options|Spring.MoveCtrl.SetCollideStop]] and [[Lua_MoveCtrl#Options|Spring.MoveCtrl.SetTrackGround]] to enable this call-in, data was supposed to indicate the type of notification but currently never has a value other than {{value|1}} (&amp;quot;unit hit the ground&amp;quot;). The return value determines whether or not the unit should remain script-controlled ({{value|false}}) or return to engine controlled movement ({{value|true}}).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = RecvLuaMsg&lt;br /&gt;
|args = msg, playerID&lt;br /&gt;
|info = Receives messages from unsynced sent via [[Lua_UnsyncedCtrl#SendLuaMessage|Spring.SendLuaRulesMsg]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = Load&lt;br /&gt;
|args = zip&lt;br /&gt;
|info = Called after {{name|GamePreload}} and before {{name|GameStart}}. See [[Lua_SaveLoad#Load_.28_zip_.29_-.3E_nil|Lua_SaveLoad]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Damage Controllers ===&lt;br /&gt;
For the following callins, in addition to being a regular weapon, {{var|weaponDefID}} may be one of the following:&lt;br /&gt;
* {{value|-1}} - debris collision, also default of [[Lua_SyncedCtrl#Unit_Control|Spring.AddUnitDamage]]&lt;br /&gt;
* {{value|-2}} - ground collision&lt;br /&gt;
* {{value|-3}} - object collision&lt;br /&gt;
* {{value|-4}} - fire damage&lt;br /&gt;
* {{value|-5}} - water damage&lt;br /&gt;
* {{value|-6}} - kill damage&lt;br /&gt;
* {{value|-7}} - crush damage&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = UnitPreDamaged&lt;br /&gt;
|args = unitID, unitDefID, unitTeam, damage, paralyzer, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|return = {{type|number}} newDamage, {{type|number}} impulseMult&lt;br /&gt;
|info = Called before damage is applied to the unit, allows fine control over how much damage and [http://en.wikipedia.org/wiki/Impulse_(physics) impulse] is applied.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = ShieldPreDamaged&lt;br /&gt;
|I recommend looking up the CallIns in Sourcecode, because the Lua-Documentation, generated from the lua handle of them is seriously flawed and not regenerated.&lt;br /&gt;
|Lua-Handler documented from version&lt;br /&gt;
|args = proID, proOwnerID, shieldEmitterWeaponNum, shieldCarrierUnitID, bounceProjectile, beamEmitterWeaponNum, beamEmitterUnitID, startX, startY, startZ, hitX, hitY, hitZ&lt;br /&gt;
|https://github.com/spring/spring/blob/d085e297416bd963ec25eaa3dbf0796ba22a3582/rts/Lua/LuaHandleSynced.h#L106&lt;br /&gt;
|Actual CallIn: &lt;br /&gt;
|args = proID, shieldCarrier, boolBounceProjectile, beamEmitterWeaponNum, beamEmitterUnitID, startX, startY, startZ, hitX, hitY, hitZ&lt;br /&gt;
|return = {{type|bool}} handleCollision&lt;br /&gt;
|info = Called before any engine shield-vs-projectile logic executes. If the return value is {{value|true}} the gadget handles the collision event and the engine does not remove the projectile. If the weapon is a hitscan type ([[Gamedev:WeaponDefs#Tag:weaponType|BeamLaser]] or [[Gamedev:WeaponDefs#Tag:weaponType|LightningCanon]]) then {{var|proID}} is {{value|nil}} and {{var|beamEmitterWeaponNum}} and {{var|beamEmitterUnitID}} are populated instead. The start and hit position arguments are provided from 104.0 onwards.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{LuaCallin&lt;br /&gt;
|name = FeaturePreDamaged&lt;br /&gt;
|args = featureID, featureDefID, featureTeam, damage, weaponDefID, projectileID, attackerID, attackerDefID, attackerTeam&lt;br /&gt;
|return = {{type|number}} newDamage, {{type|number}} impulseMult&lt;br /&gt;
|info = Called before damage is applied to the feature, allows fine control over how much damage and [http://en.wikipedia.org/wiki/Impulse_(physics) impulse] is applied.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Lua]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18178</id>
		<title>Terms of Service</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18178"/>
		<updated>2019-04-06T07:20:43Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Terms of Service of the SpringRTS lobby server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Terms of Service of the SpringRTS lobby server ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to use any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-oriented or any other material that may violate any applicable laws. Doing so may lead to you being immediately and permanently banned, and to your service provider and relevant legal authorities being informed of your actions and of data which personally identifies you.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree that the administrators and moderators of this server have the right to mute, kick or ban you at any time should they see fit, and you agree to abide by any such restrictions imposed on you.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to share, relay or otherwise publish the content of any passworded channels, passworded hosts or other contexts with restricted access, without the explicit permission of both the channel owner and server adminstrators.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You confirm that you are at least 13 years of age.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The SpringRTS server and its managed game hosts process and retain data generated by their users:&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Actions taking place via Springs infrastructure: chat, games and all associated ingame commands, related hardware and connectivity information, client software used; and derived statistics of these data.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Source files, artwork and other content relating to games and development of games.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;The data are used to provide services that would normally be expected from an online gaming platform, primarily: &#039;&#039;&lt;br /&gt;
# &#039;&#039;Publicly available replays of games that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Persistent game and chat elements, which make users aware of publicly visible events that previously occurred on the platform.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Development and provision of the Spring engine, plus supporting infrastructure, including a lobbyserver in which users chat to each other. &#039;&#039;&lt;br /&gt;
# &#039;&#039;Bridging of publicly accessible chat channels to external locations, typically those managed by our own users or subprojects for purposes explicitly related to SpringRTS.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Verification of user identity on login and within battle hosts.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Moderator action in the event of disputes and suspected misconduct.&#039;&#039;&lt;br /&gt;
&#039;&#039;We process and retain information on basis of legitimate interest, to provide the above services. See the [[Data_Usage|data usage]] page on the springrts.com wiki for further information.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Battle hosts listed on our server are typically provided and hosted by our users. When you join to a battle host your IP address will become known to this battle host. If you choose to operate a battle host yourself, your IP address will be shared with other users.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We allow connections to our server using external and bespoke client software; which you may be using. In such cases you must refer to your client software data usage policies for information concerning its treatment of the data you provide to it; the data usage policies summarised in this notice ONLY cover our usage of the data that is sent by you or your client software to our server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While the administrators and moderators of this server will attempt to keep users from violating this agreement, it is impossible for them to maintain order at all times. Therefore you acknowledge that any messages or actions within our server expresses the views and opinions of its author and not those of the administrators and moderators, who will not be held liable for other users actions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By using this service you hereby agree to all of the above terms.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Botflags&amp;diff=2983</id>
		<title>Botflags</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Botflags&amp;diff=2983"/>
		<updated>2019-03-31T17:31:38Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Battle hosts on the lobby server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Battle hosts on the lobby server ==&lt;br /&gt;
&lt;br /&gt;
All battle hosts that do not have a botflag are limited to a maximum number of 8 players, plus unlimited spectators. This includes both human hosters and autohosts. &lt;br /&gt;
&lt;br /&gt;
Host admins that would like to get a botflag for an Autohost need to create a new thread in the [https://springrts.com/phpbb/viewforum.php?f=16 Ingame Community Forum] with &amp;quot;Botflag request&amp;quot; as topic title and the lobby username which should get the botflag. &#039;&#039;Note: A botflagged user account should not be used to play games on, except when hosting; otherwise it will not function correctly. &lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All users, including battle hosts, must adhere to the [[Terms_of_Service|terms of service of the lobby server]]. In addition:&lt;br /&gt;
&lt;br /&gt;
=== Battle hosts with a botflag ===&lt;br /&gt;
&lt;br /&gt;
Hosts with a botflag are expected to encourage and maintain an environment in which users are able to play games, free from serious disruption and excessively hateful or obscene behavior. &lt;br /&gt;
&lt;br /&gt;
Autohosts with a botflag are expected to appoint host owners and/or admins who are generally capable of maintaining the above expectations, with the help of the tools (pms/kicks/bans/mutes/plugins/etc) provided by the lobby server and SPADS. They should react and respond to all server commands in accordance with the lobby protocol. As part of the response to a &#039;&#039;!list users&#039;&#039; command sent via private message, the autohost must list the usernames of all host admins, and at least one contactable host owner. This list should be kept up to date.&lt;br /&gt;
&lt;br /&gt;
Hosts with a botflag are normally expected to use the latest stable engine version, or a later developmental version, and to host content that is made available for automated download.&lt;br /&gt;
&lt;br /&gt;
Hosts with a botflag may add additional features and enforce restrictions on their use (such as rank limits, plugins, special game modes) providing that they meet the above expectations. In extreme cases, if lobby moderators judge that the above expectations are consistently not met, lobby moderators may require that particular people are added and/or removed as host admins or owners, or that particular features/restrictions are removed. Hosts that do not comply will lose their botflag.&lt;br /&gt;
&lt;br /&gt;
=== Battle hosts without a botflag ===&lt;br /&gt;
&lt;br /&gt;
Hosts without a botflag are not subject to the same expectations as botflagged hosts, and are free to act as a private service provided by one or more users. Such hosts may arbitrarily appoint/remove their admins and owners, add additional features and enforce restrictions on their use, providing they remain within the terms of service of the lobby server.&lt;br /&gt;
&lt;br /&gt;
=== Reporting ===&lt;br /&gt;
&lt;br /&gt;
All issues concerning users behaviour inside battle hosts should be reported to the hosts owners and admins. Springs moderators will not normally become involved in such cases. Issues of serious and prolonged disruption that extend beyond an individual battle host, or concern the conduct of host owners/admins, should be reported to Springs moderators via [https://springrts.com/phpbb/ucp.php?i=pm&amp;amp;mode=compose&amp;amp;g=1643 private message].&lt;br /&gt;
&lt;br /&gt;
Note that the terms of service of the lobby server explicitly recognize that it will not be possible for Springs moderators, or autohost owners and admins, to maintain order at all times.&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18177</id>
		<title>Terms of Service</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18177"/>
		<updated>2019-03-29T21:52:30Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Terms of Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Terms of Service of the SpringRTS lobby server ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to use any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-oriented or any other material that may violate any applicable laws. Doing so may lead to you being immediately and permanently banned, and to your service provider and relevant legal authorities being informed of your actions and of data which personally identifies you.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree that the administrators and moderators of this server have the right to mute, kick or ban you at any time should they see fit, and you agree to abide by any such restrictions imposed on you.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to share, relay or otherwise publish the content of any passworded channels, passworded hosts or other contexts with restricted access, without the explicit permission of both the channel owner and server adminstrators.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You confirm that you are at least 13 years of age.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The SpringRTS server and its managed game hosts process and retain data generated by their users:&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Registration &amp;amp; login details: email address, IP/MAC address, chosen username, (hashed) password.&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Actions taking place via Springs infrastructure: chat, games and all associated ingame commands, related hardware and connectivity information, client software used; and derived statistics of these data.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Source files, artwork and other content relating to games and development of games.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;The data are used to provide services that would normally be expected from an online gaming platform, primarily: &#039;&#039;&lt;br /&gt;
# &#039;&#039;Publicly available replays of games that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Persistent game and chat elements, which make users aware of publicly visible events that previously occurred on the platform.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Development and provision of the Spring engine, plus supporting infrastructure, including a lobbyserver in which users chat to each other. &#039;&#039;&lt;br /&gt;
# &#039;&#039;Bridging of publicly accessible chat channels to external locations, typically those managed by our own users or subprojects for purposes explicitly related to SpringRTS.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Verification of user identity on login and within battle hosts.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Moderator action in the event of disputes and suspected misconduct.&#039;&#039;&lt;br /&gt;
&#039;&#039;We process and retain information on basis of legitimate interest, to provide the above services. See the [[Data_Usage|data usage]] page on the springrts.com wiki for further information.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Battle hosts listed on our server are typically provided and hosted by our users. When you join to a battle host your IP address will become known to this battle host. If you choose to operate a battle host yourself, your IP address will be shared with other users.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We allow connections to our server using external and bespoke client software; which you may be using. In such cases you must refer to your client software data usage policies for information concerning its treatment of the data you provide to it; the data usage policies summarised in this notice ONLY cover our usage of the data that is sent by you or your client software to our server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While the administrators and moderators of this server will attempt to keep users from violating this agreement, it is impossible for them to maintain order at all times. Therefore you acknowledge that any messages or actions within our server expresses the views and opinions of its author and not those of the administrators and moderators, who will not be held liable for other users actions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By using this service you hereby agree to all of the above terms.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18176</id>
		<title>Terms of Service</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18176"/>
		<updated>2019-03-29T21:51:26Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Terms of Service &amp;amp; Data Usage Information for the Lobby Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Terms of Service ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to use any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-oriented or any other material that may violate any applicable laws. Doing so may lead to you being immediately and permanently banned, and to your service provider and relevant legal authorities being informed of your actions and of data which personally identifies you.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree that the administrators and moderators of this server have the right to mute, kick or ban you at any time should they see fit, and you agree to abide by any such restrictions imposed on you.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to share, relay or otherwise publish the content of any passworded channels, passworded hosts or other contexts with restricted access, without the explicit permission of both the channel owner and server adminstrators.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You confirm that you are at least 13 years of age.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The SpringRTS server and its managed game hosts process and retain data generated by their users:&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Registration &amp;amp; login details: email address, IP/MAC address, chosen username, (hashed) password.&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Actions taking place via Springs infrastructure: chat, games and all associated ingame commands, related hardware and connectivity information, client software used; and derived statistics of these data.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Source files, artwork and other content relating to games and development of games.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;The data are used to provide services that would normally be expected from an online gaming platform, primarily: &#039;&#039;&lt;br /&gt;
# &#039;&#039;Publicly available replays of games that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Persistent game and chat elements, which make users aware of publicly visible events that previously occurred on the platform.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Development and provision of the Spring engine, plus supporting infrastructure, including a lobbyserver in which users chat to each other. &#039;&#039;&lt;br /&gt;
# &#039;&#039;Bridging of publicly accessible chat channels to external locations, typically those managed by our own users or subprojects for purposes explicitly related to SpringRTS.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Verification of user identity on login and within battle hosts.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Moderator action in the event of disputes and suspected misconduct.&#039;&#039;&lt;br /&gt;
&#039;&#039;We process and retain information on basis of legitimate interest, to provide the above services. See the [[Data_Usage|data usage]] page on the springrts.com wiki for further information.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Battle hosts listed on our server are typically provided and hosted by our users. When you join to a battle host your IP address will become known to this battle host. If you choose to operate a battle host yourself, your IP address will be shared with other users.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We allow connections to our server using external and bespoke client software; which you may be using. In such cases you must refer to your client software data usage policies for information concerning its treatment of the data you provide to it; the data usage policies summarised in this notice ONLY cover our usage of the data that is sent by you or your client software to our server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While the administrators and moderators of this server will attempt to keep users from violating this agreement, it is impossible for them to maintain order at all times. Therefore you acknowledge that any messages or actions within our server expresses the views and opinions of its author and not those of the administrators and moderators, who will not be held liable for other users actions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By using this service you hereby agree to all of the above terms.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18175</id>
		<title>Terms of Service</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18175"/>
		<updated>2019-03-29T21:46:48Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: more shorten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Terms of Service &amp;amp; Data Usage Information for the Lobby Server ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to use any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-oriented or any other material that may violate any applicable laws. Doing so may lead to you being immediately and permanently banned, and to your service provider and relevant legal authorities being informed of your actions and of data which personally identifies you.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree that the administrators and moderators of this server have the right to mute, kick or ban you at any time should they see fit, and you agree to abide by any such restrictions imposed on you.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to share, relay or otherwise publish the content of any passworded channels, passworded hosts or other contexts with restricted access, without the explicit permission of both the channel owner and server adminstrators.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You confirm that you are at least 13 years of age.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The SpringRTS server and its managed game hosts process and retain data generated by their users:&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Registration &amp;amp; login details: email address, IP/MAC address, chosen username, (hashed) password.&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Actions taking place via Springs infrastructure: chat, games and all associated ingame commands, related hardware and connectivity information, client software used; and derived statistics of these data.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Source files, artwork and other content relating to games and development of games.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;The data are used to provide services that would normally be expected from an online gaming platform, primarily: &#039;&#039;&lt;br /&gt;
# &#039;&#039;Publicly available replays of games that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Persistent game and chat elements, which make users aware of publicly visible events that previously occurred on the platform.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Development and provision of the Spring engine, plus supporting infrastructure, including a lobbyserver in which users chat to each other. &#039;&#039;&lt;br /&gt;
# &#039;&#039;Bridging of publicly accessible chat channels to external locations, typically those managed by our own users or subprojects for purposes explicitly related to SpringRTS.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Verification of user identity on login and within battle hosts.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Moderator action in the event of disputes and suspected misconduct.&#039;&#039;&lt;br /&gt;
&#039;&#039;We process and retain information on basis of legitimate interest, to provide the above services. See the [[Data_Usage|data usage]] page on the springrts.com wiki for further information.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Battle hosts listed on our server are typically provided and hosted by our users. When you join to a battle host your IP address will become known to this battle host. If you choose to operate a battle host yourself, your IP address will be shared with other users.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We allow connections to our server using external and bespoke client software; which you may be using. In such cases you must refer to your client software data usage policies for information concerning its treatment of the data you provide to it; the data usage policies summarised in this notice ONLY cover our usage of the data that is sent by you or your client software to our server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While the administrators and moderators of this server will attempt to keep users from violating this agreement, it is impossible for them to maintain order at all times. Therefore you acknowledge that any messages or actions within our server expresses the views and opinions of its author and not those of the administrators and moderators, who will not be held liable for other users actions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By using this service you hereby agree to all of the above terms.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18174</id>
		<title>Terms of Service</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18174"/>
		<updated>2019-03-29T21:38:26Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: shorten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Terms of Service &amp;amp; Data Usage Information for the Lobby Server ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to use any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-oriented or any other material that may violate any applicable laws. Doing so may lead to you being immediately and permanently banned, and to your service provider and relevant legal authorities being informed of your actions and of data which personally identifies you.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree that the administrators and moderators of this server have the right to mute, kick or ban you at any time should they see fit, and you agree to abide by any such restrictions imposed on you.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to share, relay or otherwise publish the content of any passworded channels, passworded hosts or other contexts with restricted access, without the explicit permission of both the channel owner and server adminstrators.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You confirm that you are at least 13 years of age.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The SpringRTS server and its managed game hosts process and retain data generated by their users:&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Registration &amp;amp; login details: email address, IP/MAC address, chosen username, (hashed) password.&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Actions taking place via Springs infrastructure: chat, games and all associated ingame commands, related hardware and connectivity information, client software used; and derived statistics of these data.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Source files, artwork and other content relating to games and development of games.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;The data are used to provide services that would normally be expected from an online gaming platform, primarily: &#039;&#039;&lt;br /&gt;
# &#039;&#039;Publicly available replays of games that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Persistent game and chat elements, which make users aware of publicly visible events that previously occurred on the platform.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Development and provision of the Spring engine, plus supporting infrastructure, including a lobbyserver in which users chat to each other. &#039;&#039;&lt;br /&gt;
# &#039;&#039;Bridging of publicly accessible chat channels to external locations, typically those managed by our own users or subprojects for purposes explicitly related to SpringRTS.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Verification of user identity on login and within battle hosts.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Moderator action in the event of disputes and suspected misconduct.&#039;&#039;&lt;br /&gt;
&#039;&#039;We process and retain information on basis of legitimate interest, to provide the above services. See the [[Data_Usage|data usage]] page on the springrts.com wiki for further information.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Battle hosts listed on our server are typically provided and hosted by our users; consequently when you choose to connect to a battle host your IP address will become known to this battle host, as will any data as described in item B above that you generate during your usage of the battle host. If you choose to operate a battle host yourself, your IP address will be shared with other users. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We permit users to connect to our server using external and bespoke client software. Consequently, the operation of such software may be outside of our control and knowledge. In such cases you must refer to your client software data usage policies for information concerning its treatment of the data you provide to it; the data usage policies summarised in this notice ONLY cover our usage of the data that is sent by you or your client software to our server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While the administrators and moderators of this server will attempt to keep users from violating this agreement, it is impossible for them to maintain order at all times. Therefore you acknowledge that any messages or actions within our server expresses the views and opinions of its author and not those of the administrators and moderators, who will not be held liable for other users actions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By using this service you hereby agree to all of the above terms.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Matrix&amp;diff=14273</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Matrix&amp;diff=14273"/>
		<updated>2019-03-22T20:28:00Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Matrix - Ubserver Bridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matrix is an open network for secure, decentralized communication. Spring has its own matrix server which is connected with [[Glenda]] to the lobby server.&lt;br /&gt;
&lt;br /&gt;
A lobby account is required to login: https://springrts.com/matrix/&lt;br /&gt;
&lt;br /&gt;
==== Matrix Server ====&lt;br /&gt;
* synapse: https://github.com/matrix-org/synapse&lt;br /&gt;
* authprovider: https://github.com/TurBoss/matrix-synapser-uberserver-xmlrpc&lt;br /&gt;
&lt;br /&gt;
==== Matrix - Uberserver Bridge ====&lt;br /&gt;
* framework: https://github.com/tulir/mautrix-python&lt;br /&gt;
* lobby library: https://github.com/TurBoss/asyncspring&lt;br /&gt;
* appservice: https://github.com/TurBoss/matrix-spring-appservice, https://github.com/half-shot/matrix-appservice-discord&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Matrix&amp;diff=14272</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Matrix&amp;diff=14272"/>
		<updated>2019-03-22T20:27:20Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: add links to repos for new bridges&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Matrix is an open network for secure, decentralized communication. Spring has its own matrix server which is connected with [[Glenda]] to the lobby server.&lt;br /&gt;
&lt;br /&gt;
A lobby account is required to login: https://springrts.com/matrix/&lt;br /&gt;
&lt;br /&gt;
==== Matrix Server ====&lt;br /&gt;
* synapse: https://github.com/matrix-org/synapse&lt;br /&gt;
* authprovider: https://github.com/TurBoss/matrix-synapser-uberserver-xmlrpc&lt;br /&gt;
&lt;br /&gt;
==== Matrix - Ubserver Bridge ====&lt;br /&gt;
* framework: https://github.com/tulir/mautrix-python&lt;br /&gt;
* lobby library: https://github.com/TurBoss/asyncspring&lt;br /&gt;
* appservice: https://github.com/TurBoss/matrix-spring-appservice, https://github.com/half-shot/matrix-appservice-discord&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Community_Docs&amp;diff=4653</id>
		<title>Community Docs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Community_Docs&amp;diff=4653"/>
		<updated>2019-03-19T11:28:39Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Lobby Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Community Docs ==&lt;br /&gt;
This page holds links to various documents that shape our online community.&lt;br /&gt;
&lt;br /&gt;
=== Licensing and forking ===&lt;br /&gt;
&lt;br /&gt;
Guidelines outlining how we handle [[Licenses_Forking_Mutators|licensing and forking]] of content within our own servers.&lt;br /&gt;
&lt;br /&gt;
Detailed information on how we think the engines [https://springrts.com/phpbb/viewtopic.php?f=1&amp;amp;t=17847 GPL license affects games and other content].&lt;br /&gt;
&lt;br /&gt;
=== Forum ===&lt;br /&gt;
&lt;br /&gt;
Our [[Felony|forum rules]], including a list of unacceptable conduct that can lead to warnings and bans.&lt;br /&gt;
&lt;br /&gt;
Guidelines on [[Forum_Etiquette|etiquette within online forums]].&lt;br /&gt;
&lt;br /&gt;
=== Lobby Server ===&lt;br /&gt;
&lt;br /&gt;
The [[Terms_of_Service|terms of service]] of the springrts.com lobby server, and [[Data_Usage|data usage policy]].&lt;br /&gt;
&lt;br /&gt;
Information for host owners about the role of [[Botflags|botflags and lobby moderators]].&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
[[Reporting|How to report issues to moderators.]]&lt;br /&gt;
&lt;br /&gt;
List of Springs current [https://springrts.com/phpbb/memberlist.php?mode=team moderators, administrators and engine developers].&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5296</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5296"/>
		<updated>2019-03-07T09:17:42Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Disclosure of data to third parties and other users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server and its managed game hosts process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and also contactable through springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles, but they do not become aware of any other type A data of these users. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use external GDPR compliant services to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5295</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5295"/>
		<updated>2019-03-07T09:17:10Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Data and usage of data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server and its managed game hosts process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and also contactable through springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles, but they do not become aware of any other type A data of these users. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use the external GDPR compliant service IPHub to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18173</id>
		<title>Terms of Service</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Terms_of_Service&amp;diff=18173"/>
		<updated>2019-02-22T17:36:26Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Terms of Service &amp;amp; Data Usage Information for the Lobby Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Terms of Service &amp;amp; Data Usage Information for the Lobby Server ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to use any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-oriented or any other material that may violate any applicable laws. Doing so may lead to you being immediately and permanently banned, and to your service provider and relevant legal authorities being informed of your actions and of data which personally identifies you.&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree that the administrators and moderators of this server have the right to mute, kick or ban you at any time should they see fit, and you agree to abide by any such restrictions imposed on you.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You agree not to share, relay or otherwise publish the content of any passworded channels, passworded hosts or other contexts with restricted access, without the explicit permission of both the channel owner and server adminstrators.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;You confirm that you are at least 13 years of age.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The SpringRTS server and its managed game hosts process and retain data generated by their users:&#039;&#039;&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Registration &amp;amp; login details: email address, IP/MAC address, chosen username, (hashed) password.&#039;&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Actions taking place via Springs infrastructure: chat, games and all associated ingame commands, related hardware and connectivity information, client software used; and derived statistics of these data.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;Source files, artwork and other content relating to games and development of games.&#039;&#039; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&#039;&#039;The data are used to provide services that would normally be expected from an online gaming platform, primarily: &#039;&#039;&lt;br /&gt;
# &#039;&#039;Publicly available replays of games that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Persistent game and chat elements, which make users aware of publicly visible events that previously occurred on the platform.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Development and provision of the Spring engine, plus supporting infrastructure, including a lobbyserver in which users chat to each other. &#039;&#039;&lt;br /&gt;
# &#039;&#039;Bridging of publicly accessible chat channels to external locations, typically those managed by our own users or subprojects for purposes explicitly related to SpringRTS.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Verification of user identity on login and within battle hosts.&#039;&#039;&lt;br /&gt;
# &#039;&#039;Moderator action in the event of disputes and suspected misconduct.&#039;&#039;&lt;br /&gt;
&#039;&#039;We process and retain information on basis of legitimate interest, to provide the above services. See the [[Data_Usage|data usage]] page on the springrts.com wiki for further information. A summary follows:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Data supplied within a publicly visible context, such as a public chat channel, will be made publicly available to other users and may also be disclosed to third parties. Private messages and the contents of passworded channels are not made publicly available or disclosed to third parties. All data supplied in contexts that are shared with other users is forwarded to other users in real-time and may potentially be retained or processed by those other users for periods and purposes outside of our control and knowledge. We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that users may have engaged in illegal activity. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Battle hosts listed on our server are typically provided and hosted by our users; consequently when you choose to connect to a battle host your IP address will become known to this battle host, as will any data as described in item B above that you generate during your usage of the battle host. If you choose to operate a battle host yourself, your IP address will be shared with other users. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We may send automated emails for purposes related to account verification, such as if you request account recovery. We do not engage in targeted advertising and will not send you emails marketing any services or products, including our own. We do not disclose your email address to third parties.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We permit users to connect to our server using external and bespoke client software. Consequently, the operation of such software may be outside of our control and knowledge. In such cases you must refer to your client software data usage policies for information concerning its treatment of the data you provide to it; the data usage policies summarised in this notice ONLY cover our usage of the data that is sent by you or your client software to our server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While the administrators and moderators of this server will attempt to keep users from violating this agreement, it is impossible for them to maintain order at all times. Therefore you acknowledge that any messages or actions within our server expresses the views and opinions of its author and not those of the administrators and moderators, who will not be held liable for other users actions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By using this service you hereby agree to all of the above terms.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Gamedev:PublicRepos&amp;diff=8359</id>
		<title>Gamedev:PublicRepos</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Gamedev:PublicRepos&amp;diff=8359"/>
		<updated>2019-02-22T06:55:26Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Known Repos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What Is This?==&lt;br /&gt;
This is a small collection of publicly known and readable code repositories for established Spring games. The intention being to provide a wealth of examples to all game developers from noob to pro.&lt;br /&gt;
&lt;br /&gt;
Most of these repositories can be downloaded with one of the [[Rapid_Tags]].&lt;br /&gt;
&lt;br /&gt;
== Known Repos ==&lt;br /&gt;
[https://github.com/KingRaptor/air-raid-spring Air Raid]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/balanced-annihilation Balanced Annihilation]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring-archive/basically-ota BOTA]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring-archive/conflictterra Conflict Terra]&lt;br /&gt;
&lt;br /&gt;
[http://www.petro.darkstars.co.uk/damned/ Damned]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/EvolutionRTS/Evolution-RTS Evolution RTS]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpringCabal/Gravitas Gravitas]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/imperialwinter/swiw.sdd Imperial Winter]&lt;br /&gt;
&lt;br /&gt;
[https://bitbucket.org/PicassoCT/journeywar Journeywar]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jk3064?tab=repositories jK]&lt;br /&gt;
* [[Chili]]&lt;br /&gt;
* [[LUPS]]&lt;br /&gt;
* Custom-Unit-Shader-Framework&lt;br /&gt;
* [[Mapdev:Main#Blueprint | Map-Blueprint]]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/David-Becker/mods KDR_11k] &lt;br /&gt;
* Cuberors&#039; Finest&lt;br /&gt;
* CvC&lt;br /&gt;
* Doserz&lt;br /&gt;
* Fibre&lt;br /&gt;
* GINTA&lt;br /&gt;
* Gun Wings Test&lt;br /&gt;
* Light Side of Spring&lt;br /&gt;
* MicroModules&lt;br /&gt;
* Pong&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpringMCLegacy/SpringMCLegacy MechCommander: Legacy]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring1944/spring1944 Spring: 1944]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring-archive/springtanks Spring Tanks]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/spring-archive/springtutorialgame/tree/master/SpringTutorialGame.sdd Spring Tutorial Game]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/n3wm1nd/TA Tech Annihilation]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/KingRaptor/THIS THIS]&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/xta-springrts/ XTA]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ZeroK-RTS/Zero-K/ Zero-K]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Dev]]&lt;br /&gt;
[[Category:Download Systems]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=ChanServ&amp;diff=4035</id>
		<title>ChanServ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=ChanServ&amp;diff=4035"/>
		<updated>2019-02-12T21:40:42Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Channel forwarding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ChanServ is the lobby bot of [[uberserver]] for managing channels in the springrts.com lobby. It is intended that one day ChanServ will be replaced with a GUI, but we didn&#039;t get there yet.&lt;br /&gt;
&lt;br /&gt;
==Interacting with ChanServ==&lt;br /&gt;
ChanServ commands are prefixed by a colon &#039;&#039;&#039;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&#039;&#039;&#039;. They can be given in two forms:&lt;br /&gt;
* By PM to the ChanServ bot, in the form e.g. &#039;&#039;&#039;&amp;lt;code&amp;gt;:topic newbies Welcome to #newbies!&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* Within a channel in which ChanServ is present, in the form e.g. &#039;&#039;&#039;&amp;lt;code&amp;gt;:topic Welcome to #newbies!&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
In the second form, the channel name is omitted. Note that in this first form the channel name &#039;newbies&#039; is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; preceded by a # character.&lt;br /&gt;
&lt;br /&gt;
ChanServ is present in all registered channels, and adds extra functionality to these channels as documented below. Contact a lobbyserver moderator to register a channel.&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
All expressed as though sent in PM to ChanServ; when used inside a channel the chanName arg is omitted. All commands are callable by users with channel operator/founder or lobby moderator status, unless specified otherwise.&lt;br /&gt;
&lt;br /&gt;
===Registering channels and operators===&lt;br /&gt;
These commands are accessible only to lobby moderators and the channel founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:register chanName chanFounder&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Registers a channel. If the final argument is omitted, the callee will be the founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unregister chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Un-registers a channel.  &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:changefounder chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user not be a channel operator. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:op chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user into a channel operator. Accessible only to lobbyserver moderators and the channel founder. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:deop chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user not be a channel operator. Accessible only to lobbyserver moderators and the channel founder. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:history chanName state&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Turns persistent chat functionality on/off. State should be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:antispam chanName state&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Turns antispam chat functionality on/off. State should be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;.&lt;br /&gt;
===Managing users===&lt;br /&gt;
These commands are accessible to channel operators, as well as lobby moderators and the channel founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:topic chanName topic&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets the topic, which is displayed to all users when they join the channel.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:mute chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Mutes a user. The duration can be in form e.g. &amp;quot;2d&amp;quot; for two days or &amp;quot;1h&amp;quot; for one hour.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unmute chanName target_username &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Unmutes a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listmutes&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of muted users.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:ban chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Bans a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unban chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Unbans a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listbans&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of banned users.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:kick chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Kicks a user.&lt;br /&gt;
&lt;br /&gt;
===Channel forwarding===&lt;br /&gt;
These commands are accessible only to lobby moderators.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:forward from_chanName to_chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Set up forwarding of all operator statuses, mutes and bans, from a channel to a battle. Call this command more than once to forward to more than one battle.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unforward from_chanName to_chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Remove forwarding.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listforwards chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of the locations this channel is forwarding too.&lt;br /&gt;
&lt;br /&gt;
===General info===&lt;br /&gt;
These commands can be called by anyone.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:battlename username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns the name of the channel in use by this user to host their current battle.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:info chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Displays information about the channel, including the founder and list of operators. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Offers you a link to this page! &lt;br /&gt;
&lt;br /&gt;
[[Category:Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=ChanServ&amp;diff=4034</id>
		<title>ChanServ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=ChanServ&amp;diff=4034"/>
		<updated>2019-02-12T21:40:28Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Managing users and channels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ChanServ is the lobby bot of [[uberserver]] for managing channels in the springrts.com lobby. It is intended that one day ChanServ will be replaced with a GUI, but we didn&#039;t get there yet.&lt;br /&gt;
&lt;br /&gt;
==Interacting with ChanServ==&lt;br /&gt;
ChanServ commands are prefixed by a colon &#039;&#039;&#039;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&#039;&#039;&#039;. They can be given in two forms:&lt;br /&gt;
* By PM to the ChanServ bot, in the form e.g. &#039;&#039;&#039;&amp;lt;code&amp;gt;:topic newbies Welcome to #newbies!&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* Within a channel in which ChanServ is present, in the form e.g. &#039;&#039;&#039;&amp;lt;code&amp;gt;:topic Welcome to #newbies!&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
In the second form, the channel name is omitted. Note that in this first form the channel name &#039;newbies&#039; is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; preceded by a # character.&lt;br /&gt;
&lt;br /&gt;
ChanServ is present in all registered channels, and adds extra functionality to these channels as documented below. Contact a lobbyserver moderator to register a channel.&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
All expressed as though sent in PM to ChanServ; when used inside a channel the chanName arg is omitted. All commands are callable by users with channel operator/founder or lobby moderator status, unless specified otherwise.&lt;br /&gt;
&lt;br /&gt;
===Registering channels and operators===&lt;br /&gt;
These commands are accessible only to lobby moderators and the channel founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:register chanName chanFounder&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Registers a channel. If the final argument is omitted, the callee will be the founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unregister chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Un-registers a channel.  &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:changefounder chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user not be a channel operator. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:op chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user into a channel operator. Accessible only to lobbyserver moderators and the channel founder. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:deop chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user not be a channel operator. Accessible only to lobbyserver moderators and the channel founder. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:history chanName state&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Turns persistent chat functionality on/off. State should be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:antispam chanName state&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Turns antispam chat functionality on/off. State should be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;.&lt;br /&gt;
===Managing users===&lt;br /&gt;
These commands are accessible to channel operators, as well as lobby moderators and the channel founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:topic chanName topic&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets the topic, which is displayed to all users when they join the channel.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:mute chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Mutes a user. The duration can be in form e.g. &amp;quot;2d&amp;quot; for two days or &amp;quot;1h&amp;quot; for one hour.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unmute chanName target_username &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Unmutes a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listmutes&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of muted users.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:ban chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Bans a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unban chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Unbans a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listbans&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of banned users.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:kick chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Kicks a user.&lt;br /&gt;
&lt;br /&gt;
===Channel forwarding===&lt;br /&gt;
These commands are accessible only to lobby moderators.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:forward from_chanName to_chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Set up forwarding of all operator statuses, mutes and bans, from a channel to a battle. Call this command more than once to forward to more than one battle.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unforward from_chanName to_chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Remove forwarding.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listforwards chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of the loations this channel is forwarding too.&lt;br /&gt;
===General info===&lt;br /&gt;
These commands can be called by anyone.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:battlename username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns the name of the channel in use by this user to host their current battle.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:info chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Displays information about the channel, including the founder and list of operators. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Offers you a link to this page! &lt;br /&gt;
&lt;br /&gt;
[[Category:Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=ChanServ&amp;diff=4033</id>
		<title>ChanServ</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=ChanServ&amp;diff=4033"/>
		<updated>2019-02-12T21:39:52Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Managing users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ChanServ is the lobby bot of [[uberserver]] for managing channels in the springrts.com lobby. It is intended that one day ChanServ will be replaced with a GUI, but we didn&#039;t get there yet.&lt;br /&gt;
&lt;br /&gt;
==Interacting with ChanServ==&lt;br /&gt;
ChanServ commands are prefixed by a colon &#039;&#039;&#039;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&#039;&#039;&#039;. They can be given in two forms:&lt;br /&gt;
* By PM to the ChanServ bot, in the form e.g. &#039;&#039;&#039;&amp;lt;code&amp;gt;:topic newbies Welcome to #newbies!&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
* Within a channel in which ChanServ is present, in the form e.g. &#039;&#039;&#039;&amp;lt;code&amp;gt;:topic Welcome to #newbies!&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
In the second form, the channel name is omitted. Note that in this first form the channel name &#039;newbies&#039; is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; preceded by a # character.&lt;br /&gt;
&lt;br /&gt;
ChanServ is present in all registered channels, and adds extra functionality to these channels as documented below. Contact a lobbyserver moderator to register a channel.&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
All expressed as though sent in PM to ChanServ; when used inside a channel the chanName arg is omitted. All commands are callable by users with channel operator/founder or lobby moderator status, unless specified otherwise.&lt;br /&gt;
&lt;br /&gt;
===Registering channels and operators===&lt;br /&gt;
These commands are accessible only to lobby moderators and the channel founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:register chanName chanFounder&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Registers a channel. If the final argument is omitted, the callee will be the founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unregister chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Un-registers a channel.  &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:changefounder chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user not be a channel operator. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:op chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user into a channel operator. Accessible only to lobbyserver moderators and the channel founder. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:deop chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Make a user not be a channel operator. Accessible only to lobbyserver moderators and the channel founder. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:history chanName state&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Turns persistent chat functionality on/off. State should be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:antispam chanName state&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Turns antispam chat functionality on/off. State should be &amp;quot;on&amp;quot; or &amp;quot;off&amp;quot;.&lt;br /&gt;
===Managing users and channels===&lt;br /&gt;
These commands are accessible to channel operators, as well as lobby moderators and the channel founder.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:topic chanName topic&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Sets the topic, which is displayed to all users when they join the channel.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:mute chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Mutes a user. The duration can be in form e.g. &amp;quot;2d&amp;quot; for two days or &amp;quot;1h&amp;quot; for one hour.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unmute chanName target_username &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Unmutes a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listmutes&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of muted users.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:ban chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Bans a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unban chanName target_username duration reason&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Unbans a user.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listbans&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of banned users.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:kick chanName username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Kicks a user.&lt;br /&gt;
&lt;br /&gt;
===Channel forwarding===&lt;br /&gt;
These commands are accessible only to lobby moderators.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:forward from_chanName to_chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Set up forwarding of all operator statuses, mutes and bans, from a channel to a battle. Call this command more than once to forward to more than one battle.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:unforward from_chanName to_chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Remove forwarding.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:listforwards chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns a list of the loations this channel is forwarding too.&lt;br /&gt;
===General info===&lt;br /&gt;
These commands can be called by anyone.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:battlename username&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt; Returns the name of the channel in use by this user to host their current battle.&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:info chanName&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Displays information about the channel, including the founder and list of operators. &lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;code&amp;gt;:help&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;Offers you a link to this page! &lt;br /&gt;
&lt;br /&gt;
[[Category:Lobby]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5294</id>
		<title>Data Usage</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Data_Usage&amp;diff=5294"/>
		<updated>2019-02-12T13:18:28Z</updated>

		<summary type="html">&lt;p&gt;Silentwings: /* Disclosure of data to third parties and other users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Wiki]] &amp;lt; [[Community_Docs|Community]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==Data and usage of data==&lt;br /&gt;
&lt;br /&gt;
The SpringRTS server and its managed game hosts process and retain information generated by users: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:upper-alpha&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Registration &amp;amp; login details: email address, IP/MAC address, chosen username, (hashed) password.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Actions taking place via Springs infrastructure: chat, games played by users and all associated ingame commands, hardware and connectivity information characterizing suitability to play such games, client software used, IP addresses of battle hosts; and derived statistics of these data. This data is divided into two types: &lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:decimal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in publicly accessible contexts, such as non-passworded chat channels and battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Data created in private contexts, such as private messages, passworded chat channels and passworded battle hosts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Source files, artwork and other content relating to games and development of games.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
This data is used to provide services that would normally be expected from an online gaming platform, primarily: &lt;br /&gt;
# &#039;&#039;&#039;Publicly available replays of games&#039;&#039;&#039; that were played in publicly accessible contexts. These include all actions taken by players, including chat, within the game.&lt;br /&gt;
# &#039;&#039;&#039;Persistent game and chat elements,&#039;&#039;&#039; which make users aware of publicly visible events that previously occurred on the platform.&lt;br /&gt;
# &#039;&#039;&#039;Development and provision of the Spring engine,&#039;&#039;&#039; plus supporting infrastructure, including a lobbyserver in which users chat to each other. &lt;br /&gt;
# &#039;&#039;&#039;Bridging of publicly accessible chat channels&#039;&#039;&#039; to external locations, typically those managed by our own users and sub-projects for purposes explicitly related to SpringRTS.&lt;br /&gt;
# &#039;&#039;&#039;Verification of user identity&#039;&#039;&#039; on login and within battle hosts.&lt;br /&gt;
# &#039;&#039;&#039;Moderator action&#039;&#039;&#039; in the event of disputes and suspected misconduct.&lt;br /&gt;
&#039;&#039;&#039;We retain and process data of types A, B and C on basis of legitimate interest, to provide the above services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Users may connect to our server using external and bespoke software, known as a “client”, as specified through a publicly available protocol. This software may be outside of our control and knowledge. In such cases, whilst we may deny connections from clients that do not comply with GDPR and other legal requirements where it is technically and practically possible for us to do so, the operation and compliance of client software is the responsibility of its authors and users. The data usage policies summarised in this notice ONLY cover our usage of the data that is sent by users and users client software to our server.&lt;br /&gt;
&lt;br /&gt;
Users are contacted via automated messages to email addresses that they provide for purposes related to item 5 when it is necessary to do so, such as when a user requests account recovery. In exceptional circumstances we may also manually contact individual users for purposes related to items 3 or 6. We do not use these email addresses to send marketing emails to our users and we do not disclose email addresses to third parties. &lt;br /&gt;
&lt;br /&gt;
====Legitimate Interest====&lt;br /&gt;
We would be unable to provide the above services without retention and processing of the above data. Items 1 and 2 consist wholly of retaining and processing data of types B and C. Data retained and processed relating to item 3 consists of type B and C data, primarily communications occurring between users during their cooperative usage of our services, plus games and other content files for these services. Item 4 requires no retention of data, but requires on-the-fly processing of type B data. Item 5 requires type A data to correctly associate login attempts to user accounts and to help protect the server and battle hosts from malicious activity. Item 6 requires both type A and B data, to support moderator actions identifying, discouraging and preventing misconduct.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data is generated exclusively by individuals within in publicly accessible contexts, in which an expectation exists that this data will be shared with any number of other users. Type B.2 data is generated by individual in contexts where an expectation of privacy from other users exists. Such data is of a nature that is not expected to carry significant risk to an individual’s rights and freedoms, however steps are taken to respect this privacy as detailed below; this data is used only for purposes relating to items 3 and 6. The retention and processing of type B data carries a low risk of inhibiting individual’s rights and freedoms.&lt;br /&gt;
&lt;br /&gt;
Type A data contains information (particularly: email, IP and MAC addresses) provided in private contexts that could, in some cases, and when supplemented with external sources of related information, be used to identify a real individual from their online footprint and consequently requires appropriate protection as detailed below; since otherwise the data held by SpringRTS concerning such individuals is of a non-sensitive nature the associated impact on individuals interests, rights and freedoms is low.&lt;br /&gt;
&lt;br /&gt;
Developers and other users who provide data of type C may also provide licenses for such data. Authors may choose to include their own contact details; the risk to the individual’s rights and freedoms is low. For details on how we handle such content see our policies on licensing, forking, and on how the GPL license of the spring engine affects game content.&lt;br /&gt;
&lt;br /&gt;
We do not engage in targeted advertising. We do not engage in profiling or automated decision making that has legal implications for users. We do not process or retain criminal or special category data. &lt;br /&gt;
&lt;br /&gt;
All of our codebases are open source, permitting our users and developers to verify and review that our systems perform as described in this document, and to report any related technical errors.&lt;br /&gt;
&lt;br /&gt;
==User rights under GDPR==&lt;br /&gt;
&lt;br /&gt;
Users wishing to exercise their rights under GDPR should contact moderation staff, who are identifiable on the server by means of a spanner icon, and also contactable through springrts.com or by email at postmaster@springrts.com; such requests are handled on a case-by-case basis. We have procedures in place to assess numbers of moderation staff and ensure that such people are contactable and able to respond within the required time periods. Any data supplied in response will typically come in plain text form, or in the form of access to online replay files.&lt;br /&gt;
&lt;br /&gt;
Note that the right to erasure under GDPR is not absolute; in particular we may refuse to fully erase data of individuals with a record of past misconduct if we believe such data may be required to prevent potential future misconduct of sufficient severity. See [http://www.privacy-regulation.eu/en/recital-49-GDPR.htm] for details.&lt;br /&gt;
&lt;br /&gt;
==Disclosure of data to third parties and other users==&lt;br /&gt;
&lt;br /&gt;
When information is supplied to us within a publicly visible medium, such as through a public chat channel or public game host, we may and typically will make this information publicly available to other users and to GDPR compliant third parties. This pertains to type all type B.1 data, plus usernames. &lt;br /&gt;
&lt;br /&gt;
Type B.2 data is supplied to other users only when these other users are present or have access to the private context, such as a passworded chat channel or passworded game host, in which the data was created. This data is not disclosed to third parties, but it is retained to provide persistent chat functionality and is accessible to server administrators whilst it is retained.&lt;br /&gt;
&lt;br /&gt;
When users choose to act as battle hosts, or provide automated battle hosts, the IP address of this host becomes publicly available information, necessarily to allow our users to make a (direct) connection to the battle, and for the battle host to accept or decline this connection. Battle hosts receive usernames plus type B data associated to the battles that they host and will typically distribute this data to other connected users. Battle hosts also necessarily become aware of the IP addresses of users attempting to connect to their battles, but they do not become aware of any other type A data of these users. On a technical level, the distributed nature of battle hosting amongst our users arises from a need for more computational resources and connectivity than the Spring server alone provides. Consequently, battle hosts take on responsibilities of their own under the GDPR and are required to comply fully with the policies set out in this document. &lt;br /&gt;
&lt;br /&gt;
Non-public information supplied to us on login, pertaining to all type A data excluding usernames, may be visible to our moderators and developers when there is a need under items 3 or 6. Hashed passwords are accessible only to developers with a need to access the live user database. Type A data is not disclosed to third parties or other users, except to battle hosts as described above, and except where we judge it necessary for purposes of verifying the authenticity of users; we use the external GDPR compliant service IPHub to assist in automated detection of potentially malicious users attempting to conceal their own identities. &lt;br /&gt;
&lt;br /&gt;
We reserve the right to pass ANY data that we hold to relevant law enforcement agencies if we believe that it may contain indications or evidence of illegal action.&lt;br /&gt;
&lt;br /&gt;
==Data storage and protection==&lt;br /&gt;
&lt;br /&gt;
All data retained are kept within databases and/or file archives on our server, located within the EU. &lt;br /&gt;
&lt;br /&gt;
The database files are directly accessible only to chosen individuals who require access for purposes related to server development or administration; access is possible only via an encrypted connection using individual credentials. The list of individuals with this access is reviewed regularly on timescales related to their activity. All data of type A held by us is contained within these databases.&lt;br /&gt;
Archives of replay files are made available through a public website.&lt;br /&gt;
&lt;br /&gt;
Communications of users to and from our lobbyserver, which covers all type A data sometimes excepting usernames and chat taking place on the lobbyserver, is encrypted (except in cases where users have persistently declined over many years to install software updates supporting this encryption). Passwords are communicated and stored only in hashed format.&lt;br /&gt;
&lt;br /&gt;
Communications taking place between players and spectators within online games, typically consisting of ingame commands and chat, are not encrypted; the Spring engine uses a bespoke protocol for such communications, which prioritises low latency. These communications consist of less sensitive data - type B data plus usernames – and it is judged here that the requirement of minimal latency should take precedence over the benefits to privacy of an encryption layer.&lt;br /&gt;
&lt;br /&gt;
==Retention and erasure of personal data==&lt;br /&gt;
&lt;br /&gt;
The record of type A data of a user is retained for as long as we regard the user as active or with a significant possibility of returning to activity; we engage in automated deletion of such records for users who have remained inactive for 5 consecutive years. This threshold is chosen based on the behaviour of our users, who are known to return after lengthy periods of absence.&lt;br /&gt;
&lt;br /&gt;
Type B.1 data of users, plus usernames, is retained in the form of publicly available archives of online games. We engage in automated deletion of this data after 3 years, but in special cases some replays may be retained for longer.&lt;br /&gt;
&lt;br /&gt;
Type B.1 and type B.2 data consisting of chat taking place on the server within registered channels, in which channel history functionality has been enabled, is stored for up to one month in a database that provides persistent chat functionality. Otherwise, type B.2 data is not retained.&lt;br /&gt;
&lt;br /&gt;
Users should note that when they create type B data they typically do so in the presence of other users who may retain and process the data for periods and purposes outside of our control or knowledge.&lt;br /&gt;
&lt;br /&gt;
We retain and erase type C data according to its license. We regard maintaining a publicly available archive of this data as critical to providing our services and to future development and, whilst we respect individuals right to erasure upon request of any personal data within this archive, we do not engage in automated deletion of it after any time period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Silentwings</name></author>
	</entry>
</feed>