<?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=Tobi</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=Tobi"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Tobi"/>
	<updated>2026-11-08T19:12:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Buildbot&amp;diff=3295</id>
		<title>Building Spring on Buildbot</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Buildbot&amp;diff=3295"/>
		<updated>2011-11-13T15:51:42Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* New (since 0.82) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Building_spring|Building Spring]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
==New (since 0.82)==&lt;br /&gt;
&lt;br /&gt;
Watch progress and errors of builds:&lt;br /&gt;
&lt;br /&gt;
http://buildbot.springrts.com/waterfall&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The outcome of builds can be found here:&lt;br /&gt;
&lt;br /&gt;
http://springrts.com/dl/buildbot/default/&lt;br /&gt;
&lt;br /&gt;
==Old (until 0.81)==&lt;br /&gt;
&lt;br /&gt;
The spring build-bot is a server that is setup to compile spring automatically, and is usable by everyone.&lt;br /&gt;
It currently supports compiling for:&lt;br /&gt;
* Windows 32bit with TDM-MinGW (default)&lt;br /&gt;
* Windows 32bit with MinGW&lt;br /&gt;
* Windows 64bit with MinGW&lt;br /&gt;
* Linux with GCC&lt;br /&gt;
&lt;br /&gt;
You may use the build-bot from within your Spring lobby client. Join channel &#039;&#039;&#039;#buildserv&#039;&#039;&#039;, type &#039;&#039;!help&#039;&#039; and follow the instructions. Most useful commands are &#039;&#039;!rebuild&#039;&#039; and &#039;&#039;!translate&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
It is maintained by bibim and mainly used by devs for testing if their changes would compile on other systems too, but as it also generates windows installers, that can be downloaded by everyone, it can be also useful for casual users willing to try the latest changes to spring.&lt;br /&gt;
&lt;br /&gt;
The outcome of builds can be found here:&lt;br /&gt;
[http://buildbot.eat-peet.net/spring/ http://buildbot.eat-peet.net/spring/]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedCtrl&amp;diff=11715</id>
		<title>Lua SyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SyncedCtrl&amp;diff=11715"/>
		<updated>2011-10-31T20:00:11Z</updated>

		<summary type="html">&lt;p&gt;Tobi: typo&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 End =&lt;br /&gt;
&#039;&#039;&#039;Spring.KillTeam&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt; New in version 0.83.x&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
  ( number teamID ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;  will declare a team to be dead ( no further orders can be assigned to such teams&#039;s units )&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GameOver&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt; New in version 0.83.x&amp;lt;/span&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
  ( {number allyTeamID1, number allyTeamID2, ...} ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;  will declare game over, a list of winning allyteams can be passed, if undecided ( like when dropped from the host ) it should be empty ( no winner ), in the case of a draw with multiple winners, all should be listed&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&#039;&#039;&#039;Spring.AddTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.UseTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, &lt;br /&gt;
    string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot;,number amount |&lt;br /&gt;
    { metal = number amount, energy = number amount}&lt;br /&gt;
  ) -&amp;gt; nil | boolean hadEnough&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamResource&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string res, number amount ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for res are:&lt;br /&gt;
    &amp;quot;m&amp;quot;  = metal&lt;br /&gt;
    &amp;quot;e&amp;quot;  = energy&lt;br /&gt;
    &amp;quot;ms&amp;quot;  = metal storage&lt;br /&gt;
    &amp;quot;es&amp;quot;  = energy storage&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamShareLevel&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.ShareTeamResource&#039;&#039;&#039; &amp;lt;span class=note&amp;gt;0.82 and later&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number teamID_src, number teamID_recv, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Unit Handling =&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateUnit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;note: offmap positions are clamped! (you still can use MoveCtrl todo so)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;defName&amp;quot; | number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    (number facing | string &amp;quot;facing&amp;quot;),&lt;br /&gt;
    number teamID,&lt;br /&gt;
    [boolean build = false] ) -&amp;gt; number unitID&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for facing are:&lt;br /&gt;
    &amp;quot;south&amp;quot; | &amp;quot;s&amp;quot; | 0&lt;br /&gt;
    &amp;quot;east&amp;quot;  | &amp;quot;e&amp;quot; | 1&lt;br /&gt;
    &amp;quot;north&amp;quot; | &amp;quot;n&amp;quot; | 2&lt;br /&gt;
    &amp;quot;west&amp;quot;  | &amp;quot;w&amp;quot; | 3&lt;br /&gt;
  if build is true the unit is created in &amp;quot;being built&amp;quot; state, with buildProgress = 0&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DestroyUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    [boolean selfd = false,]&lt;br /&gt;
    [boolean reclaimed = false,]&lt;br /&gt;
    [number attackerID] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
 selfd := makes the unit act like it self-destructed&lt;br /&gt;
 reclaimed := don&#039;t show any DeathSequences, don&#039;t leave a wreckage.&lt;br /&gt;
   NOTE this does _not_ give back the resources to the team!&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TransferUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    numer newTeamID,&lt;br /&gt;
    [boolean given = true] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;if given=false, the unit is captured&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unit Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCosts&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, { &lt;br /&gt;
     [ buildTime  = number amount ],&lt;br /&gt;
     [ metalCost  = number amount ],&lt;br /&gt;
     [ energyCost = number amount ]&lt;br /&gt;
   } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTooltip&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;tooltip&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number health |&lt;br /&gt;
    { [ health   = number health ],&lt;br /&gt;
      [ capture  = number capture ],&lt;br /&gt;
      [ paralyze = number paralyze ],&lt;br /&gt;
      [ build    = number build ] }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMaxHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number maxHealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitDamage&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number damage&lt;br /&gt;
    [, number paralyze = 0 [, number attackerID = -1 [, number weaponID = -1&lt;br /&gt;
      [, number impulse_x [, number impulse_y [, number impulse_z ]]] ]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitStockpile&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number stockpile [, number buildPercent ]]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitExperience&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number experience ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitFuel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number fuel ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitLineage&#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, number teamID [, boolean isRoot] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNeutral&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean neutral ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number enemyUnitID | number x, number y, number z,&lt;br /&gt;
    [ boolean dgun = false ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitBlocking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean blocking [, boolean collide ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMetalExtraction&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number depth [,number range] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitBuildSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( number builderID,&lt;br /&gt;
    number buildSpeed, [ number repairSpeed [, number reclaimSpeed&lt;br /&gt;
  [,number resurrectSpeed [, number captureSpeed [, number terraformSpeed ]] ]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitArmored&#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, boolean armored [, number armorMultiple] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitShieldState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number weaponID = -1] [, boolean enabled] [, number power] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitFlanking&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;mode&amp;quot;, number mode ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, string &amp;quot;moveFactor&amp;quot;, number factor) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, string &amp;quot;minDamage&amp;quot;, number minDamage ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, string &amp;quot;mazDamage&amp;quot;, number maxDamage ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, string &amp;quot;dir&amp;quot;, number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitWeaponState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number weaponNum, table states ) -&amp;gt; nil&lt;br /&gt;
  ( number unitID, number weaponNum, string key, number value ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;format of the states table:&lt;br /&gt;
    {&lt;br /&gt;
      [&amp;quot;reloadState&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;reloadFrame&amp;quot; = number value,]   (synonym for reloadState!)&lt;br /&gt;
      [&amp;quot;reloadTime&amp;quot;  = number value,]&lt;br /&gt;
      [&amp;quot;accuracy&amp;quot;    = number value,]&lt;br /&gt;
      [&amp;quot;sprayAngle&amp;quot;  = number value,]&lt;br /&gt;
      [&amp;quot;range&amp;quot;       = number value,]&lt;br /&gt;
      [&amp;quot;projectileSpeed&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;burst&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;burstRate&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;projectiles&amp;quot; = number value,]&lt;br /&gt;
      [&amp;quot;aimReady&amp;quot; = number value,] &amp;lt;span class=note&amp;gt;(&amp;lt;&amp;gt;0.0f := true)&amp;lt;/span&amp;gt;&lt;br /&gt;
    }&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCollisionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
    number offsetX, number offsetY, number offsetX,&lt;br /&gt;
    number vType, number tType, number Axis&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;enum COLVOL_TYPES {&lt;br /&gt;
      COLVOL_TYPE_DISABLED = -1,&lt;br /&gt;
      COLVOL_TYPE_ELLIPSOID = 0,&lt;br /&gt;
      COLVOL_TYPE_CYLINDER,&lt;br /&gt;
      COLVOL_TYPE_BOX,&lt;br /&gt;
      COLVOL_TYPE_SPHERE,&lt;br /&gt;
      COLVOL_TYPE_FOOTPRINT, // intersection of sphere and footprint-prism&lt;br /&gt;
      COLVOL_NUM_TYPES       // number of non-disabled collision volume types&lt;br /&gt;
    };&lt;br /&gt;
    enum COLVOL_TESTS {&lt;br /&gt;
      COLVOL_TEST_DISC = 0,&lt;br /&gt;
      COLVOL_TEST_CONT = 1,&lt;br /&gt;
      COLVOL_NUM_TESTS = 2   // number of tests&lt;br /&gt;
    };&lt;br /&gt;
    enum COLVOL_AXES {&lt;br /&gt;
      COLVOL_AXIS_X   = 0,&lt;br /&gt;
      COLVOL_AXIS_Y   = 1,&lt;br /&gt;
      COLVOL_AXIS_Z   = 2,&lt;br /&gt;
      COLVOL_NUM_AXES = 3    // number of collision volume axes&lt;br /&gt;
    };&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPieceCollisionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number pieceIndex, boolean affectLocal, boolean affectGlobal,&lt;br /&gt;
    boolean enableLocal, boolean enableGlobal, number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
    number offsetX, number offsetY, number offsetZ,&lt;br /&gt;
    number vType, number Axis&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitTravel&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number travel [, number travelPeriod] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitMoveGoal&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;used by default commands to get in build-,attackrange etc.&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, number x, number y, number z,&lt;br /&gt;
    [, number radius = 0 [, number speed = unit-&amp;gt;maxSpeed * 2 ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPhysics&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number posx, number posy, number posz,&lt;br /&gt;
    number velx, number vely, number velz,&lt;br /&gt;
    number rotx, number roty, number rotz,&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitPosition&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number x, number z [, boolean alwaysAboveSea] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number velx, number vely, number velz ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitRotation&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number rotx, number roty, number rotz ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitImpulse&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitSeismicPing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number pingSize ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveBuildingDecal&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit LOS ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCloak&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    boolean cloaked | number scriptCloak,&lt;br /&gt;
    [ number decloakDistance | boolean decloakAbs ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  If the 2nd argument is a number, the value works like this:&lt;br /&gt;
   1:=normal cloak&lt;br /&gt;
   2:=for free cloak (cost no E)&lt;br /&gt;
   3:=for free + no decloaking (except the unit is stunned)&lt;br /&gt;
   4&amp;gt;=ultimative cloak (no ecost, no decloaking, no stunned decloak)&lt;br /&gt;
&lt;br /&gt;
  The decloak distance is only changed if the 3th argument is a number or a boolean.&lt;br /&gt;
   If the boolean is false it takes the default decloak distance for that unitdef,&lt;br /&gt;
   if the boolean is true it takes the absolute value of it.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitSonarStealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean sonarStealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitStealth&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean stealth ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitAlwaysVisible&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean alwaysVisible ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitLosMask&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number allyTeam, number los | table losTypes ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;the 3th argument is either the bit-and combination of the following numbers:&lt;br /&gt;
  LOS_INLOS     = 1&lt;br /&gt;
  LOS_INRADAR   = 2&lt;br /&gt;
  LOS_PREVLOS   = 4&lt;br /&gt;
  LOS_CONTRADAR = 8&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;or a table of the following form:&lt;br /&gt;
  losTypes = {&lt;br /&gt;
    [los = boolean,]&lt;br /&gt;
    [radar = boolean,]&lt;br /&gt;
    [prevLos = boolean,]&lt;br /&gt;
    [contRadar = boolean,]&lt;br /&gt;
  }&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitLosState&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number allyTeam, number los | table losTypes ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;see above for more info on the arguments&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitSensorRadius&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string type, number radius ) -&amp;gt; nil | number newRadius&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;type can be:&lt;br /&gt;
  &amp;quot;los&amp;quot;,&amp;quot;airLos&amp;quot;,&amp;quot;radar&amp;quot;,&amp;quot;sonar&amp;quot;,&amp;quot;seismic&amp;quot;,&amp;quot;radarJammer&amp;quot;,&amp;quot;sonarJammer&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unit Resourcing ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitResourcing&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    string res, number amount |&lt;br /&gt;
    { res = number amount, ... }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for res are: &amp;quot;[u|c][u|m][m|e]&amp;quot;&lt;br /&gt;
       unconditional | conditional&lt;br /&gt;
                 use | make&lt;br /&gt;
               metal | energy&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitResource&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UseUnitResource&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string &amp;quot;m&amp;quot; | &amp;quot;e&amp;quot;, number amount ) -&amp;gt; nil | boolean okay&lt;br /&gt;
  ( number unitID, { [&amp;quot;m&amp;quot; | &amp;quot;metal&amp;quot; | &amp;quot;e&amp;quot; | &amp;quot;energy&amp;quot;] = amount, ... } ) -&amp;gt; nil | boolean okay&lt;br /&gt;
&lt;br /&gt;
= Feature Handling =&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateFeature&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;defName&amp;quot; | number featureID, number x, number y, number z&lt;br /&gt;
   [,number heading [, number AllyTeamID ]] ) -&amp;gt; number featureID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.DestroyFeature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.TransferFeature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature Control ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureHealth&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number health) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureReclaim&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number reclaimLeft) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureResurrect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, string &amp;quot;UnitDefName?&amp;quot; [, number facing | string &amp;quot;facing&amp;quot; ] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  possible values for facing are:&lt;br /&gt;
    &amp;quot;south&amp;quot; | &amp;quot;s&amp;quot; | 0&lt;br /&gt;
    &amp;quot;east&amp;quot;  | &amp;quot;e&amp;quot; | 1&lt;br /&gt;
    &amp;quot;north&amp;quot; | &amp;quot;n&amp;quot; | 2&lt;br /&gt;
    &amp;quot;west&amp;quot;  | &amp;quot;w&amp;quot; | 3&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeaturePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number x, number y, number z [, boolean snapToGround]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureDirection&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureNoSelect&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureAlwaysVisible&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetFeatureCollisionVolumeData&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID, number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
    number offsetX, number offsetY, number offsetX,&lt;br /&gt;
    number vType, number tType, number Axis&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;check Spring.SetUnitCollisionVolumeData for further explanation of the arguments&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Lua to COB =&lt;br /&gt;
&#039;&#039;&#039;Spring.CallCOBScript&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )&lt;br /&gt;
    -&amp;gt; nil | number returnValue, number retArg1, number retArg2, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.CallCOBScriptCB&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font style=&amp;quot;color:red;font-weight:600&amp;quot;&amp;gt;broken in 0.78.2.1; will be removed with the introduction of Lua as COB replacement&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )&lt;br /&gt;
    -&amp;gt; nil | number returnValue, number CallbackData, number retArg1, number retArg2, ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetCOBScriptID&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, string funcName ) -&amp;gt; nil | number funcID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note: Don&#039;t use Spring.[Get|Set]UnitCOBValue in LUS just because you are familar with it since bos/cob, use the mighty LuaSpringAPI instead!&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetUnitCOBValue&#039;&#039;&#039; &lt;br /&gt;
  ( number unitID [, boolean splitData=false], number COBValue&lt;br /&gt;
    [, number param1 [,number param2 [, number param3 [, number param4 ] ] ] ] )&lt;br /&gt;
  -&amp;gt; number result | number result1, number result2&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;you find the possible values for `COBValue` in [[Lua_ConstCOB#Get.2FSet|Lua_ConstCOB]]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=note&amp;gt; also see [[Animation-CobConstants#Custom_Variables|Custom_Variables]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitCOBValue&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number COBValue, number param1 [,number param2] ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;you find the possible values for `COBValue` in [[Lua_ConstCOB#Get.2FSet|Lua_ConstCOB]]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=note&amp;gt; also see [[Animation-CobConstants#Custom_Variables|Custom_Variables]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Give Order =&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( unitMap = { [unitID] = dontCare, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( unitArray = { [1] = unitID, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( unitMap = { [number unitID] = dontCare, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        {number, etc...},     &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;params&amp;lt;/font&amp;gt;&lt;br /&gt;
        {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}   &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;options&amp;lt;/font&amp;gt;&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( unitArray = { [1] = number unitID, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        {number, etc...},    &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;params&amp;lt;/font&amp;gt;&lt;br /&gt;
        {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}   &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;options&amp;lt;/font&amp;gt;&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ground=&lt;br /&gt;
== Grass ==&lt;br /&gt;
&#039;&#039;&#039;Spring.AddGrass&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveGrass&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Heightmap ==&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;Note that x &amp;amp; z coords are in worldspace (Game.mapSizeX/Z), still the heightmap resolution is Game.squareSize.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.LevelHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AdjustHeightMap&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;(heightmap[x][z] += height;)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RevertHeightMap&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number origFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetHeightMapFunc&#039;&#039;&#039;&lt;br /&gt;
  ( lua_function [, arg1 ,[ arg2 [, ... ] ] ) -&amp;gt; nil | number absTotalHeightMapAmountChanged&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;Example code:&amp;lt;/span&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Spring.SetHeightMapFunc(function()&lt;br /&gt;
	for z=0,Game.mapSizeZ, Game.squareSize do&lt;br /&gt;
		for x=0,Game.mapSizeX, Game.squareSize do&lt;br /&gt;
			Spring.SetHeightMap( x, z, 200 + 20 * math.cos((x + z) / 90) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.AddHeightMap&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;can only be called in SetHeightMapFunc()&amp;lt;/span&amp;gt; &lt;br /&gt;
  ( number x, number z, number height ) -&amp;gt; nil | number newHeight&lt;br /&gt;
&#039;&#039;&#039;Spring.SetHeightMap&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;can only be called in SetHeightMapFunc()&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number x, number z, number height [,number terraform = 1] ) -&amp;gt; nil | number absHeightDiff&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;the terraform argument is a scaling factor:&lt;br /&gt;
so if 0 nothing will be changed (the terraform starts) and if it is 1 the terraform will be finished.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.LevelSmoothMesh&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AdjustSmoothMesh&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number height ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.RevertSmoothMesh&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number z1 [, number x2, number z2], number origFactor ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetSmoothMeshFunc&#039;&#039;&#039;&lt;br /&gt;
  ( lua_function [, arg1 ,[ arg2 [, ... ] ] ) -&amp;gt; nil | number absTotalHeightMapAmountChanged&lt;br /&gt;
&#039;&#039;&#039;Spring.AddSmoothMesh&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;can only be called in SetSmoothMeshFunc()&amp;lt;/span&amp;gt; &lt;br /&gt;
  ( number x, number z, number height ) -&amp;gt; nil | number newHeight&lt;br /&gt;
&#039;&#039;&#039;Spring.SetSmoothMesh&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;can only be called in SetSmoothMeshFunc()&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number x, number z, number height [,number terraform = 1] ) -&amp;gt; nil | number absHeightDiff&lt;br /&gt;
&lt;br /&gt;
== TerrainTypes ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetMapSquareTerrainType&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, int newType ) -&amp;gt; nil | int oldType&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTerrainTypeData&#039;&#039;&#039;&lt;br /&gt;
  ( int typeIndex&lt;br /&gt;
  [, number speedTanks = nil ]&lt;br /&gt;
  [, number speedKBOTs = nil ]&lt;br /&gt;
  [, number speedHovers = nil ]&lt;br /&gt;
  [, number speedShips = nil ] ) -&amp;gt; nil | boolean true&lt;br /&gt;
&lt;br /&gt;
= Command Descriptions =&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-size:120%; font-weight:600&amp;quot;&amp;gt;Doesn&#039;t work in unsynced code!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.EditUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number cmdDescID, table cmdArray ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  structure of cmdArray:&lt;br /&gt;
  {&lt;br /&gt;
    [ id          = int ],&lt;br /&gt;
    [ type        = int ],&lt;br /&gt;
    [ name        = string ],&lt;br /&gt;
    [ action      = string ],&lt;br /&gt;
    [ tooltip     = string ],&lt;br /&gt;
    [ texture     = string ],&lt;br /&gt;
    [ cursor      = string ],&lt;br /&gt;
    [ hidden      = boolean ],&lt;br /&gt;
    [ disabled    = boolean ],&lt;br /&gt;
    [ showUnique  = boolean ],&lt;br /&gt;
    [ onlyTexture = boolean ],&lt;br /&gt;
    [ params      = { string = string, ... } ]&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.InsertUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number cmdDescID ] , table cmdArray ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.RemoveUnitCmdDesc&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID [, number cmdDescID ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetNoPause&#039;&#039;&#039;&lt;br /&gt;
  ( boolean noPause ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitToFeature&#039;&#039;&#039;&lt;br /&gt;
  ( boolean tofeature ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
an ugly global switch that can be used to block units turning into features when they finish being built (like *A DT&#039;s do, which have the isFeature tag)&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=14&amp;amp;p=481521 thread]&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetExperienceGrade&#039;&#039;&#039;&lt;br /&gt;
  ( number expGrade&lt;br /&gt;
   &amp;lt;font color=#55ee99&amp;gt;[, number ExpPowerScale [, number ExpHealthScale [, number ExpReloadScale ]]]&amp;lt;/font&amp;gt; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;expGrade defines how often UnitExperience() will be called,&lt;br /&gt;
   it is based on the following equation:&lt;br /&gt;
     (int) [exp/(exp+1)] / expGrade&lt;br /&gt;
   If this integer differs from the one before the experience change&lt;br /&gt;
   it will call UnitExperience().&lt;br /&gt;
  Also those 3 last params are only available in .cheat&lt;br /&gt;
  &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SpawnCEG&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;cegname&amp;quot;,&lt;br /&gt;
    number posX = 0, number posY = 0, number posZ = 0,&lt;br /&gt;
    number dirX = 0, number dirY = 0, number dirZ = 0,&lt;br /&gt;
    number radius = 0, number damage = 0&lt;br /&gt;
  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Projectiles =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileMoveControl&#039;&#039;&#039; &amp;lt;span class=note&amp;gt;(disables engine movecontrol, so lua can fully control the physics)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number projID, boolean enable ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectilePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number projID [, number x = 0 [, number y = 0 [, number z = 0 ]]] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileVelocity&#039;&#039;&#039;&lt;br /&gt;
  ( number projID [, number x = 0 [, number y = 0 [, number z = 0 ]]] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileCollision&#039;&#039;&#039;&lt;br /&gt;
  ( number projID ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileGravity&#039;&#039;&#039;&lt;br /&gt;
  ( number projID [, number grav = 0] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileSpinAngle&#039;&#039;&#039;&lt;br /&gt;
  ( number projID [, number spinAngle = 0] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileSpinSpeed&#039;&#039;&#039;&lt;br /&gt;
  ( number projID [, number speed = 0] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileSpinVec&#039;&#039;&#039;&lt;br /&gt;
  ( number projID [, number x = 0 [, number y = 0 [, number z = 0]]] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetProjectileCEG&#039;&#039;&#039;&lt;br /&gt;
  ( number projID, string ceg_name ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Linux&amp;diff=3369</id>
		<title>Building Spring on Linux</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Linux&amp;diff=3369"/>
		<updated>2011-08-03T21:29:46Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Fedora */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Building_spring|Building Spring]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
= Build From Source on Linux =&lt;br /&gt;
If you prefer to use your distributions package system (release versions only), refer to the Linux [[SetupGuide]].&lt;br /&gt;
&lt;br /&gt;
If there is no package tailored for your distribution, you have to install from sources manually. Doing this for distributions where packages are available is not recommended.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=warning&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Be careful when building from source.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
You might encounter sync errors in online play if:&lt;br /&gt;
* you are using an untested compiler (&#039;&#039;gcc&#039;&#039; from the 4.x serie should be safe)&lt;br /&gt;
* you use non-standard compiler settings (be careful about &#039;&#039;-march&#039;&#039;)!&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtaining the Source ==&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
= Get Dependencies =&lt;br /&gt;
&lt;br /&gt;
To compile, you will have to install some development packages Spring depends on. These vary from distro to distro and may also depend on your specific configuration.&lt;br /&gt;
&lt;br /&gt;
If your distributions is not listed below, you should be able to figure out the correct package names from this.&lt;br /&gt;
&lt;br /&gt;
== Full list ==&lt;br /&gt;
* Programs necessary to build&lt;br /&gt;
** &#039;&#039;cmake&#039;&#039;&lt;br /&gt;
** &#039;&#039;7zip&#039;&#039; (aka &#039;&#039;p7zip&#039;&#039; or &#039;&#039;7z&#039;&#039;)&lt;br /&gt;
** The usual build toolchain&lt;br /&gt;
*** &#039;&#039;gcc&#039;&#039;&lt;br /&gt;
*** &#039;&#039;make&#039;&#039;&lt;br /&gt;
* Libraries&lt;br /&gt;
** SDL&lt;br /&gt;
** &#039;&#039;boost&#039;&#039; (version 1.35 or later)&lt;br /&gt;
*** &#039;&#039;threads&#039;&#039;&lt;br /&gt;
*** &#039;&#039;regex&#039;&#039;&lt;br /&gt;
*** &#039;&#039;signals&#039;&#039;&lt;br /&gt;
*** &#039;&#039;system&#039;&#039;&lt;br /&gt;
*** &#039;&#039;program-options&#039;&#039;&lt;br /&gt;
** &#039;&#039;libdeviL&#039;&#039; (IL)&lt;br /&gt;
** OpenAL (openal-soft, older openal-0.0.8 does not work)&lt;br /&gt;
** OpenGL headers (mesa, GLEW, etc.)&lt;br /&gt;
** &#039;&#039;zlib&#039;&#039;&lt;br /&gt;
** &#039;&#039;freetype&#039;&#039; (2)&lt;br /&gt;
** &#039;&#039;ogg&#039;&#039;, &#039;&#039;vorbis&#039;&#039; and &#039;&#039;vorbisfile&#039;&#039;&lt;br /&gt;
* Optional (for AI Interfaces and Skirmish AIs)&lt;br /&gt;
** &#039;&#039;python&#039;&#039; (2.5+)&lt;br /&gt;
** &#039;&#039;jdk&#039;&#039; (1.5+)&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
&lt;br /&gt;
For Etch (debian 4.0 stable) and Sid (debian unstable), I&#039;ve confirmed the&lt;br /&gt;
following to be the minimal set that is necessary to get. This works with Ubuntu 8.10, too.&lt;br /&gt;
As of ~ July 2009, spring depends on boost 1.35+ (if your distro is behind, you can try [https://launchpad.net/~pgquiles/+archive/ppa some unofficial backports]). &lt;br /&gt;
&lt;br /&gt;
Also, on 64-bit, be sure to build against DevIL 1.6.8-rc2+, as 1.6.7 has a bug in the PNG loading code that causes issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo aptitude install build-essential zlib1g-dev libfreetype6-dev&lt;br /&gt;
sudo aptitude install libsdl1.2-dev libopenal-dev libglew-dev zip&lt;br /&gt;
sudo aptitude install libvorbis-dev libxcursor-dev libdevil-dev&lt;br /&gt;
sudo aptitude install libboost-system1.37-dev libboost-system1.37-thread-dev&lt;br /&gt;
sudo aptitude install libboost-system1.37-regex-dev &lt;br /&gt;
sudo aptitude install libboost-system1.37-serialization-dev&lt;br /&gt;
sudo aptitude install libboost-system1.37-program-options-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and cmake, depending on what you use for building (I advise to use cmake). On debian 5.0 (lenny), libglew1.5-dev is required as well.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu  ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# compiler and build tools&lt;br /&gt;
sudo apt-get install build-essential cmake cmake-gui git &lt;br /&gt;
&lt;br /&gt;
# spring dependencies&lt;br /&gt;
sudo apt-get install libglew-dev libsdl-dev libdevil-dev libopenal-dev \&lt;br /&gt;
libogg-dev libvorbis-dev libfreetype6-dev p7zip-full libxcursor-dev \&lt;br /&gt;
libboost-thread1.42-dev libboost-regex1.42-dev libboost-system1.42-dev \&lt;br /&gt;
libboost-program-options1.42-dev libboost-signals1.42-dev&lt;br /&gt;
&lt;br /&gt;
# alternatively, you can try ...&lt;br /&gt;
sudo apt-get build-dep spring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... and that should install all the required dependencies (&#039;&#039;it should but it appears to be broken - SpliFF 2011-02-21&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
NOTE: On Ubuntu the CMake scripts currently don&#039;t detect FREETYPE_INCLUDE_DIR. You will need to set this by hand (using -DFREETYPE_INCLUDE_DIR=&amp;quot;/usr/include/freetype2/freetype&amp;quot; or by adding an &#039;advanced&#039; entry in cmake-gui).&lt;br /&gt;
(this problem is either not reproducible with Ubuntu 10.10, or not present in spring master anymore)&lt;br /&gt;
&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
This has been tested to work with a clean install of gentoo 2008.0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
emerge cmake \&amp;gt;=media-libs/freetype-2.0.0 \&amp;gt;=media-libs/libsdl-1.2.0&lt;br /&gt;
emerge media-libs/openal media-libs/glew dev-libs/boost&lt;br /&gt;
emerge app-arch/zip media-libs/libogg&lt;br /&gt;
USE=&amp;quot;png jpg tiff opengl&amp;quot; emerge media-libs/devil &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fedora ==&lt;br /&gt;
&lt;br /&gt;
On Fedora 8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install cmake boost-devel openal-devel SDL-devel \&lt;br /&gt;
DevIL-devel glew-devel libvorbis-devel &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Fedora 12-15:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install gcc-c++ cmake boost-devel DevIL-devel freetype-devel \&lt;br /&gt;
glew-devel libvorbis-devel libXcursor-devel openal-devel SDL-devel p7zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slackware ==&lt;br /&gt;
&lt;br /&gt;
On Slackware 13, cmake, ogg &amp;amp; vorbis, boost, glew and SDL already come with the full regular install, both libs and headers. You can find helper scripts to easily compile and package DevIL, OpenAL and spring itself [http://slackbuilds.org/ here].&lt;br /&gt;
&lt;br /&gt;
= Build And Install =&lt;br /&gt;
&lt;br /&gt;
== Using CMake (2.6 or newer) ==&lt;br /&gt;
Configure and build:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .&lt;br /&gt;
make spring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
make install-spring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default install paths are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/local/bin/spring&amp;lt;/code&amp;gt; Spring executable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/local/share/games/spring&amp;lt;/code&amp;gt; read-only data&lt;br /&gt;
&lt;br /&gt;
If you want &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; prefix instead of &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt;, configure like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=/usr .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
For further ways of customizing your build, have a look at the variables shown with:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -LH .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ububtu 9.10 - if it cannot locate freetype include dir, then use:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DFREETYPE_INCLUDE_DIR=/usr .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you experience performance problems on multi-core systems, you may additionally build the MT version of spring:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
make spring-multithreaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And install with:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
make install-spring-multithreaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other targets are: &amp;lt;code&amp;gt;spring-headless&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;spring-dedicated&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Troubleshooting_linux}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Compiling]]&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Linux&amp;diff=3368</id>
		<title>Building Spring on Linux</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Building_Spring_on_Linux&amp;diff=3368"/>
		<updated>2011-08-03T21:29:29Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Fedora */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Building_spring|Building Spring]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
= Build From Source on Linux =&lt;br /&gt;
If you prefer to use your distributions package system (release versions only), refer to the Linux [[SetupGuide]].&lt;br /&gt;
&lt;br /&gt;
If there is no package tailored for your distribution, you have to install from sources manually. Doing this for distributions where packages are available is not recommended.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=warning&amp;gt;&#039;&#039;&#039;Warning:&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Be careful when building from source.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
You might encounter sync errors in online play if:&lt;br /&gt;
* you are using an untested compiler (&#039;&#039;gcc&#039;&#039; from the 4.x serie should be safe)&lt;br /&gt;
* you use non-standard compiler settings (be careful about &#039;&#039;-march&#039;&#039;)!&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Obtaining the Source ==&lt;br /&gt;
{{Obtaining_The_Source_Code}}&lt;br /&gt;
&lt;br /&gt;
= Get Dependencies =&lt;br /&gt;
&lt;br /&gt;
To compile, you will have to install some development packages Spring depends on. These vary from distro to distro and may also depend on your specific configuration.&lt;br /&gt;
&lt;br /&gt;
If your distributions is not listed below, you should be able to figure out the correct package names from this.&lt;br /&gt;
&lt;br /&gt;
== Full list ==&lt;br /&gt;
* Programs necessary to build&lt;br /&gt;
** &#039;&#039;cmake&#039;&#039;&lt;br /&gt;
** &#039;&#039;7zip&#039;&#039; (aka &#039;&#039;p7zip&#039;&#039; or &#039;&#039;7z&#039;&#039;)&lt;br /&gt;
** The usual build toolchain&lt;br /&gt;
*** &#039;&#039;gcc&#039;&#039;&lt;br /&gt;
*** &#039;&#039;make&#039;&#039;&lt;br /&gt;
* Libraries&lt;br /&gt;
** SDL&lt;br /&gt;
** &#039;&#039;boost&#039;&#039; (version 1.35 or later)&lt;br /&gt;
*** &#039;&#039;threads&#039;&#039;&lt;br /&gt;
*** &#039;&#039;regex&#039;&#039;&lt;br /&gt;
*** &#039;&#039;signals&#039;&#039;&lt;br /&gt;
*** &#039;&#039;system&#039;&#039;&lt;br /&gt;
*** &#039;&#039;program-options&#039;&#039;&lt;br /&gt;
** &#039;&#039;libdeviL&#039;&#039; (IL)&lt;br /&gt;
** OpenAL (openal-soft, older openal-0.0.8 does not work)&lt;br /&gt;
** OpenGL headers (mesa, GLEW, etc.)&lt;br /&gt;
** &#039;&#039;zlib&#039;&#039;&lt;br /&gt;
** &#039;&#039;freetype&#039;&#039; (2)&lt;br /&gt;
** &#039;&#039;ogg&#039;&#039;, &#039;&#039;vorbis&#039;&#039; and &#039;&#039;vorbisfile&#039;&#039;&lt;br /&gt;
* Optional (for AI Interfaces and Skirmish AIs)&lt;br /&gt;
** &#039;&#039;python&#039;&#039; (2.5+)&lt;br /&gt;
** &#039;&#039;jdk&#039;&#039; (1.5+)&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
&lt;br /&gt;
For Etch (debian 4.0 stable) and Sid (debian unstable), I&#039;ve confirmed the&lt;br /&gt;
following to be the minimal set that is necessary to get. This works with Ubuntu 8.10, too.&lt;br /&gt;
As of ~ July 2009, spring depends on boost 1.35+ (if your distro is behind, you can try [https://launchpad.net/~pgquiles/+archive/ppa some unofficial backports]). &lt;br /&gt;
&lt;br /&gt;
Also, on 64-bit, be sure to build against DevIL 1.6.8-rc2+, as 1.6.7 has a bug in the PNG loading code that causes issues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo aptitude install build-essential zlib1g-dev libfreetype6-dev&lt;br /&gt;
sudo aptitude install libsdl1.2-dev libopenal-dev libglew-dev zip&lt;br /&gt;
sudo aptitude install libvorbis-dev libxcursor-dev libdevil-dev&lt;br /&gt;
sudo aptitude install libboost-system1.37-dev libboost-system1.37-thread-dev&lt;br /&gt;
sudo aptitude install libboost-system1.37-regex-dev &lt;br /&gt;
sudo aptitude install libboost-system1.37-serialization-dev&lt;br /&gt;
sudo aptitude install libboost-system1.37-program-options-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and cmake, depending on what you use for building (I advise to use cmake). On debian 5.0 (lenny), libglew1.5-dev is required as well.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu  ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# compiler and build tools&lt;br /&gt;
sudo apt-get install build-essential cmake cmake-gui git &lt;br /&gt;
&lt;br /&gt;
# spring dependencies&lt;br /&gt;
sudo apt-get install libglew-dev libsdl-dev libdevil-dev libopenal-dev \&lt;br /&gt;
libogg-dev libvorbis-dev libfreetype6-dev p7zip-full libxcursor-dev \&lt;br /&gt;
libboost-thread1.42-dev libboost-regex1.42-dev libboost-system1.42-dev \&lt;br /&gt;
libboost-program-options1.42-dev libboost-signals1.42-dev&lt;br /&gt;
&lt;br /&gt;
# alternatively, you can try ...&lt;br /&gt;
sudo apt-get build-dep spring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... and that should install all the required dependencies (&#039;&#039;it should but it appears to be broken - SpliFF 2011-02-21&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
NOTE: On Ubuntu the CMake scripts currently don&#039;t detect FREETYPE_INCLUDE_DIR. You will need to set this by hand (using -DFREETYPE_INCLUDE_DIR=&amp;quot;/usr/include/freetype2/freetype&amp;quot; or by adding an &#039;advanced&#039; entry in cmake-gui).&lt;br /&gt;
(this problem is either not reproducible with Ubuntu 10.10, or not present in spring master anymore)&lt;br /&gt;
&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
This has been tested to work with a clean install of gentoo 2008.0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
emerge cmake \&amp;gt;=media-libs/freetype-2.0.0 \&amp;gt;=media-libs/libsdl-1.2.0&lt;br /&gt;
emerge media-libs/openal media-libs/glew dev-libs/boost&lt;br /&gt;
emerge app-arch/zip media-libs/libogg&lt;br /&gt;
USE=&amp;quot;png jpg tiff opengl&amp;quot; emerge media-libs/devil &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fedora ==&lt;br /&gt;
&lt;br /&gt;
On Fedora 8:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install cmake boost-devel openal-devel SDL-devel \&lt;br /&gt;
DevIL-devel glew-devel libvorbis-devel &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Fedora 12-14:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install gcc-c++ cmake boost-devel DevIL-devel freetype-devel \&lt;br /&gt;
glew-devel libvorbis-devel libXcursor-devel openal-devel SDL-devel p7zip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Slackware ==&lt;br /&gt;
&lt;br /&gt;
On Slackware 13, cmake, ogg &amp;amp; vorbis, boost, glew and SDL already come with the full regular install, both libs and headers. You can find helper scripts to easily compile and package DevIL, OpenAL and spring itself [http://slackbuilds.org/ here].&lt;br /&gt;
&lt;br /&gt;
= Build And Install =&lt;br /&gt;
&lt;br /&gt;
== Using CMake (2.6 or newer) ==&lt;br /&gt;
Configure and build:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake .&lt;br /&gt;
make spring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
make install-spring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Default install paths are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/local/bin/spring&amp;lt;/code&amp;gt; Spring executable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/usr/local/share/games/spring&amp;lt;/code&amp;gt; read-only data&lt;br /&gt;
&lt;br /&gt;
If you want &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; prefix instead of &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt;, configure like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DCMAKE_INSTALL_PREFIX=/usr .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
For further ways of customizing your build, have a look at the variables shown with:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -LH .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ububtu 9.10 - if it cannot locate freetype include dir, then use:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -DFREETYPE_INCLUDE_DIR=/usr .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you experience performance problems on multi-core systems, you may additionally build the MT version of spring:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
make spring-multithreaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And install with:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
make install-spring-multithreaded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other targets are: &amp;lt;code&amp;gt;spring-headless&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;spring-dedicated&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Troubleshooting_linux}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Compiling]]&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5990</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5990"/>
		<updated>2010-09-03T20:32:07Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Latest Stable Snapshot */ update to 0.82.5&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 Updates =&lt;br /&gt;
Latest stable version is: &#039;&#039;&#039;0.82&#039;&#039;&#039;&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-0.82.5/spring_0.82.5.exe/download spring_0.82.5.exe ~18MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.5.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;!-- &#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-0.82.3/spring_0.82.3_portable.7z/download spring_0.82.3_portable.7z ~15MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.3_portable.7z {mirror}] --&amp;gt;&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; &#039;&#039;No download yet&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
&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;
&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;
This however gives you the bleeding edge, if you want to play online then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout 0.82.3&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
from within the source directory. This will provide the correct source code&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-0.82.5/spring_0.82.5_src.tar.lzma/download Source .tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.5_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.82.5/spring_0.82.5_src.tar.gz/download Source .tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.5_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==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar Click here to download]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SelectionEditor ==&lt;br /&gt;
Sources are in the [[#git|main git tree]] under &amp;quot;/tools/SelectionEditor/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/SelectionEditor.zip Click here to download (windows only)]&#039;&#039;&#039;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5986</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5986"/>
		<updated>2010-08-13T21:01:55Z</updated>

		<summary type="html">&lt;p&gt;Tobi: update version to 0.82.3&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 Updates =&lt;br /&gt;
Latest stable version is: &#039;&#039;&#039;0.82&#039;&#039;&#039;&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-0.82.3/spring_0.82.3.exe/download spring_0.82.3.exe ~18MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.3.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;!-- &#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-0.82.3/spring_0.82.3_portable.7z/download spring_0.82.3_portable.7z ~15MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.3_portable.7z {mirror}] --&amp;gt;&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; &#039;&#039;No download yet&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
&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;
&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;
This however gives you the bleeding edge, if you want to play online then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout 0.82.3&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
from within the source directory. This will provide the correct source code&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-0.82.3/spring_0.82.3_src.tar.lzma/download Source .tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.3_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.82.3/spring_0.82.3_src.tar.gz/download Source .tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.3_src.tar.gz {mirror}]&lt;br /&gt;
&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==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar Click here to download]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SelectionEditor ==&lt;br /&gt;
Sources are in the [[#git|main git tree]] under &amp;quot;/tools/SelectionEditor/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/SelectionEditor.zip Click here to download (windows only)]&#039;&#039;&#039;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5985</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5985"/>
		<updated>2010-08-13T17:48:24Z</updated>

		<summary type="html">&lt;p&gt;Tobi: update version to 0.82.2, update link to test builds&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 Updates =&lt;br /&gt;
Latest stable version is: &#039;&#039;&#039;0.82&#039;&#039;&#039;&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-0.82.2/spring_0.82.2.exe/download spring_0.82.2.exe ~18MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.2.exe {mirror}]&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;!-- &#039;&#039;&#039;Portable: [http://sourceforge.net/projects/springrts/files/springrts/spring-0.82.2/spring_0.82.2_portable.7z/download spring_0.82.2_portable.7z ~15MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.2_portable.7z {mirror}] --&amp;gt;&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; &#039;&#039;No download yet&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
&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;
&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;
This however gives you the bleeding edge, if you want to play online then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout 0.82.2&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
from within the source directory. This will provide the correct source code&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-0.82.2/spring_0.82.2_src.tar.lzma/download Source .tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.2_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.82.2/spring_0.82.2_src.tar.gz/download Source .tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.82.2_src.tar.gz {mirror}]&lt;br /&gt;
&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==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar Click here to download]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SelectionEditor ==&lt;br /&gt;
Sources are in the [[#git|main git tree]] under &amp;quot;/tools/SelectionEditor/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/SelectionEditor.zip Click here to download (windows only)]&#039;&#039;&#039;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Apple.png&amp;diff=21486</id>
		<title>File:Apple.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Apple.png&amp;diff=21486"/>
		<updated>2010-08-13T13:24:35Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;Image:Apple.png&amp;quot;: part of download page [edit=sysop:move=sysop]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Tux-G2.png&amp;diff=22144</id>
		<title>File:Tux-G2.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Tux-G2.png&amp;diff=22144"/>
		<updated>2010-08-13T13:24:18Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;Image:Tux-G2.png&amp;quot;: part of download page [edit=sysop:move=sysop]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Author: Jan Vansteenkiste&lt;br /&gt;
Permission: Use whenever, wherever you want to.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Window.png&amp;diff=22212</id>
		<title>File:Window.png</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=File:Window.png&amp;diff=22212"/>
		<updated>2010-08-13T13:23:01Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;Image:Window.png&amp;quot;: part of download page [edit=sysop:move=sysop]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5984</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5984"/>
		<updated>2010-07-16T16:00:45Z</updated>

		<summary type="html">&lt;p&gt;Tobi: deployed jK&amp;#039;s improved download page&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 Updates =&lt;br /&gt;
Latest stable version is: &#039;&#039;&#039;0.82&#039;&#039;&#039;&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-0.81.2.1/spring_0.81.2.1.exe/download spring_0.81.2.1.exe ~18MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.81.2.1.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-0.81.2.1/spring_0.81.2.1_portable.7z/download spring_0.81.2.1_portable.7z ~15MB]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.81.2.1_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; &#039;&#039;No download yet&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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://buildbot.eat-peet.net/spring/installer/ list of all test builds]&lt;br /&gt;
&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;
&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;
This however gives you the bleeding edge, if you want to play online then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;git checkout 0.81.2.1&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
from within the source directory. This will provide the correct source code&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-0.81.2.1/spring_0.81.2.1_src.tar.lzma/download Source .tar.lzma]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.81.2.1_src.tar.lzma {mirror}]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1_src.tar.gz/download Source .tar.gz]&#039;&#039;&#039; - [http://springrts.com/dl/spring_0.81.2.1_src.tar.gz {mirror}]&lt;br /&gt;
&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==&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt here]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar Click here to download]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SelectionEditor ==&lt;br /&gt;
Sources are in the [[#git|main git tree]] under &amp;quot;/tools/SelectionEditor/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/SelectionEditor.zip Click here to download (windows only)]&#039;&#039;&#039;&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5983</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5983"/>
		<updated>2010-05-30T20:05:11Z</updated>

		<summary type="html">&lt;p&gt;Tobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&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;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;br /&gt;
&lt;br /&gt;
= SelectionEditor = &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/SelectionEditor.zip &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; all required binaries to run the latest SelectionEditor. Sources are in [http://github.com/spring/spring/tree/master/tools/SelectionEditor/ git].&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5982</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5982"/>
		<updated>2010-05-30T20:04:41Z</updated>

		<summary type="html">&lt;p&gt;Tobi: added SelectionEditor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&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;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;br /&gt;
&lt;br /&gt;
= SelectionEditor = &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/SelectionEditor.zip Click here to download]&#039;&#039;&#039; all required binaries to run the latest SelectionEditor. Sources are in [http://github.com/spring/spring/tree/master/tools/SelectionEditor/ git].&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-LuaScripting&amp;diff=2087</id>
		<title>Animation-LuaScripting</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-LuaScripting&amp;diff=2087"/>
		<updated>2010-04-19T21:55:30Z</updated>

		<summary type="html">&lt;p&gt;Tobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting started ==&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
&lt;br /&gt;
Lua unit animation is implemented partially in the engine, and partially in a Lua gadget which is shipped with Spring in springcontent.sdz. By default, this gadget is not loaded, so a bit of setup is required to enable Lua unit scripts.&lt;br /&gt;
&lt;br /&gt;
To enable Lua unit scripts, create a file &#039;&#039;LuaRules/Gadgets/unit_script.lua&#039;&#039;, and paste the following into it:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|style=&amp;quot;background: #41545c; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
 -- Enables Lua unit scripts by including the gadget from springcontent.sdz&lt;br /&gt;
 &lt;br /&gt;
 -- Uncomment to override the directory which is scanned for *.lua unit scripts.&lt;br /&gt;
 --UNITSCRIPT_DIR = &amp;quot;scripts/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 return include(&amp;quot;LuaGadgets/Gadgets/unit_script.lua&amp;quot;)&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, do check whether your [http://github.com/spring/spring/blob/master/installer/builddata/springcontent/LuaGadgets/system.lua &#039;&#039;LuaRules/system.lua&#039;&#039;] is up to date, if you copied this verbatim into your game. (Must be from a later date than 5 september 2009)&lt;br /&gt;
&lt;br /&gt;
Now this is done, you can start putting *.lua files in your &#039;&#039;scripts/&#039;&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
Lua has the major advantage over BOS/COB that you do not need to compile it, which can reduce the time to develop scripts quite a bit.&lt;br /&gt;
&lt;br /&gt;
To save further time, do not restart Spring for each small change. Simply run Spring in an window so you can easily switch between your editor and Spring, and use &#039;&#039;/luarules reload&#039;&#039; to reload all Lua unit scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [http://tvo.github.com/spring/2010/04/19/lus-stumpy.html Stumpy tutorial]&lt;br /&gt;
* [[Animation-LuaCallins]]&lt;br /&gt;
* [[Animation-LuaCallouts]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Conversion tool&lt;br /&gt;
* Performance measurements&lt;br /&gt;
* Advantages&lt;br /&gt;
* Link to article in piro&#039;s magazine&lt;br /&gt;
* Coordinate system (axis, direction of rotation, picture)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Animation]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5981</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5981"/>
		<updated>2010-04-15T18:28:51Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Alternative lobby client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&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;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-LuaScripting&amp;diff=2086</id>
		<title>Animation-LuaScripting</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Animation-LuaScripting&amp;diff=2086"/>
		<updated>2010-04-05T17:35:58Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Setup */  add link to system.lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting started ==&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
&lt;br /&gt;
Lua unit animation is implemented partially in the engine, and partially in a Lua gadget which is shipped with Spring in springcontent.sdz. By default, this gadget is not loaded, so a bit of setup is required to enable Lua unit scripts.&lt;br /&gt;
&lt;br /&gt;
To enable Lua unit scripts, create a file &#039;&#039;LuaRules/Gadgets/unit_script.lua&#039;&#039;, and paste the following into it:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot;&lt;br /&gt;
|style=&amp;quot;background: #41545c; border: 1px #aaa solid;&amp;quot;|&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
 -- Enables Lua unit scripts by including the gadget from springcontent.sdz&lt;br /&gt;
 &lt;br /&gt;
 -- Uncomment to override the directory which is scanned for *.lua unit scripts.&lt;br /&gt;
 --UNITSCRIPT_DIR = &amp;quot;scripts/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 return include(&amp;quot;LuaGadgets/Gadgets/unit_script.lua&amp;quot;)&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, do check whether your [http://github.com/spring/spring/blob/master/installer/builddata/springcontent/LuaGadgets/system.lua &#039;&#039;LuaRules/system.lua&#039;&#039;] is up to date, if you copied this verbatim into your game. (Must be from a later date than 5 september 2009)&lt;br /&gt;
&lt;br /&gt;
Now this is done, you can start putting *.lua files in your &#039;&#039;scripts/&#039;&#039; folder.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
Lua has the major advantage over BOS/COB that you do not need to compile it, which can reduce the time to develop scripts quite a bit.&lt;br /&gt;
&lt;br /&gt;
To save further time, do not restart Spring for each small change. Simply run Spring in an window so you can easily switch between your editor and Spring, and use &#039;&#039;/luarules reload&#039;&#039; to reload all Lua unit scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Animation-LuaCallins]]&lt;br /&gt;
* [[Animation-LuaCallouts]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
* Conversion tool&lt;br /&gt;
* Performance measurements&lt;br /&gt;
* Advantages&lt;br /&gt;
* Link to article in piro&#039;s magazine&lt;br /&gt;
* Coordinate system (axis, direction of rotation, picture)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Animation]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5980</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5980"/>
		<updated>2010-03-16T21:14:45Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Windows */ update portable to 0.81.2.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~15MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/tasclient/TASClientLatest.7z The latest version of TASClient can be found here]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5979</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5979"/>
		<updated>2010-03-16T20:57:17Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Windows */ update for 0.81.2.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2 ~17MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2.1 ~18MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~17MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/tasclient/TASClientLatest.7z The latest version of TASClient can be found here]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23235</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23235"/>
		<updated>2010-03-16T20:56:13Z</updated>

		<summary type="html">&lt;p&gt;Tobi: update to 0.81.2.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we have some source packages available below.&lt;br /&gt;
&lt;br /&gt;
Windows users wanting to use cmake to compile Spring are advised to [http://github.com/spring/spring/downloads download the source directly from github]. 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-0.81.2.1/spring_0.81.2.1_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2.1/spring_0.81.2.1_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Backups in case the above doesn&#039;t work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.1_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5978</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5978"/>
		<updated>2010-03-16T20:12:18Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Undo revision 19180 by Tobi (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~20MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2 ~17MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~20MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~17MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/tasclient/TASClientLatest.7z The latest version of TASClient can be found here]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23234</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23234"/>
		<updated>2010-03-16T20:11:42Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Undo revision 19179 by Tobi (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we have some source packages available below.&lt;br /&gt;
&lt;br /&gt;
Windows users wanting to use cmake to compile Spring are advised to [http://github.com/spring/spring/downloads download the source directly from github]. 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-0.81.2/spring_0.81.2_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Backups in case the above doesn&#039;t work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23233</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23233"/>
		<updated>2010-03-16T20:11:26Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Undo revision 19186 by Tobi (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Backups in case the above doesn&#039;t work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23232</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23232"/>
		<updated>2010-03-16T20:10:40Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Reverted edits by Tobi (Talk); changed back to last version by Auswaschbar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.5.1_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.80.5.1_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.80.5.1/spring_0.80.5.1_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.80.5.1/spring_0.80.5.1_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23032</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=23032"/>
		<updated>2010-03-16T20:05:21Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Current */ undo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing Spring 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/tree/master &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: &#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For serious developers. 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.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT-commandline 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&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;
&#039;&#039;&#039; git://springrts.git.sourceforge.net/gitroot/springrts/springrts &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a branch that&#039;s for MacOS development. You can find it at &#039;&#039;&#039;git://github.com/yokosou/spring/spring.git.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23031</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=23031"/>
		<updated>2010-03-16T20:00:20Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Current */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing Spring online)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we advise you to [http://github.com/spring/spring/downloads download the source from github]. The packages we distribute from our [[Download]] page target Linux only and do not contain certain files required to compile using cmake on Windows. (MSVC may work.)&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/tree/master &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: &#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For serious developers. 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.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT-commandline 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&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;
&#039;&#039;&#039; git://springrts.git.sourceforge.net/gitroot/springrts/springrts &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a branch that&#039;s for MacOS development. You can find it at &#039;&#039;&#039;git://github.com/yokosou/spring/spring.git.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23030</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=23030"/>
		<updated>2010-03-16T20:00:09Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Current */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing Spring online)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we advise you to [http://github.com/spring/spring/downloads download the source from github]. The packages we distribute from our [Download] page target Linux only and do not contain certain files required to compile using cmake on Windows. (MSVC may work.)&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/tree/master &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: &#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For serious developers. 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.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT-commandline 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&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;
&#039;&#039;&#039; git://springrts.git.sourceforge.net/gitroot/springrts/springrts &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a branch that&#039;s for MacOS development. You can find it at &#039;&#039;&#039;git://github.com/yokosou/spring/spring.git.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23029</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=23029"/>
		<updated>2010-03-16T19:59:47Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Current */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing Spring online)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we advise you to [http://github.com/spring/spring/downloads download the source from github]. The packages we distribute target Linux only and do not contain certain files required to compile using cmake on Windows. (MSVC may work.)&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/tree/master &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: &#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For serious developers. 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.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT-commandline 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&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;
&#039;&#039;&#039; git://springrts.git.sourceforge.net/gitroot/springrts/springrts &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a branch that&#039;s for MacOS development. You can find it at &#039;&#039;&#039;git://github.com/yokosou/spring/spring.git.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23028</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=23028"/>
		<updated>2010-03-16T19:59:28Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Current */ don&amp;#039;t link to broken source packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing Spring online)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we advise you to [http://github.com/spring/spring/downloads download the source directly from github]. The packages we distribute target Linux only and do not contain certain files required to compile using cmake on Windows. (MSVC may work.)&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/tree/master &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: &#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For serious developers. 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.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT-commandline 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&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;
&#039;&#039;&#039; git://springrts.git.sourceforge.net/gitroot/springrts/springrts &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a branch that&#039;s for MacOS development. You can find it at &#039;&#039;&#039;git://github.com/yokosou/spring/spring.git.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5977</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Download&amp;diff=5977"/>
		<updated>2010-03-16T19:57:36Z</updated>

		<summary type="html">&lt;p&gt;Tobi: moved from Template:Tarballs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Spring RTS Engine=&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
The files listed here do not contain any game content like maps or playable games. If you want playable out-of-the-box installers, go to the [[GamesDownloads|Games Downloads page]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2.exe/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~20MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_portable.7z/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt;]&#039;&#039;&#039; version 0.81.2 ~17MB&lt;br /&gt;
&lt;br /&gt;
Backup in case the above doesn&#039;t work&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2.exe &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~20MB&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_portable.7z &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Portable archive&amp;lt;/span&amp;gt; ]&#039;&#039;&#039; version 0.81.2 ~17MB&lt;br /&gt;
&lt;br /&gt;
=== Testing/Nightly Builds ===&lt;br /&gt;
See [[OtherDownloads|other downloads]]&lt;br /&gt;
&lt;br /&gt;
==[[image:200px-Tux.svg.png|Linux|30px]] Linux==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;[[SetupGuide|&amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Linux set up guide&amp;lt;/span&amp;gt;]]&#039;&#039;&#039; provides set up information for various Linux distributions.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
Sorry no download yet.&lt;br /&gt;
The Mac OS X port is rough and unfinished. Help with its development would be greatly appreciated. More information on the current state of this port can be found &#039;&#039;&#039;[[Spring_on_MacOSX|&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;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we have some source packages available below.&lt;br /&gt;
&lt;br /&gt;
Windows users wanting to use cmake to compile Spring are advised to [http://github.com/spring/spring/downloads download the source directly from github]. 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;
{{Tarballs}}&lt;br /&gt;
&lt;br /&gt;
= Alternative lobby client =&lt;br /&gt;
&lt;br /&gt;
There is one actively developed alternative lobby client, called &#039;&#039;TASClient&#039;&#039;. This lobby client is for Windows only.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/tasclient/TASClientLatest.7z The latest version of TASClient can be found here]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Lobby server=&lt;br /&gt;
&lt;br /&gt;
If you do not want (or are unable) to use the public lobby server, you can download the server software here to run your own. See the readme &#039;&#039;&#039;[http://springrts.com/dl/tasserver_readme.txt &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;
&#039;&#039;&#039;[http://springrts.com/dl/TASServer.jar &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Click here to download&amp;lt;/span&amp;gt;]&#039;&#039;&#039; 100.7kb, added 2008-03-02 (requires Java Runtime Environment)&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23231</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23231"/>
		<updated>2010-03-16T19:57:07Z</updated>

		<summary type="html">&lt;p&gt;Tobi: move to Download&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Backups in case the above doesn&#039;t work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Obtaining_The_Source_Code&amp;diff=23027</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=23027"/>
		<updated>2010-03-16T19:54:10Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Current (0.81.1.3) */ remove version number from header; it won&amp;#039;t be updated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Current ===&lt;br /&gt;
&#039;&#039;&#039;(For playing Spring online)&#039;&#039;&#039;&lt;br /&gt;
{{Template: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/tree/master &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: &#039;&#039;&#039;git://github.com/spring/spring.git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For serious developers. 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.&lt;br /&gt;
&lt;br /&gt;
Assuming the GIT-commandline 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&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;
&#039;&#039;&#039; git://springrts.git.sourceforge.net/gitroot/springrts/springrts &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There&#039;s a branch that&#039;s for MacOS development. You can find it at &#039;&#039;&#039;git://github.com/yokosou/spring/spring.git.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23230</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23230"/>
		<updated>2010-03-16T19:53:36Z</updated>

		<summary type="html">&lt;p&gt;Tobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we have some source packages available below.&lt;br /&gt;
&lt;br /&gt;
Windows users wanting to use cmake to compile Spring are advised to [http://github.com/spring/spring/downloads download the source directly from github]. 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-0.81.2/spring_0.81.2_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Backups in case the above doesn&#039;t work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23229</id>
		<title>Template:Tarballs</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:Tarballs&amp;diff=23229"/>
		<updated>2010-03-16T19:52:18Z</updated>

		<summary type="html">&lt;p&gt;Tobi: add note that source packages are Linux only atm (missing some windows specific tools)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is of course the recommended way to get the source of the engine. However if you really do not want to clone our git repository, then we have some source packages available below.&lt;br /&gt;
&lt;br /&gt;
Windows users wanting to use cmake to compile Spring are advised to [http://github.com/spring/spring/downloads download the source directly from github]. The packages below target Linux only and do not contain certain files required to compile using cmake.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.lzma/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://sourceforge.net/projects/springrts/files/springrts/spring-0.81.2/spring_0.81.2_src.tar.gz/download &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Backups in case the above doesn&#039;t work:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.lzma &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.lzma (aka 7z)&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://springrts.com/dl/spring_0.81.2_src.tar.gz &amp;lt;span style=&amp;quot;color:#bbf;&amp;quot;&amp;gt;Source .tar.gz&amp;lt;/span&amp;gt;]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This code is the same as that used to build the last public release. See [[Building spring]] for build instructions.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11568</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11568"/>
		<updated>2010-03-13T16:37:48Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Load ( zip ) -&amp;gt; nil */&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== Chat commands ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/save [-y] &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;: Write a savegame to &amp;lt;filename&amp;gt;. The file is placed in the &#039;Saves&#039; folder and the &#039;.ssf&#039; extension is automatically added. If -y is given the file is overwritten if it already exists.&lt;br /&gt;
* &amp;lt;code&amp;gt;/savegame&amp;lt;/code&amp;gt;: Write a savegame to &#039;Saves/QuickSave.ssf&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/reloadgame&amp;lt;/code&amp;gt;: Reload the savegame that was loaded when the engine was started. Useful for testing. Note that no cleanup is performed by the engine; i.e. Lua code should erase all units from the battlefield.&lt;br /&gt;
&lt;br /&gt;
== Lua API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This &#039;&#039;&#039;SYNCED&#039;&#039;&#039; call-in is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
Note that currently loading multiplayer games is not supported: the Load call-in is only called on the client loading the game.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This &#039;&#039;&#039;UNSYNCED&#039;&#039;&#039; call-in is called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one savegame gadget:&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;br /&gt;
&lt;br /&gt;
== Example gadgets ==&lt;br /&gt;
&lt;br /&gt;
If you have made a gadget that implements this interface, please add a link below.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11567</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11567"/>
		<updated>2010-03-13T16:37:41Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Save ( zip ) -&amp;gt; nil */ UNSYNCED&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== Chat commands ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/save [-y] &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;: Write a savegame to &amp;lt;filename&amp;gt;. The file is placed in the &#039;Saves&#039; folder and the &#039;.ssf&#039; extension is automatically added. If -y is given the file is overwritten if it already exists.&lt;br /&gt;
* &amp;lt;code&amp;gt;/savegame&amp;lt;/code&amp;gt;: Write a savegame to &#039;Saves/QuickSave.ssf&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/reloadgame&amp;lt;/code&amp;gt;: Reload the savegame that was loaded when the engine was started. Useful for testing. Note that no cleanup is performed by the engine; i.e. Lua code should erase all units from the battlefield.&lt;br /&gt;
&lt;br /&gt;
== Lua API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This SYNCED call-in is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
Note that currently loading multiplayer games is not supported: the Load call-in is only called on the client loading the game.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This &#039;&#039;&#039;UNSYNCED&#039;&#039;&#039; call-in is called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one savegame gadget:&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;br /&gt;
&lt;br /&gt;
== Example gadgets ==&lt;br /&gt;
&lt;br /&gt;
If you have made a gadget that implements this interface, please add a link below.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11566</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11566"/>
		<updated>2010-03-13T16:37:16Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Load ( zip ) -&amp;gt; nil */ add quirk&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== Chat commands ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/save [-y] &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;: Write a savegame to &amp;lt;filename&amp;gt;. The file is placed in the &#039;Saves&#039; folder and the &#039;.ssf&#039; extension is automatically added. If -y is given the file is overwritten if it already exists.&lt;br /&gt;
* &amp;lt;code&amp;gt;/savegame&amp;lt;/code&amp;gt;: Write a savegame to &#039;Saves/QuickSave.ssf&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/reloadgame&amp;lt;/code&amp;gt;: Reload the savegame that was loaded when the engine was started. Useful for testing. Note that no cleanup is performed by the engine; i.e. Lua code should erase all units from the battlefield.&lt;br /&gt;
&lt;br /&gt;
== Lua API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This SYNCED call-in is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
Note that currently loading multiplayer games is not supported: the Load call-in is only called on the client loading the game.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one savegame gadget:&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;br /&gt;
&lt;br /&gt;
== Example gadgets ==&lt;br /&gt;
&lt;br /&gt;
If you have made a gadget that implements this interface, please add a link below.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11565</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11565"/>
		<updated>2010-03-13T16:34:10Z</updated>

		<summary type="html">&lt;p&gt;Tobi: add related chat commands&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== Chat commands ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/save [-y] &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;: Write a savegame to &amp;lt;filename&amp;gt;. The file is placed in the &#039;Saves&#039; folder and the &#039;.ssf&#039; extension is automatically added. If -y is given the file is overwritten if it already exists.&lt;br /&gt;
* &amp;lt;code&amp;gt;/savegame&amp;lt;/code&amp;gt;: Write a savegame to &#039;Saves/QuickSave.ssf&#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;/reloadgame&amp;lt;/code&amp;gt;: Reload the savegame that was loaded when the engine was started. Useful for testing. Note that no cleanup is performed by the engine; i.e. Lua code should erase all units from the battlefield.&lt;br /&gt;
&lt;br /&gt;
== Lua API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one savegame gadget:&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;br /&gt;
&lt;br /&gt;
== Example gadgets ==&lt;br /&gt;
&lt;br /&gt;
If you have made a gadget that implements this interface, please add a link below.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11564</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11564"/>
		<updated>2010-03-13T15:34:00Z</updated>

		<summary type="html">&lt;p&gt;Tobi: added stub for example gadget list&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one savegame gadget:&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;br /&gt;
&lt;br /&gt;
== Example gadgets ==&lt;br /&gt;
&lt;br /&gt;
If you have made a gadget that implements this interface, please add a link below.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11563</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11563"/>
		<updated>2010-03-13T15:31:59Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Save ( zip ) -&amp;gt; nil */&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one savegame gadget:&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11562</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11562"/>
		<updated>2010-03-13T15:31:19Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Save ( zip ) -&amp;gt; nil */ added sample pseudocode&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Usually when this call-in is called you&#039;d do something like this (pseudocode) in one gadget, and optionally have other gadgets save some of their state if they need that.&lt;br /&gt;
&lt;br /&gt;
  function gadget:Save(zip)&lt;br /&gt;
    zip:open(&amp;quot;units.lua&amp;quot;)&lt;br /&gt;
    for each unit do&lt;br /&gt;
      write some properties about the unit in zip, e.g. position, heading, health&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11561</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11561"/>
		<updated>2010-03-13T15:28:17Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Save ( zip ) -&amp;gt; nil */ code tag&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:write&amp;lt;/code&amp;gt; will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11560</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11560"/>
		<updated>2010-03-13T15:28:03Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Load ( zip ) -&amp;gt; nil */ code tag&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to &amp;lt;code&amp;gt;zip:read&amp;lt;/code&amp;gt; will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to zip:write will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11559</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11559"/>
		<updated>2010-03-13T15:27:35Z</updated>

		<summary type="html">&lt;p&gt;Tobi: /* Save ( zip ) -&amp;gt; nil */ added note about reserved namespace&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to zip:read will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to zip:write will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;br /&gt;
&lt;br /&gt;
Note that Spring writes files into this zip file too. Any files in the directory &#039;Spring&#039; are reserved for use by the engine.&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:LuaInterfaces&amp;diff=22956</id>
		<title>Template:LuaInterfaces</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Template:LuaInterfaces&amp;diff=22956"/>
		<updated>2010-03-13T15:17:53Z</updated>

		<summary type="html">&lt;p&gt;Tobi: added Lua_SaveLoad&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;margin-left:12px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;Game&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_ConstGame]] (holds game relevant constants &amp;amp; variables)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_UnitDefs]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_WeaponDefs]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_FeatureDefs]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;Commands&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_CMDs]] (documents all CMDs and CMDTYPEs) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;Game Dynamics&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_SyncedCtrl]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_SyncedRead]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;Local Dynamics&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_UnsyncedCtrl]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_UnsyncedRead]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;OpenGL&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_OpenGL_Api]] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_GLSL_Api]] (OpenGL Shading Language) &amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_FBO_and_RBO]] (Framebuffer and Renderbuffer Objects) &amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_ConstGL]] (some OpenGL constants)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_UnitRendering]] (manage unit LODs and materials)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;Unit Physics&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_MoveCtrl]] (changes the physics of single units)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_PathFinder]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font style=&amp;quot;font-weight:bold; font-size:80%&amp;quot;&amp;gt;Engine&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_VFS]] (used to access files in the virtual filesystem, e.g. modfiles)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_Scream]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_BitOps]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Lua_SaveLoad]] (engine-assisted Lua save/load)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11558</id>
		<title>Lua SaveLoad</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_SaveLoad&amp;diff=11558"/>
		<updated>2010-03-13T15:15:51Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Lua save/load docs&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;
= Lua Save/Load support =&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
&lt;br /&gt;
Engine save/load has been broken/unstable for a very long time. I believe the major reasons for this were:&lt;br /&gt;
&lt;br /&gt;
* In particular for loading too much special code paths were traversed, that were not used for anything else (e.g. creg_Serialize and creg_PostLoad functions in many classes);&lt;br /&gt;
* Each class was responsible for it&#039;s own saving and loading;&lt;br /&gt;
* The code for loading was spread out over many classes;&lt;br /&gt;
* Save/load using CREG was extremely slow.&lt;br /&gt;
* Savegames created using CREG were bound to be incompatible between different Spring versions because they relied inherently on the implementation details of every single class involved;&lt;br /&gt;
* The save/load system strived to be 100% perfect, saving every single detail.&lt;br /&gt;
* No clear way to save Lua states (without making Lua aware of it)&lt;br /&gt;
&lt;br /&gt;
I realised we have a pretty decent and reasonably stable Lua interface. So why use this for save/load:&lt;br /&gt;
&lt;br /&gt;
* The code has been tested in practice (it&#039;s used in widgets and gadgets);&lt;br /&gt;
* The interface is reasonably stable, so savegames can be compatible between different Spring versions;&lt;br /&gt;
* Not a single class needs special support for save/load, as save/load uses existing APIs.&lt;br /&gt;
* By simply using the standard call-in mechanism any gadgets can save some state if that is desired. The save/load gadget does not need to get special treatment at all.&lt;br /&gt;
&lt;br /&gt;
[http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21805 Argh] and [http://springrts.com/phpbb/viewtopic.php?f=23&amp;amp;t=21836 zwzsg] had this idea too and implement save/load using Lua only. This is a little bit hacky and it is slow when saving large amounts of data such as e.g. the modified terrain heightmap.&lt;br /&gt;
&lt;br /&gt;
Hence Lua save/load brings engine support for Lua save/load :-)&lt;br /&gt;
&lt;br /&gt;
== Idea ==&lt;br /&gt;
&lt;br /&gt;
Instead of having the engine be responsible for serializing every bit of gamestate to disk, Lua save/load transfers most of the responsibility to the game (developer). The game developer can decide what objects and what properties are important to save, and ultimately a gadget could be created that could be drag &#039;n dropped in nearly any game. (Argh&#039;s and zwzsg&#039;s code would be useful for this.)&lt;br /&gt;
&lt;br /&gt;
There are two new call-ins: Load and Save, that allow a Lua save/load system to seamlessly integrate with other interfaces of the engine (e.g. commandline, lobby). Load is called by the engine if it has been instructed to load a game. Save is called by the engine whenever the chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is given. Both get a userdatum as argument. Using the methods open, read and write on this userdatum the Lua code can read/write chunks of data.&lt;br /&gt;
&lt;br /&gt;
At this moment existing code for reading and writing zip files has been re-used for Lua save/load, so savegames are simply renamed zip files (.ssf)&lt;br /&gt;
&lt;br /&gt;
== API documentation ==&lt;br /&gt;
&lt;br /&gt;
Lua save/load brings two new call-ins:&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Load&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called after GamePreload and before GameStart. The single argument is a userdatum respresenting a zip file from which the game is being loaded.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a file within the zip file. Next calls to zip:read will read from this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:read(...)&amp;lt;/code&amp;gt;: Reads data from the file that is currently open. Arguments and return values are similar to [http://www.lua.org/pil/21.1.html io.read], although only &amp;quot;*all&amp;quot; and &#039;&#039;num&#039;&#039; are supported. The special case io.read(0) should work.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;&#039;&#039;&#039;Save&#039;&#039;&#039; ( zip ) -&amp;gt; nil&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
This is called when a chat command &#039;/save &amp;lt;filename&amp;gt;&#039; or &#039;/savegame&#039; is received. The single argument is a userdatum representing the savegame zip file. This is a file with the name &amp;lt;filename&amp;gt; for &#039;/save&#039; and a file with the name &#039;QuickSave.ssf&#039; for &#039;/savegame&#039;.&lt;br /&gt;
&lt;br /&gt;
On this userdatum the following methods are defined:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:open(filename)&amp;lt;/code&amp;gt;: Opens a new file within the zip file. Next calls to zip:write will write to this file.&lt;br /&gt;
* &amp;lt;code&amp;gt;zip:write(...)&amp;lt;/code&amp;gt;: Writes data to the file that is currently open. Arguments are same as [http://www.lua.org/pil/21.1.html io.write].&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC:student_application&amp;diff=7680</id>
		<title>GSoC:student application</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC:student_application&amp;diff=7680"/>
		<updated>2010-03-12T16:25:37Z</updated>

		<summary type="html">&lt;p&gt;Tobi: added link to wesnoth application&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Google Summer of Code student application =&lt;br /&gt;
&lt;br /&gt;
# Basics&lt;br /&gt;
## Write a small introduction to yourself.&lt;br /&gt;
## State your preferred email address.&lt;br /&gt;
## If you have chosen a nick for IRC, the Spring forums and the Spring game lobby, what is it?&lt;br /&gt;
## Why do you want to participate in summer of code?&lt;br /&gt;
## What are you studying, subject, level and school?&lt;br /&gt;
## What country are you from, at what time are you most likely to be able to join IRC?&lt;br /&gt;
## Do you have other commitments for the summer period ? Do you plan to take any vacations ? If yes, when.&lt;br /&gt;
# Experience&lt;br /&gt;
## What programs/software have you worked on before?&lt;br /&gt;
## Have you developed software in a team environment before? (As opposed to hacking on something on your own)&lt;br /&gt;
## Have you participated to the Google Summer of Code before? As a mentor or a student? In what project? Were you successful? If not, why?&lt;br /&gt;
## Are you already involved with any open source development projects? If yes, please describe the project and the scope of your involvement.&lt;br /&gt;
## Gaming experience - Are you a gamer?&lt;br /&gt;
## If you have contributed any patches to Spring, please list them below. You can also list patches that have been submitted but not committed yet and patches that have not been specifically written for GSoC.&lt;br /&gt;
# Communication skills&lt;br /&gt;
## Though most of our developers are not native English speakers, English is the project&#039;s working language. Describe your fluency level in written English.&lt;br /&gt;
## What spoken languages are you fluent in?&lt;br /&gt;
## Are you good at interacting with other players? Our developer community is friendly, but the player community can be a bit rough.&lt;br /&gt;
## Do you give constructive advice?&lt;br /&gt;
## Do you receive advice well?&lt;br /&gt;
## Are you good at sorting useful criticisms from useless ones?&lt;br /&gt;
## How autonomous are you when developing ? Would you rather discuss intensively changes and not start coding until you know what you want to do or would you rather code a proof of concept to &amp;quot;see how it turn out&amp;quot;, taking the risk of having it thrown away if it doesn&#039;t match what the project want&lt;br /&gt;
# Project&lt;br /&gt;
## Did you select a project from our list? If that is the case, what project did you select? What do you want to especially concentrate on?&lt;br /&gt;
## If you have invented your own project, please describe the project and the scope.&lt;br /&gt;
## Why did you choose this project?&lt;br /&gt;
## Include an estimated timeline for your work on the project. Don&#039;t forget to mention special things like &amp;quot;I booked holidays between A and B&amp;quot; and &amp;quot;I got an exam at ABC and won&#039;t be doing much then&amp;quot;.&lt;br /&gt;
## Include as much technical detail about your implementation as you can&lt;br /&gt;
## What do you expect to gain from this project?&lt;br /&gt;
## What would make you stay in the Spring community after the conclusion of SOC?&lt;br /&gt;
# Practical considerations&lt;br /&gt;
## Are you familiar with any of the following tools or languages?&lt;br /&gt;
##* Git (used for all commits)&lt;br /&gt;
##* C++ (language used for all the normal source code)&lt;br /&gt;
##* STL, Boost, Sdl, Lua (C/C++ libraries used by Spring)&lt;br /&gt;
##* build environments (eg. cmake, scons)&lt;br /&gt;
## Which tools do you normally use for development? Why do you use them?&lt;br /&gt;
## What programming languages are you fluent in?&lt;br /&gt;
## Would you mind talking with your mentor on telephone / internet phone? We would like to have a backup way for communications for the case that somehow emails and IRC do fail. If you are willing to do so, please do list a phone number (including international code) so that we are able to contact you. You should probably *only* add this number in the application for you submit to google since the info in the wiki is available in public. We will *not* make any use of your number unless some case of &amp;quot;there is no way to contact you&amp;quot; does arise!&lt;br /&gt;
&lt;br /&gt;
Source: [http://wiki.wesnoth.org/SoC_Information_for_Google#Does_your_organization_have_an_application_template_you_would_like_to_see_students_use.3F_If_so.2C_please_provide_it_now. Wesnoth/SoC_Information_for_Google] Thanks Wesnoth!&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Sensor_handling_redesign&amp;diff=7809</id>
		<title>GSoC Sensor handling redesign</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Sensor_handling_redesign&amp;diff=7809"/>
		<updated>2010-03-12T16:07:25Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;GSoC Sensor handling redesign&amp;quot;: protecting during application period [edit=sysop:move=sysop] (expires 22:00, 10 April 2010 (UTC))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Sensor handling redesign / simplification  =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
The Spring Engine is currently capable of significant real-world applications in the area of simulation of certain types of events or situations; a better sensor system could greatly improve Spring&#039;s applicability to an even wider range of projects.&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
Currently there are a number of different &amp;quot;sensor&amp;quot; systems in the engine: LineOfSight, Radar, Sonar, and Seismic. Some sensors can be jammed, some cannot. Some respect terrain, and some are always circular in coverage.&lt;br /&gt;
&lt;br /&gt;
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems into a streamlined codebase, to reduce amount of code in each implementation, and it should add additional features which would be then available for all types, while improving efficiency where possible.&lt;br /&gt;
&lt;br /&gt;
Preferably this all should also be faster than the current system or a compelling argument/experiment should be made that shows there cannot be a faster system with the same features.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Knowledge of C++&lt;br /&gt;
* Bachelor level algorithmics knowledge&lt;br /&gt;
* Bachelor level software engineering knowledge&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: hard&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
* It should be possible to specify different behaviours for sensors of either type: is it based on e.g. simple 2d or 3d distance check or terrain raycast (i.e. LOS).&lt;br /&gt;
* It should be possible to use multiple different types of radar in one game (possibly current seismic sensors system could be a type of radar too, internally).&lt;br /&gt;
* It should be possible to use &amp;quot;reversed LOS&amp;quot; for the sensor (instead of sight distance, detection distance is used - like cloak now).&lt;br /&gt;
* There should be a generic mechanism for jamming (removing coverage of an area) and stealth (only this unit is not detectable using this sensor) for each type of sensor.&lt;br /&gt;
* There should be support for Lua defined areas that block sensors operating in that area, hide units in that area for certain sensors, or block the rays of terrain-raycasting sensors.&lt;br /&gt;
* There should be support for creating false positives and false negatives using Lua.&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Reconnect_Host_change&amp;diff=7796</id>
		<title>GSoC Reconnect Host change</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_Reconnect_Host_change&amp;diff=7796"/>
		<updated>2010-03-12T16:06:16Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;GSoC Reconnect Host change&amp;quot;: protecting during application period [edit=sysop:move=sysop] (expires 22:00, 10 April 2010 (UTC))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: Reconnect / Host change during a match  =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
Network links can sometimes be unreliable, being able to overcome temporary issues will improve play experience.&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
Spring&#039;s network model implies the existence of a server to host a battle. For various reasons the network link between host and clients can be interrupted. A system should be designed to allow manual and/or automatic switching of the game&#039;s host (possibly using an existing player after testing load handling capabilities) and manual and/or automatic reconnection from client side if host remains the same.&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Knowledge of C++&lt;br /&gt;
* General networking knowledge&lt;br /&gt;
* Understanding Spring&#039;s networking model&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium to hard&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
* During a drop-out clients can be at diverging points in simulation time (game frame), so any solution would have to determine a common point and bring all players to that to ensure sync.&lt;br /&gt;
* During a server switch extra measures need to be implemented to prevent cheating.&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_New_rendering_system&amp;diff=7784</id>
		<title>GSoC New rendering system</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_New_rendering_system&amp;diff=7784"/>
		<updated>2010-03-12T16:06:00Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;GSoC New rendering system&amp;quot;: protecting during application period [edit=sysop:move=sysop] (expires 22:00, 10 April 2010 (UTC))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: New Rendering System =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
Spring rendering engine includes many fixed function pipeline OpenGL functions. This rendering system is becoming deprecated and is generally slower and less flexible than more modern approaches.&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
Under this proposal, the rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardised model formats (backwards compatibility with current available formats is mandatory either through direct load or automatic conversion to the new types) and eventually introduce some graphic enhancing features (bump mapping, normal mapping, multitexturing, etc.).&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Knowledge of C++&lt;br /&gt;
* Knowledge of OpenGL 2.0 API &lt;br /&gt;
* Knowledge of GLSL&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium &lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
* Refactor C++ code and classes&lt;br /&gt;
* Create new GLSL shaders and integrate some from Lua scripts&lt;br /&gt;
* Add threading to renderer&lt;br /&gt;
* Remove all direct OpenGL calls from synced (sim) code.&lt;br /&gt;
* Push more work onto GPU and use DMA transfers (VBOs) while retaining OpenGL 1.4 code path for intel chipsets&lt;br /&gt;
* Reduce/refactor the amount of code paths used for rendering different world objects and model types.&lt;br /&gt;
* Use more class overriding for new rendering code (instead of branching)&lt;br /&gt;
* OpenGL ES 2.0 compatibility should be aimed at where possible.&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_More_AI_interfaces&amp;diff=7762</id>
		<title>GSoC More AI interfaces</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=GSoC_More_AI_interfaces&amp;diff=7762"/>
		<updated>2010-03-12T16:05:41Z</updated>

		<summary type="html">&lt;p&gt;Tobi: Protected &amp;quot;GSoC More AI interfaces&amp;quot;: protecting during application period [edit=sysop:move=sysop] (expires 22:00, 10 April 2010 (UTC))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= GSoC idea: More AI interfaces =&lt;br /&gt;
&lt;br /&gt;
== Why ==&lt;br /&gt;
The Spring engine is already a popular engine for academic projects to study Artificial Intelligence. This project could enhance Spring&#039;s attractiveness to developers and teachers wanting to explore or teach about AI research.&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
The Spring engine&#039;s AI interface supports bindings for multiple languages, currently C++, C and java are supported.&lt;br /&gt;
&lt;br /&gt;
Bindings for more languages and/or virtual machines should be added to allow broader AI developing audience (for example: Ruby, Perl, JavaScript, Python, D, Go, Mono, LLVM, Parrot).&lt;br /&gt;
&lt;br /&gt;
== Required skills ==&lt;br /&gt;
* Understanding of the Spring AI interface&lt;br /&gt;
* Knowledge of C&lt;br /&gt;
* Understanding of the target language/virtual machine&lt;br /&gt;
&lt;br /&gt;
== Difficulty ==&lt;br /&gt;
Estimated: medium&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
The current C AI interface has been structured so it acts as a bridge between the engine and the various AI language wrappers, since automatic wrapper generators have been tried in the past and found infeasible, manual creation is necessary.&lt;br /&gt;
&lt;br /&gt;
== Possible Mentor(s) ==&lt;br /&gt;
&lt;br /&gt;
[[Google_Summer_of_Code_2010]]&lt;/div&gt;</summary>
		<author><name>Tobi</name></author>
	</entry>
</feed>