<?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=Hoijui</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=Hoijui"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Hoijui"/>
	<updated>2026-11-08T18:26:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6026</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6026"/>
		<updated>2014-01-18T08:45:06Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Spring Engine (no games included) */ &amp;quot;language style&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#css:&lt;br /&gt;
  #content * {font-family: &#039;Bitstream Vera Sans&#039;,  &#039;Trebuchet MS&#039;, &#039;Arial&#039;, &#039;Myriad Pro&#039;, &#039;FreeSans&#039;;}&lt;br /&gt;
}}&lt;br /&gt;
= Downloads =&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top: 15px; padding: 10px; background:rgba(45,180,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 6px 6px 6px 6px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
| If you just want to &amp;lt;u&amp;gt;get ready to play&amp;lt;/u&amp;gt;, you want this:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;margin-top: 15px; text-align: center&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[GamesDownloads|Games Downloads]]&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spring Engine (no games included) =&lt;br /&gt;
&lt;br /&gt;
Latest stable version: &#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039; ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Window.png]]&lt;br /&gt;
| &#039;&#039;&#039;Installer: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}.exe/download spring_{{StableEngineVersion}}.exe ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/buildbot/default/master/{{StableEngineVersion}}/win32/spring_{{StableEngineVersion}}.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_portable.7z/download spring_{{StableEngineVersion}}_portable.7z ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/buildbot/default/master/{{StableEngineVersion}}/win32/spring_{{StableEngineVersion}}_portable.7z {mirror}]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
| &#039;&#039;&#039;64bit static binaries: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_minimal-portable-linux64-static.7z/download spring_{{StableEngineVersion}}_linux64.7z ~15MB]&#039;&#039;&#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;32bit static binaries: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_minimal-portable-linux32-static.7z/download spring_{{StableEngineVersion}}_linux32.7z ~15MB]&#039;&#039;&#039;&amp;lt;br/&amp;gt;(binary builds &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;do not contain a lobby&amp;lt;/span&amp;gt;, you need to install one via [[SetupGuide|Linux Setup guide]])&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;distro native installs:&#039;&#039;&#039; follow the &#039;&#039;&#039;[[SetupGuide|Linux Setup guide]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Apple.png]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;.app-Bundle: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip/download spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip ~50MB]&#039;&#039;&#039; - [http://springrts.com/dl/buildbot/default/master/{{StableEngineVersion}}/osx64/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The Mac OS X port is &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;experimental&amp;lt;/span&amp;gt;. Help with its development would be greatly appreciated. Check our forum &#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=65 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;here&amp;lt;/span&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
The Spring Engine is licensed under the [https://github.com/spring/spring/blob/develop/LICENSE GNU GPL 2].&lt;br /&gt;
&lt;br /&gt;
= Testing/Nightly Builds =&lt;br /&gt;
Used for testing latest engine developments.&lt;br /&gt;
[http://springrts.com/dl/buildbot/ list of all test builds]&lt;br /&gt;
&lt;br /&gt;
= Source Code =&lt;br /&gt;
== git ==&lt;br /&gt;
&#039;&#039;&#039;[http://github.com/spring/spring &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring project page at github&amp;lt;/span&amp;gt;]&#039;&#039;&#039; &amp;lt;small&amp;gt;[http://status.github.com (status page)]&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Getting the Source ===&lt;br /&gt;
latest stable:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone -b master git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
development branch (won&#039;t work for online gaming):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternate git url ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git://springrts.git.sourceforge.net/gitroot/springrts/springrts&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Latest Stable Snapshot ==&lt;br /&gt;
This tarball is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;br /&gt;
&lt;br /&gt;
The packages below target Linux only and do not contain certain files required to compile using CMake on Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.lzma/download spring_{{StableEngineVersion}}_src.tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/buildbot/default/master/{{StableEngineVersion}}/source/spring_{{StableEngineVersion}}_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.gz/download spring_{{StableEngineVersion}}_src.tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/buildbot/default/master/{{StableEngineVersion}}/source/spring_{{StableEngineVersion}}_src.tar.gz {mirror}]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Spring_Replays&amp;diff=17286</id>
		<title>Spring Replays</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Spring_Replays&amp;diff=17286"/>
		<updated>2013-04-07T07:47:05Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Chat Commands */ fix one command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Recording Replays ===&lt;br /&gt;
Replays are automatically recoreded for every game you play in Spring.&amp;lt;br&amp;gt; They are saved to your Spring\demos\ folder.&lt;br /&gt;
&lt;br /&gt;
=== Watching Replays ===&lt;br /&gt;
There are multiple ways to watch a replay:&lt;br /&gt;
&lt;br /&gt;
1) Use the replays browser of your lobby. This depends on what lobby you use.&lt;br /&gt;
&lt;br /&gt;
2) Drag &amp;amp; and drop the replay file onto Spring.exe&lt;br /&gt;
&lt;br /&gt;
3) Associate .sdf replay files with spring.exe&lt;br /&gt;
&lt;br /&gt;
Then just doubleclick the replay file.&lt;br /&gt;
&lt;br /&gt;
4) use rightlick -&amp;gt; open with -&amp;gt; Spring.exe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
People watch replays to improve their skill by watching what they did wrong, and what other people did right. Use them to improve your skill.&lt;br /&gt;
&lt;br /&gt;
=== Uploading Replays ===&lt;br /&gt;
Replays can be uploaded to [http://replays.springrts.com/ replays.springrts.com]. Uploaded replays can be commented. The uploader can edit the description and tags. To upload or comment a Spring lobby login is needed.&lt;br /&gt;
&lt;br /&gt;
If you wish to discuss a match with other players, just give them the link to the uploaded replay.&lt;br /&gt;
&lt;br /&gt;
A testing site is available at [http://replays.springrts.com/ replays-test.springrts.com].&lt;br /&gt;
&lt;br /&gt;
SPADS autohost owners can configure SPADS to automatically upload all matches. For instructions read [https://github.com/dansan/spring-replay-site/raw/master/README.replay-upload README.replay-upload].&lt;br /&gt;
&lt;br /&gt;
If you have trouble with the replays website please contact Dansan at the [http://springrts.com/phpbb/ Spring forums].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Replays from different versions of Spring are not compatible. That is, if you have installed version {{CurrentVersion}}, you can only watch replays recorded in {{CurrentVersion}}. The replays are automatically labeled by spring with the current version number.)&lt;br /&gt;
&lt;br /&gt;
=== Important keys to use while watching the replay: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;L:&#039;&#039;&#039; Shows you Radar and LOS information of active player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1,2,3...&#039;&#039;&#039;: Changes active player, this is usefull to check on economy and LOS information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F12&#039;&#039;&#039;: Screenshots!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;+&#039;&#039;&#039; / &#039;&#039;&#039;-&#039;&#039;&#039; : adjust game speed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pause key&#039;&#039;&#039;: Pause&lt;br /&gt;
&lt;br /&gt;
==Chat Commands==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip &#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay to second &#039;&#039;n&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip +&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay &#039;&#039;n&#039;&#039; seconds&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip f&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay to frame &#039;&#039;n&#039;&#039; (there are 30 frames per second)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip f+&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay &#039;&#039;n&#039;&#039; frames (there are 30 frames per second)&lt;br /&gt;
&lt;br /&gt;
Example: &#039;&#039;&#039;/skip f1&#039;&#039;&#039; at the start of the replay can be useful to skip long pre-game chatter and go directly to the action.&lt;br /&gt;
&lt;br /&gt;
[[Category:Playing]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Spring_Replays&amp;diff=17285</id>
		<title>Spring Replays</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Spring_Replays&amp;diff=17285"/>
		<updated>2013-04-07T07:33:15Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Chat Commands */  added other commands, fixed existing and fixed formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Recording Replays ===&lt;br /&gt;
Replays are automatically recoreded for every game you play in Spring.&amp;lt;br&amp;gt; They are saved to your Spring\demos\ folder.&lt;br /&gt;
&lt;br /&gt;
=== Watching Replays ===&lt;br /&gt;
There are multiple ways to watch a replay:&lt;br /&gt;
&lt;br /&gt;
1) Use the replays browser of your lobby. This depends on what lobby you use.&lt;br /&gt;
&lt;br /&gt;
2) Drag &amp;amp; and drop the replay file onto Spring.exe&lt;br /&gt;
&lt;br /&gt;
3) Associate .sdf replay files with spring.exe&lt;br /&gt;
&lt;br /&gt;
Then just doubleclick the replay file.&lt;br /&gt;
&lt;br /&gt;
4) use rightlick -&amp;gt; open with -&amp;gt; Spring.exe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
People watch replays to improve their skill by watching what they did wrong, and what other people did right. Use them to improve your skill.&lt;br /&gt;
&lt;br /&gt;
=== Uploading Replays ===&lt;br /&gt;
Replays can be uploaded to [http://replays.springrts.com/ replays.springrts.com]. Uploaded replays can be commented. The uploader can edit the description and tags. To upload or comment a Spring lobby login is needed.&lt;br /&gt;
&lt;br /&gt;
If you wish to discuss a match with other players, just give them the link to the uploaded replay.&lt;br /&gt;
&lt;br /&gt;
A testing site is available at [http://replays.springrts.com/ replays-test.springrts.com].&lt;br /&gt;
&lt;br /&gt;
SPADS autohost owners can configure SPADS to automatically upload all matches. For instructions read [https://github.com/dansan/spring-replay-site/raw/master/README.replay-upload README.replay-upload].&lt;br /&gt;
&lt;br /&gt;
If you have trouble with the replays website please contact Dansan at the [http://springrts.com/phpbb/ Spring forums].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Replays from different versions of Spring are not compatible. That is, if you have installed version {{CurrentVersion}}, you can only watch replays recorded in {{CurrentVersion}}. The replays are automatically labeled by spring with the current version number.)&lt;br /&gt;
&lt;br /&gt;
=== Important keys to use while watching the replay: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;L:&#039;&#039;&#039; Shows you Radar and LOS information of active player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1,2,3...&#039;&#039;&#039;: Changes active player, this is usefull to check on economy and LOS information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;F12&#039;&#039;&#039;: Screenshots!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;+&#039;&#039;&#039; / &#039;&#039;&#039;-&#039;&#039;&#039; : adjust game speed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pause key&#039;&#039;&#039;: Pause&lt;br /&gt;
&lt;br /&gt;
==Chat Commands==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip &#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay to second &#039;&#039;n&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip +&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay &#039;&#039;n&#039;&#039; seconds&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip f&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay to frame &#039;&#039;n&#039;&#039; (there are 30 frames per second)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/skip +f&#039;&#039;&amp;lt;n&amp;gt;&#039;&#039;&#039;&#039;&#039; : Fast forward the replay &#039;&#039;n&#039;&#039; frames (there are 30 frames per second)&lt;br /&gt;
&lt;br /&gt;
Example: &#039;&#039;&#039;/skip f1&#039;&#039;&#039; at the start of the replay can be useful to skip long pre-game chatter and go directly to the action.&lt;br /&gt;
&lt;br /&gt;
[[Category:Playing]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:Development:Lang:Java&amp;diff=638</id>
		<title>AI:Development:Lang:Java</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:Development:Lang:Java&amp;diff=638"/>
		<updated>2013-03-11T18:09:05Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: marked the Java AI &amp;#039;Netbeasn PDF Tutorial as outdated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[AI:Development|AI Development]] &amp;lt; Java AI Development&lt;br /&gt;
&lt;br /&gt;
== Getting Started on your own Java AI ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; This tutorial assumes you have Spring working on your machine. The Spring directory will be referred to as &#039;Spring&#039; from here on.&lt;br /&gt;
&lt;br /&gt;
You will also need to make sure that Java AI&#039;s run properly on your machine. This is most easily done by running a Spring game with the &#039;&#039;NullOOJavaAI&#039;&#039; that comes with the engine. You will need the JRE 1.5 or greater, and to set the &#039;&#039;JAVA_HOME&#039;&#039; environment variable on your system to point to the correct location.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; if you&#039;re using a &#039;&#039;64 bit&#039;&#039; version of &#039;&#039;Windows&#039;&#039;, you will need a 32 bit Java Runtime Environment/Java Development Kit anyway, because Spring is (as of July 2012) not yet available as a 64bit version for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setting up a Java Project ===&lt;br /&gt;
&lt;br /&gt;
To start working on your own Java AI, you should first set up a project in your favorite Java IDE. You need to import the Spring Java AI Interface libraries, and then create an AI class and an AI Factory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OUTDATED&#039;&#039;&#039; If you are using &#039;&#039;&#039;Netbeans IDE&#039;&#039;&#039;, you can find a detailed tutorial [http://springrts.com/phpbb/download/file.php?id=4970 here] (from [http://springrts.com/phpbb/viewtopic.php?p=448743#p448743 this forum thread]). Otherwise, please continue reading this page.&lt;br /&gt;
&lt;br /&gt;
==== Importing the interface libraries ====&lt;br /&gt;
&lt;br /&gt;
In order to use the Java Interface, you will need to import the Java Interface libraries, located in &#039;&#039;Spring/AI/Interfaces/Java/[version]/&#039;&#039;. Replace &#039;&#039;[version]&#039;&#039; with the number of the latest Java Interface version. As of this writing, only &#039;&#039;0.1&#039;&#039; is available.&lt;br /&gt;
&lt;br /&gt;
The file you need is &#039;&#039;AIInterface.jar&#039;&#039;. You also need the additional library &#039;&#039;vecmath.jar&#039;&#039;, located in the &#039;&#039;jlib/&#039;&#039; subfolder. Optionally, you can attach the file &#039;&#039;AIInterface-src.jar&#039;&#039; as source to the &#039;&#039;AIInterface.jar&#039;&#039; file for JavaDoc support in your editor.&lt;br /&gt;
&lt;br /&gt;
Your project should now contain the following libraries:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/AIInterface.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/AIInterface-src.jar&amp;lt;/code&amp;gt; (optional)&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/vecmath.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Creating the required classes ====&lt;br /&gt;
&lt;br /&gt;
Now that you have the libraries, the next step is to create your AI&#039;s main class. Firstly, you may want to create a package to put your classes in, for example, &#039;&#039;myjavaai&#039;&#039;. Create a new class, named MyJavaAI (or whatever you would like your AI to be called). MyJavaAI should extend com.springrts.ai.oo.AbstractOOAI. After that you&#039;ll need another class, named &#039;&#039;MyJavaAIFactory&#039;&#039;. This class should extend &#039;&#039;com.springrts.ai.oo.OOAIFactory&#039;&#039;.&lt;br /&gt;
The class MyJavaAIFactory only has to implement a single method: &#039;&#039;public OOAI createAI(int teamId, OOAICallback callback)&#039;&#039;. This is the method that the Java interface calls to get an instance of your AI. If you wanted to, you could create a different AI depending on circumstances, but for now it is probably easiest to simply return a new MyJavaAI(), until you decide you require something more elaborate.&lt;br /&gt;
You should now have two classes, &#039;&#039;myjavaai.MyJavaAI&#039;&#039; and &#039;&#039;myjavaai.MyJavaAIFactory&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adding your AI to Spring ===&lt;br /&gt;
&lt;br /&gt;
Your AI needs to have its own folder, and the engine will need to know your AI&#039;s attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Creating an AI folder ====&lt;br /&gt;
&lt;br /&gt;
Every Spring AI is stored in &#039;&#039;Spring/AI/Skirmish&#039;&#039;. You will have to create a folder for your AI as well. It is easiest to go to the directory &#039;&#039;Spring/AI/Skirmish&#039;&#039;, make a copy of the folder &#039;&#039;NullOOJavaAI&#039;&#039;, and rename the copy to &#039;&#039;MyJavaAI&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Telling the Engine about your AI ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;MyJavaAI&#039;&#039; folder you created contains the different versions of your AI. As of this writing, the &#039;&#039;NullOOJavaAI&#039;&#039; only has a version &#039;&#039;0.1&#039;&#039;, so there should be a folder &#039;&#039;0.1&#039;&#039; inside the &#039;&#039;MyJavaAI&#039;&#039; folder. Inside you will find a number of files.&lt;br /&gt;
These files are:&lt;br /&gt;
* &#039;&#039;SkirmishAI.jar&#039;&#039;: the jar file that contains the AI code.&lt;br /&gt;
* &#039;&#039;AIInfo.lua&#039;&#039;: contains information about the AI.&lt;br /&gt;
* &#039;&#039;AIOptions.lua&#039;&#039;: you can specify your AI&#039;s options in here.&lt;br /&gt;
* Possibly some text files: these are log files generated by the &#039;&#039;NullOOJavaAI&#039;&#039;. If you don&#039;t plan on using the same files, you may as well delete these.&lt;br /&gt;
&lt;br /&gt;
Additionally, there is a folder named &#039;&#039;jlib&#039;&#039;. This is where you should place any additional libraries you use in your AI.&lt;br /&gt;
&lt;br /&gt;
In order to let Spring recognize your AI, you will have to edit &#039;&#039;AIInfo.lua&#039;&#039;. You can do this with any regular text editor.&lt;br /&gt;
When you open it, the file will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
local infos = {&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;shortName&#039;,&lt;br /&gt;
      value  = &#039;NullOOJavaAI&#039;,&lt;br /&gt;
      desc   = &#039;machine conform name.&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;version&#039;,&lt;br /&gt;
      value  = &#039;0.1&#039;, -- AI version - !This comment is used for parsing!&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;className&#039;,&lt;br /&gt;
      value  = &#039;nulloojavaai.NullOOJavaAIFactory&#039;,&lt;br /&gt;
      desc   = &#039;fully qualified name of a class that implements interface com.springrts.ai.AI&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;name&#039;,&lt;br /&gt;
      value  = &#039;high-level Java stub Skirmish AI&#039;,&lt;br /&gt;
      desc   = &#039;human readable name.&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;loadSupported&#039;,&lt;br /&gt;
      value  = &#039;no&#039;,&lt;br /&gt;
      desc   = &#039;whether this AI supports loading or not&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;interfaceShortName&#039;,&lt;br /&gt;
      value  = &#039;Java&#039;, -- AI Interface name - !This comment is used for parsing!&lt;br /&gt;
      desc   = &#039;the shortName of the AI interface this AI needs&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;interfaceVersion&#039;,&lt;br /&gt;
      value  = &#039;0.1&#039;, -- AI Interface version - !This comment is used for parsing!&lt;br /&gt;
      desc   = &#039;the minimum version of the AI interface required by this AI&#039;,&lt;br /&gt;
   },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return infos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The file describes a number of attributes. Each attribute has a key, a value and a desc(ription). The key is the name of the attribute, the description tells you what the attribute is used for, and the value is what you will want to edit.&lt;br /&gt;
&lt;br /&gt;
The shortName attribute is the name used for your AI internally. It&#039;s most logical to change this into to the same name you gave your AI class. (MyJavaAI.)&lt;br /&gt;
&lt;br /&gt;
&#039;version&#039; tells the engine which version of your AI this is. If you&#039;re in the 0.1 folder, make this 0.1. Your AI should be located at AI/Skirmish/&#039;&#039;shortName&#039;&#039;/&#039;&#039;version&#039;&#039;/.&lt;br /&gt;
&lt;br /&gt;
&#039;classname&#039; tells the interface which class is your AIFactory class. Take care that you use the fully qualified class name, or it won&#039;t work. In this example, this should be myjavaai.MyJavaAIFactory.&lt;br /&gt;
&lt;br /&gt;
&#039;name&#039; describes your AI to the user. In this example, you might put &#039;A simple Java AI to learn about AI programming in Spring.&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;loadSupported&#039; is rather self-explanatory. Since you have just started working on your AI, you may not get around to implementing loading support for some time, so it&#039;s best to put &#039;no,&#039; for now.&lt;br /&gt;
&lt;br /&gt;
&#039;interfaceShortName&#039; and &#039;interfaceversion&#039; tell the engine about the interface your AI uses. Since MyJavaAI uses the same interface as the NullOOJavaAI, leave these as they are.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the last thing you should do is exporting your AI to SkirmishAI.jar. The way to do this varies depending on your Java editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test your AI ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After following all the above steps, you should be able to run your AI. Either use SpringLobby to start a new game and see if you can add your AI as a bot, or run &#039;&#039;spring.exe&#039;&#039; to see if you can start the script MyJavaAI Test.&lt;br /&gt;
Of course, since you haven&#039;t told the AI what to do, your starting unit(s) will sit there doing nothing.&lt;br /&gt;
&lt;br /&gt;
== Getting your AI to Do Something ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After getting your AI running, you will want to make it do something. Traditionally, the first thing to get your AI to is to build a solar plant, assuming you want it to play BA. If not, it is quite straightforward to build other units once you have the general idea.&lt;br /&gt;
You will need four things to get your AI to build a solar plant:&lt;br /&gt;
* A reference to the callback&lt;br /&gt;
* A reference to the commander (your starting unit in BA)&lt;br /&gt;
* A reference to the solar plant definition object&lt;br /&gt;
* To tell the commander to build the solar plant&lt;br /&gt;
&lt;br /&gt;
However, before we go about building solar plants, first you should know about events. We will use these to get the required object references.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
&lt;br /&gt;
Nearly everything that happens in the game is an event. When a unit is created, this is an event. Enemy spotted? Also an event. A player sends your AI a message? You got it, this is an event as well.&lt;br /&gt;
&lt;br /&gt;
Every event is made known to your AI. Have a look at the &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; class again. &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;AbstractOOA&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;AbstractOOAI&amp;lt;/code&amp;gt; implements a number of methods like &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enemyEnterRadar()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;message()&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sound familiar? The method &amp;lt;code&amp;gt;unitCreated(Unit unit, Unit builder)&amp;lt;/code&amp;gt; is called every time a unit is created, and tells you the unit that was created and the unit that built it. Similarly, enemyEnterRadar(Unit enemy) and message(int player, String message) tell you about an enemy unit entering radar range and receiving a message from another player respectively.&lt;br /&gt;
There are many other events that all have corresponding methods. To have your AI respond to these events, simply override the method in your &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; class.&lt;br /&gt;
The return type of these methods is an integer. The return value can be used for debugging. 0 means that no errors occurred, while any other value is threated as an error. This system can be used for debugging, but is it much easier to implement proper logging.&lt;br /&gt;
&lt;br /&gt;
In the sections below you will see an example of the use of these events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the callback ===&lt;br /&gt;
&lt;br /&gt;
The callback is the object through which the AI communicates with the engine. All information that does not change the state of the engine can be retrieved through individual methods in the callback, and state changing commands (eg to units) will go through a single, specialized method, which is in the callback as well.&lt;br /&gt;
Getting a reference to the callback is easy.&lt;br /&gt;
First create a class field &amp;lt;code&amp;gt;OOAICallback callback&amp;lt;/code&amp;gt; to put the reference in, then overwrite the method &amp;lt;code&amp;gt;init(int teamId, OOAICallback callback)&amp;lt;/code&amp;gt;. The init method is called at the start of every game (right at the end of the countdown).&lt;br /&gt;
As you can see, all that you need to do is set the parameter value callback to the field callback:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int init(int teamId, OOAICallback callback)&lt;br /&gt;
{&lt;br /&gt;
    this.callback = callback;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the commander ===&lt;br /&gt;
&lt;br /&gt;
In order to have your AI build a solar plant, the first thing you need is a reference to your commander. You first need an instance field &#039;Unit commander&#039; to put the reference in, then we need to get the reference itself.&lt;br /&gt;
A UnitFinished event is triggered whenever a unit has been built. (This may sound similar to &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt;. For a quick explanation of the difference, see the FAQ below.)&lt;br /&gt;
At the start of the game, the engine will send a UnitFinished event for every starting unit. When playing BA, this means you will get a UnitFinished event for the commander. Therefore, the most straightforward way of finding the reference to the commander is overriding the &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt; method. &lt;br /&gt;
&lt;br /&gt;
To get a reference to the commander, you need to check if the unit is indeed the command, and if so, assign the value of the unit parameter to the commander field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int unitFinished(Unit unit)&lt;br /&gt;
{&lt;br /&gt;
    if (unit.getDef().getName().equals(&amp;quot;armcom&amp;quot;))&lt;br /&gt;
        this.commander = unit;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the solar plant definition ===&lt;br /&gt;
&lt;br /&gt;
Every unit in Spring has a UnitDef (a &#039;unit defintion&#039;). This object tells you all there is to know about the properties of the unit type, such as maximum speed, turn rate and what weapons it carries.&lt;br /&gt;
One way to get the reference to the definition of a solar plant is to use &amp;lt;code&amp;gt;callback.getUnitDefs()&amp;lt;/code&amp;gt;. This will give you a list of all the available unit types in the game that is currently being played.&lt;br /&gt;
The name of the unit def we are looking for is &#039;armsolar&#039;, so we can just iterate through the list and find the one named armsolar, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
List&amp;lt;UnitDef&amp;gt; unitDefs = this.callback.getUnitDefs();&lt;br /&gt;
UnitDef solarPlant = null;&lt;br /&gt;
for (UnitDef def : unitDefs)&lt;br /&gt;
   if (def.getName().equals(&amp;quot;armsolar&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
       solarPlant = def;&lt;br /&gt;
       break;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Telling the commander to build the solar plant ===&lt;br /&gt;
&lt;br /&gt;
Now, the only thing left to do is to tell the commander that we want it to build the solar plant, and where to place it. In short, we need to give the commander a build command.&lt;br /&gt;
&lt;br /&gt;
We want to give this command only once at the first frame of the game. For this we can use the &amp;lt;code&amp;gt;update()&amp;lt;/code&amp;gt; method, which is called at every frame of the game. All we need to do is overwrite the &amp;lt;code&amp;gt;update(int frame)&amp;lt;/code&amp;gt; method and give the command if the frame is 1. This results in the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        // give command here&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Giving a command is straightforward. All we need to do is to create the appropriate command object and pass it through the callback to the engine.&lt;br /&gt;
&lt;br /&gt;
The command we need to tell commander to build a solar plant is a &amp;lt;code&amp;gt;BuildUnitAICommand&amp;lt;/code&amp;gt;. This command takes a number of arguments:&lt;br /&gt;
&lt;br /&gt;
; Unit unit : the unit we want to give to order to&lt;br /&gt;
; int groupId : the group we want to give the order to&lt;br /&gt;
; List&amp;lt;AICommand.Option&amp;gt; optionsList : a list addional options. See the values of AICommand.Option for details&lt;br /&gt;
; int timeOut : the number of frames after which the command times out&lt;br /&gt;
; UnitDef toBuildUnitDef : the UnitDef of the unit we want to build&lt;br /&gt;
; AIFloat3 buildPos : the position to build the unit at&lt;br /&gt;
; int facing : the direction the new unit should face&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see above, we can give a command to either a single unit or a group of units. In this example we only have a single unit. This means that unit should be a reference to our commander, and &amp;lt;code&amp;gt;groupId&amp;lt;/code&amp;gt; should be -1.&lt;br /&gt;
To keep things simple, we will not use any options, set the timeout to a large number, and set facing to 0.&lt;br /&gt;
The value of &amp;lt;code&amp;gt;toBuildUnitDef&amp;lt;/code&amp;gt; should be the object reference stored int UnitDef solarPlant.&lt;br /&gt;
That only leaves &amp;lt;code&amp;gt;buildPos&amp;lt;/code&amp;gt;, for which we will just use the current position of our commander. This means that our &amp;lt;code&amp;gt;BuildUnitAICommand&amp;lt;/code&amp;gt; looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        AICommand command = new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
            new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000, solarPlant,&lt;br /&gt;
            this.commander.getPos(), 0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we should give the command to the engine. We do this through the method &amp;lt;code&amp;gt;callback.getEngine().handleCommand()&amp;lt;/code&amp;gt;. This method takes three arguments: the id of the recipient of the command, a &amp;lt;code&amp;gt;commandID&amp;lt;/code&amp;gt; and the command itself.&lt;br /&gt;
The command should be sent to the engine, and for now we will use a &amp;lt;code&amp;gt;commandID&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;, as this is a feature which is not yet supported by spring (asynchronous command tracking).&lt;br /&gt;
Our code will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        AICommand command = new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
            new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000, solarPlant,&lt;br /&gt;
            this.commander.getPos(), 0);&lt;br /&gt;
&lt;br /&gt;
        this.callback.getEngine().handleCommand(AICommandWrapper.COMMAND_TO_ID_ENGINE,&lt;br /&gt;
            -1, command);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point you will want to see if your AI actually works. Export your code to &#039;&#039;Spring/AI/Skirmish/MyJavaAI/SkirmishAI.jar&#039;&#039; and start up a game. Your AI should now build a solar plant at its start position.&lt;br /&gt;
&lt;br /&gt;
===Building a metal extractor===&lt;br /&gt;
Building a metal extractor is slightly more complicated. Assuming you&#039;re not on a metal map, you will need to find a suitable site to place the extractor. Generally, it&#039;s preferable to select a site closest to wherever your construction unit (commander) is located.&lt;br /&gt;
&lt;br /&gt;
Modify your code that got a reference to the solar plant by making the following changes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
List&amp;lt;UnitDef&amp;gt; unitDefs = this.callback.getUnitDefs(); UnitDef solarPlant = null; for (UnitDef def : unitDefs)&lt;br /&gt;
&lt;br /&gt;
  if (def.getName().equals(&amp;quot;armsolar&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
      solarPlant = def;&lt;br /&gt;
  }&lt;br /&gt;
  else if (def.getName().equals(&amp;quot;armmex&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
       metalExtractor=def;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, you will need to create a Unitdef metalExtractor field by where you declared your solarPlant field.&lt;br /&gt;
&lt;br /&gt;
Next, you need a method for determining the distance between two 3D coordinates (since Spring locations are three dimensional). A slightly modified version of a distance function is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public float calculateDistance(AIFloat3 a, AIFloat3 b)&lt;br /&gt;
    {&lt;br /&gt;
    float xDistance = a.x - b.x;&lt;br /&gt;
    float yDistance = a.y - b.y;&lt;br /&gt;
    float zDistance = a.z - b.z;&lt;br /&gt;
    float totalDistanceSquared = xDistance*xDistance + yDistance*yDistance + zDistance*zDistance;&lt;br /&gt;
    return totalDistanceSquared;&lt;br /&gt;
    } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code actually returns the distance squared, but it will work for our purposes. In your init function, you will want to add the following code above the return statement but below the line defining the callback:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
checkForMetal();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will call the following function you need to place in your code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public void checkForMetal()&lt;br /&gt;
    {&lt;br /&gt;
    Resource metal=Resource.getInstance(clb, 0);&lt;br /&gt;
    availablemetalspots=clb.getMap().getResourceMapSpotsPositions(metal);&lt;br /&gt;
    if(availablemetalspots.isEmpty())&lt;br /&gt;
        {&lt;br /&gt;
        sendTextMsg(&amp;quot;This is a map with no metal spots&amp;quot;);&lt;br /&gt;
        metalmap=false;&lt;br /&gt;
        }&lt;br /&gt;
    else&lt;br /&gt;
        {metalmap=true;&lt;br /&gt;
        sendTextMsg(&amp;quot;This is a map with metal spots. Listing Values...&amp;quot;);&lt;br /&gt;
        for (AIFloat3 metalspot : availablemetalspots) {&lt;br /&gt;
            sendTextMsg(&amp;quot;Metal Spot at X: &amp;quot;+metalspot.x + &amp;quot;, Y: &amp;quot;+metalspot.y +&amp;quot;, Z: &amp;quot;+metalspot.z);&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the above code to function properly, you will need to create a Boolean named metalmap and a List&amp;lt;AIFloat3&amp;gt; availablemetalspots. You will now have a function set up for calculating distance between two points, and a data structure holding a list of positions of metal spots. The next step is to tie these two together:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public AIFloat3 closestMetalSpot(AIFloat3 unitposition)&lt;br /&gt;
    {&lt;br /&gt;
    AIFloat3 closestspot=null;&lt;br /&gt;
    for (AIFloat3 metalspot : availablemetalspots) {&lt;br /&gt;
            if (closestspot==null)&lt;br /&gt;
                {&lt;br /&gt;
                closestspot=metalspot;&lt;br /&gt;
                }&lt;br /&gt;
        else if(calculateDistance(metalspot, unitposition) &amp;lt; calculateDistance(closestspot, unitposition) &amp;amp;&amp;amp; metalspot.hashCode()!=unitposition.hashCode())&lt;br /&gt;
                    {&lt;br /&gt;
                    closestspot=metalspot;&lt;br /&gt;
                    }&lt;br /&gt;
        }&lt;br /&gt;
    availablemetalspots.remove(closestspot);&lt;br /&gt;
    return closestspot;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above function accepts an AIFloat3 containing the location of your construction unit (commander). It will then find the closest metal spot and return that location. The next step is to have your commander make use of this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  if (frame == 600)&lt;br /&gt;
  {&lt;br /&gt;
       if(metalmap){       sendTextMsg(&amp;quot;About to build mex at frame &amp;quot; + frame);&lt;br /&gt;
       AIFloat3 closestspot=closestMetalSpot(commander.getPos());&lt;br /&gt;
       BuildUnitAICommand command2=new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
               new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000,&lt;br /&gt;
               metalExtractor,closestspot, 0);&lt;br /&gt;
       handleEngineCommand(command2);}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place the above code in your update() method. When the frame count reaches 600, your commander will start to build a metal extractor at the closest metal spot. The extractor may not be right on top of where the metal spot appears to be, but you can mouse over the extractor to make sure it&#039;s drawing the metal properly.&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is the difference between &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The difference is that &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt; is called when construction of a unit starts, while &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt; when construction on the unit has been completed. Any number of things may happen in-between, including the unit under construction being destroyed, so it is important to remember this distinction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I have to copy and paste my jar file to the directory in Spring/AI/Skirmish/MyAI/0.1 each time I want to test my AI out?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes, but it is much easier if you automate the process. In Windows, a simple batch file can be created to move the files over for you. For example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
copy C:\Users\msm8bball\Documents\NetBeansProjects\MyAI\dist\MyAI.jar &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
del &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1\SkirmishAI.jar&amp;quot;&lt;br /&gt;
rename &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1\MyAI.jar&amp;quot; SkirmishAI.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the above code to match your computer&#039;s directories. Place it in a text file and save it as MoveAI.bat. This will create a batch file that you can double click and it will automatically move your AI to the proper location and rename it. You might wish to put a shortcut to this in your Start menu or taskbar. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; I have problems with the class-loader in my AI, any idea? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Each Java AI implementation is loaded by a separate class loader. This is used to load all the AI&#039;s class files and dependency libraries (in the &#039;&#039;jlib&#039;&#039; dir). Some libraries though, use the Thread contexts class loader, instead of the one of the current class. Therefore, if you want to load something from the AI&#039;s own class-path, make sure to let these libraries use the class-path of your AI classes, eg:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ClassLoader myClassLoader = AIFactory.class.getClassLoader();&lt;br /&gt;
MySpecialUtil msp = new MySpecialUtil();&lt;br /&gt;
msp.setClassLoader(myClassLoader);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Please do not set this class-loader on the thread with &amp;lt;code&amp;gt;Thread.currentThread().setContextClassLoader(myClassLoader)&amp;lt;/code&amp;gt;, because all AI&#039;s are run in the same Java thread, and therefore this will cause problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[AIInterface:Java|Java AI Interface]]&lt;br /&gt;
* [http://spring.abma.de/doc-Interface-JavaOO/ Javadoc of the Java AI OO Wrapper] (generated daily from source by [[User:Abma|abma]])&lt;br /&gt;
* &#039;&#039;&#039;OUTDATED&#039;&#039;&#039; [http://springrts.com/phpbb/download/file.php?id=4970 Netbeans Java Skirmish AI Tutorial] (from [http://springrts.com/phpbb/viewtopic.php?p=448743#p448743 this forum thread])&lt;br /&gt;
* [http://modinfo.adune.nl/index.php?MOD=ba712 ModInfo] (contains a list of units and their short names)&lt;br /&gt;
&lt;br /&gt;
[[Category: AI]]&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Development_guidelines&amp;diff=5794</id>
		<title>Development guidelines</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Development_guidelines&amp;diff=5794"/>
		<updated>2013-02-10T13:34:16Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: add engine branching model image (in a new section)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details some important things to take note of when doing Spring development.&lt;br /&gt;
&lt;br /&gt;
===Spring runs synchronized on all computers===&lt;br /&gt;
Spring&#039;s networking is built upon the assumption that all player&#039;s simulations are in sync and only send their (or their AI&#039;s) input over the network. This mean that you will have to be very careful to keep the simulation deterministic. Here is a few pointers to think about. &lt;br /&gt;
&lt;br /&gt;
* There are essentially two sorts of code in spring, synced and unsynced. Which code is what is not as clear as one could wish but essentially the synced code is anything that is reached through CGame::Simframe or handlers of some network msgs, unsynced is everything else (graphic, input, sound etc). Synced code can write anything but should only read synced data. Unsynced code can read anything but must not write synced data. The rest of the points here is essentially about synced code. &lt;br /&gt;
* Always make sure to initialize variables. Even if the value doesnt seem to matter it might unsync the simulation. &lt;br /&gt;
* Be paranoid about array boundaries, reading one byte beyond an array might not crash but it will probably cause sync problems at some point. &lt;br /&gt;
* For random numbers use the CGlobalStuff::RandFloat etc functions (but never use these from unsynced code) &lt;br /&gt;
* Never compare memory block locations other than for equality. This mean for example that you shouldn&#039;t create a std::set or std::map with a pointer as index if the order might matter. &lt;br /&gt;
&lt;br /&gt;
===Adding your own stuff===&lt;br /&gt;
We welcome anyone to make changes to Spring but in order to get them accepted into our distribution the following can be worth thinking about. &lt;br /&gt;
&lt;br /&gt;
* Spring is a game and different people might want different things from it. So if your changes change gameplay it might be a good idea to make it optional. &lt;br /&gt;
* Resources (esp. CPU time) is always in short supply for spring so make sure that you dont waste them needlessly and that your resource usage is in proportion to the impact of your changes. &lt;br /&gt;
* Ask around before starting on a change. Not only might you get tips about how to implement it in the best way but also if anyone else is working on something similar.&lt;br /&gt;
* Comment your code to make it more readable. In particular use [[Doxygen style comments]] so that header comments for classes/methods/functions/fields etc. automatically get pulled into the source code [http://taspring.clan-sy.com/doxygen/ documentation].&lt;br /&gt;
&lt;br /&gt;
===Engine Branching Model===&lt;br /&gt;
The version currently in use:&lt;br /&gt;
[[File:EngineBranchingModel.png|640px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Source development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:EngineBranchingModel.png&amp;diff=21725</id>
		<title>File:EngineBranchingModel.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:EngineBranchingModel.png&amp;diff=21725"/>
		<updated>2013-02-10T13:31:26Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: engine (git-)branching model, release candidate 13, currently in use
see doc/engineBranchingModel.dia in the engine source code repo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;engine (git-)branching model, release candidate 13, currently in use&lt;br /&gt;
see doc/engineBranchingModel.dia in the engine source code repo.&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:Development:Lang:Java&amp;diff=637</id>
		<title>AI:Development:Lang:Java</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:Development:Lang:Java&amp;diff=637"/>
		<updated>2012-07-07T08:40:21Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: small corrections at the start of the text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[AI:Development|AI Development]] &amp;lt; Java AI Development&lt;br /&gt;
&lt;br /&gt;
== Getting Started on your own Java AI ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; This tutorial assumes you have Spring working on your machine. The Spring directory will be referred to as &#039;Spring&#039; from here on.&lt;br /&gt;
&lt;br /&gt;
You will also need to make sure that Java AI&#039;s run properly on your machine. This is most easily done by running a Spring game with the &#039;&#039;NullOOJavaAI&#039;&#039; that comes with the engine. You will need the JRE 1.5 or greater, and to set the &#039;&#039;JAVA_HOME&#039;&#039; environment variable on your system to point to the correct location.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note:&#039;&#039; if you&#039;re using a &#039;&#039;64 bit&#039;&#039; version of &#039;&#039;Windows&#039;&#039;, you will need a 32 bit Java Runtime Environment/Java Development Kit anyway, because Spring is (as of July 2012) not yet available as a 64bit version for Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setting up a Java Project ===&lt;br /&gt;
&lt;br /&gt;
To start working on your own Java AI, you should first set up a project in your favorite Java IDE. You need to import the Spring Java AI Interface libraries, and then create an AI class and an AI Factory.&lt;br /&gt;
&lt;br /&gt;
If you are using &#039;&#039;&#039;Netbeans IDE&#039;&#039;&#039;, you can find a detailed tutorial [http://springrts.com/phpbb/download/file.php?id=4970 here] (from [http://springrts.com/phpbb/viewtopic.php?p=448743#p448743 this forum thread]). Otherwise, please continue reading this page.&lt;br /&gt;
&lt;br /&gt;
==== Importing the interface libraries ====&lt;br /&gt;
&lt;br /&gt;
In order to use the Java Interface, you will need to import the Java Interface libraries, located in &#039;&#039;Spring/AI/Interfaces/Java/[version]/&#039;&#039;. Replace &#039;&#039;[version]&#039;&#039; with the number of the latest Java Interface version. As of this writing, only &#039;&#039;0.1&#039;&#039; is available.&lt;br /&gt;
&lt;br /&gt;
The file you need is &#039;&#039;AIInterface.jar&#039;&#039;. You also need the additional library &#039;&#039;vecmath.jar&#039;&#039;, located in the &#039;&#039;jlib/&#039;&#039; subfolder. Optionally, you can attach the file &#039;&#039;AIInterface-src.jar&#039;&#039; as source to the &#039;&#039;AIInterface.jar&#039;&#039; file for JavaDoc support in your editor.&lt;br /&gt;
&lt;br /&gt;
Your project should now contain the following libraries:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/AIInterface.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/AIInterface-src.jar&amp;lt;/code&amp;gt; (optional)&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/vecmath.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Creating the required classes ====&lt;br /&gt;
&lt;br /&gt;
Now that you have the libraries, the next step is to create your AI&#039;s main class. Firstly, you may want to create a package to put your classes in, for example, &#039;&#039;myjavaai&#039;&#039;. Create a new class, named MyJavaAI (or whatever you would like your AI to be called). MyJavaAI should extend com.springrts.ai.oo.AbstractOOAI. After that you&#039;ll need another class, named &#039;&#039;MyJavaAIFactory&#039;&#039;. This class should extend &#039;&#039;com.springrts.ai.oo.OOAIFactory&#039;&#039;.&lt;br /&gt;
The class MyJavaAIFactory only has to implement a single method: &#039;&#039;public OOAI createAI(int teamId, OOAICallback callback)&#039;&#039;. This is the method that the Java interface calls to get an instance of your AI. If you wanted to, you could create a different AI depending on circumstances, but for now it is probably easiest to simply return a new MyJavaAI(), until you decide you require something more elaborate.&lt;br /&gt;
You should now have two classes, &#039;&#039;myjavaai.MyJavaAI&#039;&#039; and &#039;&#039;myjavaai.MyJavaAIFactory&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adding your AI to Spring ===&lt;br /&gt;
&lt;br /&gt;
Your AI needs to have its own folder, and the engine will need to know your AI&#039;s attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Creating an AI folder ====&lt;br /&gt;
&lt;br /&gt;
Every Spring AI is stored in &#039;&#039;Spring/AI/Skirmish&#039;&#039;. You will have to create a folder for your AI as well. It is easiest to go to the directory &#039;&#039;Spring/AI/Skirmish&#039;&#039;, make a copy of the folder &#039;&#039;NullOOJavaAI&#039;&#039;, and rename the copy to &#039;&#039;MyJavaAI&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Telling the Engine about your AI ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;MyJavaAI&#039;&#039; folder you created contains the different versions of your AI. As of this writing, the &#039;&#039;NullOOJavaAI&#039;&#039; only has a version &#039;&#039;0.1&#039;&#039;, so there should be a folder &#039;&#039;0.1&#039;&#039; inside the &#039;&#039;MyJavaAI&#039;&#039; folder. Inside you will find a number of files.&lt;br /&gt;
These files are:&lt;br /&gt;
* &#039;&#039;SkirmishAI.jar&#039;&#039;: the jar file that contains the AI code.&lt;br /&gt;
* &#039;&#039;AIInfo.lua&#039;&#039;: contains information about the AI.&lt;br /&gt;
* &#039;&#039;AIOptions.lua&#039;&#039;: you can specify your AI&#039;s options in here.&lt;br /&gt;
* Possibly some text files: these are log files generated by the &#039;&#039;NullOOJavaAI&#039;&#039;. If you don&#039;t plan on using the same files, you may as well delete these.&lt;br /&gt;
&lt;br /&gt;
Additionally, there is a folder named &#039;&#039;jlib&#039;&#039;. This is where you should place any additional libraries you use in your AI.&lt;br /&gt;
&lt;br /&gt;
In order to let Spring recognize your AI, you will have to edit &#039;&#039;AIInfo.lua&#039;&#039;. You can do this with any regular text editor.&lt;br /&gt;
When you open it, the file will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
local infos = {&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;shortName&#039;,&lt;br /&gt;
      value  = &#039;NullOOJavaAI&#039;,&lt;br /&gt;
      desc   = &#039;machine conform name.&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;version&#039;,&lt;br /&gt;
      value  = &#039;0.1&#039;, -- AI version - !This comment is used for parsing!&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;className&#039;,&lt;br /&gt;
      value  = &#039;nulloojavaai.NullOOJavaAIFactory&#039;,&lt;br /&gt;
      desc   = &#039;fully qualified name of a class that implements interface com.springrts.ai.AI&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;name&#039;,&lt;br /&gt;
      value  = &#039;high-level Java stub Skirmish AI&#039;,&lt;br /&gt;
      desc   = &#039;human readable name.&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;loadSupported&#039;,&lt;br /&gt;
      value  = &#039;no&#039;,&lt;br /&gt;
      desc   = &#039;whether this AI supports loading or not&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;interfaceShortName&#039;,&lt;br /&gt;
      value  = &#039;Java&#039;, -- AI Interface name - !This comment is used for parsing!&lt;br /&gt;
      desc   = &#039;the shortName of the AI interface this AI needs&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;interfaceVersion&#039;,&lt;br /&gt;
      value  = &#039;0.1&#039;, -- AI Interface version - !This comment is used for parsing!&lt;br /&gt;
      desc   = &#039;the minimum version of the AI interface required by this AI&#039;,&lt;br /&gt;
   },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return infos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The file describes a number of attributes. Each attribute has a key, a value and a desc(ription). The key is the name of the attribute, the description tells you what the attribute is used for, and the value is what you will want to edit.&lt;br /&gt;
&lt;br /&gt;
The shortName attribute is the name used for your AI internally. It&#039;s most logical to change this into to the same name you gave your AI class. (MyJavaAI.)&lt;br /&gt;
&lt;br /&gt;
&#039;version&#039; tells the engine which version of your AI this is. If you&#039;re in the 0.1 folder, make this 0.1. Your AI should be located at AI/Skirmish/&#039;&#039;shortName&#039;&#039;/&#039;&#039;version&#039;&#039;/.&lt;br /&gt;
&lt;br /&gt;
&#039;classname&#039; tells the interface which class is your AIFactory class. Take care that you use the fully qualified class name, or it won&#039;t work. In this example, this should be myjavaai.MyJavaAIFactory.&lt;br /&gt;
&lt;br /&gt;
&#039;name&#039; describes your AI to the user. In this example, you might put &#039;A simple Java AI to learn about AI programming in Spring.&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;loadSupported&#039; is rather self-explanatory. Since you have just started working on your AI, you may not get around to implementing loading support for some time, so it&#039;s best to put &#039;no,&#039; for now.&lt;br /&gt;
&lt;br /&gt;
&#039;interfaceShortName&#039; and &#039;interfaceversion&#039; tell the engine about the interface your AI uses. Since MyJavaAI uses the same interface as the NullOOJavaAI, leave these as they are.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the last thing you should do is exporting your AI to SkirmishAI.jar. The way to do this varies depending on your Java editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test your AI ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After following all the above steps, you should be able to run your AI. Either use SpringLobby to start a new game and see if you can add your AI as a bot, or run &#039;&#039;spring.exe&#039;&#039; to see if you can start the script MyJavaAI Test.&lt;br /&gt;
Of course, since you haven&#039;t told the AI what to do, your starting unit(s) will sit there doing nothing.&lt;br /&gt;
&lt;br /&gt;
== Getting your AI to Do Something ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After getting your AI running, you will want to make it do something. Traditionally, the first thing to get your AI to is to build a solar plant, assuming you want it to play BA. If not, it is quite straightforward to build other units once you have the general idea.&lt;br /&gt;
You will need four things to get your AI to build a solar plant:&lt;br /&gt;
* A reference to the callback&lt;br /&gt;
* A reference to the commander (your starting unit in BA)&lt;br /&gt;
* A reference to the solar plant definition object&lt;br /&gt;
* To tell the commander to build the solar plant&lt;br /&gt;
&lt;br /&gt;
However, before we go about building solar plants, first you should know about events. We will use these to get the required object references.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
&lt;br /&gt;
Nearly everything that happens in the game is an event. When a unit is created, this is an event. Enemy spotted? Also an event. A player sends your AI a message? You got it, this is an event as well.&lt;br /&gt;
&lt;br /&gt;
Every event is made known to your AI. Have a look at the &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; class again. &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;AbstractOOA&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;AbstractOOAI&amp;lt;/code&amp;gt; implements a number of methods like &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enemyEnterRadar()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;message()&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sound familiar? The method &amp;lt;code&amp;gt;unitCreated(Unit unit, Unit builder)&amp;lt;/code&amp;gt; is called every time a unit is created, and tells you the unit that was created and the unit that built it. Similarly, enemyEnterRadar(Unit enemy) and message(int player, String message) tell you about an enemy unit entering radar range and receiving a message from another player respectively.&lt;br /&gt;
There are many other events that all have corresponding methods. To have your AI respond to these events, simply override the method in your &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; class.&lt;br /&gt;
The return type of these methods is an integer. The return value can be used for debugging. 0 means that no errors occurred, while any other value is threated as an error. This system can be used for debugging, but is it much easier to implement proper logging.&lt;br /&gt;
&lt;br /&gt;
In the sections below you will see an example of the use of these events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the callback ===&lt;br /&gt;
&lt;br /&gt;
The callback is the object through which the AI communicates with the engine. All information that does not change the state of the engine can be retrieved through individual methods in the callback, and state changing commands (eg to units) will go through a single, specialized method, which is in the callback as well.&lt;br /&gt;
Getting a reference to the callback is easy.&lt;br /&gt;
First create a class field &amp;lt;code&amp;gt;OOAICallback callback&amp;lt;/code&amp;gt; to put the reference in, then overwrite the method &amp;lt;code&amp;gt;init(int teamId, OOAICallback callback)&amp;lt;/code&amp;gt;. The init method is called at the start of every game (right at the end of the countdown).&lt;br /&gt;
As you can see, all that you need to do is set the parameter value callback to the field callback:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int init(int teamId, OOAICallback callback)&lt;br /&gt;
{&lt;br /&gt;
    this.callback = callback;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the commander ===&lt;br /&gt;
&lt;br /&gt;
In order to have your AI build a solar plant, the first thing you need is a reference to your commander. You first need an instance field &#039;Unit commander&#039; to put the reference in, then we need to get the reference itself.&lt;br /&gt;
A UnitFinished event is triggered whenever a unit has been built. (This may sound similar to &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt;. For a quick explanation of the difference, see the FAQ below.)&lt;br /&gt;
At the start of the game, the engine will send a UnitFinished event for every starting unit. When playing BA, this means you will get a UnitFinished event for the commander. Therefore, the most straightforward way of finding the reference to the commander is overriding the &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt; method. &lt;br /&gt;
&lt;br /&gt;
To get a reference to the commander, you need to check if the unit is indeed the command, and if so, assign the value of the unit parameter to the commander field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int unitFinished(Unit unit)&lt;br /&gt;
{&lt;br /&gt;
    if (unit.getDef().getName().equals(&amp;quot;armcom&amp;quot;))&lt;br /&gt;
        this.commander = unit;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the solar plant definition ===&lt;br /&gt;
&lt;br /&gt;
Every unit in Spring has a UnitDef (a &#039;unit defintion&#039;). This object tells you all there is to know about the properties of the unit type, such as maximum speed, turn rate and what weapons it carries.&lt;br /&gt;
One way to get the reference to the definition of a solar plant is to use &amp;lt;code&amp;gt;callback.getUnitDefs()&amp;lt;/code&amp;gt;. This will give you a list of all the available unit types in the game that is currently being played.&lt;br /&gt;
The name of the unit def we are looking for is &#039;armsolar&#039;, so we can just iterate through the list and find the one named armsolar, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
List&amp;lt;UnitDef&amp;gt; unitDefs = this.callback.getUnitDefs();&lt;br /&gt;
UnitDef solarPlant = null;&lt;br /&gt;
for (UnitDef def : unitDefs)&lt;br /&gt;
   if (def.getName().equals(&amp;quot;armsolar&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
       solarPlant = def;&lt;br /&gt;
       break;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Telling the commander to build the solar plant ===&lt;br /&gt;
&lt;br /&gt;
Now, the only thing left to do is to tell the commander that we want it to build the solar plant, and where to place it. In short, we need to give the commander a build command.&lt;br /&gt;
&lt;br /&gt;
We want to give this command only once at the first frame of the game. For this we can use the &amp;lt;code&amp;gt;update()&amp;lt;/code&amp;gt; method, which is called at every frame of the game. All we need to do is overwrite the &amp;lt;code&amp;gt;update(int frame)&amp;lt;/code&amp;gt; method and give the command if the frame is 1. This results in the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        // give command here&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Giving a command is straightforward. All we need to do is to create the appropriate command object and pass it through the callback to the engine.&lt;br /&gt;
&lt;br /&gt;
The command we need to tell commander to build a solar plant is a &amp;lt;code&amp;gt;BuildUnitAICommand&amp;lt;/code&amp;gt;. This command takes a number of arguments:&lt;br /&gt;
&lt;br /&gt;
; Unit unit : the unit we want to give to order to&lt;br /&gt;
; int groupId : the group we want to give the order to&lt;br /&gt;
; List&amp;lt;AICommand.Option&amp;gt; optionsList : a list addional options. See the values of AICommand.Option for details&lt;br /&gt;
; int timeOut : the number of frames after which the command times out&lt;br /&gt;
; UnitDef toBuildUnitDef : the UnitDef of the unit we want to build&lt;br /&gt;
; AIFloat3 buildPos : the position to build the unit at&lt;br /&gt;
; int facing : the direction the new unit should face&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see above, we can give a command to either a single unit or a group of units. In this example we only have a single unit. This means that unit should be a reference to our commander, and &amp;lt;code&amp;gt;groupId&amp;lt;/code&amp;gt; should be -1.&lt;br /&gt;
To keep things simple, we will not use any options, set the timeout to a large number, and set facing to 0.&lt;br /&gt;
The value of &amp;lt;code&amp;gt;toBuildUnitDef&amp;lt;/code&amp;gt; should be the object reference stored int UnitDef solarPlant.&lt;br /&gt;
That only leaves &amp;lt;code&amp;gt;buildPos&amp;lt;/code&amp;gt;, for which we will just use the current position of our commander. This means that our &amp;lt;code&amp;gt;BuildUnitAICommand&amp;lt;/code&amp;gt; looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        AICommand command = new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
            new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000, solarPlant,&lt;br /&gt;
            this.commander.getPos(), 0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we should give the command to the engine. We do this through the method &amp;lt;code&amp;gt;callback.getEngine().handleCommand()&amp;lt;/code&amp;gt;. This method takes three arguments: the id of the recipient of the command, a &amp;lt;code&amp;gt;commandID&amp;lt;/code&amp;gt; and the command itself.&lt;br /&gt;
The command should be sent to the engine, and for now we will use a &amp;lt;code&amp;gt;commandID&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;, as this is a feature which is not yet supported by spring (asynchronous command tracking).&lt;br /&gt;
Our code will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        AICommand command = new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
            new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000, solarPlant,&lt;br /&gt;
            this.commander.getPos(), 0);&lt;br /&gt;
&lt;br /&gt;
        this.callback.getEngine().handleCommand(AICommandWrapper.COMMAND_TO_ID_ENGINE,&lt;br /&gt;
            -1, command);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point you will want to see if your AI actually works. Export your code to &#039;&#039;Spring/AI/Skirmish/MyJavaAI/SkirmishAI.jar&#039;&#039; and start up a game. Your AI should now build a solar plant at its start position.&lt;br /&gt;
&lt;br /&gt;
===Building a metal extractor===&lt;br /&gt;
Building a metal extractor is slightly more complicated. Assuming you&#039;re not on a metal map, you will need to find a suitable site to place the extractor. Generally, it&#039;s preferable to select a site closest to wherever your construction unit (commander) is located.&lt;br /&gt;
&lt;br /&gt;
Modify your code that got a reference to the solar plant by making the following changes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
List&amp;lt;UnitDef&amp;gt; unitDefs = this.callback.getUnitDefs(); UnitDef solarPlant = null; for (UnitDef def : unitDefs)&lt;br /&gt;
&lt;br /&gt;
  if (def.getName().equals(&amp;quot;armsolar&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
      solarPlant = def;&lt;br /&gt;
  }&lt;br /&gt;
  else if (def.getName().equals(&amp;quot;armmex&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
       metalExtractor=def;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, you will need to create a Unitdef metalExtractor field by where you declared your solarPlant field.&lt;br /&gt;
&lt;br /&gt;
Next, you need a method for determining the distance between two 3D coordinates (since Spring locations are three dimensional). A slightly modified version of a distance function is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public float calculateDistance(AIFloat3 a, AIFloat3 b)&lt;br /&gt;
    {&lt;br /&gt;
    float xDistance = a.x - b.x;&lt;br /&gt;
    float yDistance = a.y - b.y;&lt;br /&gt;
    float zDistance = a.z - b.z;&lt;br /&gt;
    float totalDistanceSquared = xDistance*xDistance + yDistance*yDistance + zDistance*zDistance;&lt;br /&gt;
    return totalDistanceSquared;&lt;br /&gt;
    } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code actually returns the distance squared, but it will work for our purposes. In your init function, you will want to add the following code above the return statement but below the line defining the callback:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
checkForMetal();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will call the following function you need to place in your code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public void checkForMetal()&lt;br /&gt;
    {&lt;br /&gt;
    Resource metal=Resource.getInstance(clb, 0);&lt;br /&gt;
    availablemetalspots=clb.getMap().getResourceMapSpotsPositions(metal);&lt;br /&gt;
    if(availablemetalspots.isEmpty())&lt;br /&gt;
        {&lt;br /&gt;
        sendTextMsg(&amp;quot;This is a map with no metal spots&amp;quot;);&lt;br /&gt;
        metalmap=false;&lt;br /&gt;
        }&lt;br /&gt;
    else&lt;br /&gt;
        {metalmap=true;&lt;br /&gt;
        sendTextMsg(&amp;quot;This is a map with metal spots. Listing Values...&amp;quot;);&lt;br /&gt;
        for (AIFloat3 metalspot : availablemetalspots) {&lt;br /&gt;
            sendTextMsg(&amp;quot;Metal Spot at X: &amp;quot;+metalspot.x + &amp;quot;, Y: &amp;quot;+metalspot.y +&amp;quot;, Z: &amp;quot;+metalspot.z);&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the above code to function properly, you will need to create a Boolean named metalmap and a List&amp;lt;AIFloat3&amp;gt; availablemetalspots. You will now have a function set up for calculating distance between two points, and a data structure holding a list of positions of metal spots. The next step is to tie these two together:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public AIFloat3 closestMetalSpot(AIFloat3 unitposition)&lt;br /&gt;
    {&lt;br /&gt;
    AIFloat3 closestspot=null;&lt;br /&gt;
    for (AIFloat3 metalspot : availablemetalspots) {&lt;br /&gt;
            if (closestspot==null)&lt;br /&gt;
                {&lt;br /&gt;
                closestspot=metalspot;&lt;br /&gt;
                }&lt;br /&gt;
        else if(calculateDistance(metalspot, unitposition) &amp;lt; calculateDistance(closestspot, unitposition) &amp;amp;&amp;amp; metalspot.hashCode()!=unitposition.hashCode())&lt;br /&gt;
                    {&lt;br /&gt;
                    closestspot=metalspot;&lt;br /&gt;
                    }&lt;br /&gt;
        }&lt;br /&gt;
    availablemetalspots.remove(closestspot);&lt;br /&gt;
    return closestspot;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above function accepts an AIFloat3 containing the location of your construction unit (commander). It will then find the closest metal spot and return that location. The next step is to have your commander make use of this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  if (frame == 600)&lt;br /&gt;
  {&lt;br /&gt;
       if(metalmap){       sendTextMsg(&amp;quot;About to build mex at frame &amp;quot; + frame);&lt;br /&gt;
       AIFloat3 closestspot=closestMetalSpot(commander.getPos());&lt;br /&gt;
       BuildUnitAICommand command2=new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
               new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000,&lt;br /&gt;
               metalExtractor,closestspot, 0);&lt;br /&gt;
       handleEngineCommand(command2);}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place the above code in your update() method. When the frame count reaches 600, your commander will start to build a metal extractor at the closest metal spot. The extractor may not be right on top of where the metal spot appears to be, but you can mouse over the extractor to make sure it&#039;s drawing the metal properly.&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is the difference between &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The difference is that &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt; is called when construction of a unit starts, while &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt; when construction on the unit has been completed. Any number of things may happen in-between, including the unit under construction being destroyed, so it is important to remember this distinction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I have to copy and paste my jar file to the directory in Spring/AI/Skirmish/MyAI/0.1 each time I want to test my AI out?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes, but it is much easier if you automate the process. In Windows, a simple batch file can be created to move the files over for you. For example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
copy C:\Users\msm8bball\Documents\NetBeansProjects\MyAI\dist\MyAI.jar &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
del &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1\SkirmishAI.jar&amp;quot;&lt;br /&gt;
rename &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1\MyAI.jar&amp;quot; SkirmishAI.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the above code to match your computer&#039;s directories. Place it in a text file and save it as MoveAI.bat. This will create a batch file that you can double click and it will automatically move your AI to the proper location and rename it. You might wish to put a shortcut to this in your Start menu or taskbar. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; I have problems with the class-loader in my AI, any idea? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Each Java AI implementation is loaded by a separate class loader. This is used to load all the AI&#039;s class files and dependency libraries (in the &#039;&#039;jlib&#039;&#039; dir). Some libraries though, use the Thread contexts class loader, instead of the one of the current class. Therefore, if you want to load something from the AI&#039;s own class-path, make sure to let these libraries use the class-path of your AI classes, eg:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ClassLoader myClassLoader = AIFactory.class.getClassLoader();&lt;br /&gt;
MySpecialUtil msp = new MySpecialUtil();&lt;br /&gt;
msp.setClassLoader(myClassLoader);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Please do not set this class-loader on the thread with &amp;lt;code&amp;gt;Thread.currentThread().setContextClassLoader(myClassLoader)&amp;lt;/code&amp;gt;, because all AI&#039;s are run in the same Java thread, and therefore this will cause problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[AIInterface:Java|Java AI Interface]]&lt;br /&gt;
* [http://spring.abma.de/doc-Interface-JavaOO/ Javadoc of the Java AI OO Wrapper] (generated daily from source by [[User:Abma|abma]])&lt;br /&gt;
* [http://springrts.com/phpbb/download/file.php?id=4970 Netbeans Java Skirmish AI Tutorial] (from [http://springrts.com/phpbb/viewtopic.php?p=448743#p448743 this forum thread])&lt;br /&gt;
* [http://modinfo.adune.nl/index.php?MOD=ba712 ModInfo] (contains a list of units and their short names)&lt;br /&gt;
&lt;br /&gt;
[[Category: AI]]&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:Development:Lang:Java&amp;diff=636</id>
		<title>AI:Development:Lang:Java</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=AI:Development:Lang:Java&amp;diff=636"/>
		<updated>2012-07-07T08:28:58Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: fixed code block tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[AI:Development|AI Development]] &amp;lt; Java AI Development&lt;br /&gt;
&lt;br /&gt;
== Getting Started on your own Java AI ==&lt;br /&gt;
&lt;br /&gt;
Note: This tutorial assumes you have Spring working on your machine. The Spring directory will be referred to as &#039;Spring&#039; from here on out.&lt;br /&gt;
&lt;br /&gt;
You will also need to make sure that Java AI&#039;s run properly on your machine. It&#039;s easiest to test the NullOOJavaAI that comes with spring. You will need the JRE 1.6 or greater, and to set the JAVA_HOME environment variable on your system to point to the correct location.&lt;br /&gt;
&lt;br /&gt;
Note: if you&#039;re using a 64 bit version of Windows, you will need a 32 bit Java Runtime Environment/ Java Development Kit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setting up a Java Project ===&lt;br /&gt;
&lt;br /&gt;
To start working on your own Java AI you should first set up a project in your favorite Java editor. You need to import the Java Interface libraries, then create an AI class and an AI Factory.&lt;br /&gt;
&lt;br /&gt;
If you are using &#039;&#039;&#039;Netbeans IDE&#039;&#039;&#039;, you can find a detailed tutorial [http://springrts.com/phpbb/download/file.php?id=4970 here] (from [http://springrts.com/phpbb/viewtopic.php?p=448743#p448743 this forum thread]). Otherwise, please continue reading this page.&lt;br /&gt;
&lt;br /&gt;
==== Importing the interface libraries ====&lt;br /&gt;
&lt;br /&gt;
In order to use the Java Interface, you will need to import the Java Interface libraries, located in &#039;&#039;Spring/AI/Interfaces/Java/[version]/&#039;&#039;. Replace &#039;&#039;[version]&#039;&#039; with the number of the latest Java Interface version. As of this writing, only &#039;&#039;0.1&#039;&#039; is available.&lt;br /&gt;
&lt;br /&gt;
The file you need is &#039;&#039;AIInterface.jar&#039;&#039;. You also need the additional libraries &#039;&#039;vecmath.jar&#039;&#039;, located in the &#039;&#039;jlib/&#039;&#039; subfolder, as well as &#039;&#039;jna.jar&#039;&#039; in &#039;&#039;jlib/jna/&#039;&#039;. Optionally, you can attach the file &#039;&#039;AIInterface-src.jar&#039;&#039; as source to the &#039;&#039;AIInterface.jar&#039;&#039; file for javadoc support in your editor.&lt;br /&gt;
&lt;br /&gt;
Your project should now contain the following libraries:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/AIInterface.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/AIInterface-src.jar&amp;lt;/code&amp;gt; (optional)&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/vecmath.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Spring/AI/Interfaces/Java/[version]/jlib/jna/jna.jar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Creating the required classes ====&lt;br /&gt;
&lt;br /&gt;
Now that you have the libraries, next step is to create your AI&#039;s main class. Firstly, you may want to create a package to put your classes in, for example, &#039;&#039;myjavaai&#039;&#039;. Create a new class, named MyJavaAI (or whatever you would like your AI to be called). MyJavaAI should extend com.springrts.ai.oo.AbstractOOAI. After that you&#039;ll need another class, named &#039;&#039;MyJavaAIFactory&#039;&#039;. This class should extend &#039;&#039;com.springrts.ai.oo.OOAIFactory&#039;&#039;.&lt;br /&gt;
The class MyJavaAIFactory only has to implement a single method: &#039;&#039;public OOAI createAI(int teamId, OOAICallback callback)&#039;&#039;. This is the method that the Java interface calls to get an instance of your AI. If you wanted to, you could create a different AI depending on circumstances, but for now it is probably easiest to simply return a new MyJavaAI(), until you decide you require something more elaborate.&lt;br /&gt;
You should now have two classes, &#039;&#039;myjavaai.MyJavaAI&#039;&#039; and &#039;&#039;myjavaai.MyJavaAIFactory&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adding your AI to Spring ===&lt;br /&gt;
&lt;br /&gt;
Your AI needs to have its own folder, and the engine will need to know your AI&#039;s attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Creating an AI folder ====&lt;br /&gt;
&lt;br /&gt;
Every Spring AI is stored in &#039;&#039;Spring/AI/Skirmish&#039;&#039;. You will have to create a folder for your AI as well. It is easiest to go to the directory &#039;&#039;Spring/AI/Skirmish&#039;&#039;, make a copy of the folder &#039;&#039;NullOOJavaAI&#039;&#039;, and rename the copy to &#039;&#039;MyJavaAI&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Telling the Engine about your AI ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;MyJavaAI&#039;&#039; folder you created contains the different versions of your AI. As of this writing, the &#039;&#039;NullOOJavaAI&#039;&#039; only has a version &#039;&#039;0.1&#039;&#039;, so there should be a folder &#039;&#039;0.1&#039;&#039; inside the &#039;&#039;MyJavaAI&#039;&#039; folder. Inside you will find a number of files.&lt;br /&gt;
These files are:&lt;br /&gt;
* &#039;&#039;SkirmishAI.jar&#039;&#039;: the jar file that contains the AI code.&lt;br /&gt;
* &#039;&#039;AIInfo.lua&#039;&#039;: contains information about the AI.&lt;br /&gt;
* &#039;&#039;AIOptions.lua&#039;&#039;: you can specify your AI&#039;s options in here.&lt;br /&gt;
* Possibly some text files: these are log files generated by the &#039;&#039;NullOOJavaAI&#039;&#039;. If you don&#039;t plan on using the same files, you may as well delete these.&lt;br /&gt;
&lt;br /&gt;
Additionally, there is a folder named &#039;&#039;jlib&#039;&#039;. This is where you should place any additional libraries you use in your AI.&lt;br /&gt;
&lt;br /&gt;
In order to let Spring recognize your AI, you will have to edit &#039;&#039;AIInfo.lua&#039;&#039;. You can do this with any regular text editor.&lt;br /&gt;
When you open it, the file will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
local infos = {&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;shortName&#039;,&lt;br /&gt;
      value  = &#039;NullOOJavaAI&#039;,&lt;br /&gt;
      desc   = &#039;machine conform name.&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;version&#039;,&lt;br /&gt;
      value  = &#039;0.1&#039;, -- AI version - !This comment is used for parsing!&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;className&#039;,&lt;br /&gt;
      value  = &#039;nulloojavaai.NullOOJavaAIFactory&#039;,&lt;br /&gt;
      desc   = &#039;fully qualified name of a class that implements interface com.springrts.ai.AI&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;name&#039;,&lt;br /&gt;
      value  = &#039;high-level Java stub Skirmish AI&#039;,&lt;br /&gt;
      desc   = &#039;human readable name.&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;loadSupported&#039;,&lt;br /&gt;
      value  = &#039;no&#039;,&lt;br /&gt;
      desc   = &#039;whether this AI supports loading or not&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;interfaceShortName&#039;,&lt;br /&gt;
      value  = &#039;Java&#039;, -- AI Interface name - !This comment is used for parsing!&lt;br /&gt;
      desc   = &#039;the shortName of the AI interface this AI needs&#039;,&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
      key    = &#039;interfaceVersion&#039;,&lt;br /&gt;
      value  = &#039;0.1&#039;, -- AI Interface version - !This comment is used for parsing!&lt;br /&gt;
      desc   = &#039;the minimum version of the AI interface required by this AI&#039;,&lt;br /&gt;
   },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return infos&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The file describes a number of attributes. Each attribute has a key, a value and a desc(ription). The key is the name of the attribute, the description tells you what the attribute is used for, and the value is what you will want to edit.&lt;br /&gt;
&lt;br /&gt;
The shortName attribute is the name used for your AI internally. It&#039;s most logical to change this into to the same name you gave your AI class. (MyJavaAI.)&lt;br /&gt;
&lt;br /&gt;
&#039;version&#039; tells the engine which version of your AI this is. If you&#039;re in the 0.1 folder, make this 0.1. Your AI should be located at AI/Skirmish/&#039;&#039;shortName&#039;&#039;/&#039;&#039;version&#039;&#039;/.&lt;br /&gt;
&lt;br /&gt;
&#039;classname&#039; tells the interface which class is your AIFactory class. Take care that you use the fully qualified class name, or it won&#039;t work. In this example, this should be myjavaai.MyJavaAIFactory.&lt;br /&gt;
&lt;br /&gt;
&#039;name&#039; describes your AI to the user. In this example, you might put &#039;A simple Java AI to learn about AI programming in Spring.&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;loadSupported&#039; is rather self-explanatory. Since you have just started working on your AI, you may not get around to implementing loading support for some time, so it&#039;s best to put &#039;no,&#039; for now.&lt;br /&gt;
&lt;br /&gt;
&#039;interfaceShortName&#039; and &#039;interfaceversion&#039; tell the engine about the interface your AI uses. Since MyJavaAI uses the same interface as the NullOOJavaAI, leave these as they are.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the last thing you should do is exporting your AI to SkirmishAI.jar. The way to do this varies depending on your Java editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Test your AI ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After following all the above steps, you should be able to run your AI. Either use SpringLobby to start a new game and see if you can add your AI as a bot, or run &#039;&#039;spring.exe&#039;&#039; to see if you can start the script MyJavaAI Test.&lt;br /&gt;
Of course, since you haven&#039;t told the AI what to do, your starting unit(s) will sit there doing nothing.&lt;br /&gt;
&lt;br /&gt;
== Getting your AI to Do Something ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After getting your AI running, you will want to make it do something. Traditionally, the first thing to get your AI to is to build a solar plant, assuming you want it to play BA. If not, it is quite straightforward to build other units once you have the general idea.&lt;br /&gt;
You will need four things to get your AI to build a solar plant:&lt;br /&gt;
* A reference to the callback&lt;br /&gt;
* A reference to the commander (your starting unit in BA)&lt;br /&gt;
* A reference to the solar plant definition object&lt;br /&gt;
* To tell the commander to build the solar plant&lt;br /&gt;
&lt;br /&gt;
However, before we go about building solar plants, first you should know about events. We will use these to get the required object references.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
&lt;br /&gt;
Nearly everything that happens in the game is an event. When a unit is created, this is an event. Enemy spotted? Also an event. A player sends your AI a message? You got it, this is an event as well.&lt;br /&gt;
&lt;br /&gt;
Every event is made known to your AI. Have a look at the &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; class again. &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; extends &amp;lt;code&amp;gt;AbstractOOA&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;AbstractOOAI&amp;lt;/code&amp;gt; implements a number of methods like &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enemyEnterRadar()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;message()&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sound familiar? The method &amp;lt;code&amp;gt;unitCreated(Unit unit, Unit builder)&amp;lt;/code&amp;gt; is called every time a unit is created, and tells you the unit that was created and the unit that built it. Similarly, enemyEnterRadar(Unit enemy) and message(int player, String message) tell you about an enemy unit entering radar range and receiving a message from another player respectively.&lt;br /&gt;
There are many other events that all have corresponding methods. To have your AI respond to these events, simply override the method in your &amp;lt;code&amp;gt;MyJavaAI&amp;lt;/code&amp;gt; class.&lt;br /&gt;
The return type of these methods is an integer. The return value can be used for debugging. 0 means that no errors occurred, while any other value is threated as an error. This system can be used for debugging, but is it much easier to implement proper logging.&lt;br /&gt;
&lt;br /&gt;
In the sections below you will see an example of the use of these events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the callback ===&lt;br /&gt;
&lt;br /&gt;
The callback is the object through which the AI communicates with the engine. All information that does not change the state of the engine can be retrieved through individual methods in the callback, and state changing commands (eg to units) will go through a single, specialized method, which is in the callback as well.&lt;br /&gt;
Getting a reference to the callback is easy.&lt;br /&gt;
First create a class field &amp;lt;code&amp;gt;OOAICallback callback&amp;lt;/code&amp;gt; to put the reference in, then overwrite the method &amp;lt;code&amp;gt;init(int teamId, OOAICallback callback)&amp;lt;/code&amp;gt;. The init method is called at the start of every game (right at the end of the countdown).&lt;br /&gt;
As you can see, all that you need to do is set the parameter value callback to the field callback:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int init(int teamId, OOAICallback callback)&lt;br /&gt;
{&lt;br /&gt;
    this.callback = callback;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the commander ===&lt;br /&gt;
&lt;br /&gt;
In order to have your AI build a solar plant, the first thing you need is a reference to your commander. You first need an instance field &#039;Unit commander&#039; to put the reference in, then we need to get the reference itself.&lt;br /&gt;
A UnitFinished event is triggered whenever a unit has been built. (This may sound similar to &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt;. For a quick explanation of the difference, see the FAQ below.)&lt;br /&gt;
At the start of the game, the engine will send a UnitFinished event for every starting unit. When playing BA, this means you will get a UnitFinished event for the commander. Therefore, the most straightforward way of finding the reference to the commander is overriding the &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt; method. &lt;br /&gt;
&lt;br /&gt;
To get a reference to the commander, you need to check if the unit is indeed the command, and if so, assign the value of the unit parameter to the commander field:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int unitFinished(Unit unit)&lt;br /&gt;
{&lt;br /&gt;
    if (unit.getDef().getName().equals(&amp;quot;armcom&amp;quot;))&lt;br /&gt;
        this.commander = unit;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Getting a reference to the solar plant definition ===&lt;br /&gt;
&lt;br /&gt;
Every unit in Spring has a UnitDef (a &#039;unit defintion&#039;). This object tells you all there is to know about the properties of the unit type, such as maximum speed, turn rate and what weapons it carries.&lt;br /&gt;
One way to get the reference to the definition of a solar plant is to use &amp;lt;code&amp;gt;callback.getUnitDefs()&amp;lt;/code&amp;gt;. This will give you a list of all the available unit types in the game that is currently being played.&lt;br /&gt;
The name of the unit def we are looking for is &#039;armsolar&#039;, so we can just iterate through the list and find the one named armsolar, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
List&amp;lt;UnitDef&amp;gt; unitDefs = this.callback.getUnitDefs();&lt;br /&gt;
UnitDef solarPlant = null;&lt;br /&gt;
for (UnitDef def : unitDefs)&lt;br /&gt;
   if (def.getName().equals(&amp;quot;armsolar&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
       solarPlant = def;&lt;br /&gt;
       break;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Telling the commander to build the solar plant ===&lt;br /&gt;
&lt;br /&gt;
Now, the only thing left to do is to tell the commander that we want it to build the solar plant, and where to place it. In short, we need to give the commander a build command.&lt;br /&gt;
&lt;br /&gt;
We want to give this command only once at the first frame of the game. For this we can use the &amp;lt;code&amp;gt;update()&amp;lt;/code&amp;gt; method, which is called at every frame of the game. All we need to do is overwrite the &amp;lt;code&amp;gt;update(int frame)&amp;lt;/code&amp;gt; method and give the command if the frame is 1. This results in the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        // give command here&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Giving a command is straightforward. All we need to do is to create the appropriate command object and pass it through the callback to the engine.&lt;br /&gt;
&lt;br /&gt;
The command we need to tell commander to build a solar plant is a &amp;lt;code&amp;gt;BuildUnitAICommand&amp;lt;/code&amp;gt;. This command takes a number of arguments:&lt;br /&gt;
&lt;br /&gt;
; Unit unit : the unit we want to give to order to&lt;br /&gt;
; int groupId : the group we want to give the order to&lt;br /&gt;
; List&amp;lt;AICommand.Option&amp;gt; optionsList : a list addional options. See the values of AICommand.Option for details&lt;br /&gt;
; int timeOut : the number of frames after which the command times out&lt;br /&gt;
; UnitDef toBuildUnitDef : the UnitDef of the unit we want to build&lt;br /&gt;
; AIFloat3 buildPos : the position to build the unit at&lt;br /&gt;
; int facing : the direction the new unit should face&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you can see above, we can give a command to either a single unit or a group of units. In this example we only have a single unit. This means that unit should be a reference to our commander, and &amp;lt;code&amp;gt;groupId&amp;lt;/code&amp;gt; should be -1.&lt;br /&gt;
To keep things simple, we will not use any options, set the timeout to a large number, and set facing to 0.&lt;br /&gt;
The value of &amp;lt;code&amp;gt;toBuildUnitDef&amp;lt;/code&amp;gt; should be the object reference stored int UnitDef solarPlant.&lt;br /&gt;
That only leaves &amp;lt;code&amp;gt;buildPos&amp;lt;/code&amp;gt;, for which we will just use the current position of our commander. This means that our &amp;lt;code&amp;gt;BuildUnitAICommand&amp;lt;/code&amp;gt; looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        AICommand command = new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
            new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000, solarPlant,&lt;br /&gt;
            this.commander.getPos(), 0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we should give the command to the engine. We do this through the method &amp;lt;code&amp;gt;callback.getEngine().handleCommand()&amp;lt;/code&amp;gt;. This method takes three arguments: the id of the recipient of the command, a &amp;lt;code&amp;gt;commandID&amp;lt;/code&amp;gt; and the command itself.&lt;br /&gt;
The command should be sent to the engine, and for now we will use a &amp;lt;code&amp;gt;commandID&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;, as this is a feature which is not yet supported by spring (asynchronous command tracking).&lt;br /&gt;
Our code will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
@Override&lt;br /&gt;
public int update(int frame)&lt;br /&gt;
{&lt;br /&gt;
    if (frame == 0)&lt;br /&gt;
    {&lt;br /&gt;
        AICommand command = new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
            new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000, solarPlant,&lt;br /&gt;
            this.commander.getPos(), 0);&lt;br /&gt;
&lt;br /&gt;
        this.callback.getEngine().handleCommand(AICommandWrapper.COMMAND_TO_ID_ENGINE,&lt;br /&gt;
            -1, command);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this point you will want to see if your AI actually works. Export your code to &#039;&#039;Spring/AI/Skirmish/MyJavaAI/SkirmishAI.jar&#039;&#039; and start up a game. Your AI should now build a solar plant at its start position.&lt;br /&gt;
&lt;br /&gt;
===Building a metal extractor===&lt;br /&gt;
Building a metal extractor is slightly more complicated. Assuming you&#039;re not on a metal map, you will need to find a suitable site to place the extractor. Generally, it&#039;s preferable to select a site closest to wherever your construction unit (commander) is located.&lt;br /&gt;
&lt;br /&gt;
Modify your code that got a reference to the solar plant by making the following changes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
List&amp;lt;UnitDef&amp;gt; unitDefs = this.callback.getUnitDefs(); UnitDef solarPlant = null; for (UnitDef def : unitDefs)&lt;br /&gt;
&lt;br /&gt;
  if (def.getName().equals(&amp;quot;armsolar&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
      solarPlant = def;&lt;br /&gt;
  }&lt;br /&gt;
  else if (def.getName().equals(&amp;quot;armmex&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
       metalExtractor=def;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, you will need to create a Unitdef metalExtractor field by where you declared your solarPlant field.&lt;br /&gt;
&lt;br /&gt;
Next, you need a method for determining the distance between two 3D coordinates (since Spring locations are three dimensional). A slightly modified version of a distance function is found below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public float calculateDistance(AIFloat3 a, AIFloat3 b)&lt;br /&gt;
    {&lt;br /&gt;
    float xDistance = a.x - b.x;&lt;br /&gt;
    float yDistance = a.y - b.y;&lt;br /&gt;
    float zDistance = a.z - b.z;&lt;br /&gt;
    float totalDistanceSquared = xDistance*xDistance + yDistance*yDistance + zDistance*zDistance;&lt;br /&gt;
    return totalDistanceSquared;&lt;br /&gt;
    } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code actually returns the distance squared, but it will work for our purposes. In your init function, you will want to add the following code above the return statement but below the line defining the callback:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
checkForMetal();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will call the following function you need to place in your code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public void checkForMetal()&lt;br /&gt;
    {&lt;br /&gt;
    Resource metal=Resource.getInstance(clb, 0);&lt;br /&gt;
    availablemetalspots=clb.getMap().getResourceMapSpotsPositions(metal);&lt;br /&gt;
    if(availablemetalspots.isEmpty())&lt;br /&gt;
        {&lt;br /&gt;
        sendTextMsg(&amp;quot;This is a map with no metal spots&amp;quot;);&lt;br /&gt;
        metalmap=false;&lt;br /&gt;
        }&lt;br /&gt;
    else&lt;br /&gt;
        {metalmap=true;&lt;br /&gt;
        sendTextMsg(&amp;quot;This is a map with metal spots. Listing Values...&amp;quot;);&lt;br /&gt;
        for (AIFloat3 metalspot : availablemetalspots) {&lt;br /&gt;
            sendTextMsg(&amp;quot;Metal Spot at X: &amp;quot;+metalspot.x + &amp;quot;, Y: &amp;quot;+metalspot.y +&amp;quot;, Z: &amp;quot;+metalspot.z);&lt;br /&gt;
        }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the above code to function properly, you will need to create a Boolean named metalmap and a List&amp;lt;AIFloat3&amp;gt; availablemetalspots. You will now have a function set up for calculating distance between two points, and a data structure holding a list of positions of metal spots. The next step is to tie these two together:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
public AIFloat3 closestMetalSpot(AIFloat3 unitposition)&lt;br /&gt;
    {&lt;br /&gt;
    AIFloat3 closestspot=null;&lt;br /&gt;
    for (AIFloat3 metalspot : availablemetalspots) {&lt;br /&gt;
            if (closestspot==null)&lt;br /&gt;
                {&lt;br /&gt;
                closestspot=metalspot;&lt;br /&gt;
                }&lt;br /&gt;
        else if(calculateDistance(metalspot, unitposition) &amp;lt; calculateDistance(closestspot, unitposition) &amp;amp;&amp;amp; metalspot.hashCode()!=unitposition.hashCode())&lt;br /&gt;
                    {&lt;br /&gt;
                    closestspot=metalspot;&lt;br /&gt;
                    }&lt;br /&gt;
        }&lt;br /&gt;
    availablemetalspots.remove(closestspot);&lt;br /&gt;
    return closestspot;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above function accepts an AIFloat3 containing the location of your construction unit (commander). It will then find the closest metal spot and return that location. The next step is to have your commander make use of this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  if (frame == 600)&lt;br /&gt;
  {&lt;br /&gt;
       if(metalmap){       sendTextMsg(&amp;quot;About to build mex at frame &amp;quot; + frame);&lt;br /&gt;
       AIFloat3 closestspot=closestMetalSpot(commander.getPos());&lt;br /&gt;
       BuildUnitAICommand command2=new BuildUnitAICommand(this.commander, -1,&lt;br /&gt;
               new ArrayList&amp;lt;AICommand.Option&amp;gt;(), 10000,&lt;br /&gt;
               metalExtractor,closestspot, 0);&lt;br /&gt;
       handleEngineCommand(command2);}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place the above code in your update() method. When the frame count reaches 600, your commander will start to build a metal extractor at the closest metal spot. The extractor may not be right on top of where the metal spot appears to be, but you can mouse over the extractor to make sure it&#039;s drawing the metal properly.&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; What is the difference between &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; The difference is that &amp;lt;code&amp;gt;unitCreated()&amp;lt;/code&amp;gt; is called when construction of a unit starts, while &amp;lt;code&amp;gt;unitFinished()&amp;lt;/code&amp;gt; when construction on the unit has been completed. Any number of things may happen in-between, including the unit under construction being destroyed, so it is important to remember this distinction.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; Do I have to copy and paste my jar file to the directory in Spring/AI/Skirmish/MyAI/0.1 each time I want to test my AI out?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Yes, but it is much easier if you automate the process. In Windows, a simple batch file can be created to move the files over for you. For example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
copy C:\Users\msm8bball\Documents\NetBeansProjects\MyAI\dist\MyAI.jar &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
del &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1\SkirmishAI.jar&amp;quot;&lt;br /&gt;
rename &amp;quot;C:\Program Files (x86)\Spring\AI\Skirmish\MyAI\0.1\MyAI.jar&amp;quot; SkirmishAI.jar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the above code to match your computer&#039;s directories. Place it in a text file and save it as MoveAI.bat. This will create a batch file that you can double click and it will automatically move your AI to the proper location and rename it. You might wish to put a shortcut to this in your Start menu or taskbar. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Q:&#039;&#039;&#039; I have problems with the class-loader in my AI, any idea? &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A:&#039;&#039;&#039; Each Java AI implementation is loaded by a separate class loader. This is used to load all the AI&#039;s class files and dependency libraries (in the &#039;&#039;jlib&#039;&#039; dir). Some libraries though, use the Thread contexts class loader, instead of the one of the current class. Therefore, if you want to load something from the AI&#039;s own class-path, make sure to let these libraries use the class-path of your AI classes, eg:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ClassLoader myClassLoader = AIFactory.class.getClassLoader();&lt;br /&gt;
MySpecialUtil msp = new MySpecialUtil();&lt;br /&gt;
msp.setClassLoader(myClassLoader);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Please do not set this class-loader on the thread with &amp;lt;code&amp;gt;Thread.currentThread().setContextClassLoader(myClassLoader)&amp;lt;/code&amp;gt;, because all AI&#039;s are run in the same Java thread, and therefore this will cause problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[AIInterface:Java|Java AI Interface]]&lt;br /&gt;
* [http://spring.abma.de/doc-Interface-JavaOO/ Javadoc of the Java AI OO Wrapper] (generated daily from source by [[User:Abma|abma]])&lt;br /&gt;
* [http://springrts.com/phpbb/download/file.php?id=4970 Netbeans Java Skirmish AI Tutorial] (from [http://springrts.com/phpbb/viewtopic.php?p=448743#p448743 this forum thread])&lt;br /&gt;
* [http://modinfo.adune.nl/index.php?MOD=ba712 ModInfo] (contains a list of units and their short names)&lt;br /&gt;
&lt;br /&gt;
[[Category: AI]]&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6011</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6011"/>
		<updated>2012-04-15T08:31:12Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* TASClient */ fixed link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#css:&lt;br /&gt;
  #content * {font-family: &#039;Bitstream Vera Sans&#039;,  &#039;Trebuchet MS&#039;, &#039;Arial&#039;, &#039;Myriad Pro&#039;, &#039;FreeSans&#039;;}&lt;br /&gt;
}}&lt;br /&gt;
= Downloads =&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top: 15px; padding: 10px; background:rgba(45,180,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 6px 6px 6px 6px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
| If you just want to &amp;lt;u&amp;gt;get ready to play&amp;lt;/u&amp;gt;, you want this:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;margin-top: 15px; text-align: center&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[GamesDownloads|Games Downloads]]&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spring Engine (no games included) =&lt;br /&gt;
Latest stable version: &#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039; ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Window.png]]&lt;br /&gt;
| &#039;&#039;&#039;Installer: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}.exe/download spring_{{StableEngineVersion}}.exe ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_portable.7z/download spring_{{StableEngineVersion}}_portable.7z ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_portable.7z {mirror}]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
| follow the &#039;&#039;&#039;[[SetupGuide|Linux Setup guide]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Apple.png]]&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;.app-Bundle: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip/download spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip ~50MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The Mac OS X port is &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;experimental&amp;lt;/span&amp;gt;. Help with its development would be greatly appreciated. Check our forum &#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=65 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;here&amp;lt;/span&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing/Nightly Builds =&lt;br /&gt;
Used for testing latest engine developments.&lt;br /&gt;
[http://springrts.com/dl/buildbot/ list of all test builds]&lt;br /&gt;
&lt;br /&gt;
= Source Code =&lt;br /&gt;
== git ==&lt;br /&gt;
&#039;&#039;&#039;[http://github.com/spring/spring &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring project page at github&amp;lt;/span&amp;gt;]&#039;&#039;&#039; &amp;lt;small&amp;gt;[http://status.github.com (status page)]&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Getting the Source ===&lt;br /&gt;
latest stable:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone -b master git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
development branch (won&#039;t work for online gaming):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternate git url ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git://springrts.git.sourceforge.net/gitroot/springrts/springrts&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Latest Stable Snapshot ==&lt;br /&gt;
This tarball is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;br /&gt;
&lt;br /&gt;
The packages below target Linux only and do not contain certain files required to compile using CMake on Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.lzma/download spring_{{StableEngineVersion}}_src.tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.gz/download spring_{{StableEngineVersion}}_src.tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.gz {mirror}]&lt;br /&gt;
&lt;br /&gt;
= Other springrts.com hosted projects =&lt;br /&gt;
== TASClient ==&lt;br /&gt;
An alternative windows only lobby client.&lt;br /&gt;
&lt;br /&gt;
[http://springfiles.com/downloadmain/15995 Download &#039;&#039;&#039;TASClient&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
== Lobby server ==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can run a lobby server yourself.&lt;br /&gt;
See the [https://github.com/spring/SpringLS/blob/springls-0.37/README.markdown README] for more info.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/downloads/spring/SpringLS/springls-{{SpringLSVersion:Latest}}-stand-alone.jar Download &#039;&#039;&#039;SpringLS {{SpringLSVersion:Latest}}&#039;&#039;&#039; ~ 5.6MB] (requires Java 5+)&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=FAQ:technical&amp;diff=7244</id>
		<title>FAQ:technical</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=FAQ:technical&amp;diff=7244"/>
		<updated>2012-04-14T12:28:38Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Is there any documentation for the source code? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FAQ]]&lt;br /&gt;
&lt;br /&gt;
=Technical FAQ=&lt;br /&gt;
&lt;br /&gt;
==What port numbers does Spring use?==&lt;br /&gt;
Game uses port 8452 UDP by default, which can be changed in the lobby. If you are behind a router, and are having problems hosting, try forwarding the correct port and also make sure the firewall is not blocking it.&lt;br /&gt;
&lt;br /&gt;
==What APIs does Spring use?==&lt;br /&gt;
Spring uses OpenGL for graphics and OpenAL for sound. Also SDL is used for input and some other stuff.&lt;br /&gt;
&lt;br /&gt;
==What language is Spring written in?==&lt;br /&gt;
The Spring game engine is mostly written in C++. TASClient is written in Delphi, SpringLS in Java, SpringLobby in C++. Widgets and Gadgets are written in Lua. Skirmish AIs can be written in Lua, C, C++, Java VM languages and Python.&lt;br /&gt;
&lt;br /&gt;
==Is Spring open source?==&lt;br /&gt;
Yes, it is. Go to the [[Download|downloads]] section of the site to download the source code.&lt;br /&gt;
&lt;br /&gt;
==Is there any documentation for the source code?==&lt;br /&gt;
Doxygen is used to generate the documentation of springs&#039; source code. An [http://springrts.com/doxygen/ up to date documentation] is generated from the &#039;&#039;develop&#039;&#039; branch. To generate the documentation yourself, install DoxyGen and run &amp;quot;doxygen&amp;quot; from within the spring source directory.&lt;br /&gt;
&lt;br /&gt;
==Is Spring a Portable Application?==&lt;br /&gt;
&lt;br /&gt;
Yes, spring can be run from any big-enough portable storage device.&lt;br /&gt;
Sometimes config files and content files are saved god knows where ie in &amp;quot;my documents&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Is there an alternative way to connect to the lobby server?==&lt;br /&gt;
&lt;br /&gt;
Yes, using the [[IrcBridge | IRC-Bridge]] through an [http://en.wikipedia.org/wiki/Internet_Relay_Chat#Clients IRC client]. Keep in mind though, that this is not officially supported, and no guarantee is given for the reliability of this service.&lt;br /&gt;
&lt;br /&gt;
==What do the spring version parts mean?==&lt;br /&gt;
&lt;br /&gt;
See [[EngineVersion#Parts]].&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=FAQ:trouble&amp;diff=7369</id>
		<title>FAQ:trouble</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=FAQ:trouble&amp;diff=7369"/>
		<updated>2012-04-14T12:26:59Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* I see the complete screen full of red/green/yellow or giant dots on minimap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FAQ]]&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Network==&lt;br /&gt;
&lt;br /&gt;
===My buddy can not connect to a game I&#039;ve opened. What can we do?===&lt;br /&gt;
The engine uses UDP port 8452 by default, which can be changed in the lobby. If you are behind a router, and are having problems hosting, try forwarding the correct port and also make sure the firewall is not blocking it. If you do not know what a port or a firewall is, use a relay host instead: when hosting a game, tick the check-box labeled &amp;quot;Use relayhost&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===I can not connect to the online lobby server?===&lt;br /&gt;
See in the [http://springrts.com/phpbb/index.php forum] if others have the same problem.&lt;br /&gt;
&lt;br /&gt;
The server might be temporary down for maintenance.&lt;br /&gt;
Most lobbies should allow you to connect to a &amp;quot;backup server&amp;quot; or just try again after some time.&lt;br /&gt;
&lt;br /&gt;
==Graphics==&lt;br /&gt;
===Low fps that get better in metalview (F4)===&lt;br /&gt;
Try typing into ingame chat:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/advmapshading 0&lt;br /&gt;
&lt;br /&gt;
/advmodelshading 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
And/Or add to springsettings.cfg:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AdvMapShading = 0&lt;br /&gt;
&lt;br /&gt;
AdvUnitShading = 0&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(usually the AdvMapShading part is enough)&lt;br /&gt;
&lt;br /&gt;
===I am having really bad framerates (fps) on my dual core! What am I doing wrong?===&lt;br /&gt;
Some of this helped other users:&lt;br /&gt;
&lt;br /&gt;
* This error is sometimes reported by people having multicore-CPUs. To solve this, you could try to restrict it to run on one core. Enable &amp;quot;SetCoreAffinity=1&amp;quot; in your [[springrc]].&lt;br /&gt;
* Installing the latest processor drivers and Windows hotfixes for your system may also help.&lt;br /&gt;
* Also you may try multithreaded version of Spring, which comes with the installation pack labeled as &#039;Multi-threaded executable&#039; option. &amp;lt;span class=warning&amp;gt;WARNING: `multithreaded` means something different in this context than 99.9% of the ppl think!!! Also this engine version is LESS STABLE and is known to not work with most Lua widgets!!!&amp;lt;/span&amp;gt;&lt;br /&gt;
* Also try to disabling the &amp;quot;Exhaust&amp;quot; effect on planes could help: Press f11 while ingame, disable LUPS and Lups manager (by clicking on them to make them turn red)&lt;br /&gt;
&lt;br /&gt;
===How to Alt-Tab out of full-screen on Linux?===&lt;br /&gt;
Play windowed with &#039;&#039;/grabinput&#039;&#039;, or [http://springrts.com/phpbb/viewtopic.php?p=449972#p449972 use devilspie].&lt;br /&gt;
&lt;br /&gt;
===I use Linux with Open-Source Gfx drivers, and the map is all white!===&lt;br /&gt;
[[File:Whitemap.png|200px]] &lt;br /&gt;
&lt;br /&gt;
Due to patents S3TC texture support is disabled by default. To enable it you need the tool driconf (note, you no longer require libdxtn):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install libgl1-mesa-dev driconf&lt;br /&gt;
$ driconf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the &amp;quot;Image Quality&amp;quot; tab activate &amp;quot;Enable S3TC texture compression even if software support is not available&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Related forum threads:&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=20&amp;amp;t=20809 Spring on Intel or ATI &#039;open-source&#039; drivers]&lt;br /&gt;
&lt;br /&gt;
===It crashes, hangs, ...===&lt;br /&gt;
Possible fixes are: &lt;br /&gt;
* updating your graphics driver&lt;br /&gt;
* lowering the graphic-settings at SpringSettings&lt;br /&gt;
* disabling graphics effects at SpringSettings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spring crashes on my notebook but it has a really nice graphic card! (or some effects are messed up) ===&lt;br /&gt;
eg air plane trails look like: [http://img805.imageshack.us/img805/8881/screen00000.png]&lt;br /&gt;
&lt;br /&gt;
Some notebooks have two graphic cards: One for 3D and a small integrated one to save power while on facebook.&lt;br /&gt;
Setting it to use the correct 3D card has helped some players.&lt;br /&gt;
Use the internet to find out how to do that.&lt;br /&gt;
Screenhot of such controll panel, though it might look different on different computers:&lt;br /&gt;
http://rog.asus.com/forum/attachment.php?attachmentid=2492&amp;amp;d=1323213638&lt;br /&gt;
&lt;br /&gt;
===Nvidia===&lt;br /&gt;
&lt;br /&gt;
====I am having really bad framerates (FPS)!====&lt;br /&gt;
Turn off &#039;threaded optimizations&#039; for Spring in the nVidia control panel, enable &amp;quot;Compress textures&amp;quot; in SpringSettings.&lt;br /&gt;
&lt;br /&gt;
[[File:MToptimizations.png|200px]]&lt;br /&gt;
&lt;br /&gt;
====After playing Spring, in background running firefox window is white or gray. ====&lt;br /&gt;
&lt;br /&gt;
Disable Anti-Aliasing / decrease graphic-quality (&amp;lt;=high) in SpringSettings.&lt;br /&gt;
&lt;br /&gt;
====Shadows on Units doesn&#039;t work====&lt;br /&gt;
[[File:Shadows_fail.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
Check if Shadows and AdvUnitShading is enabled, update your graphics driver.&lt;br /&gt;
&lt;br /&gt;
====It crashes/hangs====&lt;br /&gt;
&lt;br /&gt;
* try disabling shadows (SpringSettings)&lt;br /&gt;
* try disabling advanced map shading (AdvMapShading=0)&lt;br /&gt;
&lt;br /&gt;
===Intel===&lt;br /&gt;
&lt;br /&gt;
====Why does spring hang for a few seconds?====&lt;br /&gt;
This bug occurs on maps like FolsomDamDeluxeV2, Tangerline. FPS suddenly drops to 1 and game runs very slowly. This seems to be an Intel driver bug. For Windows Vista/7 try updating driver up to 8.15.10.2246 or newer. For Windows XP there is no solution yet.&lt;br /&gt;
&lt;br /&gt;
Related forum threads:&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=11&amp;amp;t=23541 Intel HD Graphics Driver issue?]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=11&amp;amp;t=23081 Performance issues on Intel X4500]&lt;br /&gt;
&lt;br /&gt;
====Fonts are unreadable====&lt;br /&gt;
[[File:IntelBorkedFonts.png|200px]]&lt;br /&gt;
&lt;br /&gt;
This is a driver bug, try to update/downgrade your driver.&lt;br /&gt;
&lt;br /&gt;
====It crashes, hangs etc...====&lt;br /&gt;
Possible fixes are:&lt;br /&gt;
* disabling texture-compression at SpringSettings&lt;br /&gt;
* disabling reflective units at SpringSettings&lt;br /&gt;
* disable ReflectiveWater&lt;br /&gt;
* [http://downloadcenter.intel.com/ updating your driver]&lt;br /&gt;
* use linux! (yes, this hint sucks, but the open-source-drivers seems to work better...)&lt;br /&gt;
&lt;br /&gt;
===ATI/AMD===&lt;br /&gt;
First of all, if you encourage a graphics related problem on ATI/AMD graphic device update your drivers to the latest version [http://support.amd.com/us/gpudownload/Pages/index.aspx ATI/AMD dowload].&lt;br /&gt;
&lt;br /&gt;
==== I&#039;ve got the most recent drivers and the game crashes in atioglxx.dll====&lt;br /&gt;
As of Spring 0.80.5, use only basic or dynamic water. Bump water with disabled shore waves should also work. Reflective or refractive water will make the game crash after 15-20 minutes due to a memory leak.&lt;br /&gt;
&lt;br /&gt;
Spring 0.81.2 and/or Catalyst 10.2 drivers or newer should fix this problem.&lt;br /&gt;
&lt;br /&gt;
if the game crashes immediatly after the loading screen is finished (&amp;quot;Finalizing&amp;quot;) in the Zero-K or Gundam mods and the video card is based on the RV670 GPU (some models of: 3690, 3850, 3870, 4570, 4730, 3730, 3610, 4580, 4750, 3750, 2600 XT/PRO, 3830) Catalyst 8.12 drivers may fix it (windows xp 32-bit, possibly other NT5-based 32-bit platforms), however even with that driver there may still be a crash (not immediatly after the loading screen, as soon as the simulations starts) in Annihilation-based mods that use RED UI, the same lua-based atioglxx.dll crash also happens with the 1944 mod.&lt;br /&gt;
&lt;br /&gt;
also note that later versions of Catalyst drivers for these cards reduce performance in OpenGL applications (windows xp 32-bit, possibly other NT5-based 32-bit platforms) (found at least in: spring, quake3 and Nexuiz), for spring the most significant drop (by ~15%) appears in 9.10 and higher Catalyst versions (more than 15%), if you have one of the lower-performing models of these and don&#039;t use shadows you may want to try the Catalyst 8.3 and 8.4 drivers (they do not support shadows but should work ~5% faster compared to 8.12) but those drivers may be less stable&lt;br /&gt;
&lt;br /&gt;
====I&#039;ve got a notebook and official ATI/AMD drivers refuse to install, what to do?====&lt;br /&gt;
First of all, make sure you&#039;re installing the &#039;AMD Mobility Radeon&#039; driver pack branch.&lt;br /&gt;
Use [http://www.driverheaven.net/modtool.php ATI Mobility Modder] or unofficial drivers - DNA or Omega. Use [http://google.com Google] or get them from [http://downloads.guru3d.com/Videocards----ATI-Catalyst-(Modified)_c24.html guru3d].&lt;br /&gt;
&lt;br /&gt;
====UI disapears after 5-10 mins of play on old ATI videocards====&lt;br /&gt;
In cmdcolors.txt, simply comment out or remove the following lines:&lt;br /&gt;
 stipplePattern 0xffcc&lt;br /&gt;
 stippleFactor 1&lt;br /&gt;
 stippleSpeed 1.0&lt;br /&gt;
The problem detected on:&lt;br /&gt;
* ATI Radeon X3200 with latest drivers ([http://springrts.com/phpbb/viewtopic.php?f=11&amp;amp;t=20817 ref])&lt;br /&gt;
* ATI Radeon 9500 with Omega drivers 3.8.442 ([http://springrts.com/phpbb/viewtopic.php?f=11&amp;amp;t=23526 ref])&lt;br /&gt;
&lt;br /&gt;
====I see the complete screen full of red/green/yellow or giant dots on minimap====&lt;br /&gt;
&lt;br /&gt;
[[File:Redui-minimap-bug.pngâ€Ž|200px]]&lt;br /&gt;
&lt;br /&gt;
This is a bug somewhere in LUA drawing with ATI/AMD. Disable widgets that draw via F11 menu to find the one. There is no real fix. A Widget causing this is &amp;quot;Red UI Minimap&amp;quot;, &amp;quot;Highlight Units&amp;quot; or &amp;quot;Chili Minimap&amp;quot;. Setting &amp;quot;Max nano simultaneous particles&amp;quot; (SpringSettings) seems to help, too.&lt;br /&gt;
&lt;br /&gt;
====The textures looks scary====&lt;br /&gt;
[[File:Ati-drawing-issues.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
This is a known ATI/AMD-bug. Try using different driver, preferably other than 10.5, 10.6, 10.7 -&amp;gt; newer driver pack with fixed OpenGL driver should be fine.&lt;br /&gt;
&lt;br /&gt;
====It crashes always at start, hangs etc...====&lt;br /&gt;
Possible fixes are:&lt;br /&gt;
* using basic water ([[SpringSettings]])&lt;br /&gt;
* disabling vsync (SpringSettings)&lt;br /&gt;
* disabling Pixelbuffer objects (SpringSettings)&lt;br /&gt;
* disabling Anti-Aliasing (SpringSettings)&lt;br /&gt;
* set Shadows to &amp;quot;off&amp;quot; (SpringSettings)&lt;br /&gt;
* updating or even downgrading [http://support.amd.com/ ATI driver]: ATI/AMD OpenGL drivers are very buggy, blame ATI/AMD for that!&lt;br /&gt;
* set AtiHacks=1 ([[springrc]])&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
&lt;br /&gt;
===The Sound is crackling/pausing in Windows, what can i do?===&lt;br /&gt;
Try:&lt;br /&gt;
* Update the sounds driver&lt;br /&gt;
* Enable SystemSoundsService in Vista/Seven&lt;br /&gt;
&lt;br /&gt;
===I am having sound problems under Linux! What can i do?===&lt;br /&gt;
In more then 90% of the cases, this is caused by PulseAudio. If this is the problem, there are three known solutions to solve it. Use one of them.&lt;br /&gt;
&lt;br /&gt;
====disable sound effects====&lt;br /&gt;
Make sure you have the OpenAL-Soft configuration utility. You might want to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# install&lt;br /&gt;
sudo apt-get install alsoft-conf&lt;br /&gt;
# run&lt;br /&gt;
alsoft-conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not on a debian-based distribution, you can download the source from the project&#039;s homepage: http://www.anduin.net/~angasule/?x=entry:entry091211-133213. You can also check if there&#039;s a newer version.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#download&lt;br /&gt;
wget http://www.anduin.net/~angasule/fp-content/attachs/alsoft-conf_1.4.3.tar.gz&lt;br /&gt;
#extract&lt;br /&gt;
tar xvf alsoft-conf_1.4.3.tar.gz&lt;br /&gt;
cd alsoft-conf-1.4.3&lt;br /&gt;
#compile&lt;br /&gt;
cmake .&lt;br /&gt;
make&lt;br /&gt;
#run&lt;br /&gt;
./alsoft-conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;Effects&amp;quot; tab remove everything from &amp;quot;Allowed effects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====disable non-ALSA (preferred)====&lt;br /&gt;
run alsoft-conf (for installation see above)&lt;br /&gt;
&lt;br /&gt;
In the &amp;quot;backend&amp;quot; tab, keep only &amp;quot;ALSA&amp;quot; on the left column, then save. Done!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Side Note:&#039;&#039; ALSA is redirected to the PulseAudio layer when installed.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
===Middle mouse button does not work ingame===&lt;br /&gt;
&lt;br /&gt;
If you use Logitech Setpoint be aware that it sets your middle mouse button by default to &#039;Autoscroll&#039;. It should be set to &#039;Middle button&#039; instead. Change the setting in Setpoint.&lt;br /&gt;
&lt;br /&gt;
===Spring crashes after Error opening cache\ ... in infolog.txt===&lt;br /&gt;
&lt;br /&gt;
   [f=0000000] Reading Estimate PathCosts [8]&lt;br /&gt;
   [f=0000000] Error opening cache\paths\...&lt;br /&gt;
&lt;br /&gt;
this is a known bug in 0.82.7.1. Your cpu also has many cores?&lt;br /&gt;
Then try to set HardwareThreadCount=2&amp;quot; in [[springrc]]. Spring tries to create the PathCache with to many threads in parallel and crashes because out of memory.&lt;br /&gt;
&lt;br /&gt;
===I have a problem that is not described here! What can i do?===&lt;br /&gt;
There is a number of things you can do, among these are:&lt;br /&gt;
* Search in the [http://springrts.com/phpbb/viewforum.php?f=11 Help &amp;amp; Bugs Forum], and ask if you can not find a suiting topic.&lt;br /&gt;
* Check the games forum or homepage.&lt;br /&gt;
* Look at the [[Gentoo_install#Linux_specific_Troubleshooting|Linux only FAQ]].&lt;br /&gt;
* Ask for help in the lobby in a suiting channel, eg: #springlobby, #de, #fr, #ai, #main&lt;br /&gt;
* Ask the FAQ-Bot in the lobby in channel #springlobby. To get a list of topics, write &#039;&#039;!faqlist&#039;&#039; and then use &#039;&#039;!faq &amp;lt;topic-name&amp;gt;&#039;&#039; to get the help text. For example, try &#039;&#039;!faq rename&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===The ingame chat spams a lot of cryptic error messages===&lt;br /&gt;
This is most likely a problem with the game&#039;s Lua scripting.&lt;br /&gt;
Report it in the games forum or its bug tracker.&lt;br /&gt;
[[Bugs|Here]] are some hints how to so.&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6006</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6006"/>
		<updated>2012-01-17T10:30:47Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Spring Engine (no games included) */ indicate that the OS X build is missing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#css:&lt;br /&gt;
  #content * {font-family: &#039;Bitstream Vera Sans&#039;,  &#039;Trebuchet MS&#039;, &#039;Arial&#039;, &#039;Myriad Pro&#039;, &#039;FreeSans&#039;;}&lt;br /&gt;
}}&lt;br /&gt;
= Downloads =&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top: 15px; padding: 10px; background:rgba(45,180,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 6px 6px 6px 6px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
| If you just want to &amp;lt;u&amp;gt;get ready to play&amp;lt;/u&amp;gt;, you want this:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;margin-top: 15px; text-align: center&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[GamesDownloads|Games Downloads]]&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spring Engine (no games included) =&lt;br /&gt;
Latest stable version: &#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039; ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Window.png]]&lt;br /&gt;
| &#039;&#039;&#039;Installer: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}.exe/download spring_{{StableEngineVersion}}.exe ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_portable.7z/download spring_{{StableEngineVersion}}_portable.7z ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_portable.7z {mirror}]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
| follow the &#039;&#039;&#039;[[SetupGuide|Linux Setup guide]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Apple.png]]&lt;br /&gt;
| &amp;lt;font color=&amp;quot;#FF5500&amp;quot;&amp;gt;Not yet available due to hardware problems.&lt;br /&gt;
We are working on it, but can not give a due date.&lt;br /&gt;
Sorry!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;&#039;&#039;&#039;.app-Bundle: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip/download spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip ~34MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
The Mac OS X port is experimental. Help with its development would be greatly appreciated. Check our forum &#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=65 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;here&amp;lt;/span&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Testing/Nightly Builds =&lt;br /&gt;
Used for testing latest engine developments.&lt;br /&gt;
[http://springrts.com/dl/buildbot/ list of all test builds]&lt;br /&gt;
&lt;br /&gt;
= Source Code =&lt;br /&gt;
== git ==&lt;br /&gt;
&#039;&#039;&#039;[http://github.com/spring/spring &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring project page at github&amp;lt;/span&amp;gt;]&#039;&#039;&#039; &amp;lt;small&amp;gt;[http://status.github.com (status page)]&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Getting the Source ===&lt;br /&gt;
latest stable:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone -b master git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
development branch (won&#039;t work for online gaming):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternate git url ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git://springrts.git.sourceforge.net/gitroot/springrts/springrts&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Latest Stable Snapshot ==&lt;br /&gt;
This tarball is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;br /&gt;
&lt;br /&gt;
The packages below target Linux only and do not contain certain files required to compile using CMake on Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.lzma/download spring_{{StableEngineVersion}}_src.tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.gz/download spring_{{StableEngineVersion}}_src.tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.gz {mirror}]&lt;br /&gt;
&lt;br /&gt;
= Other springrts.com hosted projects =&lt;br /&gt;
== TASClient ==&lt;br /&gt;
An alternative windows only lobby client.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/dl/tasclient/TASClientLatest.7z Download &#039;&#039;&#039;TASClient&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
== Lobby server ==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can run a lobby server yourself.&lt;br /&gt;
See the [https://github.com/spring/SpringLS/blob/springls-0.37/README.markdown README] for more info.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/downloads/spring/SpringLS/springls-{{SpringLSVersion:Latest}}-stand-alone.jar Download &#039;&#039;&#039;SpringLS {{SpringLSVersion:Latest}}&#039;&#039;&#039; ~ 5.6MB] (requires Java 5+)&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Gamedev:Sidepics&amp;diff=8367</id>
		<title>Gamedev:Sidepics</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Gamedev:Sidepics&amp;diff=8367"/>
		<updated>2012-01-14T09:43:12Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: add PNG support to the specs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sidepics are the faction icons which display in the Multiplayer Lobbies.&lt;br /&gt;
They have to follow these simple rules:&lt;br /&gt;
&lt;br /&gt;
* be 16x16 pixels&lt;br /&gt;
* be in either &#039;&#039;PNG&#039;&#039; (preferred) or &#039;&#039;BMP&#039;&#039; format (where white=(RGB: 255,255,255) is transparent)&lt;br /&gt;
* be located in the [[Mod_Development:Archives|&#039;&#039;sidepics&#039;&#039;]] directory (see below)&lt;br /&gt;
* be named the same as the &#039;&#039;name&#039;&#039; field in &#039;&#039;sidedata.tdf&#039;&#039; (see below)&lt;br /&gt;
&lt;br /&gt;
===Directory===&lt;br /&gt;
The &amp;quot;sidepics&amp;quot; directory goes in your game&#039;s root. Please see [[Mod_Development:Archives]] for more details on the directories Spring reads.&lt;br /&gt;
&lt;br /&gt;
===Filename===&lt;br /&gt;
The filename must be the same as the name field in [[Sidedata.lua]] file.&lt;br /&gt;
&lt;br /&gt;
[[Category:Game development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10611</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=10611"/>
		<updated>2011-12-20T13:07:50Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* UberServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
* [http://springrts.com/dl/tasclient/ProtocolDescription.xml HTML] (may be out of date)&lt;br /&gt;
* [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml XML] (raw, always latest)&lt;br /&gt;
&lt;br /&gt;
==Download Systems==&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
=Lobby client development=&lt;br /&gt;
There are currently four working public lobby clients available.&lt;br /&gt;
&lt;br /&gt;
==SpringLobby==&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;BrainDamage&amp;lt;/font&amp;gt; &amp;amp;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SpringLobby is the official lobby client of spring and is bundled with the Spring engine in the installer. It uses the &#039;&#039;wxWidgets&#039;&#039; library. You can browse the sources and submit issues on its [http://springlobby.info/ website].&lt;br /&gt;
&lt;br /&gt;
==Zero-K==&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;
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://code.google.com/p/zero-k/ Zero-K project page]&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;
==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;&lt;br /&gt;
&lt;br /&gt;
You can download the sources from the [http://springrts.com/svn/spring/Lobby/TASClient/ subversion repository] (svn://springrts.com/svn/spring/Lobby/TASClient/) and browse them on the [http://springrts.com/websvn/listing.php?repname=Spring&amp;amp;path=%2FLobby%2FTASClient%2F#_Lobby_TASClient_ websvn]. Latest binary version is always available here:&lt;br /&gt;
http://springrts.com/dl/tasclient/TASClientLatest.7z&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=18999 How to compile TASClient]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=19014 How to customize TASClient]&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;
[http://code.google.com/p/qtlobby/ project page]&lt;br /&gt;
&lt;br /&gt;
=Libraries and frameworks=&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;
=Lobby server development=&lt;br /&gt;
&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;
==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. All protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and SpringLS. You can get more information and download uberserver at the [https://github.com/lunixbochs/uberserver github page]&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobbies]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10610</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=10610"/>
		<updated>2011-12-20T13:06:49Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* TASServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
* [http://springrts.com/dl/tasclient/ProtocolDescription.xml HTML] (may be out of date)&lt;br /&gt;
* [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml XML] (raw, always latest)&lt;br /&gt;
&lt;br /&gt;
==Download Systems==&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
=Lobby client development=&lt;br /&gt;
There are currently four working public lobby clients available.&lt;br /&gt;
&lt;br /&gt;
==SpringLobby==&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;BrainDamage&amp;lt;/font&amp;gt; &amp;amp;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SpringLobby is the official lobby client of spring and is bundled with the Spring engine in the installer. It uses the &#039;&#039;wxWidgets&#039;&#039; library. You can browse the sources and submit issues on its [http://springlobby.info/ website].&lt;br /&gt;
&lt;br /&gt;
==Zero-K==&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;
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://code.google.com/p/zero-k/ Zero-K project page]&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;
==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;&lt;br /&gt;
&lt;br /&gt;
You can download the sources from the [http://springrts.com/svn/spring/Lobby/TASClient/ subversion repository] (svn://springrts.com/svn/spring/Lobby/TASClient/) and browse them on the [http://springrts.com/websvn/listing.php?repname=Spring&amp;amp;path=%2FLobby%2FTASClient%2F#_Lobby_TASClient_ websvn]. Latest binary version is always available here:&lt;br /&gt;
http://springrts.com/dl/tasclient/TASClientLatest.7z&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=18999 How to compile TASClient]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=19014 How to customize TASClient]&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;
[http://code.google.com/p/qtlobby/ project page]&lt;br /&gt;
&lt;br /&gt;
=Libraries and frameworks=&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;
=Lobby server development=&lt;br /&gt;
&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;
==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. All protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and TASServer. You can get more information and download uberserver at the [https://github.com/lunixbochs/uberserver github page]&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobbies]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=FAQ:technical&amp;diff=7241</id>
		<title>FAQ:technical</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=FAQ:technical&amp;diff=7241"/>
		<updated>2011-12-20T13:03:28Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* What language is Spring written in? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FAQ]]&lt;br /&gt;
&lt;br /&gt;
=Technical FAQ=&lt;br /&gt;
&lt;br /&gt;
==What port numbers does Spring use?==&lt;br /&gt;
Game uses port 8452 UDP by default, which can be changed in the lobby. If you are behind a router, and are having problems hosting, try forwarding the correct port and also make sure the firewall is not blocking it.&lt;br /&gt;
&lt;br /&gt;
==What APIs does Spring use?==&lt;br /&gt;
Spring uses OpenGL for graphics and OpenAL for sound. Also SDL is used for input and some other stuff.&lt;br /&gt;
&lt;br /&gt;
==What language is Spring written in?==&lt;br /&gt;
The Spring game engine is mostly written in C++. TASClient is written in Delphi, SpringLS in Java, SpringLobby in C++. Widgets and Gadgets are written in Lua. Skirmish AIs can be written in Lua, C, C++, Java VM languages and Python.&lt;br /&gt;
&lt;br /&gt;
==Is Spring open source?==&lt;br /&gt;
Yes, it is. Go to the [[Download|downloads]] section of the site to download the source code.&lt;br /&gt;
&lt;br /&gt;
==Is there any documentation for the source code?==&lt;br /&gt;
Yes, doxygen can be used to produce documentation. Unfortunately, there is no webserver running the docu at the moment, you will need to generate your own. To do so, install doxygen and run &amp;quot;doxygen&amp;quot; from in spring source directory.&lt;br /&gt;
&lt;br /&gt;
==Is Spring a Portable Application?==&lt;br /&gt;
&lt;br /&gt;
Yes, spring can be run from any big-enough portable storage device.&lt;br /&gt;
Sometimes config files and content files are saved god knows where ie in &amp;quot;my documents&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Is there an alternative way to connect to the lobby server?==&lt;br /&gt;
&lt;br /&gt;
Yes, using the [[IrcBridge | IRC-Bridge]] through an [http://en.wikipedia.org/wiki/Internet_Relay_Chat#Clients IRC client]. Keep in mind though, that this is not officially supported, and no guarantee is given for the reliability of this service.&lt;br /&gt;
&lt;br /&gt;
==What do the spring version parts mean?==&lt;br /&gt;
&lt;br /&gt;
See [[EngineVersion#Parts]].&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6005</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6005"/>
		<updated>2011-12-20T13:01:36Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Other springrts.com hosted projects */ fix formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#css:&lt;br /&gt;
  #content * {font-family: &#039;Bitstream Vera Sans&#039;,  &#039;Trebuchet MS&#039;, &#039;Arial&#039;, &#039;Myriad Pro&#039;, &#039;FreeSans&#039;;}&lt;br /&gt;
}}&lt;br /&gt;
= Downloads =&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top: 15px; padding: 10px; background:rgba(45,180,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 6px 6px 6px 6px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
| If you just want to &amp;lt;u&amp;gt;get ready to play&amp;lt;/u&amp;gt;, you want this:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;margin-top: 15px; text-align: center&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[GamesDownloads|Games Downloads]]&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spring Engine (no games included) =&lt;br /&gt;
Latest stable version: &#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039; ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Window.png]]&lt;br /&gt;
| &#039;&#039;&#039;Installer: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}.exe/download spring_{{StableEngineVersion}}.exe ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_portable.7z/download spring_{{StableEngineVersion}}_portable.7z ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_portable.7z {mirror}]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
| follow the &#039;&#039;&#039;[[SetupGuide|Linux Setup guide]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Apple.png]]&lt;br /&gt;
| &#039;&#039;&#039;.app-Bundle: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip/download spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip ~34MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The Mac OS X port is experimental. Help with its development would be greatly appreciated. Check our forum &#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=65 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;here&amp;lt;/span&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Testing/Nightly Builds =&lt;br /&gt;
Used for testing latest engine developments.&lt;br /&gt;
[http://springrts.com/dl/buildbot/ list of all test builds]&lt;br /&gt;
&lt;br /&gt;
= Source Code =&lt;br /&gt;
== git ==&lt;br /&gt;
&#039;&#039;&#039;[http://github.com/spring/spring &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring project page at github&amp;lt;/span&amp;gt;]&#039;&#039;&#039; &amp;lt;small&amp;gt;[http://status.github.com (status page)]&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Getting the Source ===&lt;br /&gt;
latest stable:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone -b master git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
development branch (won&#039;t work for online gaming):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternate git url ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git://springrts.git.sourceforge.net/gitroot/springrts/springrts&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Latest Stable Snapshot ==&lt;br /&gt;
This tarball is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;br /&gt;
&lt;br /&gt;
The packages below target Linux only and do not contain certain files required to compile using CMake on Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.lzma/download spring_{{StableEngineVersion}}_src.tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.gz/download spring_{{StableEngineVersion}}_src.tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.gz {mirror}]&lt;br /&gt;
&lt;br /&gt;
= Other springrts.com hosted projects =&lt;br /&gt;
== TASClient ==&lt;br /&gt;
An alternative windows only lobby client.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/dl/tasclient/TASClientLatest.7z Download &#039;&#039;&#039;TASClient&#039;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
== Lobby server ==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can run a lobby server yourself.&lt;br /&gt;
See the [https://github.com/spring/SpringLS/blob/springls-0.37/README.markdown README] for more info.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/downloads/spring/SpringLS/springls-{{SpringLSVersion:Latest}}-stand-alone.jar Download &#039;&#039;&#039;SpringLS {{SpringLSVersion:Latest}}&#039;&#039;&#039; ~ 5.6MB] (requires Java 5+)&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6004</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=6004"/>
		<updated>2011-12-20T12:57:23Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Lobby server */ TASServer -&amp;gt; SpringLS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#css:&lt;br /&gt;
  #content * {font-family: &#039;Bitstream Vera Sans&#039;,  &#039;Trebuchet MS&#039;, &#039;Arial&#039;, &#039;Myriad Pro&#039;, &#039;FreeSans&#039;;}&lt;br /&gt;
}}&lt;br /&gt;
= Downloads =&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top: 15px; padding: 10px; background:rgba(45,180,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 6px 6px 6px 6px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
| If you just want to &amp;lt;u&amp;gt;get ready to play&amp;lt;/u&amp;gt;, you want this:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;margin-top: 15px; text-align: center&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[[GamesDownloads|Games Downloads]]&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spring Engine (no games included) =&lt;br /&gt;
Latest stable version: &#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039; ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Window.png]]&lt;br /&gt;
| &#039;&#039;&#039;Installer: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}.exe/download spring_{{StableEngineVersion}}.exe ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_portable.7z/download spring_{{StableEngineVersion}}_portable.7z ~25MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_portable.7z {mirror}]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
| follow the &#039;&#039;&#039;[[SetupGuide|Linux Setup guide]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Apple.png]]&lt;br /&gt;
| &#039;&#039;&#039;.app-Bundle: [http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip/download spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip ~34MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_MacOSX-10.6-SnowLeopard.zip {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
The Mac OS X port is experimental. Help with its development would be greatly appreciated. Check our forum &#039;&#039;&#039;[http://springrts.com/phpbb/viewforum.php?f=65 &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;here&amp;lt;/span&amp;gt;]&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Testing/Nightly Builds =&lt;br /&gt;
Used for testing latest engine developments.&lt;br /&gt;
[http://springrts.com/dl/buildbot/ list of all test builds]&lt;br /&gt;
&lt;br /&gt;
= Source Code =&lt;br /&gt;
== git ==&lt;br /&gt;
&#039;&#039;&#039;[http://github.com/spring/spring &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring project page at github&amp;lt;/span&amp;gt;]&#039;&#039;&#039; &amp;lt;small&amp;gt;[http://status.github.com (status page)]&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Getting the Source ===&lt;br /&gt;
latest stable:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone -b master git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
development branch (won&#039;t work for online gaming):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alternate git url ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git://springrts.git.sourceforge.net/gitroot/springrts/springrts&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Latest Stable Snapshot ==&lt;br /&gt;
This tarball is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;br /&gt;
&lt;br /&gt;
The packages below target Linux only and do not contain certain files required to compile using CMake on Windows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.lzma/download spring_{{StableEngineVersion}}_src.tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-{{StableEngineVersion}}/spring_{{StableEngineVersion}}_src.tar.gz/download spring_{{StableEngineVersion}}_src.tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_{{StableEngineVersion}}_src.tar.gz {mirror}]&lt;br /&gt;
&lt;br /&gt;
= Other springrts.com hosted projects =&lt;br /&gt;
== TASClient ==&lt;br /&gt;
An alternative windows only lobby client.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/tasclient/TASClientLatest.7z Download TASClient]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby server (SpringLS {{SpringLSVersion:Latest}}) ==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can run a lobby server yourself.&lt;br /&gt;
See the &#039;&#039;&#039;[https://github.com/spring/SpringLS/blob/springls-0.37/README.markdown README]&#039;&#039;&#039; for more info.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://github.com/downloads/spring/SpringLS/springls-{{SpringLSVersion:Latest}}-stand-alone.jar Download SpringLS {{SpringLSVersion:Latest}}]&#039;&#039;&#039; ~ 5.6MB (requires Java 1.5+)&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:SpringLSVersion:Latest&amp;diff=23087</id>
		<title>Template:SpringLSVersion:Latest</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:SpringLSVersion:Latest&amp;diff=23087"/>
		<updated>2011-12-20T12:50:22Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: init page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;0.37&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6150</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6150"/>
		<updated>2011-10-13T07:12:55Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Mac OS X */ fixed OS X App bundle link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/spring_{develop}{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/Spring_{develop}{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;development switched to branch &#039;&#039;develop&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
    to check on which branch you are, type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    if you are on &#039;&#039;master&#039;&#039; type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout -b develop origin/develop&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
* move not essential Lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===12. October 2011===&lt;br /&gt;
==== 82.8.1-30-g5dbb98b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...82.8.1-30-g5dbb98b in detail]):&lt;br /&gt;
&lt;br /&gt;
* new versioning scheme RC12 (see [http://springrts.com/phpbb/viewtopic.php?p=501948#p501948 the related forum thread])&lt;br /&gt;
* fixed logging on windows&lt;br /&gt;
* record WARNING and higher log levels to stderr, normal log to stdout&lt;br /&gt;
* fixed some pathfinder issues&lt;br /&gt;
* many bug-fixes&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?p=502559#p502559 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6149</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6149"/>
		<updated>2011-10-12T21:56:05Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Windows */ fix portable dl link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/spring_{develop}{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;development switched to branch &#039;&#039;develop&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
    to check on which branch you are, type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    if you are on &#039;&#039;master&#039;&#039; type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout -b develop origin/develop&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
* move not essential Lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===12. October 2011===&lt;br /&gt;
==== 82.8.1-30-g5dbb98b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...82.8.1-30-g5dbb98b in detail]):&lt;br /&gt;
&lt;br /&gt;
* new versioning scheme RC12 (see [http://springrts.com/phpbb/viewtopic.php?p=501948#p501948 the related forum thread])&lt;br /&gt;
* fixed logging on windows&lt;br /&gt;
* record WARNING and higher log levels to stderr, normal log to stdout&lt;br /&gt;
* fixed some pathfinder issues&lt;br /&gt;
* many bug-fixes&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?p=502559#p502559 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6148</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6148"/>
		<updated>2011-10-12T21:53:12Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Spring Engine Testing Release */ master -&amp;gt; develop in links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/develop/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;development switched to branch &#039;&#039;develop&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
    to check on which branch you are, type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    if you are on &#039;&#039;master&#039;&#039; type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout -b develop origin/develop&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
* move not essential Lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===12. October 2011===&lt;br /&gt;
==== 82.8.1-30-g5dbb98b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...82.8.1-30-g5dbb98b in detail]):&lt;br /&gt;
&lt;br /&gt;
* new versioning scheme RC12 (see [http://springrts.com/phpbb/viewtopic.php?p=501948#p501948 the related forum thread])&lt;br /&gt;
* fixed logging on windows&lt;br /&gt;
* record WARNING and higher log levels to stderr, normal log to stdout&lt;br /&gt;
* fixed some pathfinder issues&lt;br /&gt;
* many bug-fixes&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?p=502559#p502559 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6147</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6147"/>
		<updated>2011-10-12T18:18:58Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Upcoming release */ yet more minor fixes (preview different then rela page, ARG!)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;development switched to branch &#039;&#039;develop&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
    to check on which branch you are, type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
    if you are on &#039;&#039;master&#039;&#039; type: &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout -b develop origin/develop&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
* move not essential Lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===12. October 2011===&lt;br /&gt;
==== 82.8.1-30-g5dbb98b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...82.8.1-30-g5dbb98b in detail]):&lt;br /&gt;
&lt;br /&gt;
* new versioning scheme RC12 (see [http://springrts.com/phpbb/viewtopic.php?p=501948#p501948 the related forum thread])&lt;br /&gt;
* fixed logging on windows&lt;br /&gt;
* record WARNING and higher log levels to stderr, normal log to stdout&lt;br /&gt;
* fixed some pathfinder issues&lt;br /&gt;
* many bug-fixes&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?p=502559#p502559 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6146</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6146"/>
		<updated>2011-10-12T18:15:48Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Upcoming release */ minor formatting fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;development switched to branch &#039;&#039;develop&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
to check on which branch you are, type:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
if you are on &amp;quot;master&amp;quot; type:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout origin/development -b development&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
* move not essential Lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===12. October 2011===&lt;br /&gt;
==== 82.8.1-30-g5dbb98b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...82.8.1-30-g5dbb98b in detail]):&lt;br /&gt;
&lt;br /&gt;
* new versioning scheme RC12 (see [http://springrts.com/phpbb/viewtopic.php?p=501948#p501948 the related forum thread])&lt;br /&gt;
* fixed logging on windows&lt;br /&gt;
* record WARNING and higher log levels to stderr, normal log to stdout&lt;br /&gt;
* fixed some pathfinder issues&lt;br /&gt;
* many bug-fixes&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?p=502559#p502559 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:EngineVersion:Testing&amp;diff=22549</id>
		<title>Template:EngineVersion:Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:EngineVersion:Testing&amp;diff=22549"/>
		<updated>2011-10-12T18:13:23Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;82.8.1-30-g5dbb98b&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:EngineVersion:Testing:ReleaseDate&amp;diff=22601</id>
		<title>Template:EngineVersion:Testing:ReleaseDate</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:EngineVersion:Testing:ReleaseDate&amp;diff=22601"/>
		<updated>2011-10-12T18:13:19Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;12. October 2011&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6145</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6145"/>
		<updated>2011-10-12T18:12:49Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: new testing release 12. October 2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;development switched to develop branch!&#039;&#039;&#039; when using git, to check on which branch you are, type &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
if you&#039;re on &amp;quot;master&amp;quot; type:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout origin/development -b development&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* move not essential lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===12. October 2011===&lt;br /&gt;
==== 82.8.1-30-g5dbb98b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...82.8.1-30-g5dbb98b in detail]):&lt;br /&gt;
&lt;br /&gt;
* new versioning scheme RC12 (see [http://springrts.com/phpbb/viewtopic.php?p=501948#p501948 the related forum thread])&lt;br /&gt;
* fixed logging on windows&lt;br /&gt;
* record WARNING and higher log levels to stderr, normal log to stdout&lt;br /&gt;
* fixed some pathfinder issues&lt;br /&gt;
* many bug-fixes&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?p=502559#p502559 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6144</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6144"/>
		<updated>2011-10-11T21:14:03Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Spring Engine Testing Release */ moved the tech and license logos to the About page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;development switched to develop branch!&#039;&#039;&#039; when using git, to check on which branch you are, type &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
if you&#039;re on &amp;quot;master&amp;quot; type:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout origin/development -b development&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* move not essential lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=About&amp;diff=1295</id>
		<title>About</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=About&amp;diff=1295"/>
		<updated>2011-10-11T21:13:16Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Features */ added Logos of used licenses and tech, as discussed in engine dev the meeting of 10. October 2011&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
Spring is a project aiming to create a new and versatile RTS Engine.&lt;br /&gt;
&lt;br /&gt;
= System requirements =&lt;br /&gt;
=== Minimum ===&lt;br /&gt;
* 1.6 GHz single core CPU with SSE&lt;br /&gt;
* 512 MB of RAM&lt;br /&gt;
* 128 MB Nvidia Geforce 6xxx graphics card&lt;br /&gt;
* Roughly 200 MB of hard drive space, depending on how many maps and games you download with the installer.&lt;br /&gt;
&lt;br /&gt;
=== Recommended ===&lt;br /&gt;
* 2 GHz single core CPU or better&lt;br /&gt;
* 2 GB of RAM or more&lt;br /&gt;
* 512 MB Geforce 8xxx Series graphics card or greater&lt;br /&gt;
* 4 GB of hard drive space to accommodate more maps and games&lt;br /&gt;
&lt;br /&gt;
For more information on system requirements see [[Requirements]] or for help see [[FAQ]].&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Many different [[Games]], made just for Spring.&lt;br /&gt;
* Play online, on a LAN or offline Single Player.&lt;br /&gt;
* Large battles limited only by the power of your computer; support for up to 5000 units.&lt;br /&gt;
* Large, highly detailed maps in which to wage those battles, fully 3D with deformable terrain, forest fires, dynamic and reflective water, and custom skyboxes.&lt;br /&gt;
* Several camera modes, allowing for anything to be viewed from almost any angle.&lt;br /&gt;
* Fully 3D combat in land, sea, and air, with realistic weapon trajectories (physics engine).&lt;br /&gt;
* Complex 3rd party AIs, some of which are quite good.&lt;br /&gt;
* An extremely powerful UI, designed to minimize unnecessary micromanagement.&lt;br /&gt;
* Frequent additions and bugfixes.&lt;br /&gt;
{|style=&amp;quot;margin-top:15px; background:rgb(255,255,255); border: 1px solid rgba(0,0,0,0.5); border-radius: 12px 12px 12px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
[[Image:Logo_GPL_gplv3-127x51.png|127px|GPL Logo]]&lt;br /&gt;
[[Image:Logo_OpenSource_Osi_standard_logo.png|85px|OpenSource Logo]]&lt;br /&gt;
[[Image:Logo_Ogl.jpg|170px|OpenGL Logo]]&lt;br /&gt;
[[Image:Logo_OpenAL_Openal_c.png|140px|OpenAL Logo]]&lt;br /&gt;
[[Image:Logo_SDL_Sdl_powered.png|110px|SDL Logo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Development =&lt;br /&gt;
* Open source (GPLv2). &lt;br /&gt;
* Multi-plattform (Windows &amp;amp; Linux, MacOSX in progress). &lt;br /&gt;
* Written in C++, using OpenGL, Lua, Assimp, streflop, OpenAL, FreeType2, DevIL, SDL, GLEW, boost, 7zip, zlib, libVorbis, libOgg.&lt;br /&gt;
&lt;br /&gt;
= Content Creation =&lt;br /&gt;
Thanks to the ability of the Spring engine to run lots of different content, it is possible to&lt;br /&gt;
* [http://springrts.com/wiki/Game_and_Unit_development Build your own games.]&lt;br /&gt;
* [http://springrts.com/wiki/Map_development Create your own maps.]&lt;br /&gt;
* [http://springrts.com/wiki/AI:Development Program AI players] in several languages.&lt;br /&gt;
&lt;br /&gt;
=Authors=&lt;br /&gt;
A list of the Spring developers can be found on the [[Authors]] page.&lt;br /&gt;
&lt;br /&gt;
=Press=&lt;br /&gt;
[[Press|History of Spring and its games in the press]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_Ogl.jpg&amp;diff=21885</id>
		<title>File:Logo Ogl.jpg</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_Ogl.jpg&amp;diff=21885"/>
		<updated>2011-10-11T21:07:04Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: OpenGL logo from http://www.opengl.org/about/logos/
download from: http://www.opengl.org//about/logos/download
login: springrts
passwd: /\ (not literally these two chars, stupid!)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenGL logo from http://www.opengl.org/about/logos/&lt;br /&gt;
download from: http://www.opengl.org//about/logos/download&lt;br /&gt;
login: springrts&lt;br /&gt;
passwd: /\ (not literally these two chars, stupid!)&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Distributions-freebsd.png&amp;diff=21697</id>
		<title>File:Distributions-freebsd.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Distributions-freebsd.png&amp;diff=21697"/>
		<updated>2011-10-08T15:52:01Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: http://openiconlibrary.sourceforge.net

Free/Open Source Icons: All these are icons are free and open source. That means they are free to use, modify, and redistribute, without any cost. They can be used for commercial and non-commercial projects or produ&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://openiconlibrary.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
Free/Open Source Icons: All these are icons are free and open source. That means they are free to use, modify, and redistribute, without any cost. They can be used for commercial and non-commercial projects or products, royalty free. The only requirement is that they remain free and open source, and you have to give credit where credit is due. So if you use the icons in your project, you have to offer the icons or any derivatives of the icons with the same free/open license.&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6143</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6143"/>
		<updated>2011-10-04T10:12:44Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: added OpenSource-Initiative, GPL, OpenAL &amp;amp; SDL logos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|{{EngineVersion:Stable}}]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|{{EngineVersion:Testing}}]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
{|style=&amp;quot;margin-top:15px; background:rgb(255,255,255); border: 1px solid rgba(0,0,0,0.5); border-radius: 12px 12px 12px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
[[Image:Logo_GPL_gplv3-127x51.png|100px|GPL Logo]]&lt;br /&gt;
[[Image:Logo_OpenSource_Osi_standard_logo.png|75px|OpenSource Logo]]&lt;br /&gt;
[[Image:Logo_OpenAL_Openal_c.png|100px|OpenAL Logo]]&lt;br /&gt;
[[Image:Logo_SDL_Sdl_powered.png|90px|SDL Logo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
===Upcoming release===&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3386-gefb020b...develop in detail]):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;development switched to develop branch!&#039;&#039;&#039; when using git, to check on which branch you are, type &amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git branch&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
if you&#039;re on &amp;quot;master&amp;quot; type:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout origin/development -b development&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* move not essential lua widgets to cont/examples (#2537)&lt;br /&gt;
* allow to override the default data-dir locations with env vars USERPROFILE and PROGRAMDATA on windows&lt;br /&gt;
* add MoveCtrl.SetGunshipMoveTypeData control over airStrafe&lt;br /&gt;
* fix Skirmish AIs saturate command/sec limit of player (#2541)&lt;br /&gt;
* fix wake-projectiles after /water 2&lt;br /&gt;
* fix Repeat commands involving IDs remain after the objet destroyed (#2620)&lt;br /&gt;
* fix make air-absorption runtime configurable again&lt;br /&gt;
* disable console logging for unitsync&lt;br /&gt;
* git: &amp;quot;develop&amp;quot; is now the developing branch, master will contain releases from now&lt;br /&gt;
* adjust log-levels for some messages&lt;br /&gt;
* added http://springrts.com/dl/buildbot/default/develop/LATEST + http://springrts.com/dl/buildbot/default/master/LATEST&lt;br /&gt;
&lt;br /&gt;
===6. September 2011===&lt;br /&gt;
==== 0.82.3-3386-gefb020b ====&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-3295-g000fac6...0.82.3-3386-gefb020b in detail]):&lt;br /&gt;
&lt;br /&gt;
* fixed win32 installer (it installed always in non-portable mode)&lt;br /&gt;
* fix memory corruption in stacked transports&lt;br /&gt;
* Fix SetUnitWeaponState &amp;quot;range&amp;quot; fails for Cannon&lt;br /&gt;
* fix bumpmapped water on ATI-cards&lt;br /&gt;
* fixed possible lua-errors ([http://springrts.com/mantis/view.php?id=2511 #2511])&lt;br /&gt;
* allow resources_map to specify groundFX textures for CEGs using CSimpleGroundFlash ([http://springrts.com/mantis/view.php?id=2632 #2632])&lt;br /&gt;
* added a [https://github.com/spring/spring/commit/fd7eb8dde6289394bd69ccae4709c01629461d27 validation test]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26745 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=12820</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=12820"/>
		<updated>2011-10-04T10:09:21Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: fox border&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
{{Languages}}&lt;br /&gt;
--&amp;gt;{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px solid rgba(0,0,0,0.5); border-radius: 12px 0px 0px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.3), inset 0 10px 8px rgba(255,255,255,0.1);&amp;quot; |&lt;br /&gt;
== Playing &amp;amp; General ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Read Me First]]&#039;&#039;&#039; Answers to questions often asked - Everyone should read this first.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039; Has it been asked before?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Keyboard]]&#039;&#039;&#039; Default Keyboard Layout in the Engine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Games]]&#039;&#039;&#039; Games that use the Spring engine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Maps]]&#039;&#039;&#039; All about maps for the Spring engine and where to get them.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Getting Spring Content and Links]]&#039;&#039;&#039; Lists sites related to spring, and sites from which you can download spring Games, Maps, and more&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[AI:Skirmish]]&#039;&#039;&#039; Skirmish AIs for Singleplayer&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Widgets]]&#039;&#039;&#039; All about installing and using LuaUI widgets...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Spreading Spring]]&#039;&#039;&#039; Read before advertising.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Hosting Spring]]&#039;&#039;&#039; Autohosting and related topics.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Spring_on_MacOSX |Mac OS]]&#039;&#039;&#039; Mac OSX information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[SetupGuide |Linux]]&#039;&#039;&#039; NetBSD / Solaris / Linux / Cross-platform information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Spring_Replays |Replays]]&#039;&#039;&#039; Watching recordings of previously played matches.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[The Lighter Side Of Spring]]&#039;&#039;&#039; Humour, comics and quotations.&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px solid rgba(0,0,0,0.5); border-radius: 0px 12px 12px 0px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.3), inset 0 10px 8px rgba(255,255,255,0.1);&amp;quot; |&lt;br /&gt;
== Development == &lt;br /&gt;
&#039;&#039;&#039;[[Game_and_Unit_development#Mod_development|Game Development]]&#039;&#039;&#039; Lots of links to valuable Articles and forum threads regarding Game/Unit Development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Map_development|Map Development]]&#039;&#039;&#039; Tutorials and other useful information for creating maps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Development:Getting_Started|Engine Development]]&#039;&#039;&#039; Starting point for engine development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Scripting]]&#039;&#039;&#039; Information regarding the use of the supplementary Lua scripting language for Widgets and beyond...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Map, Mod, And Unit Development Programs|Content Development Programs]]&#039;&#039;&#039; Links to all kind of useful programs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[AI:Development|AI Development]]&#039;&#039;&#039; Lots of information about developing Skirmish, Unit and Group AIs for Spring.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[General Resources]]&#039;&#039;&#039; Usable textures, sounds and code snippets by the community, for the community.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[UI:Development|Chili UI framework]]&#039;&#039;&#039; Chili Ui framework designed by JK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Associated Development Groups]]&#039;&#039;&#039; Teams, Forums and Groups associated with Spring content and code development.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin-top:15px; background:rgba(180,45,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 12px 12px 12px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;This wiki needs your help!&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A wiki is a web application that allows users to add content, as on an Internet forum, but also allows anyone to edit the content.&amp;quot;&#039;&#039;&lt;br /&gt;
- [http://en.wikipedia.org/wiki/Wiki Wikipedia.org]&lt;br /&gt;
&lt;br /&gt;
The Spring project is very dependent on its community of users to help new players and developers.  If you see anything here where a change would be helpful, please put it in.  We are currently working together at the [[Spring:WikiToDo|Wiki ToDo]] page to help coordinate improvements.&lt;br /&gt;
&lt;br /&gt;
Any contributions you make to this Wiki are in the public domain.  If you need help with the wiki markup, the [[Help:Editing|help page]] is an excellent resource.&lt;br /&gt;
&lt;br /&gt;
You need to log in to edit a page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 __NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=258</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Main_Page&amp;diff=258"/>
		<updated>2011-10-04T10:09:21Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: fox border&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
{{Languages}}&lt;br /&gt;
--&amp;gt;{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;1&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px solid rgba(0,0,0,0.5); border-radius: 12px 0px 0px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.3), inset 0 10px 8px rgba(255,255,255,0.1);&amp;quot; |&lt;br /&gt;
== Playing &amp;amp; General ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Read Me First]]&#039;&#039;&#039; Answers to questions often asked - Everyone should read this first.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[FAQ]]&#039;&#039;&#039; Has it been asked before?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Keyboard]]&#039;&#039;&#039; Default Keyboard Layout in the Engine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Games]]&#039;&#039;&#039; Games that use the Spring engine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Maps]]&#039;&#039;&#039; All about maps for the Spring engine and where to get them.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Getting Spring Content and Links]]&#039;&#039;&#039; Lists sites related to spring, and sites from which you can download spring Games, Maps, and more&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[AI:Skirmish]]&#039;&#039;&#039; Skirmish AIs for Singleplayer&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Widgets]]&#039;&#039;&#039; All about installing and using LuaUI widgets...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Spreading Spring]]&#039;&#039;&#039; Read before advertising.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Hosting Spring]]&#039;&#039;&#039; Autohosting and related topics.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Spring_on_MacOSX |Mac OS]]&#039;&#039;&#039; Mac OSX information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[SetupGuide |Linux]]&#039;&#039;&#039; NetBSD / Solaris / Linux / Cross-platform information.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Spring_Replays |Replays]]&#039;&#039;&#039; Watching recordings of previously played matches.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[The Lighter Side Of Spring]]&#039;&#039;&#039; Humour, comics and quotations.&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #41545c; border: 1px solid rgba(0,0,0,0.5); border-radius: 0px 12px 12px 0px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.3), inset 0 10px 8px rgba(255,255,255,0.1);&amp;quot; |&lt;br /&gt;
== Development == &lt;br /&gt;
&#039;&#039;&#039;[[Game_and_Unit_development#Mod_development|Game Development]]&#039;&#039;&#039; Lots of links to valuable Articles and forum threads regarding Game/Unit Development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Map_development|Map Development]]&#039;&#039;&#039; Tutorials and other useful information for creating maps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Development:Getting_Started|Engine Development]]&#039;&#039;&#039; Starting point for engine development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Lua Scripting]]&#039;&#039;&#039; Information regarding the use of the supplementary Lua scripting language for Widgets and beyond...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Map, Mod, And Unit Development Programs|Content Development Programs]]&#039;&#039;&#039; Links to all kind of useful programs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[AI:Development|AI Development]]&#039;&#039;&#039; Lots of information about developing Skirmish, Unit and Group AIs for Spring.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[General Resources]]&#039;&#039;&#039; Usable textures, sounds and code snippets by the community, for the community.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[UI:Development|Chili UI framework]]&#039;&#039;&#039; Chili Ui framework designed by JK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Associated Development Groups]]&#039;&#039;&#039; Teams, Forums and Groups associated with Spring content and code development.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;margin-top:15px; background:rgba(180,45,19,0.5); border: 1px solid rgba(0,0,0,0.5); border-radius: 12px 12px 12px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 1px 2px rgba(255,255,255,0.5), inset 0 10px 8px rgba(255,255,255,0.3);&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;&#039;This wiki needs your help!&#039;&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;A wiki is a web application that allows users to add content, as on an Internet forum, but also allows anyone to edit the content.&amp;quot;&#039;&#039;&lt;br /&gt;
- [http://en.wikipedia.org/wiki/Wiki Wikipedia.org]&lt;br /&gt;
&lt;br /&gt;
The Spring project is very dependent on its community of users to help new players and developers.  If you see anything here where a change would be helpful, please put it in.  We are currently working together at the [[Spring:WikiToDo|Wiki ToDo]] page to help coordinate improvements.&lt;br /&gt;
&lt;br /&gt;
Any contributions you make to this Wiki are in the public domain.  If you need help with the wiki markup, the [[Help:Editing|help page]] is an excellent resource.&lt;br /&gt;
&lt;br /&gt;
You need to log in to edit a page.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 __NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Spring]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_SDL_Sdl_powered.png&amp;diff=21888</id>
		<title>File:Logo SDL Sdl powered.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_SDL_Sdl_powered.png&amp;diff=21888"/>
		<updated>2011-10-04T09:39:00Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: source: http://www.libsdl.de/logo/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;source: http://www.libsdl.de/logo/&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_OpenSource_Osi_standard_logo.png&amp;diff=21887</id>
		<title>File:Logo OpenSource Osi standard logo.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_OpenSource_Osi_standard_logo.png&amp;diff=21887"/>
		<updated>2011-10-04T09:37:58Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: source: http://opensource.org/trademark&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;source: http://opensource.org/trademark&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_OpenAL_Openal_c.png&amp;diff=21886</id>
		<title>File:Logo OpenAL Openal c.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_OpenAL_Openal_c.png&amp;diff=21886"/>
		<updated>2011-10-04T09:36:58Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: source: http://connect.creativelabs.com/openal/Logos/Forms/AllItems.aspx&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;source: http://connect.creativelabs.com/openal/Logos/Forms/AllItems.aspx&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_GPL_gplv3-127x51.png&amp;diff=21884</id>
		<title>File:Logo GPL gplv3-127x51.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Logo_GPL_gplv3-127x51.png&amp;diff=21884"/>
		<updated>2011-10-04T09:35:40Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: source: http://www.gnu.org/graphics/license-logos.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;source: http://www.gnu.org/graphics/license-logos.html&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Windows&amp;diff=3624</id>
		<title>Building Spring on Windows</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Windows&amp;diff=3624"/>
		<updated>2011-09-24T13:59:32Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Install MinGW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Building_spring|Building Spring]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
{{#css:&lt;br /&gt;
  code * {margin:inherit;}&lt;br /&gt;
}}&lt;br /&gt;
= Get the Source Code =&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
=Install MinGW=&lt;br /&gt;
Compiling Spring in MinGW requires GCC 4.x.&lt;br /&gt;
&lt;br /&gt;
Because the official MinGW installer and packages are outdated, we recommend to use the TDM web-installer instead, to install the official &amp;lt;code&amp;gt;MinGW Stable&amp;lt;/code&amp;gt; (not &amp;lt;s&amp;gt;&amp;lt;code&amp;gt;TDM-GCC&amp;lt;/code&amp;gt;&amp;lt;/s&amp;gt;) package:&lt;br /&gt;
&lt;br /&gt;
==TDM webinstaller==&lt;br /&gt;
Download and run the [http://tdm-gcc.tdragon.net/download On-Demand Installer] (tdm-gcc-webdl).&lt;br /&gt;
&lt;br /&gt;
Select at least the following components:&lt;br /&gt;
&lt;br /&gt;
[[File:400px-Mingwscreenshot.jpg|right|400px]]&lt;br /&gt;
&lt;br /&gt;
* gcc (version: &amp;lt;u&amp;gt;&amp;lt;code&amp;gt;MinGW Stable&amp;lt;/code&amp;gt;&amp;lt;/u&amp;gt;!)&lt;br /&gt;
** core&lt;br /&gt;
** g++&lt;br /&gt;
** openmp (optional)&lt;br /&gt;
* binutils&lt;br /&gt;
* mingw-runtime&lt;br /&gt;
* w32api&lt;br /&gt;
* mingw32-make (if you have no Make installed yet)&lt;br /&gt;
* gdb (recommended for debugging)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Possible Problems===&lt;br /&gt;
* If you get &amp;lt;span class=warning&amp;gt;undefined reference to `_Unwind_Resume&#039;&amp;lt;/span&amp;gt; linking errors, deinstall &#039;&#039;whole&#039;&#039; TDM/MinGW and reinstall it with &#039;&#039;dwarf2&#039;&#039; (&amp;lt;code&amp;gt;MinGW Stable&amp;lt;/code&amp;gt; should have it enabled).&lt;br /&gt;
&lt;br /&gt;
* When you installed an old version of MinGW/TDM and forgot to deinstall it correctly, &amp;lt;code&amp;gt;gcc.exe&amp;lt;/code&amp;gt; &amp;amp; &amp;lt;code&amp;gt;g++.exe&amp;lt;/code&amp;gt; will be named &amp;lt;code&amp;gt;gcc-dw2.exe&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;g++-dw2.exe&amp;lt;/code&amp;gt;. CMake will then fail to find the correct one, first try to deinstall anything mingw related and reinstall everything. If that didn&#039;t helped just rename the files. If even that doesn&#039;t help open cmake-gui and click the advanced button and set the paths to the correct files yourself (&amp;lt;code&amp;gt;CMAKE_C_COMPILER&amp;lt;/code&amp;gt; &amp;amp; &amp;lt;code&amp;gt;CMAKE_CXX_COMPILER&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Spring MinGW Dependencies (mingwlibs)==&lt;br /&gt;
You also need some Spring dependencies, prepackaged in the &#039;&#039;&#039;mingwlibs&#039;&#039;&#039; archive.&lt;br /&gt;
&lt;br /&gt;
You can download a tarball [http://github.com/spring/mingwlibs &#039;&#039;&#039;here&#039;&#039;&#039;] (&#039;&#039;&#039;Download Source&#039;&#039;&#039; button).&amp;lt;br&amp;gt;&lt;br /&gt;
Or (recommended) use git:&lt;br /&gt;
* open a console (cmd.exe) or use git&#039;s bash (you find it in the right click context menu when clicking the folder), &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into your source dir&lt;br /&gt;
* make a dir named mingwlibs&lt;br /&gt;
* &amp;lt;code&amp;gt;cd mingwlibs&amp;lt;/code&amp;gt;&lt;br /&gt;
* run &amp;lt;code&amp;gt;git clone git://github.com/spring/mingwlibs.git&amp;lt;/code&amp;gt;&lt;br /&gt;
* and update it from time to time with: &amp;lt;code&amp;gt;git pull --rebase&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==mingwlibs install directory==&lt;br /&gt;
There are two ways to setup the MinGW libraries:&lt;br /&gt;
&lt;br /&gt;
* Make sure you install the package in the checkout directory, so the path is: /spring/mingwlibs. If done right, it will look like:&lt;br /&gt;
** */spring/&lt;br /&gt;
** */spring/...&lt;br /&gt;
** */spring/mingwlibs&lt;br /&gt;
** */spring/rts&lt;br /&gt;
&lt;br /&gt;
* Install the package somewhere else (preferably outside of the source tree), and pass its location with the &#039;&#039;MINGDIR&#039;&#039; option to CMake in the configure step (see further down, in the quick instructions).&lt;br /&gt;
&lt;br /&gt;
= Compiling with cmake =&lt;br /&gt;
First get [http://www.cmake.org/cmake/resources/software.html CMake here] and install it.&lt;br /&gt;
&lt;br /&gt;
then&lt;br /&gt;
* run the &#039;&#039;cmake-gui&#039;&#039; and select a source and a build directory&lt;br /&gt;
* configure and follow the instructions, and adjust variables to your needs (defaults are OK)&lt;br /&gt;
* press &#039;&#039;&#039;Generate&#039;&#039;&#039;&lt;br /&gt;
* open a console (&#039;&#039;cmd.exe&#039;&#039;), &#039;&#039;cd&#039;&#039; into your build directory&lt;br /&gt;
* &#039;&#039;optional:&#039;&#039; for multi-threaded compilation, the &#039;&#039;mingw32-make&#039;&#039; part may differ on your system: &amp;lt;code&amp;gt;&#039;&#039;&amp;lt;pre&amp;gt;set MAKE_COMMAND=mingw32-make -j2&amp;lt;/pre&amp;gt;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
* compile with: &amp;lt;code&amp;gt;&#039;&#039;&amp;lt;pre&amp;gt;mingw32-make install-spring&amp;lt;/pre&amp;gt;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Compiling with scons=&lt;br /&gt;
deprecated - use cmake&lt;br /&gt;
&lt;br /&gt;
=Visual Studio 8 (2005)=&lt;br /&gt;
(possibly the free Express Edition) &lt;br /&gt;
&lt;br /&gt;
* Install the [https://github.com/downloads/spring/spring/spring-vc8libs-v8.7z vclibs library package]. You need to install this in the /spring directory from the SVN checkout or the zipped source. If done right, it will look like:&lt;br /&gt;
**/spring/&lt;br /&gt;
**/spring/installer&lt;br /&gt;
**/spring/rts&lt;br /&gt;
**/spring/... other dirs&lt;br /&gt;
**/spring/vclibs&lt;br /&gt;
* Install the [http://msdn.microsoft.com/directx/sdk/ DirectX SDK]&lt;br /&gt;
* Install the PlatformSDK. I got away with unchecking the parts of the PlatformSDK that were obviously not related (IIS, web stuff). Makes for a smaller download. Make &#039;&#039;&#039;sure&#039;&#039;&#039; the Platform SDK and DirectX SDK are in the VS search/include directories.&lt;br /&gt;
** Note that the most recent version of Platform SDK is called [http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&amp;amp;displaylang=en Windows SDK].&lt;br /&gt;
* After installing them, open Visual C++. Click Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories. Add these entries to the corresponding sections (paths just a reference, yours may be different):&lt;br /&gt;
**Include files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Include&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\include&lt;br /&gt;
**Library files:&lt;br /&gt;
***$(ProgramFiles)\Microsoft DirectX SDK (August 2007)\Lib\x86 (Might need \x64 on a 64-bit platform, I don&#039;t know.)&lt;br /&gt;
***$(ProgramFiles)\Microsoft Platform SDK\lib&lt;br /&gt;
* Open the solution. /spring/rts/build/vstudio8/rts.sln&lt;br /&gt;
* Start building (usually you want to select the Release with error catching build, debug is really too slow and is used only when you really know what you want to test)&lt;br /&gt;
* Select the working directory in the project properties, otherwise spring will not work correctly&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
* &amp;lt;span class=warning&amp;gt;...\Windows\v6.0A\include\shlwapi.h(196) : error C2061: syntax error : identifier &#039;PCUITEMID_CHILD&#039;&amp;lt;/span&amp;gt; - wrong version of Platform SDK is used; go to Tools &amp;gt;&amp;gt; Options &amp;gt;&amp;gt; &amp;gt;&amp;gt; Projects and Solutions &amp;gt;&amp;gt; VC++ Directories and move the one that&#039;s causing this problem all the way down.&lt;br /&gt;
&lt;br /&gt;
=Visual Studio 9 (2008)=&lt;br /&gt;
(possibly the free Express Edition)&lt;br /&gt;
&lt;br /&gt;
Not yet fully working as far as I know; you need at least this hotfix from Microsoft though:&lt;br /&gt;
&lt;br /&gt;
http://support.microsoft.com/kb/946040&lt;br /&gt;
&lt;br /&gt;
or update your Visual Studio using your Windows Update.&lt;br /&gt;
&lt;br /&gt;
For the rest the Visual Studio 8 instructions should apply, mostly. You probably won&#039;t need to add Windows SDK path references as they should be present by default.&lt;br /&gt;
&lt;br /&gt;
You need the [http://cloud.github.com/downloads/spring/spring/spring-vc9libs-v4.7z vclibs for VS2008], and not the ones for Visual Studio 2005. The installation procedure is the same though.&lt;br /&gt;
&lt;br /&gt;
Be aware that the project file isn&#039;t updated nearly as frequently as it should, so it&#039;s best to use the .vcproj file from VS8 build and VS2008 will automatically update it.&lt;br /&gt;
&lt;br /&gt;
=General Visual Studio Notes=&lt;br /&gt;
So far the following aspects of Spring don&#039;t function properly or don&#039;t function at all when compiled with Visual Studio:&lt;br /&gt;
*Your VS build won&#039;t sync with GCC builds in multiplayer mode&lt;br /&gt;
*Any external AI crashes immediatley at start, LUA AI works though&lt;br /&gt;
[[Category:Compiling]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23045</id>
		<title>Template:Obtaining The Source Code</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23045"/>
		<updated>2011-09-20T12:18:37Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Optional AI&amp;#039;s */ language&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing online)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
=== Development Sources from Git ===&lt;br /&gt;
&#039;&#039;&#039;(Bleeding-edge, unstable code for development and testing)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://github.com/spring/spring &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Spring project page at github&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;small&amp;gt;[http://status.github.com (status page)]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git clone URL for the master repo:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This will also allow you to make a patch out of the changes you make to the code, and send it to one of the developers with repository access. If you are new to git and github, you may want to have a look at [http://help.github.com/ this guide] to get you started.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT command line client is installed, you can clone the repository with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git clone git://github.com/spring/spring.git&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and update it with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git pull --rebase&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If github is unavailable or slow, there is a mirror:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git://springrts.git.sourceforge.net/gitroot/springrts/springrts&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Optional AI&#039;s==&lt;br /&gt;
If you want to also compile the AI&#039;s, you have to type&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule sync&lt;br /&gt;
git submodule update --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to update the submodules, you have to execute the same commands again.&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Development:Getting_Started&amp;diff=5493</id>
		<title>Development:Getting Started</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Development:Getting_Started&amp;diff=5493"/>
		<updated>2011-09-20T12:14:38Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Keep track what others do */ master -&amp;gt; develop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; Getting Started&lt;br /&gt;
&lt;br /&gt;
=Starting Spring Development=&lt;br /&gt;
&#039;&#039;&#039;NOTE: Outlined below is information on assisting with the development of the Spring source itself. For information about developing a mod (units, widgets, maps, etc.) see the [[Mod_and_Unit_development]] page.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even if you are developing a mod, it is highly recommended that you get the engine source. Engine source + full text search: DO IT.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
To start development, you will need:&lt;br /&gt;
#To read the [[Coding_Standards]]&lt;br /&gt;
#The latest version of the source &lt;br /&gt;
#A good code manipulation program: [[Development_IDEs]]&lt;br /&gt;
#Compiling your modified source (see instructions above)&lt;br /&gt;
&lt;br /&gt;
==Learning C++==&lt;br /&gt;
You will need to know C++ to modify or understand Spring&#039;s source code. If you are interested in learning C++, see [[Learning_CPP]]&lt;br /&gt;
&lt;br /&gt;
However please note that badly designed code (code created by a C++ novice for example), even if working will likely not be included in the spring code. Spring is a large project, and therefore it is necessary to stay away from hack jobs and create general solutions to problems.&lt;br /&gt;
&lt;br /&gt;
=Source Code Documentation=&lt;br /&gt;
The [http://springrts.com/doxygen/ doxygen documentation] can provide an overview about the source, directory structure and its dependencies. Unfortunately, there is no server running it, so you need to make them on your own, to do this, install doxygen and run &amp;quot;doxygen&amp;quot; in spring source directory (will take some time).&lt;br /&gt;
&lt;br /&gt;
An explanation on how the code is executed in game can be found in the [[Spring Engine Code]]&lt;br /&gt;
page.&lt;br /&gt;
&lt;br /&gt;
==Development Guidelines==&lt;br /&gt;
Before starting to make modifications to the source, take a look at the [[development guidelines]] which outlines some important things to think about. To find something interesting to work on, look for todos in the [http://springrts.com/phpbb/viewforum.php?f=60 forum]. You can also check in the forums to see what others are doing. If you do edit the code, please add [[Doxygen style comments]] to the code, which will then enhance the source code documentation.&lt;br /&gt;
&lt;br /&gt;
==Keep track what others do==&lt;br /&gt;
If you develop with others, you need to know what they do. You can browse the source [http://github.com/spring/spring/tree/develop at our github-page], and there is a [http://github.com/feeds/spring/commits/spring/develop commit newsfeed].&lt;br /&gt;
&lt;br /&gt;
==Buildbot and Stacktrace translator==&lt;br /&gt;
A buildbot server is [http://springrts.com:7778/waterfall?reload=60 here] available to automatically compile Spring, the default AIs and make the installer. It can also translate stacktraces directly from uploaded infolog.txt files.&lt;br /&gt;
&lt;br /&gt;
=Important Developer Tasks=&lt;br /&gt;
==[[Engine_Profiling|Profiling]]==&lt;br /&gt;
==[[Debugging_sync_errors|How to debug SyncErrors]]==&lt;br /&gt;
&lt;br /&gt;
=How to get your code included=&lt;br /&gt;
If you create something that you think should be included in the official source tree: make a fork on github.com of spring (master branch) and ask in the  [http://springrts.com/phpbb/viewforum.php?f=12 development forum] to get it included / feedback.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When developing, use the master branch!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Spring Engine TODO list=&lt;br /&gt;
If you want to code something, look into the [http://springrts.com/phpbb/viewforum.php?f=60 New Developers Forum] for TODOs.&lt;br /&gt;
There is also a [http://spring.clan-sy.com/phpbb/viewforum.php?f=21 feature request forum], which may give you some ideas. Don&#039;t be overwhelmed by the sheer number of (silly) requests though!&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may just search the code for the [http://en.wikipedia.org/wiki/Comment_%28computer_programming%29#Tags famous comment tags],&lt;br /&gt;
for example on linux: &amp;lt;code&amp;gt;grep -r &amp;quot;TODO&amp;quot; rts&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Development links=&lt;br /&gt;
* [http://github.com/spring/spring/ View the latest source in a web browser]&lt;br /&gt;
* [http://springrts.com/doxygen/ Doxygen documentation]&lt;br /&gt;
* [http://springrts.com/mantis/ Bug Tracking System]&lt;br /&gt;
* [http://springrts.com:7778/waterfall?reload=60 buildbot]&lt;br /&gt;
* [http://springrts.com/dl/buildbot/ buildbot builds]&lt;br /&gt;
* [http://springrts.com/dl/docs/unitsync/group__unitsync__api.html Unitsync API docs]&lt;br /&gt;
* [[Development:Minutes|Developer Meetings]]&lt;br /&gt;
&lt;br /&gt;
Old:&lt;br /&gt;
* [http://springrts.com/dl/spring-vc8libs.exe Development libraries for Visual Studio 2005]&lt;br /&gt;
* [http://spring.jobjol.nl/show_file.php?id=860 Spring base content files]&lt;br /&gt;
* [http://developer.berlios.de/projects/taspring-linux BerliOS project page]&lt;br /&gt;
* [https://lists.berlios.de/mailman/listinfo/taspring-linux-commit Commit mailing list]&lt;br /&gt;
* [http://sourceforge.net/projects/springrts SourceForge project page]&lt;br /&gt;
* [http://springrts.com/svn/spring/ TASServer, TASClient and Web site Subversion repository]&lt;br /&gt;
* [http://springrts.com/websvn/ TASServer, TASClient and Web site WebSVN]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lobby_Development&amp;diff=10608</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=10608"/>
		<updated>2011-09-06T08:15:38Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* TASServer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
* [http://springrts.com/dl/tasclient/ProtocolDescription.xml HTML] (may be out of date)&lt;br /&gt;
* [https://github.com/spring/LobbyProtocol/blob/master/ProtocolDescription.xml XML] (raw, always latest)&lt;br /&gt;
&lt;br /&gt;
==Download Systems==&lt;br /&gt;
* [http://springrts.com/wiki/Dev:LobbyDownloadSystems Lobby Download Systems]&lt;br /&gt;
&lt;br /&gt;
=Lobby client development=&lt;br /&gt;
There are currently four working public lobby clients available.&lt;br /&gt;
&lt;br /&gt;
==SpringLobby==&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;BrainDamage&amp;lt;/font&amp;gt; &amp;amp;&lt;br /&gt;
&amp;lt;font color=&amp;quot;#00CC00&amp;quot;&amp;gt;koshi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SpringLobby is the official lobby client of spring and is bundled with the Spring engine in the installer. It uses the &#039;&#039;wxWidgets&#039;&#039; library. You can browse the sources and submit issues on its [http://springlobby.info/ website].&lt;br /&gt;
&lt;br /&gt;
==Zero-K==&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;
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://code.google.com/p/zero-k/ Zero-K project page]&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;
==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;&lt;br /&gt;
&lt;br /&gt;
You can download the sources from the [http://springrts.com/svn/spring/Lobby/TASClient/ subversion repository] (svn://springrts.com/svn/spring/Lobby/TASClient/) and browse them on the [http://springrts.com/websvn/listing.php?repname=Spring&amp;amp;path=%2FLobby%2FTASClient%2F#_Lobby_TASClient_ websvn]. Latest binary version is always available here:&lt;br /&gt;
http://springrts.com/dl/tasclient/TASClientLatest.7z&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=18999 How to compile TASClient]&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=19014 How to customize TASClient]&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;
[http://code.google.com/p/qtlobby/ project page]&lt;br /&gt;
&lt;br /&gt;
=Libraries and frameworks=&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;,&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 bot framework written in python&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;
=Lobby server development=&lt;br /&gt;
&lt;br /&gt;
==TASServer==&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, using PHP for the admin interface. You can fetch the sources through &#039;&#039;git&#039;&#039;. Details can be found on the [http://github.com/spring/TASServer development site].&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&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary lobby server currently running on springrts.com. All protocol commands in the primary documentation should be fully-functional and compatible between both uberserver and TASServer. You can get more information and download uberserver at the [https://github.com/lunixbochs/uberserver github page]&lt;br /&gt;
&lt;br /&gt;
[[Category: Lobbies]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6126</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6126"/>
		<updated>2011-08-31T05:47:21Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Lobby */ explain how to disable version-check&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|&amp;lt;font color=&amp;quot;#00B000&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Testing}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers (recommended):&lt;br /&gt;
* &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
* &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or alternatively, configure your lobby so it does not insist using the release version of the engine:&lt;br /&gt;
* SpringLobby: set &amp;lt;code&amp;gt;DisableVersionCheck=1&amp;lt;/code&amp;gt; in &#039;&#039;springlobby.conf&#039;&#039;&lt;br /&gt;
* TASClient: press F6 (TODO check if correct (maybe F10?))&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11949</id>
		<title>Lua SyncedRead</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedRead&amp;diff=11949"/>
		<updated>2011-08-30T08:35:32Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Test Building */ add Pos2BuildPos param facing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
== Game ==&lt;br /&gt;
&lt;br /&gt;
=== Special TeamID Variables ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(those special TeamIDs are not supported by all functions)&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALL_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.MY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ALLY_UNITS&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.ENEMY_UNITS&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGaiaTeamID&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number teamID&lt;br /&gt;
&lt;br /&gt;
=== GameStates ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGodModeEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsCheatingEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsDevLuaEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsEditDefsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.AreHelperAIsEnabled&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.FixedAllies&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.IsGameOver&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Those functions allow to save data per Game,Team and Unit.&amp;lt;br&amp;gt;The advantage of it is that it can be read from anywhere (even from LuaUI and AIs!)&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRulesInfoMap&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;REMOVED in 0.82!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( ) -&amp;gt; { [key1] = string value1, [key2] = string value2, ... }&lt;br /&gt;
  ( string &amp;quot;key&amp;quot; ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number ruleIndex | string ruleName ) -&amp;gt; number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [ruleIndex1] = {[ruleName1] = number value1},  [ruleIndex2] = {[ruleName2] = number value2}, ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | { [ruleIndex1] = {[ruleName1] = number value1}, [ruleIndex2] = {[ruleName2] = number value2}, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number index | string ruleName ) -&amp;gt; nil | number value&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRulesParams&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [ruleIndex1] = {[ruleName1] = number value1}, [ruleIndex2] = {[ruleName2] = number value2}, ... }&lt;br /&gt;
&lt;br /&gt;
=== Mod-/Map-Options ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetModOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapOptions&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; {} | { &amp;quot;keyName1&amp;quot; = string &amp;quot;value&amp;quot;, &amp;quot;keyName2&amp;quot; = string &amp;quot;value&amp;quot;, ... }&lt;br /&gt;
&lt;br /&gt;
=== Speed/Time ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number userSpeedFactor, number speedFactor, boolean paused&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameFrame&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number frameNum%dayFrames, number frameNum/dayFrames&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGameSeconds&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vectors ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetWind&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number dirX, number dirY, number dirZ, &lt;br /&gt;
         number strength,  number normDirX, number normDirY, number normDirZ&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetHeadingFromVector&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetVectorFromHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number heading ) -&amp;gt; number x, number z&lt;br /&gt;
&lt;br /&gt;
== Sides/Factions ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSideData&#039;&#039;&#039;&lt;br /&gt;
  ( string sideName ) -&amp;gt; nil | string startUnit, string caseSensitiveSideName&lt;br /&gt;
  ( number sideID ) -&amp;gt; nil | string sideName, string startUnit, string caseSensitiveSideName&lt;br /&gt;
  ( ) -&amp;gt; { [1] = { sideName=string,caseName=string,startUnit=string}, [2] = .., .. }&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
=== StartBoxes/StartPositions ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamStartBox&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID ) -&amp;gt; nil | number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStartPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
=== Player,Team,Ally Lists/Info ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerList&#039;&#039;&#039;&lt;br /&gt;
  ( [number teamID = -1 | boolean onlyActive = false] [, number teamID | boolean onlyActive])&lt;br /&gt;
  -&amp;gt; nil | { [1] = number playerID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( [number allyTeamID = -1] ) -&amp;gt; nil | { [1] = number teamID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamList&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; { [1] = number allyTeamID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; &lt;br /&gt;
    nil | string  &amp;quot;name&amp;quot;,  &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;(PRE-0.83: in synced code this is &amp;quot;SYNCED_NONAME&amp;quot;!)&amp;lt;/span&amp;gt;&lt;br /&gt;
          boolean active,&lt;br /&gt;
          boolean spectator,&lt;br /&gt;
          number  teamID,&lt;br /&gt;
          number  allyTeamID,&lt;br /&gt;
          number  pingTime,&lt;br /&gt;
          number  cpuUsage,&lt;br /&gt;
          string  country,&lt;br /&gt;
          number  rank&lt;br /&gt;
          table   customPlayerKeys&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPlayerControlledUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAIInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; &lt;br /&gt;
          number  skirmishAIID,&lt;br /&gt;
          string  name,&lt;br /&gt;
          number  hostingPlayerID,&lt;br /&gt;
          string  shortName, &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;(synced =&amp;gt; &amp;quot;SYNCED_NOSHORTNAME&amp;quot;; non-local =&amp;gt; &amp;quot;UNKNOWN&amp;quot;)&amp;lt;/span&amp;gt;&lt;br /&gt;
          string  version,   &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;(synced =&amp;gt; &amp;quot;SYNCED_NOVERSION&amp;quot;;   non-local =&amp;gt; &amp;quot;UNKNOWN&amp;quot;)&amp;lt;/span&amp;gt;&lt;br /&gt;
          table   options    &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;(synced &amp;amp; non-local =&amp;gt; empty-table)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;Note: Before 0.82, the first argument was teamID, and then every other argument with a shifted position.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllyTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number allyteamID ) -&amp;gt; nil | table   customTeamKeys&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number  teamID,&lt;br /&gt;
          number  leader, &amp;lt;span class=note&amp;gt;(:= a player id)&amp;lt;/span&amp;gt;&lt;br /&gt;
          boolean isDead,&lt;br /&gt;
          boolean isAiTeam,&lt;br /&gt;
          string  &amp;quot;side&amp;quot;,&lt;br /&gt;
          number  allyTeam,&lt;br /&gt;
          table   customTeamKeys,&lt;br /&gt;
          number  incomeMultiplier&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResources&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number currentLevel,&lt;br /&gt;
          number storage,&lt;br /&gt;
          number pull,&lt;br /&gt;
          number income,&lt;br /&gt;
          number expense,&lt;br /&gt;
          number share,&lt;br /&gt;
          number sent,&lt;br /&gt;
          number received&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitStats&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt;&lt;br /&gt;
    nil | number killed,&lt;br /&gt;
          number died,&lt;br /&gt;
          number capturedBy,&lt;br /&gt;
          number capturedFrom,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamResourceStats&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;0.82 and later&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number teamID,  string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot; ) -&amp;gt;&lt;br /&gt;
    nil | number used,&lt;br /&gt;
          number produced,&lt;br /&gt;
          number excessed,&lt;br /&gt;
          number received,&lt;br /&gt;
          number sent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamStatsHistory&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID [, number startIndex [, number endIndex = startIndex ]]) -&amp;gt;&lt;br /&gt;
    nil |&lt;br /&gt;
    number cur_max_index |&lt;br /&gt;
    {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;time&amp;quot;             = number,&lt;br /&gt;
        &amp;quot;frame&amp;quot;            = number,&lt;br /&gt;
        &amp;quot;metalUsed&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;metalProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalExcess&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;metalReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;metalSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;energyUsed&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;energyProduced&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energyExcess&amp;quot;     = number,&lt;br /&gt;
        &amp;quot;energyReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;energySent&amp;quot;       = number,&lt;br /&gt;
        &amp;quot;damageDealt&amp;quot;      = number,&lt;br /&gt;
        &amp;quot;damageReceived&amp;quot;   = number,&lt;br /&gt;
        &amp;quot;unitsProduced&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsDied&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsReceived&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsSent&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;unitsCaptured&amp;quot;    = number,&lt;br /&gt;
        &amp;quot;unitsOutCaptured&amp;quot; = number,&lt;br /&gt;
        &amp;quot;unitsKilled&amp;quot;      = number&lt;br /&gt;
      }, ...&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;if called with just teamID as argument it returns the current possible range for startIndex/endIndex :={1..cur_max_index}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamLuaAI&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; string &amp;quot;luaAI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Teams/PlayersAllied ===&lt;br /&gt;
&#039;&#039;&#039;Spring.AreTeamsAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID1, number teamID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ArePlayersAllied&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID1, number playerID2 ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
== Units ==&lt;br /&gt;
=== GetUnits ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllUnits&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | unitTable = { [1] = number unitID, ... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnits&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsSorted&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil |&lt;br /&gt;
    unitDefTable = {&lt;br /&gt;
      [number unitDefID] = { [1] = [number unitID], etc... },&lt;br /&gt;
      etc...&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsCounts&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | countTable = { [number unitDefID] = count, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitsByDefs&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID | { number unitDefID1, ... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitDefCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number unitDefID ) -&amp;gt; nil | number count&lt;br /&gt;
&#039;&#039;&#039;Spring.GetTeamUnitCount&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil | number count&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax [,number teamID] ) &lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInBox&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number ymin, number zmin,&lt;br /&gt;
    number xmax, number ymax, number zmax [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius [,number teamID] )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitsInPlanes&#039;&#039;&#039;&lt;br /&gt;
  ( planes = { [1] = { number nx, number ny, number nz, number d }, etc... } )&lt;br /&gt;
    -&amp;gt; nil | unitTable = { [1] = number unitID, etc... }&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  plane normals point towards accepted space,&lt;br /&gt;
  so the acceptance criteria for each plane is:&lt;br /&gt;
    radius     = unit radius&lt;br /&gt;
    px, py, pz = unit position&lt;br /&gt;
    [(nx * px) + (ny * py) + (nz * pz) + (d - radius)]  &amp;lt;=  0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestAlly&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range ] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNearestEnemy&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number range [, bool useLOS]] ) -&amp;gt; nil | number unitID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Unit Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.ValidUnitID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsDead&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string tooltip&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLineage&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt; Removed from version 0.83.x&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number lineage | number lineage, boolean lineageIsRoot&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean neutral&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number health, number maxHealth, number paralyzeDamage,&lt;br /&gt;
                             number captureProgress, number buildProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitArmored&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;armorMultiple new in version 0.83.x&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean armored, number armorMultiple&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsStunned&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean stunned_or_inbuild, boolean stunned, boolean inbuild&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitResources&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number metalMake, number metalUse,&lt;br /&gt;
                             number energyMake, number energyUse&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitMetalExtraction&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;0.82+ and later&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number experience&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStates&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
    &amp;quot;firestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;movestate&amp;quot; = number,&lt;br /&gt;
    &amp;quot;repeat&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;cloak&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;active&amp;quot; = boolean,&lt;br /&gt;
    &amp;quot;trajectory&amp;quot; = boolean,&lt;br /&gt;
    [&amp;quot;autoland&amp;quot; = boolean,]&lt;br /&gt;
    [&amp;quot;autorepairlevel&amp;quot; = number,]&lt;br /&gt;
    [&amp;quot;loopbackattack&amp;quot; = boolean]&lt;br /&gt;
  } &lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsActive&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsCloaked&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSelfDTime&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number numStockpiled, number numStockpileQued,&lt;br /&gt;
                             number buildPercent&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;returns the center position of the unit (midpos).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBasePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;returns the bottom of the unit.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number dx, number dy, number dz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number velx, number vely, number velz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsBuilding&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;returns what unit a constructor/factory is currently building&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTransporter&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitIsTransporting&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { [1] = number unitID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponID = -1] ) -&amp;gt; nil | number isEnabled, number curPower&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number travel, number travelPeriod&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitFuel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitFlanking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;dir&amp;quot; ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
  ( number unitID, string &amp;quot;mode&amp;quot; | &amp;quot;moveFactor&amp;quot; | &amp;quot;minDamage&amp;quot; | &amp;quot;maxDamage&amp;quot; ) -&amp;gt; nil | number&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number mode, number modilityAdd,&lt;br /&gt;
    number minDamage, number maxDamage, number dirX, number dirY, number dirZ&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSensorRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string type ) -&amp;gt; nil | number radius&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;possible types are:&amp;lt;br&amp;gt;airLos, radar, sonar, seismic, radarJammer &amp;amp; sonarJammer&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLosState&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;raw is only available in gadgets&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number allyTeamID [, boolean raw] ] ) -&amp;gt; nil |&lt;br /&gt;
  { [&amp;quot;los&amp;quot; = true] [, &amp;quot;radar&amp;quot; = true] [, &amp;quot;typed&amp;quot; = true] }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitSeparation&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(returns the distance of 2 units)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID1, number unitID2 [, boolean 2D ] ) -&amp;gt; nil | number distance&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitDefDimensions&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID ) -&amp;gt; nil |&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;height&amp;quot; = number,&lt;br /&gt;
      &amp;quot;radius&amp;quot; = number,&lt;br /&gt;
      &amp;quot;midx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxx&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;miny&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxy&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;midz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;minz&amp;quot;   = number,&lt;br /&gt;
      &amp;quot;maxz&amp;quot;   = number&lt;br /&gt;
    }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponVectors&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number weaponNum ) -&amp;gt; nil | number posX, number posY, number posZ,&lt;br /&gt;
    number dirX, number dirY, number dirZ&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number weaponNum ) -&amp;gt; nil |&lt;br /&gt;
    boolean angleGood, boolean loaded, number reloadFrame, number salvoLeft, number numStockpiled&lt;br /&gt;
  ( number unitID, number weaponNum, string tag ) -&amp;gt; nil | number&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;`tag` can be:&lt;br /&gt;
  &amp;quot;reloadState&amp;quot; == &amp;quot;reloadFrame&amp;quot;&lt;br /&gt;
  &amp;quot;reloadTime&amp;quot;&lt;br /&gt;
  &amp;quot;accuracy&amp;quot;&lt;br /&gt;
  &amp;quot;sprayAngle&amp;quot;&lt;br /&gt;
  &amp;quot;range&amp;quot;&lt;br /&gt;
  &amp;quot;projectileSpeed&amp;quot;&lt;br /&gt;
  &amp;quot;burst&amp;quot;&lt;br /&gt;
  &amp;quot;burstRate&amp;quot;&lt;br /&gt;
  &amp;quot;projectiles&amp;quot;&amp;lt;/span&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLastAttacker&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitLastAttackedPiece&#039;&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | string pieceName, number gameframe&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitMoveTypeData&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;new in version 0.80+&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | { movetype data }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCollisionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
  -&amp;gt; number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
  number offsetX, number offsetY, number offsetZ,&lt;br /&gt;
  number volumeType, number testType, number primaryAxis, boolean disabled&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceCollisionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number pieceID )&lt;br /&gt;
  -&amp;gt; number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
  number offsetX, number offsetY, number offsetZ,&lt;br /&gt;
  number volumeType, number testType, number primaryAxis, boolean disabled&lt;br /&gt;
&lt;br /&gt;
=== Unit Pieces ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitVectors&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {frontX,frontY,frontZ}, {upX,upY,upZ}, {rightX,rightY,rightZ}&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number posx, number posy, number posz&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Returns piece position in unit space&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; number dirx, number diry, number dirz&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Consider this broken. It returns reverse direction in piece space (i.e. vertex(0)-vertex(1)) for pieces with &amp;gt;= 2 vertices and (1,1,1) for pieces with &amp;lt; 2 vertices)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; { [1] = number, ... , [16] = number }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceList&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { [1] = string &amp;quot;piecename&amp;quot;, ... , [pieceNumN] = string &amp;quot;piecename&amp;quot; }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceMap&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; { &amp;quot;piecename1&amp;quot; = pieceNum1, ... , &amp;quot;piecenameN&amp;quot; = pieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPieceInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number piece ) -&amp;gt; {&lt;br /&gt;
    &amp;quot;name&amp;quot;     = string &amp;quot;piecename&amp;quot;,&lt;br /&gt;
    &amp;quot;isEmpty&amp;quot;  = boolean,&lt;br /&gt;
    &amp;quot;children&amp;quot; = { [1] = string &amp;quot;piecename&amp;quot;, ... },&lt;br /&gt;
    &amp;quot;min&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;max&amp;quot;      = { [1] = number x, [2] = number y, [3] = number z },&lt;br /&gt;
    &amp;quot;offset&amp;quot;   = { [1] = number x, [2] = number y, [3] = number z },    &lt;br /&gt;
  }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptPiece&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number scriptPiece ] )&lt;br /&gt;
   -&amp;gt; nil | { scriptPieceNum = number modelPieceNum } | number modelPieceNum&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;This functions translate the COB ScriptPiece numbers into the ModelPiece numbers (the set of ScriptPieces is a subset of the ModelPieces, means #ScriptPieces &amp;lt;= #ModelPieces), which is used in all other functions (the &amp;quot;number piece&amp;quot; means always the modelpiece). So if you get via Cob2Lua a pieceID you have to translate it with this function. Btw the COB ScriptPiece number is equal with the piece position in the &amp;lt;i&amp;gt;piece&amp;lt;/i&amp;gt; definition in your cob/bos.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitScriptNames&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID )&lt;br /&gt;
   -&amp;gt; { &amp;quot;cobpiecename1&amp;quot; = ScriptPieceNum1, ... , &amp;quot;cobpiecenameN&amp;quot; = ScriptPieceNumN }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitPiecePosDir&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number pieceNum ) -&amp;gt; nil | number posX, number posY, number posZ,&lt;br /&gt;
    number dirX, number dirZ, number dirY&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Returns piece position and direction in world space. The direction (dirX, dirY, dirZ) is not necessarily normalized. The position is defined as the position of the first vertex of the piece and it defines direction as the direction in which the line from the first vertex to the second vertex points.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CommandQueues ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean,&lt;br /&gt;
         &amp;quot;meta&amp;quot;    = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCommandQueue&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(same as Spring.GetUnitCommands)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean,&lt;br /&gt;
         &amp;quot;meta&amp;quot;    = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFullBuildQueue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetRealBuildQueue&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(cleans the buildqueue of things the unit can&#039;t build itself)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt;&lt;br /&gt;
  nil | buildOrders = {&lt;br /&gt;
          [1] = { [number unitDefID] = number count },  etc...&lt;br /&gt;
        }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number count] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [1] = {&lt;br /&gt;
       &amp;quot;id&amp;quot;      = number,&lt;br /&gt;
       &amp;quot;params&amp;quot;  = { [1] = number, ...},&lt;br /&gt;
       &amp;quot;options&amp;quot; = {&lt;br /&gt;
         &amp;quot;coded&amp;quot;    = number,&lt;br /&gt;
         &amp;quot;alt&amp;quot;      = boolean,&lt;br /&gt;
         &amp;quot;ctrl&amp;quot;     = boolean,&lt;br /&gt;
         &amp;quot;shift&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;right&amp;quot;    = boolean,&lt;br /&gt;
         &amp;quot;internal&amp;quot; = boolean,&lt;br /&gt;
         &amp;quot;meta&amp;quot;    = boolean&lt;br /&gt;
       }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFactoryCounts&#039;&#039;&#039; (used to get the buildqueue of a factory, seems screwed o_O)&lt;br /&gt;
  ( number unitID [, number count [, boolean addCMDs ] ] ) -&amp;gt; nil | commandQueueTable = {&lt;br /&gt;
     [2] = { [number unitDefID | number -cmdID] = number count }, ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
=== Command Descriptions/Buttons ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCmdDescs&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number startIndex [, number endIndex ] ] ) -&amp;gt; nil | {&lt;br /&gt;
      [1] = {&lt;br /&gt;
        &amp;quot;id&amp;quot;          = number,&lt;br /&gt;
        &amp;quot;type&amp;quot;        = number,&lt;br /&gt;
        &amp;quot;name&amp;quot;        = string,&lt;br /&gt;
        &amp;quot;action&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;tooltip&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;texture&amp;quot;     = string,&lt;br /&gt;
        &amp;quot;cursor&amp;quot;      = string,&lt;br /&gt;
        &amp;quot;hidden&amp;quot;      = boolean,&lt;br /&gt;
        &amp;quot;disabled&amp;quot;    = boolean,&lt;br /&gt;
        &amp;quot;showUnique&amp;quot;  = boolean,&lt;br /&gt;
        &amp;quot;onlyTexture&amp;quot; = boolean,&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;params&amp;quot;      = { [1] = string, ... }&lt;br /&gt;
     }, ...&lt;br /&gt;
   }&lt;br /&gt;
&#039;&#039;&#039;Spring.FindUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdID ) -&amp;gt; nil | number index&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
=== GetFeatures ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInRectangle&#039;&#039;&#039;&lt;br /&gt;
  ( number xmin, number zmin, number xmax, number zmax )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInSphere&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturesInCylinder&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number radius )&lt;br /&gt;
    -&amp;gt; nil | featureTable = { [1] = number featureID, etc... }&lt;br /&gt;
&#039;&#039;&#039;Spring.GetAllFeatures&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | { [1] = number featureID, ... }&lt;br /&gt;
&lt;br /&gt;
=== Feature Informations ===&lt;br /&gt;
&#039;&#039;&#039;Spring.ValidFeatureID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDefID&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number featureDefID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number teamID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number allyID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number health, number maxHealth, number resurrectProgress&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number dirx, number diry, number dirz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureHeading&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number heading&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResources&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | number RemainingMetal, number maxMetal,&lt;br /&gt;
                                number RemainingEnergy, number maxEnergy, number reclaimLeft&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | boolean noSelect&lt;br /&gt;
&#039;&#039;&#039;Spring.GetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil | string UnitDefName, number buildFacing&lt;br /&gt;
&lt;br /&gt;
== COB ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBUnitVar&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBAllyTeamVar&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBGlobalVar&#039;&#039;&#039;&lt;br /&gt;
  ( integer varID [, boolean unpack = false ] )&lt;br /&gt;
   -&amp;gt; nil | number value | number unpackedX, number unpackedY&lt;br /&gt;
&lt;br /&gt;
== Ground ==&lt;br /&gt;
=== Ground Informations ===&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Elevation is y. Water level is always at y=0. Ground height can be changed during play (terraform or deformation).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number y&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundOrigHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number y&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundNormal&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number x, number y, number z&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundInfo&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; string &amp;quot;Type&amp;quot;, number metal, number hardness,&lt;br /&gt;
                            number tankSpeed, number kbotSpeed, number hoverSpeed,&lt;br /&gt;
                            number shipSpeed, boolean receiveTracks&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundBlocked&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z |&lt;br /&gt;
    number x1, number z1, number x2, number z2 )&lt;br /&gt;
    -&amp;gt; nil |  string &amp;quot;feature&amp;quot;, number featureID  |  string &amp;quot;unit&amp;quot;, number unitID&lt;br /&gt;
&#039;&#039;&#039;Spring.GetGroundExtremes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil | number minHeight, number maxHeight&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetSmoothMeshHeight&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z ) -&amp;gt; number y&lt;br /&gt;
&lt;br /&gt;
=== Test Building ===&lt;br /&gt;
&#039;&#039;&#039;Spring.TestBuildOrder&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z, number facing)&lt;br /&gt;
    -&amp;gt; number blocking [,number featureID]&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;blocking can be:&lt;br /&gt;
    0 - blocked&lt;br /&gt;
    1 - mobile unit in the way&lt;br /&gt;
    2 - free  (or if featureID is != 0 then with a blocking feature that can be reclaimed)&lt;br /&gt;
  facing can be:&lt;br /&gt;
    0, &amp;quot;s&amp;quot;, &amp;quot;south&amp;quot;&lt;br /&gt;
    1, &amp;quot;e&amp;quot;, &amp;quot;east&amp;quot;&lt;br /&gt;
    2, &amp;quot;n&amp;quot;, &amp;quot;north&amp;quot;&lt;br /&gt;
    3, &amp;quot;w&amp;quot;, &amp;quot;west&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.Pos2BuildPos&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;optional param &#039;&#039;facing&#039;&#039; supported in 0.83 and later&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number y, number z[, number facing] ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
=== PathFinding ===&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitEstimatedPath&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil | {&lt;br /&gt;
     [1] = { x,y,z }, ...&lt;br /&gt;
   },{&lt;br /&gt;
     [1] = startIdxOfDetailedPath,&lt;br /&gt;
     [2] = startIdxOfDetailedEstimatedPath1,&lt;br /&gt;
     [3] = startIdxOfDetailedEstimatedPath2,&lt;br /&gt;
   }&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;GetUnitEstimatedPath() returns 2 tables:&lt;br /&gt;
    1 table the waypoints and 1 table with indices (in the waypoint table)&lt;br /&gt;
    when a new (more lazy) pathfinding algorithm  begins.&lt;br /&gt;
    So the waypoint table contains 3 different levels of details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LOS ===&lt;br /&gt;
&#039;&#039;&#039;Spring.IsPosInLos&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number allyID ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsPosInRadar&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number allyID ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.IsPosInAirLos&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number allyID ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.GetPositionLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z [, number allyID] )&lt;br /&gt;
    -&amp;gt; boolean LosOrRadar, boolean inLos, boolean inRadar&lt;br /&gt;
&#039;&#039;&#039;Spring.GetClosestValidPosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;//NOT FINISHED YET&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, number x, number z, number r ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Projectiles ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectilesInRectangle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 ( number xmin, number zmin, number xmax, number zmax&lt;br /&gt;
   [, boolean excludeWeaponProjectiles&lt;br /&gt;
   [, boolean excludePieceProjectiles] ] )&lt;br /&gt;
   -&amp;gt; nil | projectileTable = { [1] = number projectileID, etc... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileName&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | string name&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileType&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | boolean weapon, boolean piece&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectilePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | number px, number py, number pz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | number vx, number vy, number vz&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | number gravity&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileSpinAngle&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | number angle&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileSpinSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | number spinSpeed&lt;br /&gt;
&#039;&#039;&#039;Spring.GetProjectileSpinVec&#039;&#039;&#039;&lt;br /&gt;
  ( number projectileID ) -&amp;gt; nil | number x, number y, number z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=VirtualFileSystem&amp;diff=19450</id>
		<title>VirtualFileSystem</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=VirtualFileSystem&amp;diff=19450"/>
		<updated>2011-08-26T12:46:58Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Archive Hierarchy */ make list ordered&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
=VFS=&lt;br /&gt;
The Virtual File System is an unified layer to access the different archives used at runtime. So you can access map, game &amp;amp; config files via the same interface.&lt;br /&gt;
&lt;br /&gt;
==Archive Hierarchy==&lt;br /&gt;
When loading a new archive (sdz, sd7, sdd) it overrides existing file references in the VFS, so the order archives are loaded is very important. So here it is (in reverse):&lt;br /&gt;
&lt;br /&gt;
# raw file system (only for unsynced data)&lt;br /&gt;
# map&lt;br /&gt;
## map archive itself&lt;br /&gt;
## map dependencies&lt;br /&gt;
## maphelper.sdz (engine supplied)&lt;br /&gt;
# game&lt;br /&gt;
## game archive itself&lt;br /&gt;
## game dependencies&lt;br /&gt;
## springcontent.sdz (engine supplied)&lt;br /&gt;
### bitmaps.sdz (engine supplied)&lt;br /&gt;
&lt;br /&gt;
(top most are checked first when accessing a file -&amp;gt; map overrides game files!)&lt;br /&gt;
&lt;br /&gt;
==Extra Informations==&lt;br /&gt;
Spring&#039;s VFS is &#039;&#039;&#039;lowercase&#039;&#039;&#039; only.&lt;br /&gt;
Also it is &#039;&#039;&#039;extremely&#039;&#039;&#039; recommended to use linux style path separators, e.g. &amp;quot;foo/bar.txt&amp;quot; and not &amp;quot;foo\bar.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Engine Read Files=&lt;br /&gt;
The engine access a few files directly, most of them are lua files which access other files themselves.&lt;br /&gt;
Here the list of files that must exist in the VFS (some of them don&#039;t have to be in the game/map archive cause there are fallback solutions in springcontent.sdz &amp;amp; maphelper.sdz):&lt;br /&gt;
&lt;br /&gt;
* ./&lt;br /&gt;
** anims/&lt;br /&gt;
*** [[MouseCursors|cursornormal.bmp/png]]&lt;br /&gt;
** gamedata/&lt;br /&gt;
*** [[defs.lua|defs.lua]]&lt;br /&gt;
*** [[Explosions.lua|explosions.lua]]&lt;br /&gt;
*** [[Explosion_alias.lua|explosion_alias.lua]]&lt;br /&gt;
*** [[Icontypes.lua|icontypes.lua]]&lt;br /&gt;
*** [[Messages.lua|messages.lua]]&lt;br /&gt;
*** [[Modrules.lua|modrules.lua]]&lt;br /&gt;
*** [[Resources.lua|resources.lua]]&lt;br /&gt;
*** [[Resources.lua|resources_map.lua]]&lt;br /&gt;
*** [[Sidedata.lua|sidedata.lua]]&lt;br /&gt;
*** [[Sounds.lua|sounds.lua]]&lt;br /&gt;
** luagaia/&lt;br /&gt;
*** main.lua&lt;br /&gt;
*** draw.lua&lt;br /&gt;
** luarules/&lt;br /&gt;
*** main.lua&lt;br /&gt;
*** draw.lua&lt;br /&gt;
** luaui/&lt;br /&gt;
*** main.lua&lt;br /&gt;
** shaders/&lt;br /&gt;
*** ?&lt;br /&gt;
** [[LuaAI.lua|luaai.lua]]&lt;br /&gt;
** [[Mapinfo.lua|mapinfo.lua]]&lt;br /&gt;
** [[Mapoptions.lua|mapoptions.lua]]&lt;br /&gt;
** [[Modinfo.lua|modinfo.lua]]&lt;br /&gt;
** [[Modoptions.lua|modoptions.lua]]&lt;br /&gt;
** [[Validmaps.lua|validmaps.lua]]&lt;br /&gt;
&lt;br /&gt;
[[Category:gamedata]]&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6125</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6125"/>
		<updated>2011-08-24T08:21:19Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Testing Version Archive */ allow to link to testing releases per date and git-describe, and allwo multiple testing releases on a single day&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|&amp;lt;font color=&amp;quot;#00B000&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Testing}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}}), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
==== 0.82.3-3295-g000fac6 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
* sync error fixed, thanks to abma&lt;br /&gt;
* first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=12&amp;amp;t=26656 Feedback forum thread]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
==== 0.82.3-2365-g82c3187 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
* Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. June 2011 ===&lt;br /&gt;
==== 0.82.3-2297-g26b01f8 ====&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
* [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
* [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6121</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6121"/>
		<updated>2011-08-21T11:37:12Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Windows */ fix portable link for real&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|&amp;lt;font color=&amp;quot;#00B000&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Testing}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal-portable.7z portable] (Lobby not included)&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}} ), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-3295-g000fac6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; sync error fixed, thanks to abma&lt;br /&gt;
  &amp;lt;li&amp;gt; first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2365-g82c3187&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 21. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2297-g26b01f8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6120</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6120"/>
		<updated>2011-08-21T11:32:30Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Windows */ fix portable link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|&amp;lt;font color=&amp;quot;#00B000&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Testing}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_minimal_portable.7z portable]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}} ), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-3295-g000fac6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; sync error fixed, thanks to abma&lt;br /&gt;
  &amp;lt;li&amp;gt; first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2365-g82c3187&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 21. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2297-g26b01f8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6119</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6119"/>
		<updated>2011-08-21T11:02:50Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: Protected &amp;quot;Download Testing&amp;quot;: prevent malware link infection ([edit=sysop] (indefinite) [move=sysop] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|&amp;lt;font color=&amp;quot;#00B000&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Testing}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_portable.7z portable]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}} ), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-3295-g000fac6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; sync error fixed, thanks to abma&lt;br /&gt;
  &amp;lt;li&amp;gt; first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2365-g82c3187&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 21. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2297-g26b01f8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6118</id>
		<title>Download Testing</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download_Testing&amp;diff=6118"/>
		<updated>2011-08-21T10:54:23Z</updated>

		<summary type="html">&lt;p&gt;Hoijui: /* Testing Version Archive */ reverse archive entry order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Spring Engine Testing Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; stable:  [[Download|&amp;lt;font color=&amp;quot;#00B000&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Stable}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Stable:ReleaseDate}})&lt;br /&gt;
&amp;lt;li&amp;gt; testing: [[#{{EngineVersion:Testing:ReleaseDate}}|&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;&#039;&#039;&#039;{{EngineVersion:Testing}}&#039;&#039;&#039;&amp;lt;/font&amp;gt;]] ({{EngineVersion:Testing:ReleaseDate}})&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get It ==&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-windows.png]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}.exe installer]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/spring_{{EngineVersion:Testing}}_portable.7z portable]&lt;br /&gt;
&amp;lt;li&amp;gt; [http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/ whole build]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Tux-G2.pngâ€Ž]]&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;get the source&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; creating the repo (first time only):&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;git clone git://github.com/spring/spring.git spring_src&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; update to latest sources:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;cd spring_src &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout {{EngineVersion:Testing}}&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &#039;&#039;&#039;build&#039;&#039;&#039; by following the [http://springrts.com/wiki/Building_Spring_on_Linux build from source] guide, or in short:&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;cmake -G &amp;quot;Unix Makefiles&amp;quot; . &amp;amp;&amp;amp; make spring &amp;amp;&amp;amp; sudo make install-spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:10px&amp;quot;| [[Image:Distributions-mac-2.png]]&lt;br /&gt;
|&lt;br /&gt;
[http://springrts.com/dl/buildbot/default/master/{{EngineVersion:Testing}}/Spring_{{EngineVersion:Testing}}-MacOSX-10.6-SnowLeopard.zip &#039;&#039;&#039;App Bundle&#039;&#039;&#039;] (tested on 10.6 Snow-Leopard only)&lt;br /&gt;
&lt;br /&gt;
In case the above fails, check out [[Spring_on_MacOSX|alternative ways]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lobby ==&lt;br /&gt;
&lt;br /&gt;
Make sure your lobby client is configured to use the correct spring binary &amp;amp; unitsync!&lt;br /&gt;
On Linux, this will usually be &#039;&#039;/usr/local/bin/spring&#039;&#039; &amp;amp; &#039;&#039;/usr/local/lib/libunitsync.so&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Use one of the test lobby servers:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;springlobby.info:8200&#039;&#039;&lt;br /&gt;
  &amp;lt;li&amp;gt; &#039;&#039;tizbac.dyndns.org:8200&#039;&#039;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bugs and issues ==&lt;br /&gt;
&lt;br /&gt;
Report in the [http://springrts.com/phpbb/viewforum.php?f=11 Help and Bugs] forum or on [http://springrts.com/mantis/main_page.php Mantis].&lt;br /&gt;
Remember to upload &#039;&#039;infolog.txt&#039;&#039; if you crash!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing Version Archive ==&lt;br /&gt;
&lt;br /&gt;
This is a list of all testing releases since the last stable release ({{EngineVersion:Stable}} ), and it represents all changes since then ([http://github.com/spring/spring/compare/{{EngineVersion:Stable}}...{{EngineVersion:Testing}} in detail]).&lt;br /&gt;
&lt;br /&gt;
=== 21. August 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-3295-g000fac6&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2365-g82c3187...0.82.3-3295-g000fac6 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; sync error fixed, thanks to abma&lt;br /&gt;
  &amp;lt;li&amp;gt; first test release that comes with a MacOS X App Bundle, thanks to daftalx&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Game devs might be interested in [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=26358 Make your game ready for the next release! (0.83)].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 29. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2365-g82c3187&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.3-2297-g26b01f8...0.82.3-2365-g82c3187 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; Fixes an issue in engine supplied Lua code plus other random bug fixes.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 21. June 2011 ===&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;padding-right:60px&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;0.82.3-2297-g26b01f8&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Changes ([http://github.com/spring/spring/compare/0.82.6.1-119-g172334e...0.82.3-2297-g26b01f8 in detail]):&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?p=492411#p492411 removed n&#039;s in array-like Lua tables]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;t=23992 game end condition moved to Lua]&lt;br /&gt;
  &amp;lt;li&amp;gt; [http://springrts.com/mantis/view.php?id=2477#bugnotes 3do solid colors appear as black (see Kloot&#039;s comment)]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test release is mainly intended for Game developers to make their game roughly compatible with the upcoming release.&lt;br /&gt;
There are still many, many known and unknown bugs in there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO&#039;&#039; add more docu here (other spring devs, please PM me!)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hoijui</name></author>
	</entry>
</feed>